【问题标题】:How to continuously keep track of balance of a particular token in my wallet如何持续跟踪我钱包中特定代币的余额
【发布时间】:2021-08-11 15:15:31
【问题描述】:

我正在尝试创建一个机器人来跟踪我钱包中的特定令牌。一旦检测到令牌,它就应该将令牌发送到另一个地址。我已经编写了代码,但我不知道为什么我的 while 循环不起作用。代码类型会跳过 while 循环并在最后创建事务,这会导致错误,因为没有要传输的令牌。脚本应该一直卡在一个循环中,直到有一些令牌余额但它没有发生。我在 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())

【问题讨论】:

  • balanceOfToken = contract.functions.balanceOf(main_address).call() 返回什么?
  • @Zev 返回要追踪的钱包中的代币余额。
  • 在循环之前和循环中调用它的确切值是多少?打印语句输出什么?
  • @Zev 在循环之前是调用循环之前的任何内容,并且在循环中它应该自我更新,直到值接近 0.5。
  • 我理解你的感受。但是,由于循环正在退出,它似乎与您的假设不符,这就是我要求提供确切值的原因。 balanceOfToken > web3.fromWei(0.5, 'ether') 必须为 True 才能退出循环。我能够检查web3.fromWei(0.5, 'ether') 的值,即Decimal('5E-19'),但我不知道balanceOfToken 的值。

标签: python ethereum web3


【解决方案1】:

web3.fromWei(0.5, 'ether') 的值是Decimal('5E-19')(来自我自己试用 API)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-08
    • 2021-12-10
    • 1970-01-01
    • 2022-08-20
    • 2022-11-15
    • 2018-11-17
    • 2020-10-02
    • 1970-01-01
    相关资源
    最近更新 更多