热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

智能合约模糊测试编译部署脚本0.脚本仓库https:github.compeakcrosser7Contracts-Compile-And-Deploy1.依赖安装1.1升
智能合约模糊测试编译部署脚本

0. 脚本仓库

https://github.com/peakcrosser7/Contracts-Compile-And-Deploy

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

推荐阅读
  • 本文详细介绍了如何创建和使用VUE uni-app开发环境,包括通过HBuilderX可视化界面和通过vue-cli命令执行的方法。文章内容简单清晰,易于学习与理解。通过学习本文,读者可以深入了解VUE uni-app开发环境,并通过实践验证掌握具体的使用情况。编程笔记将为读者推送更多相关知识点的文章,欢迎关注! ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • 本文介绍了JavaScript进化到TypeScript的历史和背景,解释了TypeScript相对于JavaScript的优势和特点。作者分享了自己对TypeScript的观察和认识,并提到了在项目开发中使用TypeScript的好处。最后,作者表示对TypeScript进行尝试和探索的态度。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 关键词: ... [详细]
  • 微信民众号商城/小顺序商城开源项目介绍及使用教程
    本文介绍了一个基于WeiPHP5.0开发的微信民众号商城/小顺序商城的开源项目,包括前端和后端的目录结构,以及所使用的技术栈。同时提供了项目的运行和打包方法,并分享了一些调试和开发经验。最后还附上了在线预览和GitHub商城源码的链接,以及加入前端交流QQ群的方式。 ... [详细]
  • 【前端工具】nodejs+npm+vue 安装(windows)
    预备先看看这几个是干嘛的,相互的关系是啥。nodejs是语言,类比到php。npm是个包管理,类比到composer。vue是个框架&# ... [详细]
  • React 小白初入门
    推荐学习:React官方文档:https:react.docschina.orgReact菜鸟教程:https:www.runoob.c ... [详细]
  • RN即ReactNative基于React框架针对移动端的跨平台框架,在学习RN前建议最好熟悉下html,css,js,当然如果比较急,那就直接上手吧,毕竟用学习前面基础的时间,R ... [详细]
  • 这篇文章给大家介绍怎么从源码启动和编译IoTSharp ,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。IoTSharp项目是 ... [详细]
  • 前言:原本纠结于Web模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中ev ... [详细]
  • 前言:原本纠结于Web 模板,选了Handlebars。后来发现页面都是弱逻辑的,不支持复杂逻辑表达式。几乎要放弃之际,想起了Javascript中eval函数。虽然eval函 ... [详细]
author-avatar
南航爱心社
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有