虽然以太坊是一个公有链系统,但是我们可以通过设置一些参数来运行自己的私有链节点,在自己的私有链上进行开发和测试不需要同步公有链数据,也不需要花钱来买以太币,节省存储空间和成本,而且很灵活很方便。本文介绍使用geth客户端搭建私有链的操作步骤,同时会解释在这个过程中用到的各个命令及选项的含义和作用,最后会介绍geth的Javascript Console中的一些常用功能。
系统和软件
- Ubuntu 16.04 64位
- geth 1.5.6 =>(安装教程)
搭建私有链
一、准备创世区块配置文件
以太坊支持自定义创世区块,要运行私有链,我们就需要定义自己的创世区块,创世区块信息写在一个json格式的配置文件中。首先将下面的内容保存到一个json文件中,例如genesis.json。
- {
- "coinbase" : "0x0000000000000000000000000000000000000000",
- "difficulty" : "0x400",
- "extraData" : "0x0",
- "gasLimit" : "0x2fefd8",
- "nonce" : "0xdeadbeefdeadbeef",
- "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
- "timestamp" : "0x00",
- "alloc" : {}
- }
二、初始化:写入创世区块
准备好创世区块配置文件后,需要初始化区块链,将上面的创世区块信息写入到区块链中。首先要新建一个目录用来存放区块链数据,假设新建的数据目录为~/privatechain/data0,genesis.json保存在~/privatechain中,此时目录结构应该是这样的:
- privatechain
- ├── data0
- └── genesis.json
接下来进入privatechain中,执行初始化命令:
- $ cd privatechain
- $ geth --datadir data0 init genesis.json
上面的命令的主体是geth init
,表示初始化区块链,命令可以带有选项和参数,其中--datadir
选项后面跟一个目录名,这里为data0
,表示指定数据存放目录为data0
,genesis.json
是init
命令的参数。
运行上面的命令,会读取genesis.json文件,根据其中的内容,将创世区块写入到区块链中。如果看到以下的输出内容,说明初始化成功了。
I0322 10:52:44.585282 cmd/geth/chaincmd.go:131] successfully wrote genesis block and/or chain rule set: b240e0678c2a8f87cf350225b528e3d97688aad6d4d84ee84e405c7fc9e37e4e
初始化成功后,会在数据目录data0中生成geth和keystore两个文件夹,此时目录结构如下:
- privatechain
- ├── data0
- │ ├── geth
- │ │ └── chaindata
- │ │ ├── 000002.log
- │ │ ├── CURRENT
- │ │ ├── LOCK
- │ │ ├── LOG
- │ │ └── MANIFEST-000003
- │ └── keystore
- └── genesis.json
其中geth/chaindata中存放的是区块数据,keystore中存放的是账户数据。
三、启动私有链节点
初始化完成后,就有了一条自己的私有链&#x