Ropsten
當我沒有 ABI 和原始碼時,如何在 Ropsten 測試網上呼叫已部署合約中的函式?
對於一些測試,我在 Ropsten Testnet 上部署了幾個合約,
web3.py
但現在如果我想執行它們或從它們呼叫任何函式,我該怎麼做?我沒有 ABI,因為我做了幾份契約,而且我幾乎不可能驗證每一份契約。我只有交易雜湊和合約地址。請幫忙
如果您只有交易雜湊和/或合約地址,則(幾乎)沒有辦法獲得 ABI。
我說幾乎是因為可以對契約進行逆向工程。至少在理論上。逆向工程總是一個困難的過程,它可能行不通。有一些工具試圖為你做這件事,但我真的不知道它們有多準確。
有關逆向工程的更多資訊:有沒有辦法從已部署的契約中提取 ABI?
只是為了澄清另一個答案的評論中的一些混淆:在 Etherscan 上驗證您的程式碼並不是真正的乙太坊術語。它是(可能)由 Etherscan 團隊發明的唯一功能。這是一個方便的功能,但無論如何都不是必需的。您可以在區塊鏈中發布您的程式碼,而無需向任何人提供原始碼。
假設您知道要嘗試呼叫的特定函式簽名,則不需要完整的 ABI。
我看到你要求 web3.py 但我不熟悉。這是 web3.js 中感興趣的 API……希望您能在 .py 中找到等價物。
https://web3js.readthedocs.io/en/1.0/web3-eth-abi.html#encodefunctioncall https://web3js.readthedocs.io/en/1.0/web3-eth.html#sendtransaction
所以程式碼看起來像:
let call = web3.eth.abi.encodeFunctionCall({ name: 'myMethod', type: 'function', inputs: [{ type: 'uint256', name: 'myNumber' },{ type: 'string', name: 'myString' }] }, ['2345675643', 'Hello']); let tx = await web3.eth.sendTransaction(call, {to: contract_address})
hth