搭建以太坊私链

初始化以太坊节点

geth -datadir /data/eth/ init /usr/local/eth/genesis.json

genesis.json:

{
  "config": {
    "chainId": 1000,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "nonce": "0x0000000000000061",
  "timestamp": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "gasLimit": "0x8000000",
  "difficulty": "0x100",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "coinbase": "0x3333333333333333333333333333333333333333",
  "alloc": {}
}
1
2
3
4
5
6
7
8
9
10
chainId: 以太坊主网chainId为0,私链自己修改为一个任意Id。
mixhash: 与nonce配合用于挖矿,由上一个区块的一部分生成的hash。注意和nonce的设置需要满足以太坊的黄皮书, 4.3.4. Block Header Validity, (44)章节所描述的条件。
nonce: nonce就是一个64位随机数,用于挖矿,注意他和mixhash的设置需要满足以太坊的黄皮书,4.3.4. Block Header Validity, (44)章节所描述的条件。
difficulty: 设置当前区块的难度,如果难度过大,cpu挖矿就很难,这里设置较小难度
alloc: 用来预置账号以及账号的以太币数量,因为私有链挖矿比较容易,所以我们不需要预置有币的账号,需要的时候自己创建即可以。
coinbase: 矿工的账号,随便填
timestamp: 设置创世块的时间戳
parentHash: 上一个区块的hash值,因为是创世块,所以这个值是0
extraData: 附加信息,随便填,可以填你的个性信息
gasLimit: 值设置对GAS的消耗总量限制,用来限制区块能包含的交易信息总和,因为我们是私有链,所以填最大。

启动私链的以太坊节点

1
geth -datadir /data/eth/ --networkid 1000 console

以太坊节点的主要操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   admin
eth
personal
miner

> personal.listAccounts
[]
> personal.newAccount("qianrushi.org")
"0xcce01f2d1e7ab5ba8d9e5f68cf81b49d145e97fe"
> personal.listAccounts
["0xcce01f2d1e7ab5ba8d9e5f68cf81b49d145e97fe"]
> personal.newAccount("embeded.org")
"0x27643bec775e242fbc06c0457f781d62249f012c"
> personal.listAccounts
["0xcce01f2d1e7ab5ba8d9e5f68cf81b49d145e97fe", "0x27643bec775e242fbc06c0457f781d62249f012c"]
> personal.unlockAccount("0xcce01f2d1e7ab5ba8d9e5f68cf81b49d145e97fe")
Unlock account 0xcce01f2d1e7ab5ba8d9e5f68cf81b49d145e97fe
Passphrase:
true

当前区块信息

1
2
> eth.blockNumber
> eth.getBlock( eth.blockNumber )

账户余额

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