之前呢都是用很小的難度值,讓挖礦速度很快,可以輕松的打包交易並且獲得以太幣,但是這樣的話也會讓機器的內存很卡,而且涉及到具體的項目應用時是不想讓他這么快的,所以我們來測試一下難度值跟挖礦速度的關系:
首先在自己創建的鏡像里面跑一個容器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
PS:chainId不為0,否則出現insufficient funds for gas * price + value
解釋一下各個參數的作用:
mixhash |
與nonce配合用於挖礦,由上一個區塊的一部分生成的hash。注意他和nonce的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。. |
nonce |
nonce就是一個64位隨機數,用於挖礦,注意他和mixhash的設置需要滿足以太坊的Yellow paper, 4.3.4. Block Header Validity, (44)章節所描述的條件。 |
difficulty |
設置當前區塊的難度,如果難度過大,cpu挖礦就很難,這里設置較小難度 |
alloc |
用來預置賬號以及賬號的以太幣數量,因為私有鏈挖礦比較容易,所以我們不需要預置有幣的賬號,需要的時候自己創建即可以。 |
coinbase |
礦工的賬號,隨便填 |
timestamp |
設置創世塊的時間戳 |
parentHash |
上一個區塊的hash值,因為是創世塊,所以這個值是0 |
extraData |
附加信息,隨便填,可以填你的個性信息 |
gasLimit |
該值設置對GAS的消耗總量限制,用來限制區塊能包含的交易信息總和,因為我們是私有鏈,所以填最大。 |
進入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 兩百倍 十分鍾兩個
四五分鍾一個區塊是不是差不多了呢? 挖礦速度是可以通過算法自動調整,讓速度保持與我們設置的難度值保持相當,但是后面區塊的難度值都是跟初始塊設置的難度值相關,所以只是由初始塊的難度值決定整個鏈的速度.
這個是黃皮書關於難度值設定的算法