文章目录
在浏览器上开源合约代码,会碰到一些常见问题,这里做一个汇总以及相关解决方案
配置
基本配置
以下基本配置必须一样
- 编译版本 (这个指的是remix编译的版本,而不是合约代码里面写的版本)
- EVM 版本 (一般都是default,如果有需要选了版本时,开源也要对应版本)
- 是否优化,优化 (一般 是否优化, 优化配置默认是200)
- 代码
代码除了注释以外,需要保证和部署的一样
这里说下有些代码使用了openzeppelin的相关代码
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
如果代码中使用了这种,建议要么部署完后,
- 立马开源
- 要么自己手动把对应的文件整理到本地,或者使用flattener工具整合成一个文件备份
第2种情况,主要是避免,如果隔了很久再想开源,而且上面链接指向的代码更新过了,就没法开源了…
特殊情况,如果确认代码没问题,也没有构造参数之类的,也是提交不了,那么你只能在提交页面,不断切换是否优化,切换不同的编译版本,去尝试提交开源 (代码中使用^,remix可能会给你默认选中当前版本的最后版本,比如0.6.0的代码,remix默认选中了0.6.12版本,部署的时候没注意看就给发布了)
其他配置说明
查看下图,红色的是一定要记住的,否则没法开源,只能一个一个试
黄色框里面是代码里面的版本 ^表示之上的版本都可以,所以这里remix可以使用0.8.7
勾选优化也会省手续费,以及有些时候超限也得勾选优化
其他配置
- 构造参数 (浏览器验证有时需要填,有时不需要填,原因不详… 有时提交不过,加上构造参数就好了)
- library (部分合约部署的时候额外部署了library就需要)
这两个是可能需要的
library
如果缺少library, 浏览器上会明确提示缺少library, 这个在配置里面添加即可
一般部署合约的时候,如果发了两个交易,第一个就是library
(还一种情况是remix连着部署两次主合约,第二次部署没有两次交易,使用了第一次时的library)
Error! Unable to generate Contract ByteCode and ABI (Expected library(ies) but one or more was not provided)
错误图
提交页面加上library
构造参数
构造参数填不填都可能可以提交成功, 比较迷,不了解区块浏览器提交时咋校验/以及要求的
构造参数有两种情况需要处理
- 如果你确认上面所说的基本配置都选对了的情况下,还是提交了,错误就是常规的说byteCode不一样,这个时候可以尝试把构造参数填上
- 如果开源页面,构造参数自动给填了一堆东西,需要删掉提交, 删掉还是不成功,按照1的情况处理一遍
第二种情况缺图~~
第一种情况,就是指的byteCode不一样,没有额外提示