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
启动成功出现如下界面:
![](https://img.haomeiwen.com/i8898994/0a2ca67d71e83a82.png)
打开geth.log可以查看到启动日志:
![](https://img.haomeiwen.com/i8898994/2a41fe5952a653c0.png)
另外还有一种参数较为复杂的启动方式,这种的作用是启动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中执行命令 |
- 下一讲将讲解在以太坊私有链上的基本操作
网友评论
启动挖矿 miner.start(1);admin.sleepBlocks(1);miner.stop();
一直卡在 Commit new mining work number=1 txs=0 uncles=0 elapsed=252.175µs 是什么原因呢 ?