Web3js

地址格式無效 - Etherscan.io API 問題

  • December 4, 2019

我已經下載了經過驗證的開源合約地址列表並載入到地址中

$$ $$. 現在我想下載該契約的原始碼/ABI 等。雖然,我在每個 API 呼叫之間呼叫了 setTimeOut 以避免過多的呼叫,但仍然無法成功。 這是我的程式碼;. 如果我下載一份契約,那麼這段程式碼沒有問題

const jsdom = require("jsdom");
const { window } = new jsdom.JSDOM(`...`);
var $ = require("jquery")(window);

var data = fs.readFileSync('./osContracts/list.csv', 'utf8'); 

myJData = csvToJSON(data);

var addresses = [];

for(i=0; i<myJData.length-1; i++)
{
addresses[i] = myJData[i].ContractAddress;
}

for(i=0; i<addresses.length; i++){
 setTimeout(function() {
   $.getJSON('https://api.etherscan.io/api?module=contract&action=getsourcecode&address='+addresses[i]+'&apikey=QTUXRX1X2T.....', function (adData) {
   console.log(adData.result)          
       });
   }, 5500 * i)

}

這是我的錯誤:

Invalid Address format
Invalid Address format
Invalid Address format..........................................

更新:地址的值

[  
 '0x2699fc3753b1036534feb3be8704c9c5e3262606',
 '0x5a3b8896d90bf4e656d35370d6b2ab9613a854d1',
 '0xb215bf00e18825667f696833d13368092cf62e66',
 '0x213a22d873e02269ac45c094c0655a09eaa22c3a',
 '0x67d764d948408a4f01dec1623c4a42275acddb24',

...2979 more items
]

我可以用它們的值得到結果,但僅限於一份契約 UPDATE1。 一份契約意味著……來自我地址的任何人

$$ $$….不止一個…

問題是i已經等於addresses.length執行超時回調的時間。應該:

for(i=0; i<addresses.length; i++){
 const index = i; // This will not change!
 setTimeout(function() {
   $.getJSON('https://api.etherscan.io/api?module=contract&action=getsourcecode&address='+addresses[index]+'&apikey=QTUXRX1X2T.....', function (adData) {
console.log(adData.result)          
     });
 }, 5500 * i)

}

或者,我將如何重寫它:

addresses.forEach (
 (address, index) => setTimeout (
   () => $.getJSON (
     'https://api.etherscan.io/api?module=contract&action=getsourcecode&address=' +
       address +
       '&apikey=QTUXRX1X2T.....',
     adData => console.log (adData.result)),
   5500 * index));

引用自:https://ethereum.stackexchange.com/questions/78039