礦機配置
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、解析完後進行下發
- 通信格式參考 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 工具 https://github.com/Bytom/bytom/tree/master/tools/sendbulktx
- 每次發幣都會生成新的找零地址
- bytom input有21個的限制