您好,登录后才能下订单哦!
这篇文章主要讲解了“Bytom矿池接入协议的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Bytom矿池接入协议的方法是什么”吧!
两个都要刷,先后顺序没关系
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、解析完后进行下发
通信格式参考 https://github.com/Bytom/B3-Mimic/blob/master/docs/STRATUM-BTM.md - 收到任务有 login
和 矿池主动下发, 没走 getjob
, 只走 login
和 池主动下发 - 这俩都是用 submit
提交
逻辑参考 https://github.com/Bytom/B3-Mimic/blob/master/main.go - 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 }
矿池下发的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、收益计算
略
主网地址 bm 开头,长度普通地址42,多签62
每次发币都会生成新的找零地址
bytom input有21个的限制
感谢各位的阅读,以上就是“Bytom矿池接入协议的方法是什么”的内容了,经过本文的学习后,相信大家对Bytom矿池接入协议的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。