如何持续跟踪我钱包中特定代币的余额
How to continuously keep track of balance of a particular token in my wallet
我正在尝试创建一个机器人来跟踪我钱包中的特定令牌。一旦检测到令牌,它就应该将令牌发送到另一个地址。我已经编写了代码,但我不知道为什么我的 while 循环不起作用。代码会跳过 while 循环并在最后创建交易,这会导致错误,因为没有要传输的令牌。该脚本应该卡在一个循环中,直到有一些令牌余额,但它不是 happening.I'm 运行 在 VS Code 终端上。
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())
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
并且循环退出。
我正在尝试创建一个机器人来跟踪我钱包中的特定令牌。一旦检测到令牌,它就应该将令牌发送到另一个地址。我已经编写了代码,但我不知道为什么我的 while 循环不起作用。代码会跳过 while 循环并在最后创建交易,这会导致错误,因为没有要传输的令牌。该脚本应该卡在一个循环中,直到有一些令牌余额,但它不是 happening.I'm 运行 在 VS Code 终端上。
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())
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
并且循环退出。