在Centos 7下使用Geth搭建自己的以太坊私有链

在Centos 7下使用Geth搭建自己的以太坊私有链


今天看到课本上的以太坊客户端搭建私有网络进行操作部分,然后我也跟着书上动手试验了一下,发现按照书上的步骤无法成功,然后在网上找资料看大家的做法,不断的试错之后终于是成功了,接下来记录一下我的过程。

试验模拟前提:已经在Centos 7下搭建好了Geth客户端

首先新建一个工作目录

mkdir privatechain

先cd privatechain然后在这个工作目录下新建一个data目录

mkdir data

然后创建我们的创世块文件 genesis.json

vim genesis.json

将以下的配置放入json文件当中,如果大家想了解这些配置的具体含义可以自行查找

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

接下来就是初始化我们的创世区块(记住是在我们privatechain目录下)

geth --datadir ./data init genesis.json

出现下面的信息证明初始化成功

WARN [10-24|10:28:16.569] Sanitizing cache to Go's GC limits       provided=1024 updated=606
INFO [10-24|10:28:16.570] Maximum peer count                       ETH=25 LES=0 total=25
INFO [10-24|10:28:16.571] Allocated cache and file handles         database=/root/privatechain/data/geth/chaindata cache=16 handles=16
INFO [10-24|10:28:16.585] Writing custom genesis block 
INFO [10-24|10:28:16.585] Persisted trie from memory database      nodes=0 size=0.00B time=25.394µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [10-24|10:28:16.586] Successfully wrote genesis state         database=chaindata                              hash=efd937…f20b71
INFO [10-24|10:28:16.586] Allocated cache and file handles         database=/root/privatechain/data/geth/lightchaindata cache=16 handles=16
INFO [10-24|10:28:16.588] Writing custom genesis block 
INFO [10-24|10:28:16.588] Persisted trie from memory database      nodes=0 size=0.00B time=1.808µs  gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B
INFO [10-24|10:28:16.588] Successfully wrote genesis state         database=lightchaindata                              hash=efd937…f20b71

然后开始启动我们的私有链

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

成功启动

Welcome to the Geth JavaScript console!

instance: Geth/v1.8.27-stable-4bcc0a37/linux-amd64/go1.15.14
 modules: admin:1.0 debug:1.0 eth:1.0 ethash:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0

如果在创建创世区块之前已经启动了私有链,在创建了创世区块配置文件后,可以通过以下命令重新进入geth控制台,并使用配置文件更新区块:

geth --datadir data --networkid 10 console

我们进行创建账户,创建账户后会返回遗传hash码,代表的是新建账户的地址
newAccount的参数为账号密码,这里新账户的密码分别是123456和000000

> personal.newAccount("123456")
"0xd4acbaa2c1700536f501da00f0e60159f8b5740a"
> personal.newAccount("000000")
"0x15fce485b4c6bf4444b4657e49584bd0e0a6158e"

查看私链上的账户信息

> eth.accounts
["0xd4acbaa2c1700536f501da00f0e60159f8b5740a", "0x15fce485b4c6bf4444b4657e49584bd0e0a6158e"]

我们再来查看一下账户里面是否有余额

> eth.getBalance(eth.accounts[0])
0
> eth.getBalance(eth.accounts[1])
0

因为我们还没有启动,所以这里两个账号的余额都为0,接下来我们输入命令进行挖矿

>miner.start()

如果我们输入命令之后出现null或者true就说明启动成功,那么接下来我们该如何知道有没有成功呢,我们可以在虚拟机中另起一个终端,找到我们创建的privatechain工作目录,通过下面的命令打开日志查看过程

tail -f geth.log

在Centos 7下使用Geth搭建自己的以太坊私有链
在Centos 7下使用Geth搭建自己的以太坊私有链
第一次启动会先生成所需的 DAG 文件,这个过程有点慢,等进度达到 100% 后,就会开始
如果看到下面的这些信息证明我们成功挖到了
在Centos 7下使用Geth搭建自己的以太坊私有链
这时候我们需要miner.stop()停止挖矿来查看一下账户余额
在Centos 7下使用Geth搭建自己的以太坊私有链
可以清楚的看到我们的第一个账户里面也是有着10个以太币
挖到一个区块会奖励5个以太币,挖矿所得的奖励会进入矿工的账户,这个账户叫做 coinbase,默认情况下 coinbase 是本地账户中的第一个账户。
在Centos 7下使用Geth搭建自己的以太坊私有链
如果我们想让第二个账户也有以太币的话,通过miner.setEtherbase(eth.accounts[1])命令直接将coinbase设置为第二个账户
在Centos 7下使用Geth搭建自己的以太坊私有链
然后再进行miner.start()启动即可。

上一篇:以太坊搭建私链


下一篇:Flask-SQLAlchemy 初始化源码和蓝图blueprint源码小分析