如果智能合约的外部(或公共)函数未经验证,有什么方法可以获取或猜测它吗?
我使用事务历史记录来获取至少一次被调用的函数,但这非常慢。也许有办法从字节码或其他东西猜测?
您正在寻找的是字节码反编译器,以便您可以检索合约的 ABI。
由于字节码仅包含函数签名哈希值 - 特别是函数签名哈希值的最后 4 个字节 - 检索字节码的 ABI 是一个尝试和猜测的游戏。
幸运的是,有一些工具结合了不同的技术(交易历史、反编译、已知函数签名数据库等)来从字节码和地址“猜测”合约的 ABI。例如,查看 porosity、JEB Decompiler、mythril、Ethervm.io 和 whatsabi。
ContractCompanion 项目提供了用于在原始字节码中查找函数选择器的附加工具,如其自述文件中所述。该项目还具有一个前端界面,用于与未经验证的合约进行交互。
https://github.com/DOBEN/ContractCompanion https://deployment-vercel-dqhc.vercel.app/