From f64be16d93d925aeb5aa175118532a80077d06dc Mon Sep 17 00:00:00 2001 From: imqdee Date: Thu, 13 Nov 2025 17:49:46 +0100 Subject: [PATCH 1/2] fix: bump etherscan api to v2 --- util/EtherscanApi.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/util/EtherscanApi.ts b/util/EtherscanApi.ts index cec449bc..00469d7c 100644 --- a/util/EtherscanApi.ts +++ b/util/EtherscanApi.ts @@ -1,4 +1,4 @@ -const ETHERSCAN_URL = 'https://api.etherscan.io/api?' +const ETHERSCAN_URL = 'https://api.etherscan.io/v2/api?' export async function etherscanRequest( module: string, @@ -6,6 +6,7 @@ export async function etherscanRequest( params: object, ) { const query: any = { + chainid: 1, apikey: process.env.APIKEY_ETHERSCAN, module: module, action: action, From 855cad55035b816e517c1dd47d39a67348dc8097 Mon Sep 17 00:00:00 2001 From: "alexander.biryukov" Date: Sun, 15 Feb 2026 13:38:48 +0500 Subject: [PATCH 2/2] chore: improve etherscan v2 chainid and error handling --- util/EtherscanApi.ts | 16 ++++++++++------ util/EtherscanParser.ts | 4 +++- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/util/EtherscanApi.ts b/util/EtherscanApi.ts index 00469d7c..c42d90f6 100644 --- a/util/EtherscanApi.ts +++ b/util/EtherscanApi.ts @@ -1,19 +1,23 @@ -const ETHERSCAN_URL = 'https://api.etherscan.io/v2/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 = { - chainid: 1, - 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) {