Solidity

使用 Infura 連接到 Rinkeby 並從智能合約呼叫狀態更改函式

  • September 4, 2019

因此,我無法通過 infura 在 Rinkeby 上使用智能合約,因為它給出了“額外數據”錯誤,據我所知,這是由於 Rinkeby 是 POA 測試網。有為此使用中間件的建議,但是沒有好的文件來描述它是如何完成的……

此外,在呼叫狀態更改函式時會發生額外數據錯誤(例如為儲存變數分配新值),而不是在呼叫只讀函式時(例如“getter”方法)

有人知道如何解決這個問題嗎?

簡單的解決方案就在這裡

導入所需的庫

from web3 import Web3, HTTPProvider

在變數中初始化您的 infura 節點

w3 = Web3(Web3.HTTPProvider("https://rinkeby.infura.io/v3/YOUR_INFURA_KEY"))

aand.. 最簡單的部分,花了三週時間才弄清楚,因為文件絕對是可怕的;

在保存你的 infura 節點的變數中註入該死的中間件;

w3.middleware_stack.inject(geth_poa_middleware, layer=0)

請記住,您必須在本地簽署所有交易,因為infura不處理您錢包中的任何密鑰

transaction = contract.functions.function_Name(params)
signed_tx = w3.eth.account.signTransaction(transaction, private_key)

然後發送;

txn_hash = w3.eth.sendRawTransaction(signed.rawTransaction) 
txn_receipt = w3.eth.waitForTransactionReceipt(txn_hash)

你去吧,一個多合一的解決方案!

PS:使用 print(txn_receipt) 獲取交易 id 以在 etherscan 中查看

引用自:https://ethereum.stackexchange.com/questions/74606