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

Truffle私有链合约部署

00前言上一篇文章写的是geth私有链搭建。这篇文章本来想继续用geth,结合VScode的solidity插件优雅地部署私有链合约。无奈VScodesolidity
00 前言

    上一篇文章写的是geth私有链搭建。这篇文章本来想继续用geth,结合VS code 的solidity插件优雅地部署私有链合约。无奈VS code solidity插件编译好的abi JSON文件在geth中赋值的时候一直有问题,并且用JSON验证工具验证该文件显示没有问题。因此改用了truffle工具,现将过程介绍如下。

01 安装truffle

    Truffle suite 在官网上https://www.trufflesuite.com/或者https://truffleframework.org/docs/getting_started/testing上有相关的介绍。使用命令npm install -g truffle进行安装。由于默认的镜像源是国外的,所以我们要换源。使用 npm config set registry http://registry.npm.taobao.org换成淘宝源。安装node.js不做具体介绍了。

02 安装solc

    因为solc只是一个程序集,如果我们想要在终端中使用solc程序编译智能合约,则需要安装solc-cli,这是solc的命令行界面。使用命令sudo npm install -g solc solc-cli --save-dev安装。输入solcjs --help命令查看是否成功。

03 安装testrpc(和Ganache二选一)

    testrpc不同于geth,geth是真正的以太坊环境,testrpc是在本地使用内存模拟的一个以太坊环境,对于开发调试来说,更为方便快捷。使用命令 npm install -g ethereumjs-testrpc安装,然后输入命令testrpc测试是否安装成功。

想要关闭的话用ctrl + c 即可。

04 初始化truffle

04-1 创建项目

新建一个项目truffleProject文件夹:C:software\truffleProject,在文件夹中打开cmd在目录truffleProject下执行trffle init命令:

04-2 目录结构说明

@contracts目录中包含Solidity合约代码,其中Migrations.sol是必须的,其他就是你自己写的合约代码了。

@migrations目录中包含合约部署脚本,其中1_initial_migration.js就是用来部署Migrations.sol的,其他的脚本会按照顺序依次执行。

@test目录中就是测试代码了。

@truffle-config.js是配置文件。

05 编写合约

    在contracts目录下编写合约,然后在migration目录下仿照编写对应的2.xxx.xxx.js,3.xxx.xxx.js以此类推。例如编写Test.sol内容如下:


pragma solidity >&#61;0.4.0 <0.7.0;contract Test {function sayHello() public pure returns (string memory) {return "Hello World";}
}

    编写2_initial_test.js内容如下&#xff1a;

var Test &#61; artifacts.require("Test.sol");module.exports &#61; function(deployer){deployer.deploy(Test);
}

06 上传合约

06-1 在当前文件夹使用truffle compile编译合约

06-2 打开truffle控制台truffle develop

    这一步可以省略&#xff0c;也可以第一步直接打开。好处在于不用重复输入truffle&#xff0c;并且可以使用truffle控制台命令。另外上传的过程中最好打开一个新的终端运行testrpc。

06-3 部署合约

使用命令truffle(develop)> migrate进行部署&#xff0c;如果是第二次部署&#xff0c;则用&#xff1a;truffle(develop)> migrate --reset。

06-4 调用合约

    使用命令Let contract&#xff0c;然后用 contract &#61; Test.deployed().then(instance &#61;> contract &#61; instance)

06-5 测试

    使用命令contract.sayhello()进行测试&#xff0c;结果输出如下&#xff1a;

  如果test.sol文件中sayHello()函数不限定为pure的话&#xff0c;则会返回交易信息&#xff1a;

07 Geth 相关

07-1 Geth遇到的问题

    使用geth部署合约的时候有abi错误&#xff0c;没有解决&#xff0c;并且ganache-Windows版的下载不下来。于是最后改用了testrpc:

07-2 Geth构建不同主机的节点(使用testrpc测试的话不需要)

1.  启动一个节点之后&#xff0c;通过admin.nodeInfo.enode查看这个节点的enode。其他节点启动的时候&#xff0c;添加--bootnodes参数&#xff0c;以及端口号&#xff0c;通过--port来设置。例如&#xff1a;

geth --datadir&#61;./ --bootnodes&#61;enode://bafe93edee0c5cfab6a3d12927553abe6f9a3cf31b56b58d65c05e52edf184dcf88f8a2a3d84f3911bc2233c0140188e1e8717c26ff98a0268298c3a933c1855&#64;127.0.0.1:30303 --port&#61;31303 console

如果已经启动了的话&#xff0c;可以通过&#xff1a;admin.addPeer("enode://.........&#64;ip:port")添加节点。

 

2. 开放rpc的方法&#xff1a;geth --rpc --rpcaddr 127.0.0.1 --rpcport 8545 --datadir /root/chain --port 30303  --networkid 100000 console添加其他主机改变IP地址即可。开放rpc的目的是能够让节点连接

 

3. 查看节点信息&#xff1a;admin.nodeInfo admin.peers

    查看节点数&#xff1a;net.peerCount

    添加节点&#xff1a;admin.addPeer("enode://.........&#64;ip:port")


 


推荐阅读
  • vue使用
    关键词: ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
author-avatar
mobiledu2502890917
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有