Ethers.js
每 X 分鐘獲取地址列表的餘額
我有一個地址列表,我必須每隔 X 分鐘檢查一次 ETH 和令牌的餘額,這樣我就可以更新數據庫上的餘額。使用 Node.js 執行此操作的最佳方法是什麼?
抱歉,您需要對“代幣”說得更具體一些,因為我至少使用了兩種代幣,這是我的遠景:
- 驗證 NonFungibleTokens
- 驗證 ERC20 代幣
有一些 RPC 提供者有一些非常有用的 api,我最喜歡的一個是Alchemy,它在 api 呼叫和 rpc 呼叫方面提供了一個非常大的免費層,如果你是後端開發者,你絕對應該看看它;
要獲取錢包中 NFT 的餘額,我會使用getnfts api;返回給定地址的所有 NFT(和余額);
如果你想檢查一個地址的 ERC20 代幣餘額,你可以呼叫這個地址;getTokenBalances返回錢包內所有代幣餘額的數組
要檢查乙太坊餘額,你可以呼叫這個:getBalance
關於如何執行此操作的文章很多。但這是一些粗略的程式碼,您需要根據網路等交換地址和網路
function GetBalances() { const ethers = require('ethers') const network = 'rinkeby' // use rinkeby testnet const provider = ethers.getDefaultProvider(network) const address = '0xF02c1c8e6114b1Dbe8937a39260b5b0a374432bB' provider.getBalance(address).then((balance) => { // convert a currency unit from wei to ether const balanceInEth = ethers.utils.formatEther(balance) console.log(`balance: ${balanceInEth} ETH`) }) }
至於獲取 ERC-20 代幣餘額,您可以使用 ERC20 介面獲取代幣餘額
const Web3 = require('web3') const rpcURL = 'https://ropsten.infura.io/v3/xxxx' const web3 = new Web3(rpcURL) let tokenAddress = "0x20fe562d797a42dcb3399062ae9546cd06f63280"; let walletAddress = "0xdD440e8eCA5F1F3e6D5ffE903148EFB374942df2"; // The minimum ABI to get ERC20 Token balance let minABI = [ // balanceOf { "constant":true, "inputs":[{"name":"_owner","type":"address"}], "name":"balanceOf", "outputs":[{"name":"balance","type":"uint256"}], "type":"function" }, // decimals { "constant":true, "inputs":[], "name":"decimals", "outputs":[{"name":"","type":"uint8"}], "type":"function" } ]; let contract = new web3.eth.Contract(minABI,tokenAddress); async function getBalance() { balance = await contract.methods.balanceOf(walletAddress).call(); return balance; } console.log(getBalance());
把它放在一個函式中並呼叫
setInterval(GetBalances, 10*60*1000)