python 如何在www.example.com中的send_raw_transaction之后使用modify_transactionweb3.py

sczxawaw  于 2022-12-17  发布在  Python
关注(0)|答案(2)|浏览(97)

我正在使用Infura节点,因此我必须使用w3.eth.account.sign_transaction签署交易,然后使用w3.eth.send_raw_transaction发送。
我用的汽油显然太低了,现在交易等待8个小时。
通过查看文档,我注意到有两种方法可以帮助我修改w3.eth.modify_transactionw3.eth.replace_transaction,我的想法是使用其中一种方法(虽然不确定它们之间有什么区别)来修改事务气体,以便它得到确认。
问题是,我在文档中没有看到如何使用这两种方法中的一种,并使用我的私钥对修改后的事务进行签名,因为这两种方法都对eth_sendTransaction进行RPC调用,而共享的Infura节点不支持eth_sendTransaction

gijlo24d

gijlo24d1#

您可以在www.example.com上使用本地帐户签名中间件Web3.py,因此不需要使用send_raw_transaction

z9smfwbn

z9smfwbn2#

使用www.example.com 5手动增加气体的示例Web3.py

from web3.exceptions import TransactionNotFound

tx, receipt = None, None
try: tx = w3.eth.get_transaction (tx_hash)  # Not 100% reliable!
except TransactionNotFound: pass
try: receipt = w3.eth.get_transaction_receipt (tx_hash)
except TransactionNotFound: pass

if not receipt and tx:
  tx = tx.__dict__
  gas_price = tx['maxFeePerGas'] / 1000000000
  if gas_price <= 10:
    tx['maxPriorityFeePerGas'] = 1230000000
    tx['maxFeePerGas'] = 12300000000
    tx.pop ('blockHash', '')
    tx.pop ('blockNumber', '')
    tx.pop ('transactionIndex', '')
    tx.pop ('gasPrice', '')
    tx.pop ('hash', '')
    tx['data'] = tx.pop ('input')

    signed = w3.eth.account.sign_transaction (tx, pk)
    tid = w3.eth.send_raw_transaction (signed.rawTransaction)
    print (tid.hex())

根据我的经验,似乎maxFeePerGasmaxPriorityFeePerGas都应该增加。这里有一些讨论。
另外,如果你有能够再次产生相同交易的代码,那么你可以简单地重新提交交易,而不必麻烦地从区块链加载之前的版本。
只需确保gas增加并且nonce保持不变(nonce设置为get_transaction_count时就是这种情况,因为挂起的事务不计入)。

相关问题