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
见上面,动态调整使矿机每分钟提交三次
九、收益计算
略