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


 


推荐阅读
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社区 版权所有