https://gist.github.com/HAOYUatHZ/a47400bde4a138825faef415387b532cnode
https://service.bitmain.com.cn/supportgit
./bytomd init --chain_id testnet
或 ./bytomd init --chain_id solonet
init
/node
初始化/啓動時能夠加上 -r "your/directory"
指定數據目錄,若目錄不存在則會自動新建該目錄一、初始化節點先建個帳戶、地址,否則就挖到空地址github
二、礦地址支持自定義,包括 非本地錢包地址golang
三、API doc服務器
四、礦池向節點 getwork函數
get-work
獲得的 block_header
是動態壓縮變長的須要進行解析工具
"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
五、解析完後進行下發測試
login
和 礦池主動下發, 沒走 getjob
, 只走 login
和 池主動下發 - 這倆都是用 submit
提交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 }
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
) / 一個難度值得出的ffff3f00
對應 1024,c5a70000
對應 100001六、提交完以後礦池須要作驗證優化
"github.com/bytom/protocol/bc/types"
中 types.BlockHeader{}
的 Hash()
使用別的語言的話參考 https://github.com/Bytom/B3-Mimic/blob/master/docs/blhr_hash_V3.gocpp 的 tensority 邏輯在這裏,並指出瞭如何針對 gpu 進行優化的建議,這樣矩陣乘法可以跑進 2.5 ms, 整個 tensority 大概 6 msgoogle
七、驗證經過後使用 submit-work 接口進行提交
提交的結果 也是 BlockHeader type 的
"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
見上面,動態調整使礦機每分鐘提交三次
九、收益計算
略