网上已经有很多关于怎样搭建私有链的文章,我只是从他们那里吸取学习,然后在工作中吸收消化,转化成自己的理解。在这里,我只是一个学习者,新手。
我是在liunx上环境上,利用geth来部署私人链网络。在部署链网络前,需要把geth安装好,这个在网络上很多。
1、首先在本地目录($home)中创建3个文件夹chain1、chain2、chain3,这里名字是任意的,这三个文件夹用于存储私有链的数据。
下面是构建目录结构:
---nodes
---gensis.json
---chain1
---chain2
---chain3
2、创建账号
geth --datadir ./chain1 account new
geth --datadir ./chain2 account new
geth --datadir ./chain3 account new
3、创世纪文件gensis.json
{
"config":{
"chainId":520,
"homesteadBlock":0,
"eip155Block":0,
"eip158Block":0
},
"alloc": {
"1dbadccda953604a05ca5ea9ee3fef10420c43fa": {"balance": "1000000000000000000"}
"b77bfecae7c223e8285e9951f54b15c72efe6c41": {"balance": "2000000000000000000"}
"7dead59d57d75e2b20bff1f56a127593f799e0c3": {"balance": "3000000000000000000"}
}
"nonce":"0x0000000000000042",
"mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x2000",
"coinbase":"0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "",
"gasLimit":"0xffffffff"
}
其中,config中的内容是区块链相关的基本配置参数,最重要的是链编号chainId,它是用于标识区块链的编号。chainId有些说是networkid,至于chainId和networkid的区别,我暂时还不清楚。在后面使用中设置成一样就行。alloc中为以太坊账户配置信息,可以留空,等待部署完成后,再启动以太坊创建账户;也可以预先配置好以太坊账户及其余额,这里的账户余额是以wei为单位,也就是数值10的18次方表示1ether。上面的3个账户,是通过第2步生成的。每个人生成的是不一样的。
4、初始化节点
geth --datadir ./chain1 init gensis.json
geth --datadir ./chain2 init gensis.json
geth --datadir ./chain3 init gensis.json
5、分别启动节点
geth --datadir ./chain1 --networkid 52 --port 1314 console
geth --datadir ./chain2 --networkid 52 --port 1315 console
geth --datadir ./chain3 --networkid 52 --port 1316 console
6、各节点互通
admin.nodeInfo 查询节点的信息
admin.addPeer 把节点串起来
下面这个encode是chain1的,这里我们把chain2、chain3节点加到chain1里面
admin.addPeer("enode://3ffa37ee0bcdf85be7ab70d7864d054c5358127e6c590dfda0cf337647e69980552511d97625b85bfc812584b88866b4c1c04bef9802d81efa27ddaa395f8324@[::]:1314")
加入后,可以通过net.peerCount查看连接数
7、测试私有链
在chain1节点里执行miner.start()挖矿,截图如下:
经过挖矿后:
明显看到账户里挖了很多币
下面来个交易例子:
发送交易,首先需要把账号解锁;然后交易后,需要挖矿,这笔交易才能看到。比如:账号A转账给账号B,首先账号A需要调用
personal.unlockAccount()解锁,然后调用eth.sendTranscation发送交易,之后账号A调用miner.start()开始挖矿,最后查看账号B,就能看到这笔交易。