Truffle私有链合约部署

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不做具体介绍了。

Truffle私有链合约部署_第1张图片

02 安装solc

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

Truffle私有链合约部署_第2张图片

03 安装testrpc(和Ganache二选一)

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

Truffle私有链合约部署_第3张图片

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

04 初始化truffle

04-1 创建项目

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

Truffle私有链合约部署_第4张图片

04-2 目录结构说明

Truffle私有链合约部署_第5张图片

@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 >=0.4.0 <0.7.0;
 contract Test {
  function sayHello() public pure returns (string memory) {
   return "Hello World";
 }
}

    编写2_initial_test.js内容如下:

var Test = artifacts.require("Test.sol");

module.exports = function(deployer){
  deployer.deploy(Test);
}

06 上传合约

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

Truffle私有链合约部署_第6张图片

06-2 打开truffle控制台truffle develop

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

Truffle私有链合约部署_第7张图片

06-3 部署合约

使用命令truffle(develop)> migrate进行部署,如果是第二次部署,则用:truffle(develop)> migrate --reset。

Truffle私有链合约部署_第8张图片

06-4 调用合约

    使用命令Let contract,然后用 contract = Test.deployed().then(instance => contract = instance)

Truffle私有链合约部署_第9张图片

06-5 测试

    使用命令contract.sayhello()进行测试,结果输出如下:

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

Truffle私有链合约部署_第10张图片

07 Geth 相关

07-1 Geth遇到的问题

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

Truffle私有链合约部署_第11张图片

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

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

geth --datadir=./ --bootnodes=enode://bafe93edee0c5cfab6a3d12927553abe6f9a3cf31b56b58d65c05e52edf184dcf88f8a2a3d84f3911bc2233c0140188e1e8717c26ff98a0268298c3a933c1855@127.0.0.1:30303 --port=31303 console

如果已经启动了的话,可以通过:admin.addPeer("enode://.........@ip:port")添加节点。

 

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

 

3. 查看节点信息:admin.nodeInfo admin.peers

    查看节点数:net.peerCount

    添加节点:admin.addPeer("enode://.........@ip:port")


 

你可能感兴趣的:(区块链技术)