我怎样才能使这个 web3 python 脚本更快?
Posted
技术标签:
【中文标题】我怎样才能使这个 web3 python 脚本更快?【英文标题】:How can i make this web3 python script faster? 【发布时间】:2021-10-18 17:11:49 【问题描述】:我想制作一个 Python 脚本(用于 BSC)来跟踪钱包中特定代币的余额。我需要 python 脚本非常快。目前使用以下代码,脚本检测到进入钱包的令牌大约需要 6 秒。有没有更快、更有效的方法来做到这一点? (我添加了 sleep 函数来充当某种缓冲区。不知道这是否是个好主意?) 编辑:删除了睡眠功能,但仍然需要 6 秒。
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()
if(balanceOfToken > web3.fromWei(0.5, 'ether')):
break
time.sleep(1.1)
x+=1
print(f"Still looking x")
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(second_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())
【问题讨论】:
“我添加了 sleep func 来充当某种缓冲区。” 什么 中的缓冲区?是什么让你相信你需要添加这个? 要避免脚本重载?还是某种溢出?就像我说的我不太确定。我对大部分这些东西还是陌生的。我应该删除它并且它会运行良好吗?除此之外,我还缺少什么让它运行得更快? 【参考方案1】:您可以通过在本地运行以太坊节点来加快速度。因此,您拥有 100% 的以太坊节点服务器容量,并且没有网络延迟。 More information here.
【讨论】:
我正在用 bsc 做这个。 您可以对币安智能链遵循相同的流程,尽管它们对节点 capitalgram.com/posts/scaling-evm 的要求更高 除此之外没有什么?通过更改代码中的某些内容?也许调用另一种方法? 您可以订阅所有新块并自己过滤掉块中的事件,而不是轮询。我相信这就是专业钱包的做法。但是,如何做到这一点是一本书大小的内容的主题,超出了 *** 问题的范围。 我需要搜索什么才能找到此内容?以上是关于我怎样才能使这个 web3 python 脚本更快?的主要内容,如果未能解决你的问题,请参考以下文章