【科学家养成日记#1】读取钱包代币数量
IPFS
最近看到一个笑话说,小的时候,我的愿望是成为一名科学家。长大后进入币圈,我的愿望还是成为一名科学家。可见科学家是个热门职业。
之前虽然有接触了一点合约,但是没有任何的实战经验。最近有个科学家群友在授课,所以报名参加学习一下科学家实战技术
第一堂课的第一个作业是,读取钱包里10个代币的数量
部分代码来自群友的教学,但是为了便于理解,进行了部分修改
//加载web3的库 const Web3 = require('web3'); //读取ERC20的ABI文件 const erc20Abi = require('./ABI/erc20.json'); //设置BSC的RPC链接 const rpcUrl = 'https://bsc-dataseed1.binance.org/'; const rpcWeb3 = new Web3(new Web3.providers.HttpProvider(rpcUrl)); let web3 = rpcWeb3; /** * 通过小数点多少位,转换对应的数据 * tokenDecimals: 代币的小数点数 * **/ function getWeiName(tokenDecimals = 18) { tokenDecimals = Number(tokenDecimals); let weiName = 'ether'; switch (tokenDecimals) { case 3: weiName = "Kwei"; break; case 6: weiName = 'mwei'; break; case 9: weiName = 'gwei'; break; case 12: weiName = 'microether '; break; case 15: weiName = 'milliether'; break; case 18: weiName = 'ether'; break; default: weiName = 'ether'; break; } return weiName; } /** * 获得钱包BNB数量 * address: 钱包地址 **/ const getBnbBalance = async (address) => { let result = await web3.eth.getBalance(address); if (result) { //经过小数点转换之后的BNB数量 let balance = web3.utils.fromWei(result, getWeiName()); return balance; } else { console.error("Getting Bnb Balance error."); } } /** * 获得钱包代币数量 * tokenAddress: 代币合约地址 * address: 钱包地址 **/ const getTokenBalance = async (tokenAddress, address) => { ////创建代币的智能合约函数 let tokenContract = new web3.eth.Contract(erc20Abi, tokenAddress); //调用代币的智能合约获取余额功能 let result = await tokenContract.methods.balanceOf(address).call(); //获得代币有多少位小数 let decimals = await tokenContract.methods.decimals().call(); let weiName = getWeiName(decimals); let tokenBalance = web3.utils.fromWei(result, weiName); //获得代币的符号 let symbol = await tokenContract.methods.symbol().call(); return `${tokenBalance} ${symbol}`; } /** * 读取钱包里的10个代币的数量 **/ async function main() { let myWallet = '0x11e78fC4B70014d7B8978287bA3c5103D80dDd06'; let walletBalance = await getBnbBalance(myWallet); console.log(`地址: ${myWallet} 有 ${walletBalance} BNB`); let tokens = []; tokens.push('0x55d398326f99059ff775485246999027b3197955'); tokens.push('0x3fda9383a84c05ec8f7630fe10adf1fac13241cc'); tokens.push('0x42712df5009c20fee340b245b510c0395896cf6e'); tokens.push('0x373233A38ae21cF0C4f9DE11570E7D5Aa6824A1E'); tokens.push('0x04645027122c9f152011f128c7085449b27cb6d7'); tokens.push('0x740b40760266d54362c222c0490a95cf970cd199'); tokens.push('0x7c357cd85bb600f748ec1d82adef74464c13e7a7'); tokens.push('0xf0d585a29a86c25819526ba494100951dc31aa0b'); tokens.push('0x366945ba85881b77c186597b4639683efeeb65ca'); tokens.push('0xfb9f5738c9d767fea5af6e4d826ce18d1a48589a'); for (let token of tokens) { let balance = await getTokenBalance(token, myWallet); console.log(`地址: ${myWallet} 有 ${balance}`); } } //启动程序 main();
运行结果:
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!
- 来自作者
- 相关推荐