IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> bsc heco eth浏览器开源智能合约代码,图文说明 -> 正文阅读

[区块链]bsc heco eth浏览器开源智能合约代码,图文说明


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

配置

基本配置

以下基本配置必须一样

  • 编译版本 (这个指的是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, dividendTracker
        uint256[3] memory feeSettings, // rewards, liquidity, marketing
        uint256 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, dividendTracker
        uint256[3] memory feeSettings, // rewards, liquidity, marketing
        uint256 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上面的坑
多文件部署的合约
开源的时候,选择上传多个文件, 怎么提交都不通过, 最后把文件合并成一个文件,给通过了…

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:38:48  更:2022-03-04 15:39:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 19:23:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计