您好,登錄后才能下訂單哦!
這篇文章主要講解了“Bytom礦池接入協議的方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Bytom礦池接入協議的方法是什么”吧!
兩個都要刷,先后順序沒關系
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、解析完后進行下發
通信格式參考 https://github.com/Bytom/B3-Mimic/blob/master/docs/STRATUM-BTM.md - 收到任務有 login
和 礦池主動下發, 沒走 getjob
, 只走 login
和 池主動下發 - 這倆都是用 submit
提交
邏輯參考 https://github.com/Bytom/B3-Mimic/blob/master/main.go - Version
, Height
, Timestamp
, Bits
要轉小端 - 關于 target
+ btc.com 分享了一段 antpool 的代碼 ~, 并說 target
用以對 bits
對應的 difficulty
放松難度,用來使礦機在單位時間內能夠有提交,然后礦池再驗證~
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、收益計算
略
主網地址 bm 開頭,長度普通地址42,多簽62
每次發幣都會生成新的找零地址
bytom input有21個的限制
感謝各位的閱讀,以上就是“Bytom礦池接入協議的方法是什么”的內容了,經過本文的學習后,相信大家對Bytom礦池接入協議的方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。