版权声明
本文首发于币乎 请注意:
无需授权即可转载;
甚至无需保留以上版权声明…
Geth简介
首先确保你已经完成了go-ethereum客户端安装。Go-ethereum客户端通常被称为Geth,它是个命令行界面,执行在Go上实现的完整以太坊节点。Geth得益于Go语言的多平台特性,支持在多个平台上使用(比如Windows、Linux、Mac)。Geth是以太坊协议的具体落地实现,通过Geth,你可以实现以太坊的各种功能,如账户的新建编辑删除,开启挖矿,ether币的转移,智能合约的部署和执行等等。
检查是否安装成功
geth --help
如果出现版本号和一些帮助提示命令,则表示安装成功
创建创世区块
以太坊上可以通过自定义创世区块来搭建一条私有链,私有链是很便于开发调试的。我们知道每一个区块是基于上一个区块产生的,而创世区块作为整条链的第一个区块,又是如何产生的呢?需要配置一个json文件,这里命名为genesis.json,它的内容如下
{
"config": {
"chainId": 10,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x20000",
"extraData" : "",
"gasLimit" : "0x2fefd8",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
这里对这些字段解释一下:
参数名称 | 描述 |
---|---|
alloc | 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。 |
coinbase | 矿工账号 |
difficulty | 设置当前区块的难度,越大挖矿就越难 |
extraData | 附加信息,可以填你的个性信息 注意需要0x开头 需要你把文字转十六进制 |
gasLimit | 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为这里是私有链,可以填一个大一点的值 |
nonce | nonce就是一个64位随机数,在挖矿时做Hash运算会用到 |
mixhash | 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意它和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。 |
parentHash | 上一个区块的hash,因为这里是创世区块,所以为0 |
timestamp | 设置创世块的时间戳 |
chainId | 指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接。 |
接下来需要把创世区块的信息写入到区块链中。这里,我们先在桌面创建一个文件夹privatechian,然后再在这个文件夹下新建一个目录blockdata,这个blockdata目录用于存放区块的数据,就相当于一个根节点,当我们基于genesis.json生成根节点后,后面再产生新的区块就可以来连接此根节点,从而能进行交易。目录结构如图所示:
接下来进入privatechain,开始初始化操作
cd privatechain
geth --datadir blockdata init genesis.json
这句命令的主体是geth init,表示启动并初始化一个新的创世区块,也就是初始化区块链。命令可以带有选项和参数,其中--datadir选项后面跟一个目录名,这里为 data0,表示指定数据存放目录为 blockdata, genesis.json是init命令的参数。
运行上面的命令,会读取genesis.json文件,将创世区块写入到区块链中。如果看到log信息中含有Successfully wrote genesis state字样,说明初始化成功。
如果你初始化成功了,会发现多了2个目录,geth和keystore目录如下:
其中,geth/chaindata中存放的是区块数据,keystore中存放的是账户数据。
启动私有链节点
初始化完成以后,你就拥有了一条自己的私有链,输入如下命令行,即可启动一个节点。
geth --datadir blockdata --networkid 100 console
这句命令的主体是geth console,表示启动节点并进入交互式JavaScript环境,--datadir blockdata表示存储区块数据的目录,--networkid 100表示私有链的网络ID为100,网络id在连接到其他节点的时候会用到,以太坊公网的网络id是1,为了不与公有链网络冲突,这里我们指定为100。
启动成功以后,我们会看到如下信息:Welcome to the Geth JavaScript console!
到这里就进入了一个交互式的Javascript执行环境,在这里面可以执行Javascript代码。在这个环境里也内置了一些用来操作以太坊的Javascript对象,可以直接使用这些对象。这些对象主要包括:
eth:包含一些跟操作区块链相关的方法
net:包含以下查看p2p网络状态的方法
admin:包含一些与管理节点相关的方法
miner:包含启动&停止挖矿的一些方法
personal:主要包含一些管理账户的方法
txpool:包含一些查看交易内存池的方法
web3:包含了以上对象,还包含一些单位换算的方法
启动节点以后,你可以在这个控制台做很多操作,包括创建账号,挖矿,交易等等。
未完,待续。。。