Skip to content

Commit 8744423

Browse files
Update libs/remix-core-plugin/src/lib/helpers/fetch-etherscan.ts
Co-authored-by: Copilot <[email protected]>
1 parent 96d3e27 commit 8744423

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

libs/remix-core-plugin/src/lib/helpers/fetch-etherscan.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,33 @@ export const fetchContractFromEtherscan = async (plugin, endpoint: string | Netw
2525
// Prefer central V2 API host with chainid param (works across Etherscan-supported networks)
2626
const v2CentralUrl = 'https://api.etherscan.io/v2/api?chainid=' + chainId + '&module=contract&action=getsourcecode&address=' + contractAddress + '&apikey=' + etherscanKey
2727
let response = await fetch(v2CentralUrl)
28+
let centralV2Status = response.status;
29+
let centralV2StatusText = response.statusText;
2830

2931
// If central V2 not OK, try per-network V2, then per-network V1
3032
if (!response.ok) {
3133
const v2PerNetworkUrl = 'https://' + endpointStr + '/v2/api?chainid=' + chainId + '&module=contract&action=getsourcecode&address=' + contractAddress + '&apikey=' + etherscanKey
32-
response = await fetch(v2PerNetworkUrl)
33-
if (!response.ok) {
34+
let v2PerNetworkResponse = await fetch(v2PerNetworkUrl)
35+
let v2PerNetworkStatus = v2PerNetworkResponse.status;
36+
let v2PerNetworkStatusText = v2PerNetworkResponse.statusText;
37+
if (v2PerNetworkResponse.ok) {
38+
response = v2PerNetworkResponse;
39+
} else {
3440
const v1Url = 'https://' + endpointStr + '/api?module=contract&action=getsourcecode&address=' + contractAddress + '&apikey=' + etherscanKey
35-
response = await fetch(v1Url)
41+
let v1Response = await fetch(v1Url)
42+
let v1Status = v1Response.status;
43+
let v1StatusText = v1Response.statusText;
44+
if (v1Response.ok) {
45+
response = v1Response;
46+
} else {
47+
// All three endpoints failed, throw a descriptive error
48+
throw new Error(
49+
`All Etherscan API endpoints failed:\n` +
50+
`Central V2: ${v2CentralUrl} [${centralV2Status} ${centralV2StatusText}]\n` +
51+
`Per-network V2: ${v2PerNetworkUrl} [${v2PerNetworkStatus} ${v2PerNetworkStatusText}]\n` +
52+
`Per-network V1: ${v1Url} [${v1Status} ${v1StatusText}]`
53+
);
54+
}
3655
}
3756
}
3857

0 commit comments

Comments
 (0)