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 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 智能合约模糊测试编译部署脚本 -> 正文阅读

[区块链]智能合约模糊测试编译部署脚本

智能合约模糊测试编译部署脚本

1.依赖安装

1.1 升级npm

使用命令

sudo npm -g install npm@next

1.2 升级node.js

  1. 下载用于管理node.js版本的"n"模块, 使用命令:
sudo npm install -g n
  1. 安装node.js稳定版, 使用命令:
n stable
  • 注: 更新完成后需要重新启动终端

2.使用Truffle

2.1 安装Truffle

使用命令:

sudo npm install -g truffle

2.2 创建工程

  1. 创建工程目录并进入, 使用命令:
mkdir trufflePro    # trufflePro工程目录名
cd trufflePro
  1. 初始化工程, 在工程目录使用命令:
truffle
truffle init
  • 遇到问题: RequestError: Error: connect ECONNREFUSED 127.0.0.1:443
    解决: 更改hosts文件
    1. 打开hosts文件: sudo vi /etc/hosts
    2. 添加以下内容:
    0.0.0.0:443 github.com
    199.232.68.133  raw.githubusercontent.com
    
    参考: 在ubuntu执行truffle init出现错误

初始化成功后终端如图:
在这里插入图片描述
项目目录中结构如图:
在这里插入图片描述

  • contract/ - Truffle默认的合约文件存放地址
  • migrations/ - 存放发布脚本文件
  • test/ - 用来测试应用和合约的测试文件
  • truffle-config.js - Truffle的配置文件

2.3 编译合约

(1) 设置solc版本

版本信息位于文件./truffle-config.js中, 如图:
在这里插入图片描述
默认全部注释, 表示默认配置, 关闭version注释, 即可设置具体编译器版本.

(2) 编译合约

合约应位于./contracts目录, 编译合约使用命令:

truffle compile

编译成功后即可在./build/contracts/目录下找到合约编译后对应json文件, 文件中具有合约的abi、字节码等信息.

2.4 部署合约

(1) 配置部署文件

部署合约文件位于目录./migrations, 创建配置文件, 以数字开头, 如2_xxx.js, 文件内容为:

var Test = artifacts.require("contract.sol");
//"contract.sol"替换成具体的合约文件名
module.exports = function(deployer) {
   deployer.deploy(Test);
};

(2) 修改Truffle配置

修改./truffle-config.js文件networks部分, 如图:
在这里插入图片描述
其中, development为以太网(私有链)网络名, 可自定义; hostport的值一般按此默认值, network_id可固定值也可以使用通配符*, gas值为交易时默认gas值.

(3) 以太坊配置

  1. 打开一个终端, 启动本地私有链, 使用命令:
geth --rpc --rpcport "8545" --rpccorsdomain "*" --datadir node0 --port "30303"  --networkid 506 console --unlock 0 --password "./pwd.txt"

其中: rpcport、·networkid值要与上述truffle-config.js文件中一致; datadir的值根据自身私有链设置; console表明控制台交互模式; unlock值对应解锁的账户序号, 需要设为默认账户即0; password值问账户密码所在文件的路径.
2. 私有链启动挖矿, 使用命令: miner.start()

(4) 部署合约

在Truffle项目根目录启动另一终端, 使用命令部署合约:

truffle migrate --network development
#参数network后跟网络名, 须与truffle-config.js中一致, 可省

若成功部署则会显示部署后的相关信息, 如图:
在这里插入图片描述

遇到问题及处理:

  1. Something went wrong while attempting to connect to the network

    解决: 确保以太坊私有链网络率先启动且启动时需要有参数--rpc
  2. Error: Could not find artifacts for Migrations from any sources
    在这里插入图片描述
    解决: 确保./migrations目录下配置文件中部署的合约文件名"xxx.sol"正确.
  3. Returned error: authentication needed: password or unlock.

    解决: 未在私有链设置解锁账户, 应使用上述启动私有链命令启动时解锁账户, 或者在私有链终端使用personal.unlockAccount(account, passwd)命令进行账户解锁. (经测试, 最好解锁默认0号账户)
  4. could not deploy due to insufficient funds
    在这里插入图片描述
    解决: 确保解锁账户有余额, 可以先使用该账户挖矿获得足够以太币后再部署.(私有链命令操作详见#03.3.3(2))
  5. ran out of gas (using a value you set in your network config or deployment parameters.)
    在这里插入图片描述
    解决: 部署合约的gas用尽, 在./truffle-config.js文件中gas的值要足够大.
  6. exceeded the block limit (with a gas value you set).
    在这里插入图片描述
    解决: 部署合约发送的gas值超出了区块限制, 区块的gas限制值可在私有链的gensis.json文件(名字类似, 为生成私有链的配置文件)中查到, 如图:
    在这里插入图片描述
    要修改./truffle-config.js文件中gas的值不超过该gaslimit的值; 同时也可以设置genesis.json中的gasLimit的值更大一些(目前已知可行的修改方法是在初始化私有链的创世块前对该文件的gasLimit值进行修改, 私有链部署相关操作详见#03.3.2).
  7. Transaction was not mined within 750 seconds, please make sure your transaction was properly sent. Be aware that it might still be mined!.
    解决: 未及时完成合约部署, 确保私有链已经开始挖矿, 原因不详, 再次使用命令部署时成功.
  8. The contract code couldn’t be stored, please check your gas limit.
    在这里插入图片描述
    解决: ./truffle-config.js文件中gas的值要足够大.
  9. Number can only safely store up to 53 bits
    在这里插入图片描述
    解决: 原因不详, 猜测可能为上述私有链gensis.json文件中gasLimit值大小超过53bits, 上图的0x800000000暂无此问题.

3. 使用脚本

  1. 根据上述 #1, #2.1, #2.2 安装Truffle并构建一个项目目录
  2. 删除创建的Truffle项目目录下除truffle-config.js以外的文件夹和文件
  3. 按照 #2.4(2) 设置Truffle连接的私有链
  4. 打开用于部署合约的私有链, 解锁账户后进行挖矿
  5. 根据运行环境修改脚本 contrCompDeploy.py 中的路径等参数
  6. 运行脚本 contrCompDeploy.py
  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-11-11 12:45:20  更:2021-11-11 12:45:43 
 
开发: 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年11日历 -2024/11/25 22:50:19-

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