比原主網正式上線了,很多人學習和研究比原,但苦於在主網環境不敢實際操作怕帶來損失,在單機solo環境又無法獲得測試幣無法進行測試。本次主要介紹如何在solonet獲得測試幣並且測試。
在單機環境下,機器的算力不足無法達到tensority設定的難度要求,所以需要研究相關的方法並重新設定。
0x01 難度調整研究
檢視bytom/consensus/difficulty/difficulty.go
這個函式中,最終比較的是使用ai友好演算法生成的隨機雜湊tensority.aihash.hash(hash, seed)使用hashtobig()轉化為一個大數, 與預先設定好的一個難度的大數比較大小,這個大數由難度係數bits透過compacttobig(bits)函式得出。
即這個函式最終比較hashtobig(comparehash) 和compacttobig(bits)的大小,小於預定難度即工作量證明透過.
使用難度係數bits控制生成難度的大數的演算法簡介如下:
就是使用類似於ieee754浮點數科學計數法而使用的二進位制的大數科學計數法,即一個很大的數轉化為 一個小數乘以10的n次方的二進位制表示,最後又把表示轉化為十進位制儲存。
0x02 修改原始碼
在使用單機solonet測試網路時很難透過獲得測試幣,於是考慮在不影響整個程式功能的情況下嘗試做小的修改可以在單機跑起來,考慮修改難度係數bits,該係數在bytom/config/genesis.go檔案中,初始值bits:2161727821137910632。
為了更改bits,對程式碼bytom/consensus/difficulty/difficulty.go做如下修改:
這麼做的目的是為了得到適合本機的難度係數。
0x03 編譯執行
如果你已經執行過主網錢包,千萬記住備份!備份!備份!
1、改完程式碼儲存修改檔案,編譯bytom/cmd/bytomd/main.go 為bytomd.exe 清除系統原來在user/administrator/appdata/roaming中檔案(千萬記住備份主網錢包)。
2、執行bytomd init --chain_id solonet 和bytomd node --minging命令,在dashboard建立賬戶,幾秒之後在命令列視窗會看見系統的執行資訊,接著會得到類似下面的資訊:
資訊顯示雖然挖礦失敗了,但是透過運算我們可以得到很多適合本機難度的bits,每一個time="2018-05-18t11:57:36+08:00"level=infomsg="false:bits=2305843009225816433" 中的bits都適合本機難度,這個bits上面對應的level=info msg="hashtobig comparehash=後面這個值越大,難度係數就越低。
3、挑選一個bits,複製下來bits的值,在原始碼中bytom/config/genesis.go檔案中,初始值bits: 2161727821137910632,修改為你自己的難度係數。 比如修改為bits:2305843009228571441。
4、再次執行步驟1和步驟2.現在你應該可以在單機solo模式下獲得測試幣了。
0x04 其他的一些引數調整
另外bytom/consensus/general.go 檔案中也會有一些引數:
這些欄位修改也會影響測試幣的產量速度,比如basesubsidy = uint64(41250000000)指的是每塊的產量412.5個btm,可以改大一點。 coinbasependingblocknumber = uint64(100)交易需要的確認數可以改小一些。
具體請自行研究。這一步不是必須的。
以上操作是針對使用命令列方式啟動比原節點進行修改的,針對錢包桌面版的原理基本相同,需要使用錢包桌面版的請自行研究做相應替換。
感謝社羣使用者:leekailklk