可信电子证照采用许可链作为区块链技术底层。许可链分为联盟链和私有链两种,为简单起见,本节将以私有链为例,讨论如何搭建并部署一条属于自己的以太坊私有链。
考虑到便捷性,我们提供私有链底层平台的部署脚本,基于该脚本可实现私有链的自动化快速部署。在环境准备方面,私有链平台部署在政府内网,区块链节点运行于若干PC Server,在IP层保证区块链节点间的互联互通。
□测试环境 :3台全节点服务器(虚拟机)。
□服务器系统:centos 6.8。
□服务器性能:4核,8GB内存。
□以太坊客户端:geth
搭建及部署以太坊私有链的具体步骤如下。
第一步:部署主节点,在该节点上生成创世区块。
首先,通过制定的参数配置,在控制台启动geth服务
过参数console启动一个带命令行的geth服务。接着,通过带有命令行的geth服务,注册一个新用户。
□personal.newAccount("test1234”):注册新用户的web3接口。
□0xfc3147e7d648b3513f3fbad853ddc242e7f003ba:注册成功后为新用户生成的地址address,对于以太坊来说也是公钥,记住这个地址,在配置创世节点的时候需要。
新用户创建成功后,输入命令 “exit” 退出服务,如果不退出,geth服务会自动同步公链区块,搭建私有链则不需要同步以太坊公链。
然后,通过创世节点配置配置文件(genesis.json),初始化创世节点。初始化配置文件内容如下:
{
"alloc": {
}, "nonce": "0x0000000000000042”, //随机数,用于挖矿
"difficulty": "0x020000”, //设置区块挖矿复杂度,设置太高,产出区块的速度会比较慢,设置太低,产出垃圾区块(分叉)的概率会比较高 "mixHash":
"0x0000000000000000000000000000000000000000000000000000000000000000”, // 与nonce一起配合用于挖矿,详细信息可以参考以太坊黄皮书 "coinbase": "0x0000000000000000000000000000000000000000”, // coninbase地址 "timestamp": "0x00”, //时间戳 "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000”, //创世区块父区块的地址,由于是创世区块,没有父区块,所以为0 "extraData":
"0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa”, //备注信息
"gasLimit": “0x4c4b40” // 设置gas的消耗总量限制,用于限制区块能包含交易的信息综合,这里我们用于私链测试开发,所以填最大值
}
获取创世节点配置文件的参数以后,通过命令来初始化创世节点:
geth --datadir data init genesis.json
至此,创世节点的初始化就完成了,现在我们来启动创世节点:
geth --datadir data --mine --etherbase 0 --minerthreads 2 --port 30303 --rpc --rpcapi "db,eth,net,web3,personal" --rpcaddr 10..129. --rpccorsdomain “*” console
运行上述命令后会看到图1-16所示的界面。
后面需要在从节点添加监听地址来同步主节点的区块。
我们的创世区块的主节点已经启动了。可以查看创世节点的一些信息
指令含义分析如下所示。
eth.accounts :查看当前geth服务下的账户列表;
eth.getBalacne(“0xfc3147e7d648b3513f3fbad853ddc242e7f003ba”) :查询指定账户的余额信息,单位为wei。
至此,我们的创世节点已经成功启动了。
第二步:部署从节点,并且同步主节点的区块信息。
首先,把主节点服务上的genesis.json复制到从节点服务器,并初始化节点:
geth --datadir data init genesis.json
然后,启动从节点geth服务:
geth --datadir data console
从服务启动成功,服务启动后的显示信息与主服务的类似。
接着,在从服务器上创建账户,与主服务创建账户相同:
personal.newAccount(?234test?;
“0xabc147e7d648b3513f3fbad853ddc242e7f00gjs”
为了从服务添加对主服务的监听,在从服务的geth服务控制台输入如下命令:
admin.addPeer(“enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303”);
此时主从服务就可以互相同步区块了。
添加创世节点的监听端口有如下3种方式。
(1)在geth服务控制台使用如下命令:
admin.addPeer(“enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303”);
(2)在geth启动参数设置,使用参数--bootbodes:
“enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303”
(3)使用配置文件,添加文件/static-nodes.json :
[
"enode://707124b6dba10fad0ad776539038310aace4f73f7c906885e9064c943ab8e92e819cce40805919f6bc314492ef220ee2eb40b9c60e5b16361bc4a32e843dcd3b@10.37.129.2:30303", ]
最后我们要让主从服务的矿工工作了,目前该私有链的以太币只能依靠矿工挖矿来产出。分别在主从节点的geth控制台输入以下命令:
personal.unlockAccount(“0xabc147e7d648b3513f3fbad853ddc242e7f00gjs”);
分别在对应的服务器上填入对应的矿工用户地址,即刚注册的用户的地址。这时,控制台需要我们输入注册时地址对应的用户名(也就是注册新用户时设定的test1234)。 然后,使用miner.start(2) 命令开始挖矿,这里需要设置cpu使用的个数。之后可以使用miner.stop()命令来停止挖矿。
至此,我们已经搭建好两个全节点的区块链服务了。可以使用脚本来启动geth服务,而不需要在geth控制台中启动相关服务。
创建geth.sh脚本:
geth --datadir /data/Ethereum/data --port 30303 --bootnodes "enode://b70d74575119486999877d08f07aa2e9cb4aa908
f78d3e58d91e19eb790a3723f8aedc25fd9823aa0e7cc2c4ca54c431ab785211cb111aa9c28461ca72adb67f@10.51.110.19:30303" --mine --minerthreads 2 --nat "extip:10.51.110.21" --rpc --rpcapi "db,eth,net,web3,personal" --rpcaddr 10.51.110.21 --rpc corsdomain “*” console
脚本启用服务以后,可以通过curl命令来调用geth服务的json-rpc接口(rpc服务的地址就是启动命令--rpcaddr设定的地址,服务端口默认为8545),例如:
curl -X POST --data
'{"jsonrpc":"2.0","method":"eth_getBalance","params": [“0xabc147e7d648b3513f3fbad853ddc242e7f00gjs",
"latest"],"id":1}’ 10.51.110.21:8545
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。