触发非开源智能合约时如何在 etherscan 上对输入数据进行编码?
Posted
技术标签:
【中文标题】触发非开源智能合约时如何在 etherscan 上对输入数据进行编码?【英文标题】:How to encode input data on etherscan when trigger a non open source smart contract? 【发布时间】:2021-07-19 05:53:52 【问题描述】:我在以太坊上部署了一个智能合约。当我触发它时,函数名称和参数显示在 etherscan 上。我怎样才能隐藏这些信息? enter image description here
【问题讨论】:
在公共区块链中隐藏数据是不可能的,因为根据公共的定义,一切都是公共的。 【参考方案1】:Etherscan 使用字典将函数签名转换为函数名称(在您的情况下为 0x38ed1739
到 swapExactTokensForTokens(uint256,uint256,address[],address,uint256)
)。
如果您不希望他们翻译函数名称,则需要将您的合约函数(它的定义和所有调用它们的地方)重命名为一些乱七八糟的东西,例如 kdjgklfdjiwefw(uint256,uint256,address[],address,uint256)
。
请注意,外部合约可能希望按其期望的名称(例如 swapExactTokensForTokens
)调用您的函数,并且如果具有此名称的函数不存在,它们将无法调用。
如果您想禁止 Etherscan 显示翻译但不重命名您的函数 - 目前没有办法做到这一点。
【讨论】:
词典是公开的吗? @hliu Etherscan 使用的特定字典 - 可能不是。但是您可以通过扫描不同合约的 ABI(或源代码)来制作自己的合约。 感谢您的回复。扫描所有合约的源代码似乎需要做很多工作:) 这是否意味着有时可能会有一些新创建的合约 Etherscan 无法映射到函数名称,因为没有及时扫描? 我没有数据来验证这一点,但似乎有可能。以上是关于触发非开源智能合约时如何在 etherscan 上对输入数据进行编码?的主要内容,如果未能解决你的问题,请参考以下文章
用 Truffle 插件自动在Etherscan上验证合约代码