文章目录

  • 配置
    • 基本配置
    • 其他配置
      • library
      • 构造参数
        • 方式一
        • 方式二
  • 开源流程示例
    • 情况1 基本配置都正确,没有构造参数和library
    • 情况2 补上library,不填构造参数
    • 情况3 填写构造参数(一般可以通过,也可能无法通过)
    • 情况4 从浏览器提示中取构造参数
  • 其他

在浏览器上开源合约代码,会碰到一些常见问题,这里做一个汇总以及相关解决方案

配置

基本配置

以下基本配置必须一样

  • 编译版本 (这个指的是remix编译的版本,而不是合约代码里面写的版本)
  • EVM 版本 (一般都是default,如果有需要选了版本时,开源也要对应版本)
  • 是否优化,优化 (一般 是否优化, 优化配置默认是200)
  • 代码

代码除了注释以外,需要保证和部署的一样
这里说下有些代码使用了openzeppelin的相关代码

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";

如果代码中使用了这种,建议要么部署完后,

  1. 立马开源
  2. 要么自己手动把对应的文件整理到本地,或者使用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

构造参数

构造参数填不填都可能可以提交成功, 比较迷,不了解区块浏览器提交时咋校验/以及要求的

构造参数有两种情况需要处理

  1. 如果你确认上面所说的基本配置都选对了的情况下,还是提交了,错误就是常规的说byteCode不一样,这个时候可以尝试把构造参数填上
  2. 如果开源页面,构造参数自动给填了一堆东西,需要删掉提交, 删掉还是不成功,按照1的情况处理一遍

第二种情况缺图~~

第一种情况,就是指的byteCode不一样,没有额外提示

Error! Unable to generate Contract ByteCode and ABI

这里说下如何构建构造参数

方式一

通过 https://abi.hashex.org/# 网站来生成
填入合约的ABI,点击Parse, 然后选择constructor, 生成的内容填到开源页面的构造参数里面

注:这个生成的,有时不能用,不能用的时候,查看方式二, 为啥不能用,不详,确实和实际的不一样
有可能是因为0.8.x的数组方式编码有所改变,或者其他,没有细究

方式二

这个方式是无意中发现的,就是因为上面的方式一 编码的结果无法提交开源 最后把所有bytecode复制出来,查询某个参数时,发现bytecode里面有这个参数,然后有细微差别

以下是代码的相关参数

   constructor(string memory name_,string memory symbol_,uint256 totalSupply_,address[4] memory addrs, // reward, router, marketing wallet, dividendTrackeruint256[3] memory feeSettings, // rewards, liquidity, marketinguint256 minimumTokenBalanceForDividends_) 以下是顺序参数
BABY
BB
1000000000000000000000000
["0x0000000000000000000000000000000000000001","0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3","0x0000000000000000000000000000000000000002","0x0000000000000000000000000000000000000003"]
[1,2,3]
10000000000000000000000(注:地址中,内部需要使用到路由,所以使用的对应地址,其他瞎填略过)

方式一生成的

00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000021e19e0c9bab24000000000000000000000000000000000000000000000000000000000000000000004424142590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024242000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000009ac64cc6e4415144c455bd8e4837fea55603e5c3000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003

方式二获取的

000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009ac64cc6e4415144c455bd8e4837fea55603e5c30000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000021e19e0c9bab24000000000000000000000000000000000000000000000000000000000000000000004424142590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024242000000000000000000000000000000000000000000000000000000000000

开源流程示例

合约地址
https://testnet.bscscan.com/address/0x502fD252c99Da72918532cDC5B8191477cBEFF45#code

参数配置

   constructor(string memory name_,string memory symbol_,uint256 totalSupply_,address[4] memory addrs, // reward, router, marketing wallet, dividendTrackeruint256[3] memory feeSettings, // rewards, liquidity, marketinguint256 minimumTokenBalanceForDividends_) 以下是顺序参数
BABY
BB
1000000000000000000000000
["0x0000000000000000000000000000000000000001","0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3","0x0000000000000000000000000000000000000002","0x0000000000000000000000000000000000000003"]
[1,2,3]
10000000000000000000000(注:地址中,内部需要使用到路由,所以使用的对应地址,其他瞎填略过)

情况1 基本配置都正确,没有构造参数和library

情况2 补上library,不填构造参数

情况3 填写构造参数(一般可以通过,也可能无法通过)

对于这个代码,可能涉及数组或者是0.8.x动态数据构建有啥变化,原因不确定
内容如下,通过 https://abi.hashex.org 生成的

00000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000d3c21bcecceda1000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001e000000000000000000000000000000000000000000000021e19e0c9bab24000000000000000000000000000000000000000000000000000000000000000000004424142590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024242000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000009ac64cc6e4415144c455bd8e4837fea55603e5c3000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003

错误和情况2中的一模一样, 这里就不填图了

情况4 从浏览器提示中取构造参数

查看上图

  1. 最右边的红色箭头,将滚动条拖动到最右边,然后双击上面内容,复制,(你也可以按住拖动复制到最右边)
  2. 将内容粘贴到文本框,在最后面找很多0开始的地方…

如我现在这个例子,第一参数是字符串,下面data第一个内容16,不确定是偏移量还是指的长度。
刚开源一个发现没有固定前缀, 如果第一个是地址类型,那么地址签名还会有24个0

所以,找很多0的地方,开始截取,就是构造参数

注意:不要在页面直接双击,双击得到的不是完整内容,只是左边部分,右边还有两个{ipfs}开始的,双击不会带上, 得拖动到最右边
另外图上面看起来最右边还有两个0没有复制到,忽略,可能是浏览器显示问题

得到的内容如下
000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000000000000000000000000d3c21bcecceda100000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009ac64cc6e4415144c455bd8e4837fea55603e5c30000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000300000000000000000000000000000000000000000000021e19e0c9bab24000000000000000000000000000000000000000000000000000000000000000000004424142590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024242000000000000000000000000000000000000000000000000000000000000

可以对比通过hashex网址构建到的不一样

以上就开源成功了

如果想开源library, 找到library的地址, 把基本配置填一样的, 代码还是用整个代码即可,提交就直接通过了

测试

如果你想测试这样开源,可以复制上面链接的代码,在代码中随便加个代码, 比如

uint256 abcd = 123;

这样可以避免和已开源的一样,直接被开源了

其他

这里补充一个以前在heco上面的坑
多文件部署的合约
开源的时候,选择上传多个文件, 怎么提交都不通过, 最后把文件合并成一个文件,给通过了…

bsc heco eth浏览器开源智能合约代码,图文说明相关推荐

  1. truffle (ETH以太坊智能合约集成开发工具) 入门教程

    truffle (ETH以太坊智能合约集成开发工具) 入门教程 前言 在你了解区块链开发之前,你有必要了解区块链的一些基础知识,什么是DApp,DApp与传统app的区别, 什么是以太坊,以太坊中的智 ...

  2. 如何ETH以太坊智能合约做一个简单的DAPP

    目标: 1.使用etherjs 2.链接MetaMask钱包 3.查询链状态.账号状态.转账.调用合同读函数.调用合同写函数 环境: 1.kovan以太坊测试链上发布合约.合约地址:0xB6b0ab2 ...

  3. usdt智能合约代码

    以太链usdt智能合约代码 /***Submitted for verification at Etherscan.io on 2017-11-28 */pragma solidity ^0.4.17 ...

  4. FISCO BCOS迎来开源智能合约编程语言Liquid

    编者荐语: 以下文章来源于微众银行区块链 关注公众号:微众银行区块链,并回复 [Liquid]获取全文高清PDF 面对多样复杂应用场景的全新挑战,适用FISCO BCOS的智能合约语言Liquid提出 ...

  5. 【Solidity】零基础入门Solidity编写智能合约代码

    如果你有其他语言基础,可以很快入门,如果新手建议了解即可,以下是课程目录: 1.智能合约概述 2.区块链基础 3.以太坊虚拟机 4.安装Solidity编译器 5.从源代码编译 6.CMake参数 7 ...

  6. Uniswap V2-periphery 智能合约代码“行级”解析

    UniswapV2-periphery有Migrator跟Router合约,其中Router1已经弃用,因此直接解释Router2. 在Router2中使用到了UniswapV2Library合约(可 ...

  7. Uniswap V2-Core 部分智能合约代码解析

    通过阅读代码导入的包,我决定将代码的阅读顺序定为:ERC20,Pair,Factory ERC20.sol pragma solidity=0.5.16;import './interfaces/IU ...

  8. 部署CITA和区块链浏览器以及智能合约

    docker pull cita/cita-run:ubuntu-18.04-20180813 或者直接进入容器里面 docker exec -it 29f /bin/bash 然后查看Solidit ...

  9. 以太坊智能合约代码查看

    https://www.stateofthedapps.com/rankings 这是dapp排行榜,选择想看的应用后,下面有合约地址,在打开的etherscan页面可以看code标签页,里面有验证好 ...

最新文章

  1. percona-5.5安装笔记
  2. 关于Ubuntu运行级别、开机启动脚本的说明
  3. Tactai获美国科学基金会100万美元投资,致力于打造VR触觉体验
  4. storm安装笔记以及提交拓扑任务
  5. cron 12点执行_Linux中得循环调度任务执行
  6. maven正确的集成命令-U-B
  7. 图片无法删除要计算机管理员,存在桌面的图片删不掉,怎么处理?提示是需要管理员权限。...
  8. Responsive Web Design 简单介绍与优缺点、实作入门, 响应式设计
  9. Linux内核网络协议栈:udp数据包发送(源码解读)
  10. 历史数据清理--方案
  11. mysql limit (1-1)10_110,当您知道只有1个结果时,是否将'LIMIT 1'添加到MySQL查询中使它们更快?...
  12. Ueditor 使用
  13. Ubuntu安装maven
  14. html从谷歌浏览器跳转到IE,谷歌浏览器chrome
  15. 鸿蒙OS内核分析|解读鸿蒙源码
  16. 图数据库nebula——常用的nGQL
  17. 独立窗口打开多个Excel
  18. Android shortcuts快捷方式
  19. Revit二次开发---关于CAD翻模第一步
  20. NQI一站式服务平台,质量基础设施一站式服务系统开发方案

热门文章

  1. windows系统搭建WEB服务器(IIS)
  2. 一朝发祥地,两代帝王城
  3. Xcode使用教程详细讲解(下)
  4. ubuntu 18.04配置Hadoop 3.1.1些许问题记录
  5. 从0开始在ubuntu18.04上搭建嵌入式Linux开发环境以及嵌入式Qt5.6开发环境
  6. android+7.0+nexus,Nexus新机搭安卓7.0+4G全网通
  7. 游戏场景里 坦克移动 发射子弹 打坦克
  8. 解决笔记本上,显示缩放比例125% 150%对页面布局的影响
  9. Long-Tailed Classification by Keeping the Good and Removing the Bad Momentum Causal Effect
  10. 高通ar,unity实现3D物体识别,图片识别