getTransactionReceipt() return None

getTransactionReceipt() return None

w3.eth.getTransactionReceipt(tx_hash) 函数 returns None.

我的代码:

provider = HTTPProvider('http://0.0.0.0:9945')
w3 = Web3(provider)

contract = w3.eth.contract(contract_interface['abi'], bytecode=contract_interface['bin'])

tx_hash = contract.deploy(transaction={'from': w3.eth.coinbase, 'gas': 250000})

print (tx_hash)
time.sleep(1)
tx_receipt = w3.eth.getTransactionReceipt(tx_hash)
print (tx_receipt)
contract_address = tx_receipt['contractAddress']

tx_hash是正常值但是tx_receiptNone.

所以我的错误:

contract_address = tx_receipt['contractAddress']
TypeError: 'NoneType' object is not subscriptable

我该如何解决这个问题?

我猜是因为您使用了变量名 w3,所以您使用的是 web3.py. The getTransactionReceipt docs 说:

If the transaction has not yet been mined, returns None

因此 sleep(1) 不足以等待下一个区块被开采。

问题的解决取决于您连接的客户端类型及其设置。例如,如果它是 geth 之类的,您可能需要打开 --mine 才能开始挖掘区块。一旦您可以共享您的客户端和配置,您可能会在 Ethereum StackExchange site 找到有关为特定客户端生成块的答案。