Solidity
如果我有來自 Remix 的 ABI 和字節碼,是否可以從 python web3 部署契約?
問題說明了一切。我有一份通過 Remix 編寫和編譯的契約。我已將 ABI 和字節碼轉儲到本地文件中,並將它們讀入我的 python 應用程序。我正在關注文件(https://web3py.readthedocs.io/en/stable/contracts.html)並嘗試像這樣進行實例化:
mycontract = w3.eth.contract(abi=ABI,bytecode=BYTECODE)
其中 ABI 是來自 Remix 的複制粘貼的 abi,而 BYTECODE 是來自 Remix 的複制粘貼的字節碼。
但我得到一個
TypeError: Could not format value {'linkReferences': {}, 'object': '6080604...
我應該提一下,我可以通過 Remix 將合約實例化為相同的 ABI 和合約已部署到的地址,然後成功監控合約以記錄事件。但我真正想做的是從 Python 部署合約,使用本地儲存的 abi 和 Remix 生成的字節碼。
目前,Remix 提供的“字節碼”是這樣的結構:
{ 'linkReferences':[], 'object': '6080604052336000806...', 'opcodes': 'PUSH1 0x80...', 'sourcemap': '50:1984:0:-;;;2...' }
我想出了自己問題的答案。是的,這是可能的。
合約只期望 Remix 提供的“字節碼”結構的“對象”值。目前,當您點擊以從 Remix 複製“字節碼”時,您最終會得到一個如下所示的結構:
bytecode = { 'linkReferences':[], 'object': '6080604052336000806...', 'opcodes': 'PUSH1 0x80...', 'sourcemap': '50:1984:0:-;;;2...' }
我將整個結構作為字節碼參數傳遞,這是錯誤的。合約只期望“對象”值。