jjr*_*edv 1 blockchain ethereum solidity web3js
是否可以在没有源代码的情况下获取已知合约地址的ABI?
我发现的唯一方法是使用 etherscan 的 API,但它仅适用于经过验证的合约。
简单回答:不
长答案:也许吧。ABI 是从源代码生成的,但如果您知道函数是什么,则可以自己“创建”ABI。
合约的ABI代表应用程序二进制接口,它只是定义了如何与智能合约交互。
例如,也许你不知道合约的源代码是什么,但你知道它有一个transfer函数。您可以“制作”ABI 只要:
[
{
"constant":false,
"inputs":[
{"name":"_to","type":"address"},
{"name":"_value","type":"uint256"}
],
"name":"transfer",
"outputs":[
{"name":"success",
"type":"bool"}
],
"payable":false,
"stateMutability":"nonpayable",
"type":"function"
}
]
Run Code Online (Sandbox Code Playgroud)
或者使用已编译的接口,因为已编译的接口将输出 ABI。
pragma solidity ^0.8.8;
interface ContractInterface {
function transfer(address to, uint256 value) external returns (bool success);
}
Run Code Online (Sandbox Code Playgroud)
由于 ABI 和接口不必涵盖智能合约能够实现的每一项功能。
此外,还有诸如反编译器之类的东西,它们尝试反编译字节码以找出合同是什么,这样您就可以获得 ABI。
| 归档时间: |
|
| 查看次数: |
11076 次 |
| 最近记录: |