Solidity

如果我有來自 Remix 的 ABI 和字節碼,是否可以從 python web3 部署契約?

  • April 20, 2019

問題說明了一切。我有一份通過 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...'
}

我將整個結構作為字節碼參數傳遞,這是錯誤的。合約只期望“對象”值。

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