Bytom矿池接入协议指南

简介: 矿机配置 https://gist.github.com/HAOYUatHZ/a47400bde4a138825faef415387b532c固件升级 https://shop.bitmain.com.

比原项目仓库:

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

批量转账

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
5月前
|
供应链 区块链 UED
跨链协议中Cosmos IBC、Polkadot/XCM、Celer Network的区别以及用途
跨链协议中Cosmos IBC、Polkadot/XCM、Celer Network的区别以及用途
52 6
|
网络虚拟化
ensp :trunk 与 access 联手实现主机之间的通信与隔离
ensp :trunk 与 access 联手实现主机之间的通信与隔离
323 0
ensp :trunk 与 access 联手实现主机之间的通信与隔离
|
物联网 数据安全/隐私保护 开发者
LoRaWAN协议介绍与调试|学习笔记
快速学习LoRaWAN协议介绍与调试
412 0
LoRaWAN协议介绍与调试|学习笔记
|
编解码 Linux C语言
freeswitch媒体协商的三种配置方案
概述 在企业级VOIP通信中,语音质量是重要的关注点,而语音质量的好坏和媒体编解码有重要的关系。 freeswitch作为一款免费开源的软交换平台,支持多种不同的编解码格式,具体详情本文不多描述。 而不同的终端也会支持多种不同的编解码格式,在呼叫创建过程中就需要编解码的协商。 编解码的协商过程是很容易让人困惑的,即使是对SIP和SDP很熟悉的人也一样。 那么,freeswitch在软交换的过程中,是如何控制A/B路之间媒体的协商过程?如何配置出我们想要的协商方案?不同方案都有什么优缺点? 本文主要描述freeswitch在媒体协商过程中的三种常见方案。 文章中有较多的配置和日志打印信息可以略过
|
存储 算法 区块链
HashFast 开源 Bitcoin ASIC 接口协议
今天,HashFast公司声明了他们正在开源他们用于控制比特币挖掘的专用集成电路的接口协议。这个设计的开源可以让大家很好的理解他们的比特币挖矿模块是怎么操作的,并且还将给驱动开发人员提供一个平台。更多用户在驱动开发方面的合作可以带来更加丰富的选择项设置,和给HashFast用户们带来更好的用户体验。
279 0
HashFast 开源 Bitcoin ASIC 接口协议
|
缓存 监控 JavaScript
ETH geth主网钱包linux安装(以太坊是一个用于分散式应用程序的全球性开源平台)
在以太坊上,您可以编写代码来控制数字值,完全按照编程方式运行并且可以在世界任何地方访问
829 0
|
缓存 监控 JavaScript
ETH geth私链搭建linux安装(以太坊是一个用于分散式应用程序的全球性开源平台)
在以太坊上,您可以编写代码来控制数字值,完全按照编程方式运行并且可以在世界任何地方访问
1347 0
|
缓存 监控 JavaScript
ETC geth主网钱包linux安装(构建不可阻挡的应用程序)
以太坊经典是执行智能合约的去中心化计算平台。应用程序完全按照编程方式运行,没有审查,停机或第三方干扰的可能性。 以太坊经典(Ethereum Classic)是一个分布式网络,由区块链分类账,本机加密货币(ETC)和强大的链上应用程序和服务生态系统组成。
833 0