Bytom礦池接入協議指南

礦機配置

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

固件升級

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

  • 兩個都要刷,前後順序不要緊
  • update_1000.tar.gz 升級時間較長,升級期間請勿斷電

配置節點

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

流程

一、初始化節點先建個帳戶、地址,否則就挖到空地址github

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

三、API doc服務器

四、礦池向節點 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

五、解析完後進行下發測試

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

六、提交完以後礦池須要作驗證優化

  • 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 msgoogle

  • 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 版本後能夠參照這個進行調用

七、驗證經過後使用 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

八、retarget

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

九、收益計算

批量轉帳

相關文章
相關標籤/搜索