Web3js
地址格式無效 - Etherscan.io API 問題
我已經下載了經過驗證的開源合約地址列表並載入到地址中
$$ $$. 現在我想下載該契約的原始碼/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));