Bytom矿池接入协议指南
矿机配置
https://gist.github.com/HAOYUatHZ/a47400bde4a138825faef415387b532c
固件升级
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个的限制
Bytom矿池接入协议指南的更多相关文章
- NOMP矿池搭建
本文将以dash(x11)和Raven(x16rv2)为例子来说明多算法矿池的搭建过程. 1 环境准备 1.1 准备Ubuntu 准备虚拟机或物理机,操作系统为Ubuntu 16.04 1.2 安装必 ...
- 【iOS开发必备指南合集】申请企业级IDP、真机调试、游戏接入GameCenter 指南(实现仿官方的成就提示)、游戏接入OpenFeint指南;
本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-c ...
- Python实现矿池
自建P2POOL矿池详细教程(高级篇)http://8btc.com/article-1804-1.html p2pool比特币矿池教程综合篇(包含linux矿池教程)https://www.cybt ...
- YIIMP矿池搭建
本文将以Verge(x17)和Raven(x16rv2)为例子来说明多算法矿池YIIMP的搭建过程. 1 环境准备 1.1 准备Ubuntu 准备虚拟机或物理机,操作系统为Ubuntu 18.04,之 ...
- unomp 矿池运行问题随记
经过大量的实践,遇到的问题或经验如下: 1.单机运行多矿池时,单机CPU核心数 成为性能瓶颈,运行两个月后,有部分用户反映 矿机速率只有以前的一半. 2.Dash 等可以自行报块的矿池,每个块的股份比 ...
- IPFS矿池集群方案详解
IPFS作为一项分布式存储技术,可以说是web3.0发展的基石.关于IPFS的产业,如存储.技术.矿机.矿池等也发展得非常迅速. 什么是单机挖矿? 单机挖矿就是一台机器就是一个节点,一台机器就完成挖矿 ...
- HttpWebRequest 对象池 HTTP协议 HttpWebRequest和 Socket的一点总结
相信接触过网络开发的人对HTTP.HttpWebRequest.Socket这些东西都不陌生吧.它们之间的一些介绍和关系我这里都忽略了.开我们平时开发过程中也是很少有机会接触大什么大并发这个东东,一般 ...
- TCP/IP协议指南
分组: packet 通常用来表示任何类型的报文. 数据报: datagram 表示网络分层技术,它也经常用于表示在OSI参考模型较高层上的发送报文. 帧: frame 特别常见用于数据链路层上的报文 ...
- 畅联新增物联网设备接入协议:精华隆的NB一键报警
这个是有点时间了,这里记录一下! ----------------------------------------------------------------------------------- ...
随机推荐
- scu 4444 Travel
题意: 一个完全图,有n个点,其中m条边是权值为a的无向边,其它是权值为b的无向边,问从1到n的最短路. 思路: 首先判断1和n被哪种边连通. 如果是被a连通,那么就需要全部走b的边到达n,选择最小的 ...
- kali 创建快捷方式的方法
Kali应用程序快捷方式分析 kali默认使用Gnome桌面环境,所以给kali添加应用程序快捷方式就是给Gnome添加应用快捷方式. 在/usr/share/applications目录下有很多的. ...
- 【转】Kylin系列-使用Saiku+Kylin构建多维分析OLAP平台
关于Kylin的介绍和使用请参考之前的文章 <分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例> Kylin对外提供的是SQL查询接口,基于Kylin构建OL ...
- MySQL存储引擎MyISAM与InnoDB区别总结整理
在MySQL的 可重复读隔离级别 中,是解决了幻读的读问题的. 1. MySQL默认存储引擎的变迁 在MySQL 5.5之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默 ...
- python URLError,HTTPError 的异常处理
URLError,HTTPError 的异常处理 1. URLErrorURLError产生的原因1). 网络无连接2). 连接不到特定的服务器3). 服务器不存在 # 例子 import urlli ...
- calendar 模块
calendar模块,即日历模块,提供了对日期的一些操作方法,和生成日历的方法 注:星期一是默认的每周第一天,星期天是默认的最后一天.更改设置需调用calendar.setfirstweekday() ...
- JMX堆栈分析
线程堆栈: 线程堆栈也称线程调用堆栈,是虚拟机中线程(包括锁)状态的一个瞬间快照,即系统在某一个时刻所有线程的运行状态,包括每一个线程的调用堆栈,锁的持有情况.虽然不同的虚拟机打印出来的格式有些不同, ...
- 实例,C# 导出.dbf格式文件
using System; using System.Collections using System.Configuration; using System.Data; using System. ...
- Mysql高级第一天(laojia)
select char_length('我们love'); select *, char_length(sname) '姓名字数' from tbl_student; select '对方' + '5 ...
- mxnet设置动态学习率(learning rate)
https://blog.csdn.net/xiaotao_1/article/details/78874336 如果learning rate很大,算法会在局部最优点附近来回跳动,不会收敛: 如果l ...