Bytom礦池接入協議指南

礦機配置

https://gist.github.com/HAOYUatHZ/a47400bde4a138825faef415387b532c

固件升級

https://service.bitmain.com.cn/support

  • 兩個都要刷,先後順序沒關係
  • update_1000.tar.gz 升級時間較長,升級期間請勿斷電

配置節點

  • 測試時可以考慮切換到 testnet 分支降低難度使cpu挖礦也能出塊,./bytomd init --chain_id testnet./bytomd init --chain_id solonet
  • init/node 初始化/啓動時可以加上 -r "your/directory" 指定數據目錄,若目錄不存在則會自動新建該目錄

流程

1、初始化節點先建個賬戶、地址,不然就挖到空地址

2、礦地址支持自定義,包括 非本地錢包地址

3、API doc

4、礦池向節點 getwork

get-work 得到的 block_header 是動態壓縮變長的需要進行解析

  • 使用 golang 的話可以利用 "github.com/bytom/protocol/bc/types"block_header.go 中的函數 UnmarshalText
  • 使用別的語言的話參考 "github.com/bytom/protocol/bc/types"block.go 中的函數 UnmarshalText, readFrom, ReadVarintXXX. ReadVarintXXX 需要參考 go函數 binary.ReadUvarint

5、解析完後進行下發

    var Diff1 = StringToBig("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")

    func GetTargetHex(diff int64) string {
        padded := make([]byte, 32)
        diffBuff := new(big.Int).Div(Diff1, big.NewInt(diff)).Bytes()
        copy(padded[32-len(diffBuff):], diffBuff)
        buff := padded[0:4]
        targetHex := hex.EncodeToString(Reverse(buff))
        return targetHex
     }
  • 礦池下發的targethex是拿 標準難度(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF) / 一個難度值得出的
  • 這個值叫做礦池難度 一般會動態調整 保證礦機提交 share 的頻率是穩定的 比如1分鐘提交三次 提交得快了就會增加這個值 慢了就會降低這個值
  • target 是 16 進制的難度,1, 1024, …..等等,和前導 0 的個數有關,動態調整用來保證礦機每分鐘至少提交三次,用來計算礦機算力以及防止礦機算力作弊 ffff3f00 對應 1024,c5a70000 對應 100001

6、提交完之後礦池需要做驗證

  • header_hash 使用 golang 的話可以利用 "github.com/bytom/protocol/bc/types"types.BlockHeader{}Hash() 使用別的語言的話參考 https://github.com/Bytom/B3-Mimic/blob/master/docs/blhr_hash_V3.go
  • 然後就要開始用 tensority 算 hash 結果 很遺憾現在 go 版本、cpp_openblas 版本、cpp_simd 版本都達不到理想的驗證效果, 如果想做一個可用的礦池目前有必要上 gpu, 可以考慮 n 卡 1050,或者阿里雲服務器 P4

cpp 的 tensority 邏輯在這裏,並指出瞭如何針對 gpu 進行優化的建議,這樣矩陣乘法能夠跑進 2.5 ms, 整個 tensority 大概 6 ms

  • init matlist 有開銷,seed 其實 256 個區塊才改變一次, 遇到新的 seed 每次 gpu tensority 可能需要 100 ms,但做了 cache 的話 init matlist 可以忽略,可以認爲每次 tensority 只需要不超過 6 ms
  • 用 golang 可以 cgo 調用 c 代碼,參考 https://github.com/Bytom/bytom/blob/dev-ts-simd/mining/tensority/algorithm.go
  • 改好 gpu 版本後可以參照這個進行調用

7、驗證通過後使用 submit-work 接口進行提交

提交的結果 也是 BlockHeader type 的

  • 使用 golang 的話可以利用 "github.com/bytom/protocol/bc/types"block_header.go 中的函數 MmarshalText
  • 使用別的語言的話參考 "github.com/bytom/protocol/bc/types"block.go 中的函數 MarshalText, WriteTo, WriteVarintXXX. WriteVarintXXX 需要參考 go函數 binary.PutUvarint

8、retarget

見上面,動態調整使礦機每分鐘提交三次

9、收益計算

批量轉賬

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章