热门标签 | 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

推荐阅读
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文将详细介绍如何注册码云账号、配置SSH公钥、安装必要的开发工具,并逐步讲解如何下载、编译 HarmonyOS 2.0 源码。通过本文,您将能够顺利完成 HarmonyOS 2.0 的环境搭建和源码编译。 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • Vue应用预渲染技术详解与实践 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 单元测试:使用mocha和should.js搭建nodejs的单元测试
    2019独角兽企业重金招聘Python工程师标准BDD测试利器:mochashould.js众所周知对于任何一个项目来说,做好单元测试都是必不可少 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • Vue CLI 初始化 Webpack 项目时,main.js 文件是如何被调用的? ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 本文介绍了 Vue 开发的入门指南,重点讲解了开发环境的配置与项目的基本搭建。推荐使用 WebStorm 作为 IDE,其下载地址为 。安装时请选择适合您操作系统的版本,并通过 获取激活码。WebStorm 是前端开发者的理想选择,提供了丰富的功能和强大的代码编辑能力。 ... [详细]
  • 深入解析:React与Webpack配置进阶指南(第二部分)
    在本篇进阶指南的第二部分中,我们将继续探讨 React 与 Webpack 的高级配置技巧。通过实际案例,我们将展示如何使用 React 和 Webpack 构建一个简单的 Todo 应用程序,具体包括 `TodoApp.js` 文件中的代码实现,如导入 React 和自定义组件 `TodoList`。此外,我们还将深入讲解 Webpack 配置文件的优化方法,以提升开发效率和应用性能。 ... [详细]
  • 如何在PHP中正确配置错误显示功能
    在PHP中正确配置错误显示功能的方法如下:首先,定位并打开“php.ini”配置文件;接着,将“display_errors”参数设置为“On”;最后,在PHP代码文件的顶部添加 `ini_set('display_errors', '1');` 以确保错误信息能够被正确显示。此外,建议在开发环境中启用此功能,而在生产环境中禁用,以避免敏感信息泄露。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
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社区 版权所有