Bytom矿池接入协议指南

矿机配置

固件升级

配置节点

  • 测试时可以考虑切换到 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、收益计算

批量转账

原文地址:https://www.cnblogs.com/bytom/p/9596035.html

时间: 2024-07-31 14:38:25

Bytom矿池接入协议指南的相关文章

第29集:矿池怎么挖矿?

随着参与挖矿的人数越来越多,比特币全网的算力不断上涨,单个设备或少量的算力都很难再挖到比特币.这时候,矿池诞生了. 矿池突破地理位置的限制,将分散在全球的矿工及矿场的算力进行联结,一起挖矿.矿池负责信息打包,接入进来的矿场负责竞争记账权.由于集合了很多矿工的算力,所以矿池的算力占比大,挖到比特币的概率更高.矿池挖矿所产生的比特币奖励会按照每个矿工贡献算力的占比进行分配.相较单独挖矿,加入矿池可以获得更加稳定的收益. 目前全球算力较大的矿池有鱼池(F2Pool).蚁池(AntPool).币网(BW

区块链教程btcpool矿池源码分析StratumServer模块解析

兄弟连区块链教程btcpool矿池源码分析StratumServer模块解析 核心机制总结 接收的job延迟超过60秒将丢弃 如果job中prevHash与本地job中prevHash不同,即为已产生新块,job中isClean状态将置为true????* true即要求矿机立即切换job 三种情况下将向矿机下发新job:???? 收到新高度的job???? 过去一个job为新高度且为空块job,且最新job为非空块job????* 达到预定的时间间隔30秒 最近一次下发job的时间将写入文件(

兄弟连区块链教程btcpool矿池源码分析核心机制总结及优化思考

btcpool矿池-核心机制总结及优化思考 核心机制总结 ①gbtmaker 监听Bitcoind ZMQ中BITCOIND_ZMQ_HASHBLOCK消息,一有新块产生,将立即向kafka发送新Gbt 另默认每5秒间隔(可从配置文件中指定)主动RPC请求Bitcoind,获取Gbt发送给kafka Gbt消息大小约2M,含交易列表 ②jobmaker 同时监听kafka KAFKA_TOPIC_RAWGBT和KAFKA_TOPIC_NMC_AUXBLOCK,以支持混合挖矿 接收的Gbt消息,如

火币矿池参选EOS超级节点, 不只为分一杯羹

4月24日下午,火币对外发布公告称:火币矿池宣布竞选EOS超级节点,并将成立EOS专区,为EOS提供技术研发助力,为EOS生态提供更多的应用场景.火币矿池将举办EOS开发者大会,还将联合DoraHacks共同举办黑客马拉松.目前,火币全球生态基金已经成立EOS生态专项基金,深度参与孵化基于EOS开发的项目,给予资金.资源.技术.运营等全方位的支持. 火币的加入,让EOS超级节点竞选这潭浑水越发的浑浊. 一.EOS超级节点竞选现状 据4月19日更新的最新候选者周报显示:目前全球有70个达到最低标准

矿场和矿池

随着比特币的价值被越来越多的人认可,挖矿投入的人力.物力不断上升,挖矿行为从早期的单兵作战迅速演化为专业化.规模化的运作,挖矿地点也从"自家后院"转移到"专业 矿场". 参与挖矿的模式也分成了两类,除了掌握较多财力和资源的矿工可以自建矿场,继续单独挖矿外,更多的矿工选择了加入"矿池",采取联合挖矿的模式. 单独挖矿不需要和别人分享你的收益,但是随着全网算力的不断上升,单独挖矿成功打包区块的概率在显著降低--尤其是在算力不够大的情况下.而加入一个矿

区块链矿池的分配模式

作者介绍 JouyPub 技术经理 某互联网公司 产生背景   当下各种以挖矿来获得收益的币种,随着时间的推移,挖矿的难度也越来越大,如果仍然靠单机去挖矿,几乎已经不可能了,所以就有矿池.例如按照当前的算力(20EH/s),一个20TH/s的矿机,挖到一个区块的时间为19年,也就是说如果单机挖矿需要19年才能获得奖励,这其中还不包括机器损耗.难度增大等因素,所以只有大家加入到一个矿池,共享自己的算力,爆块后,根据不同的分配模式,奖励再分配给个人.这种挖矿模式可以让个人的收益更加稳定,对于矿池而言

兄弟连区块链教程open-ethereum-pool矿池源码分析unlocker模块

兄弟连区块链教程open-ethereum-pool以太坊矿池源码分析unlocker模块open-ethereum-pool以太坊矿池-unlocker模块 unlocker模块配置 json"unlocker": {????"enabled": false,????"poolFee": 1.0,????"poolFeeAddress": "",????"donate": true,?

兄弟连区块链教程open-ethereum-pool矿池源码分析policy模块

open-ethereum-pooleth矿池-policy模块 PolicyServer定义 type PolicyServer struct { sync.RWMutex statsMu sync.Mutex config *Config stats map[string]*Stats banChannel chan string startedAt int64 grace int64 timeout int64 blacklist []string whitelist []string s

兄弟连区块链教程open-ethereum-pool矿池源码分析payouts模块

open-ethereum-pooleth矿池-payouts模块 PayoutsProcessor定义 type PayoutsProcessor struct { config *PayoutsConfig backend *storage.RedisClient rpc *rpc.RPCClient halt bool lastFail error } GetPendingPayments原理 func (r *RedisClient) GetPendingPayments() []*Pe