Skip to content
This repository has been archived by the owner on Nov 2, 2020. It is now read-only.

搭建私链

hulk edited this page Jun 27, 2018 · 2 revisions

编译

在默认的共识代码里面,共识大小(maxValidatorSize)设置为21,在本地验证的时候可能不会很方便。建议修改共识大小后进行验证(通常为5,共识大小为3会导致 3*2/3+1=3)。

代码目录为 /consensus/dpos/dpos.go#L36

maxValidatorSize = 21 => 5

修改完成后编译即可

> make geth

账号准备

启动链时,在创世快中需要预先定义好创世的共识节点的地址,这些地址必须是真实存在的,否则将无法打块,无法选举。 因此需要预先生成一些账号。按照以太坊正常的模式进行生成即可。生成完成后删除datadir中的geth目录,保留keystore用于dpos。

假设本次计划在一台机器上启动5个节点的链,规划的节点目录分别为data1-data5

> geth --datadir ./data1 console
> personal.newAccount('meitu')
"0xe1ecd0e48c0262ae407a8873a86d0899c9a2b9d8"

在每个创世节点上都需要账号。得到5个账号 执行完成后删除已经生成的创世块信息

> rm -rf ./data*/geth

创世块文件准备

默认创世块配置文件

修改配置文件dpos_test_genesis.json中的validators为您的创世节点地址。 例如:

{
    "config": {
        "chainId": 9999,
        "eip155Block": 0,
        "eip158Block": 0,
        "byzantiumBlock":0,
        "dpos":{
            "validators":[
                "0xcb19c0d1387c1c19d9e6cfe2eca26754c4c146b0",
                "0xed3aa27da70ae06ef1374daa7576b14aa50de276",
                "0x83842619766ee0252a24123c3be30fd73be89c4c",
                "0x08fd22df0c03df11d79254409f36bc91405fc96a",
                "0xe1ecd0e48c0262ae407a8873a86d0899c9a2b9d8"
            ]
        }
    },
    "nonce": "0x0000000000000042",
    "difficulty": "0x020000",
    "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "coinbase": "0x0000000000000000000000000000000000000000",
    "timestamp": "0x00",
    "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
    "gasLimit": "0x500000",
    "alloc": {}
}

初始化创世块

所有创世节点都需要执行,创世块的json所有节点保持一致

> geth --datadir ./data1 init ./dpos_test_genesis.json

启动链

第一个节点

> geth  --datadir ./data1  --ipcdisable --port 61910 --rpcport 8200  console

其他节点,同一台机器请自行更换端口以及存储目录

> geth  --datadir ./data2  --ipcdisable --port 61911 --rpcport 8201 --bootnodes "enode://a54c54766ec1c36630f9fd43131e99ef6d46bbfe285c2d7e8fa0bea23852feb13b856bbaf404d16415aea1a12e6a1ecab8f45ce3a7cafa182f9cbc61469be03d@127.0.0.1:61910"   console

这里为了加快节点发现,增加了bootnode(修改为你第一个启动节点的地址)

所有节点启动完成后,确认所有节点都有validator

> eth.validator

每个节点都有可以通信的节点

> admin.peers

挖矿

美图以太坊dpos实现默认矿工地址也是account的第0个。但是与以太坊的区别是,以太坊使用coinbase作为矿工地址,我们使用validator作为矿工地址,coinbase保留了下来仅作为奖励收取地址。需要修改请调用

> miner.setValidator(eth.accounts[0])

开始挖矿

> personal.unlockAccount(eth.validator,'meitu',0)
> miner.start(1)

INFO [06-27|16:47:35] Transaction pool price threshold updated price=18000000000
INFO [06-27|16:47:35] Starting mining operation 
null
> INFO [06-27|16:47:40] Come to new epoch                        prevEpoch=17708 nextEpoch=17709
INFO [06-27|16:47:40] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=3.292ms mgasps=0.000 number=1 hash=1254ee…e19699
INFO [06-27|16:47:50] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=1.737ms mgasps=0.000 number=2 hash=6be0bd…e82c4f
INFO [06-27|16:48:00] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=1.336ms mgasps=0.000 number=3 hash=752902…89bfe6
INFO [06-27|16:48:10] Commit new mining work                   number=4 txs=0 uncles=0 elapsed=427.824µs
INFO [06-27|16:48:10]  mined potential block                  number=4 hash=6fd96a…423516
INFO [06-27|16:48:10] Successfully sealed new block            number=4 hash=6fd96a…423516
INFO [06-27|16:48:20] Imported new chain segment               blocks=1 txs=0 mgas=0.000 elapsed=1.319ms   mgasps=0.000 number=5 hash=9e57c6…3c7bca
Clone this wiki locally