Bytom矿池接入协议指南

栏目: Go · 发布时间: 7年前

内容简介:Github地址:Gitee地址:

比原项目仓库:

Github地址: https://github.com/Bytom/bytom

Gitee地址: https://gitee.com/BytomBlockchain/bytom

矿机配置

固件升级

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、解析完后进行下发

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、收益计算

批量转账


以上所述就是小编给大家介绍的《Bytom矿池接入协议指南》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Designing Data-Intensive Applications

Designing Data-Intensive Applications

Martin Kleppmann / O'Reilly Media / 2017-4-2 / USD 44.99

Data is at the center of many challenges in system design today. Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, w......一起来看看 《Designing Data-Intensive Applications》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具