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

见上面,动态调整使矿机每分钟提交三次

九、收益计算

批量转帐

相关文章
相关标签/搜索