diff --git a/util/EtherscanApi.ts b/util/EtherscanApi.ts index cec449bc..c42d90f6 100644 --- a/util/EtherscanApi.ts +++ b/util/EtherscanApi.ts @@ -1,18 +1,23 @@ -const ETHERSCAN_URL = 'https://api.etherscan.io/api?' +const ETHERSCAN_URL = 'https://api.etherscan.io/v2/api' +const ETHERSCAN_CHAIN_ID = process.env.ETHERSCAN_CHAIN_ID || '1' export async function etherscanRequest( module: string, action: string, params: object, ) { - const query: any = { - apikey: process.env.APIKEY_ETHERSCAN, + const query: Record = { + chainid: ETHERSCAN_CHAIN_ID, + apikey: process.env.APIKEY_ETHERSCAN || '', module: module, action: action, - ...params, } - const url = ETHERSCAN_URL + new URLSearchParams(query) + Object.entries(params).forEach(([key, value]) => { + query[key] = String(value) + }) + + const url = `${ETHERSCAN_URL}?${new URLSearchParams(query)}` return fetch(url) } diff --git a/util/EtherscanParser.ts b/util/EtherscanParser.ts index 6093f91f..1def7110 100644 --- a/util/EtherscanParser.ts +++ b/util/EtherscanParser.ts @@ -11,7 +11,9 @@ export function etherscanParse( response: EtherscanResponse, ): EtherscanContractResponse { if (response.message !== 'OK') { - throw 'etherscan response is not OK' + const reason = + typeof response.result === 'string' ? response.result : response.message + throw `etherscan response is not OK: ${reason}` } if (!response.result || response.result.length == 0) {