如何持续跟踪钱包中特定代币的余额

2024-05-23 19:45:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个机器人,它可以跟踪我钱包中的特定令牌。一旦它检测到令牌,就应该将令牌发送到另一个地址。我已经写了代码,但是我不知道为什么我的while循环不能工作。这种代码跳过while循环并在最后创建事务,这会导致错误,因为没有要传输的令牌。该脚本应该被困在一个循环中,直到出现一些令牌平衡,但它没有发生。我正在VS代码终端上运行这个脚本

from web3 import Web3
import json

bsc = "https://bsc-dataseed.binance.org/"
web3 = Web3(Web3.HTTPProvider(bsc))
print(web3.isConnected())

main_address = "wallet to be tracked"
contract_address = "token contract address"
abi = json.loads('the abi')

contract = web3.eth.contract(address=contract_address, abi = abi)

balanceOfToken = contract.functions.balanceOf(main_address).call()
print(web3.fromWei(balanceOfToken, 'ether'))

while(True):
    balanceOfToken = contract.functions.balanceOf(main_address).call()
    print(balanceOfToken)
    if(balanceOfToken > web3.fromWei(0.5, 'ether')):
        break
    continue

second_address = "the other wallet address"
main_key = "private key of first wallet"

nonce = web3.eth.getTransactionCount(main_address)

token_tx = contract.functions.transfer(my_address, balanceOfToken).buildTransaction({
    'chainId':56, 'gas': 90000, 'gasPrice': web3.toWei('5', 'gwei'), 'nonce':nonce
})

signed_tx = web3.eth.account.signTransaction(token_tx, main_key)
web3.eth.sendRawTransaction(signed_tx.rawTransaction)

print(contract.functions.balanceOf(my_address).call() + " " + contract.functions.name().call())

Tags: 代码mainaddresscallfunctionsweb3ethprint
1条回答
网友
1楼 · 发布于 2024-05-23 19:45:53

web3.fromWei(0.5, 'ether')的值是Decimal('5E-19')(通过自己尝试API)

balanceOfToken的值为10^-18(来自评论中的讨论)

由于10^-18大于5*10^-19,因此条件if(balanceOfToken > web3.fromWei(0.5, 'ether'))的计算结果为True,循环退出

相关问题 更多 >