搭建以太坊私链节点群
以太坊简介
以太坊(ethereum)是一个开源的有智能合约功能的公共区块链平台,使用其节点程序,我们可以接入以太坊的主网络,即接入以太坊的区块链,同步其已有区块;也可以搭建私链,构建自己的区块链,本篇即通过若干步骤,搭建私链节点集群。
准备工作
系统:Ubuntu
下拉代码
以太坊提供c++、python、Java、Go等语言的节点程序,Go语言的程序在其中占主导地位,暂使用Go语言的程序go-ethereum,拉取代码:
编译代码
编译以太坊源码需要版本1.7以上的go和c编译器。
在Ubuntu上安装Go语言环境,电梯:http://docscn.studygolang.com/doc/install进入go-ethereum目录,编译出geth:
或者编译整套组件:
编译产物:
geth:以太坊主要节点程序,它是进入以太坊网络(主网络,测试网络或专用网络)的入口点,能够作为完整节点(默认),归档节点(保留所有历史状态)或轻型节点(实时检索数据)运行;
abigen:源代码生成器将以太坊合约定义转换为易于使用的编译时类型安全的Go软件包;
bootnode:剥离了以太坊客户端,它只参与网络节点发现协议,不运行任何更高级别的应用协议,可以借助该程序,方便搭建节点集群;
evm:EVM开发工具版本(以太坊虚拟机),能够在可配置环境和执行模式下运行字节码片段;
gethrpctest:开发人员实用测试套件,该套件符合Ethereum JSON RPC规范;
rlpdump:将二进制RLP(递归长度前缀)格式内容转储为可读的格式;
swarm:swarm守护进程和工具,这是swarm网络的入口点;
puppeth:a CLI wizard that aids in creating a new Ethereum network.
搭建私链
生成创世块
编写如下创世文件genesis.json:
参数解释:
chainID:私链标识;
homesteadBlock:进入家园模式的区块数,默认即可;
eip155Block,eip158Block:eip155,eip158硬分叉区块数,默认即可;
alloc:欲挖账户和金额;
difficulty:挖矿难度值;
gasLimit:燃料消耗最大值;
nonce:随机数,一般为66;
parentHash:传世块无父区块,设置为0;
timestamp:生成创世块的时间戳,设置为当前时间戳即可;
运行命令:
会在自定义的目录data下生成创世块,如果不指定目录,默认使用/home/(username)/.ethereum/geth/chaindata作为data目录,这样即生成了创世区块,如下图所示:可以看到在data下的geth目录生成了完整chaindata目录和轻量级lightchaindata目录,并且成功创建了创世块。
运行节点
运行如下命令:
启动了节点程序,并启动交互式JavaScript环境,可以方便的管理私链。比如:
管理账户
在JS环境中:
输入账户密码,返回账户地址,同时在data/keystore目录下生成秘钥文件,它们之间的关系如同取款密码,银行卡号,银行卡的关系。所以一定要备份好秘钥文件。如果要转账,需要秘钥文件和密码,查余额输入账号即可。
挖矿
开启挖矿:
默认使用eth.account(0)作为当前的挖矿账户(即将挖出的币保存到的账户),也可以为设置其他账户:
看到如图所示,即代表挖矿成功。
建立节点集群
nodeinfo
在JS控制台中:
返回该节点的enode,将@后面的[::]替换为当前主机的IP地址。
建立连接
并在另一台主机或另个终端中,用:
测第一个节点端口是否正常打开,在结果正常的情况下,建立第二个节点(必须用同样的创世文件),进入JS控制台:
将上节生成的enode添加到第一个节点,检查已连接节点:
正常情况下,就会看到第一个节点信息,说明连接成功。连接成功后,后者会同步区块数据。第三个节点,第四个节点可以用相同的方法建立连接,形成集群。此外,对于多台节点,可以配置static-nodes.json文件和使用bootnode方便建立节点集群。
后续有机会再介绍上述两种方式。
领取专属 10元无门槛券
私享最新 技术干货