链闻 ChainNews:

本文从代码层面预测了以太坊私链的挖矿速度与难度值的关系。最终发现:后面区块的难度值都是跟初始块设置的难度值相关,所以只是由初始块的难度值决定整个链的速度 。

来源 | DDFFR 的博客
作者 | 不折腾就闹心

之前呢都是用很小的难度值,让挖矿速度很快,可以轻松的打包交易并且获得以太币,但是这样的话也会让机器的内存很卡,而且涉及到具体的项目应用时是不想让他这么快的,所以我们来测试一下难度值跟挖矿速度的关系:

首先在自己创建的镜像里面跑一个容器 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 放大一万倍,五分钟没挖到
好吧,我放弃了,设置的小一点

  • 5ffffa 6291450 放大十倍 一分钟五个
  • 2ffffd 3145725 五倍 一分钟五到十个之间个
  • bffff4 12582900 二十倍 六分钟挖了八个
  • 3bfffc4 62914500 一百倍 六分钟两个
  • 12bffed4 314572500 五百倍 15 分钟没有一个
  • 77fff88 125829000 两百倍 十分钟两个

四五分钟一个区块是不是差不多了呢? 挖矿速度是可以通过算法自动调整,让速度保持与我们设置的难度值保持相当,但是后面区块的难度值都是跟初始块设置的难度值相关,所以只是由初始块的难度值决定整个链的速度 。

这个是黄皮书关于难度值设定的算法。

20170811113956927.png

更多精彩内容,关注链闻 ChainNews 公众号(id:chainnewscom),或者来微博 @ 链闻 ChainNews与我们互动!转载请注明版权和原文链接!

来源链接:blog.csdn.net