以太坊开发(1):如何使用geth搭建以太坊私有链

geth是go-ethereum的简称,就是这个以太坊客户端是go语言编写的,除此之外还有Java、Python、Ruby、Js,就不一一列举了。
本文针对的是mac系统,其他开发环境参考github的wiki:https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum

环境搭建

1.首先需要安装Homebrew,如果安装了请忽略,点击安装Homebrew
2.执行下面命令安装geth:

brew tap ethereum/ethereum
brew install ethereum
## 如果需要安装版本添加--devel 参数
## brew install ethereum --devel

3.最后使用命令geth --help是否安装成功

创建创世块

启动私有链之前,我们需要创建创世区块,创建文件genesis.json,填写创世区块信息:

{

   "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "coinbase" : "0x0000000000000000000000000000000000000000",
    "difficulty" : "0x40000",
    "extraData" : "",
    "gasLimit" : "0xffffffff",
    "nonce" : "0x0000000000000042",
    "mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp" : "0x00",
    "alloc": { }

}

参数名 描述
chainId 指定了独立的区块链网络 ID。网络 ID 在连接到其他节点的时候会用到,以太坊公网的网络 ID 是 1,为了不与公有链网络冲突,运行私有链节点的时候要指定自己的网络 ID。不同 ID 网络的节点无法相互连接。
HomesteadBlock 当设置为0表示使用Homestead发布该链。
nonce nonce就是一个64位随机数,用于挖矿,注意它和mixhash的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
mixhash 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意它和nonce的设置需要满足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty 设置设置当前区块的难度,越大挖矿就越难。
alloc 用来预置账号以及账号的以太币数量。
coinbase 矿工账号
timestamp 设置创世块的时间戳
parentHash 上一个区块的hash,创世块就为0
extraData 附加信息
gasLimit 该值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和

然后执行下面命令初始化创世块:

## --datadir 表示当前区块链网络数据存放的位置
geth --datadir "./blockData" init genesis.json

这时候会发现指定的目录下多了geth和keystore两个文件夹:

  • geth保存的该链上的区块数据
  • keystore保存的该链上的用户信息

启动私有链

## --datadir 表示当前区块链网络数据存放的位置
## --nodiscover 表示该链禁止被其他节点发现
## console 2>>geth.log 表示将日志输出到geth.log,打开另外一个控制台执行tail -f 查看日志
geth --datadir "./blockData" --nodiscover console 2>>geth.log

启动成功出现如下界面:


打开geth.log可以查看到启动日志:

以太坊开发(1):如何使用geth搭建以太坊私有链_第1张图片

另外还有一种参数较为复杂的启动方式,这种的作用是启动rpc通信,后续会讲解rpc的使用场景。

geth --identity "secbro etherum" --rpc --rpccorsdomain "*" --datadir "./blockData" --port "30303" --rpcapi "db,eth,net,web3" --networkid 95518 console 2>>geth.log 

这里顺便介绍一下geth的一些参数

参数名 描述
identity 区块链的标示,用于标示目前网络的名字
init 指定创世块文件的位置,并创建创世块
datadir 当前区块数据存放的位置
port 网络监听端口,默认30303
rpc 启动rpc通信
rpcapi 设置允许连接rpc的客户端,一般为db,eth,net,web3
rpccorsdomain 指定什么url能连接到你的节点执行rpc定制端任务,如果输入的是“*”,则任何url都可以连接到你的rpc实例。
rpcaddr 连接rpc的地址,默认为localhost
rpcport 连接rpc的端口,默认为8545
networkid 设置当前区块链的网络ID,用于区分不同的网络,是一个数字
console 启动命令行模式,可以在Geth中执行命令
  • 下一讲将讲解在以太坊私有链上的基本操作

你可能感兴趣的:(以太坊开发(1):如何使用geth搭建以太坊私有链)