我正在尝试在Kovan Testnet上的我自己的SmartContract中使用Uniswap执行从DAI到WETH的简单交换。不幸的是,即使在手动设置气体限值后,我的事务仍会被还原
我还发现,我无法通过etherscan API或手动验证Kovan上的合同。相反,我每次导入库时都会出现以下错误:
Source "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol" not found: File import callback not supported
因此,我觉得在编译过程中出现了一些问题,我没有任何进一步的想法来解决我的问题
以下是我到目前为止尝试的内容以及如何复制的一些信息: 布朗尼版本1.16.4,在Windows10和Ubuntu21.04上测试
我试过:
这里有一个链接,指向复制错误的代码: https://github.com/MjCage/swap-demo
如果有人能帮忙那就太好了
编译器找不到ISwapRouter.sol
您可以直接在swap.sol上添加ISwapRouter.sol的代码,并从代码中删除该行,这是代码https://github.com/Uniswap/v3-periphery/blob/main/contracts/interfaces/ISwapRouter.sol
“编译时出错”的可能性很小。如果您的契约进行了编译,但是它与源代码不匹配,那么您在编译器中发现了一个非常严重的codegen错误,您应该report it,以便能够快速修复它。根据我的经验,你的合同很可能有漏洞
至于验证过程中的错误,问题是要正确编译多文件项目,必须提供所有源文件并将它们放在正确的目录中。这也适用于库代码,因此如果您的合同导入了
ISwapRouter.sol
,您还需要提交该文件以及它依次导入的所有文件下一个障碍是,据我所知,Etherscan的多文件验证选项只允许您从单个目录提交文件,因此它只获取文件名,而不获取整个路径(不确定通过API是否不同)。您需要以太扫描将文件视为
@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol
,但它只会看到ISwapRouter.sol
,编译器不会将它们视为相同的(两者可能都存在)正确的解决方案是使用标准的JSON验证选项——通过这种方式,您可以提交框架传递给编译器的整个JSON输入,其中包括项目中的所有文件(包括库)和相关的编译器选项。问题是布朗尼没有直接给你这个输入。您可能可以从存储在磁盘上的JSON(标准JSON输入格式在Compiler Input and Output JSON Description中有文档记录)重新创建它,但这需要一些手工工作。不幸的是,Brownie没有提供任何方法在命令行上请求此操作。据我所知,获得它的唯一其他方法是使用Brownie的API并调用^{}
由于这是一个只有一个合同的简单项目,并且没有很深的依赖关系,因此您可能更容易遵循@Jacopo Mosconi的答案,通过将所有导入内容替换为直接粘贴到主合同中的源来“展平”合同。您还可以尝试将文件复制到项目目录并更改导入,使其仅包含文件名,而不包含任何路径组件-这可能会通过多文件验证。扁平化最终是布朗尼和许多其他框架目前进行验证的方式,Etherscan的检查非常宽松,允许以这种方式修改源代码-它只检查字节码,因此即使完全更改导入结构、名称、注释,甚至优化器删除的任何代码,您仍然可以进行验证
相关问题 更多 >
编程相关推荐