开发者社区> 问答> 正文

如何在区块链中搭建及部署以太坊私有链?

如何在区块链中搭建及部署以太坊私有链?

展开
收起
问问小秘 2019-11-05 11:49:32 5407 0
1 条回答
写回答
取消 提交回答
  • 可信电子证照采用许可链作为区块链技术底层。许可链分为联盟链和私有链两种,为简单起见,本节将以私有链为例,讨论如何搭建并部署一条属于自己的以太坊私有链。
    考虑到便捷性,我们提供私有链底层平台的部署脚本,基于该脚本可实现私有链的自动化快速部署。在环境准备方面,私有链平台部署在政府内网,区块链节点运行于若干PC Server,在IP层保证区块链节点间的互联互通。
    □测试环境 :3台全节点服务器(虚拟机)。
    □服务器系统:centos 6.8。
    □服务器性能:4核,8GB内存。
    □以太坊客户端:geth
    image.png
    搭建及部署以太坊私有链的具体步骤如下。
    第一步:部署主节点,在该节点上生成创世区块。
    首先,通过制定的参数配置,在控制台启动geth服务
    image.png
    过参数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

    2019-11-05 13:11:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
区块链开启可问责服务新时代 立即下载
区块链在当前实际金融业务应用中的关键技术实施和解决方案 立即下载
IBM区块链技之道 立即下载