Ropsten

當我沒有 ABI 和原始碼時,如何在 Ropsten 測試網上呼叫已部署合約中的函式?

  • April 22, 2022

對於一些測試,我在 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

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