Bytom矿池接入协议指南
比原项目仓库:
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、解析完后进行下发
- 通信格式参考 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 工具 https://github.com/Bytom/bytom/tree/master/tools/sendbulktx
- 每次发币都会生成新的找零地址
- bytom input有21个的限制

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
CXF与JDK或者JAVA的版本兼容问题
我的PC安装了java10我需要使用eclipse进行web service的发布,如果选择最新版本的cxf的话:我们看到cxf的3.2.6版本发布于2018年8月而java10本身发布于2018年3月。你会误以为cxf3.2.6版本完美的基于java10?我们看一下配置好的的cxf我们在cmd执行cxf的bin中的命令endorsed文件夹如何如何,百度一下发现,问题的根源还是java8 和以后版本的java有很大差异,cxf无法完美兼容。查看cxf3.2.6的release note发现http://cxf.apache.org/cxf-326-release-notes.html人家早在发布的时候,就说明了:3.2.6版本的cxf只支持java8。所以,既然一定要用cxf发布web service,老老实实装回java 8吧。
- 下一篇
Java 多线程 之 suspend挂起 线程实例
http://www.verejava.com/?id=16992945731073 package com.suspend.resume; /** 题目: 人们在火车站的售票窗口排队买火车票 1. 北京西站开门 2. 打开售票窗口 3. 北京西站有10张去长沙的票 4. 打开2个售票窗口, 5 假设每个售票窗口每隔1秒钟买完一张票 1. 根据 名词 找类 人们(Person), 火车站(Station),火车票(Ticket) , 售票窗口e 是火车站的线程 */ import java.util.*; public class TestTrain { public static void main(String[] args) { //火车西站开门 Station station = new Station("火车西站"); //开窗口 //Thread win1=station.openWindow("普通窗口"); Thread win2 = station.openWindow("学生窗口"); //窗口1 开始售票 //设置线程优先级 setPriority() //win...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 2048小游戏-低调大师作品
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2全家桶,快速入门学习开发网站教程