问题描述
我正在开发一个以太坊浏览器,我想知道 etherscan 如何获取合约源代码、ABI 以及它们如何将交易输入 hexa 解析为合约函数?
提前致谢
解决方法
合约开发者(维护者,或者基本上是任何人)可以在 https://etherscan.io/verifyContract
上发布代码当您在 Etherscan 上发布合约时,他们会询问您实际的源代码和编译参数,例如使用的语言(例如 Solidity 或 Vyper)、编译器版本(例如 0.8.4)、优化设置和其他一些细节.
然后 Etherscan 使用提供的参数编译提供的代码,如果(现在编译的)字节码与区块链上的字节码匹配,则发布源代码。
ABI JSON 是编译过程的返回值之一 - 以及实际字节码、操作码列表、错误数组等。
至于交易输入十六进制:他们使用一个函数签名字典来转换为实际的函数定义(包括参数数据类型)。您可以在此 other answer 中找到有关 ABI 编码函数签名和传递给函数的参数的更多信息。