Ethers.js

每 X 分鐘獲取地址列表的餘額

  • November 24, 2022

我有一個地址列表,我必須每隔 X 分鐘檢查一次 ETH 和令牌的餘額,這樣我就可以更新數據庫上的餘額。使用 Node.js 執行此操作的最佳方法是什麼?

抱歉,您需要對“代幣”說得更具體一些,因為我至少使用了兩種代幣,這是我的遠景:

  1. 驗證 NonFungibleTokens
  2. 驗證 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)

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