对于以“Solidity Multiple files format”编写的合同,ABI 是不完整的,例如0xedfcb78e73f7ba6ad2d829bf5d462a0924da28ed

Posted

技术标签:

【中文标题】对于以“Solidity Multiple files format”编写的合同,ABI 是不完整的,例如0xedfcb78e73f7ba6ad2d829bf5d462a0924da28ed【英文标题】:ABI is incomplete for contract written in "Solidity Multiple files format", e.g. 0xedfcb78e73f7ba6ad2d829bf5d462a0924da28ed 【发布时间】:2021-12-28 17:17:48 【问题描述】:

对于这个合同https://bscscan.com/address/0xedfcb78e73f7ba6ad2d829bf5d462a0924da28ed#code 有八个源文件被称为“Solidity Multiple files format”

但是,bscscan 网站都没有: https://bscscan.com/address/0xedfcb78e73f7ba6ad2d829bf5d462a0924da28ed#code 也不是 bscscan API: https://api.bscscan.com/api?module=contract&action=getabi&address=0xedfcb78e73f7ba6ad2d829bf5d462a0924da28ed 可以获得完整的 ABI。

它们只为第一个源文件提供 ABI。

如何获得完整的功能性 ABI 以与之交互?

【问题讨论】:

【参考方案1】:

它们只为第一个源文件提供 ABI。

这是预期的结果。 ABI JSON 仅针对 publicexternal 函数以及从 主合约及其父项public 属性自动生成的函数生成。

导入的合约通常被主合约调用或继承,但理论上它们也可以不被使用。

注意:它不需要是订单中的第一个合约,您将主合约名称作为编译选项之一传递。


在您的示例中,AdminUpgradeabilityProxy 是主合约,派生自 UpgradeabilityProxy,而 UpgradeabilityProxy 派生自 Proxy。所以 ABI json 包含来自这三个合约的所有 publicexternal 函数和事件。

【讨论】:

以上是关于对于以“Solidity Multiple files format”编写的合同,ABI 是不完整的,例如0xedfcb78e73f7ba6ad2d829bf5d462a0924da28ed的主要内容,如果未能解决你的问题,请参考以下文章

以独立于文化的方式进行 Powershell 格式化?!对于数字

我如何知道像素相对于相机的位置(以厘米或毫米为单位)?

对于 iOS,我可以混合和匹配以编程方式添加视图并同时使用情节提要吗?

对于 django 模型,如何获取 django 管理 URL 以添加另一个或列出对象等?

Facebook 广告 page_welcome_message 对于以 Messenger 为目标的广告无效

解析 .dbc 文件并生成 C++ 代码以表示每个消息的类/结构(对于目标 ECU)