之前呢都是用很小的难度值,让挖矿速度很快,可以轻松的打包交易并且获得以太币,但是这样的话也会让机器的内存很卡,而且涉及到具体的项目应用时是不想让他这么快的,所以我们来测试一下难度值跟挖矿速度的关系:
首先在自己创建的镜像里面跑一个容器node2:
docker run -it --name node2 daocloud.io/ubuntu/node
创建目录,并写好创世块
mkdir test && cd test
vim genesis.json
{
"config": {
"chainId": 12345,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x77fff88",
"extraData" : "0x123456",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": { }
}
初始化创始块
geth --datadir ./data/01 init genesis.json
进入geth
geth --identity "haha" --datadir ./data/01 --networkid 12345 --rpcapi "db,eth,net,web3" --port 2221 --rpcport 3331 console
创建账户,挖矿并记录挖矿的时间和区块的高度
personal.newAccount("123")
miner.start()
miner.stop()
每次更改创始块只需要把容器停掉然后重新创建就好了。
docker stop node2 && docker rm node2
接下来是难度值的更改:
十六进制 “0x99999” 对应的十进制 629145还是挺快的,半分钟大概30个,就是一秒一个
DDDDDDDD 3722304989 挖不到 放大了近四万倍 等了三分钟没挖到
176ffe890 6291450000 放大一万倍,五分钟没挖到
好吧,我放弃了,设置的小一点
2ffffd 3145725 五倍 一分钟五到十个之间个
bffff4 12582900 二十倍 六分钟挖了八个
12bffed4 314572500 五百倍 15分钟没有一个
77fff88 125829000 两百倍 十分钟两个
四五分钟一个区块是不是差不多了呢? 挖矿速度是可以通过算法自动调整,让速度保持与我们设置的难度值保持相当,但是后面区块的难度值都是跟初始块设置的难度值相关,所以只是由初始块的难度值决定整个链的速度.
这个是黄皮书关于难度值设定的算法