矿机配置

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、解析完后进行下发

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

批量转账

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

  1. NOMP矿池搭建

    本文将以dash(x11)和Raven(x16rv2)为例子来说明多算法矿池的搭建过程. 1 环境准备 1.1 准备Ubuntu 准备虚拟机或物理机,操作系统为Ubuntu 16.04 1.2 安装必 ...

  2. 【iOS开发必备指南合集】申请企业级IDP、真机调试、游戏接入GameCenter 指南(实现仿官方的成就提示)、游戏接入OpenFeint指南;

    本站文章均为李华明Himi原创,转载务必在明显处注明:(作者新浪微博:@李华明Himi) 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-c ...

  3. Python实现矿池

    自建P2POOL矿池详细教程(高级篇)http://8btc.com/article-1804-1.html p2pool比特币矿池教程综合篇(包含linux矿池教程)https://www.cybt ...

  4. YIIMP矿池搭建

    本文将以Verge(x17)和Raven(x16rv2)为例子来说明多算法矿池YIIMP的搭建过程. 1 环境准备 1.1 准备Ubuntu 准备虚拟机或物理机,操作系统为Ubuntu 18.04,之 ...

  5. unomp 矿池运行问题随记

    经过大量的实践,遇到的问题或经验如下: 1.单机运行多矿池时,单机CPU核心数 成为性能瓶颈,运行两个月后,有部分用户反映 矿机速率只有以前的一半. 2.Dash 等可以自行报块的矿池,每个块的股份比 ...

  6. IPFS矿池集群方案详解

    IPFS作为一项分布式存储技术,可以说是web3.0发展的基石.关于IPFS的产业,如存储.技术.矿机.矿池等也发展得非常迅速. 什么是单机挖矿? 单机挖矿就是一台机器就是一个节点,一台机器就完成挖矿 ...

  7. HttpWebRequest 对象池 HTTP协议 HttpWebRequest和 Socket的一点总结

    相信接触过网络开发的人对HTTP.HttpWebRequest.Socket这些东西都不陌生吧.它们之间的一些介绍和关系我这里都忽略了.开我们平时开发过程中也是很少有机会接触大什么大并发这个东东,一般 ...

  8. TCP/IP协议指南

    分组: packet 通常用来表示任何类型的报文. 数据报: datagram 表示网络分层技术,它也经常用于表示在OSI参考模型较高层上的发送报文. 帧: frame 特别常见用于数据链路层上的报文 ...

  9. 畅联新增物联网设备接入协议:精华隆的NB一键报警

    这个是有点时间了,这里记录一下! ----------------------------------------------------------------------------------- ...

随机推荐

  1. 正确把mysql数据库从windows迁移到linux系统上的方法

    (一)用mysqldump命令导出数据库文件: 在windows下cd到Mysql的bin目录: c:/data.txt这个目录和导出的文本名可以自己随便取,-B 后面的是表名,我要导出的表明叫use ...

  2. 4.7 引入NULL对象

    [1]引入NULL对象范例 Book.h #ifndef _BOOK_H #define _BOOK_H #include <string> using namespace std; cl ...

  3. OpenCV-3.3.0测试

    安装包目录下/samples/cpp里是各种例程 其中example_cmake里CMakeLists.txt已写好,直接cmake,make就可以,example.cpp是一个调用笔记本摄像头并显示 ...

  4. Spring cglib 初始化 ExceptionInInitializerError,new Enhancer() 异常

    解决办法:更换 spring-cglib-repack-*.*.jar 包 java.lang.ExceptionInInitializerError at org.springframework.a ...

  5. php 网站301重定向设置代码实战案例

    php 网站301重定向设置代码实战案例 301重定向就是页面永久性移走的意思,搜索引擎知道这个页面是301重定向的话,就会把旧的地址替换成重定向之后的地址. 302重定向就是页面暂时性转移,搜索引擎 ...

  6. Centos7 在apache+php7环境下 安装 Discuz!X3.4

    拉取Discuz!X3.4代码 git 地址 : https://gitee.com/ComsenzDiscuz/DiscuzX 在/var/www/html 中新建 bbs 文件夹 将git下upl ...

  7. springboot+mybaties

    1. 开发工具:Intellij idea2018.3 2. file----->new----->project 3. 选择Spring Initializr,点击next 4. 点击n ...

  8. EDK II之DXE Core的事件管理

    本文简单介绍一下UEFI中的事件管理: UEFI是不支持多进程的,但是UEFI支持多事件分发机制.UEFI只支持时钟中断,并基于时钟中断实现事件分发.类似于OS中基于时钟中断来实现基于时间片的多任务调 ...

  9. 忘记MySQL root密码,如何不重启修改

    说个前提:mysqld可以处理kill命令发送的信号,如SIGHUP.SIGTERM,SIGHUP信号产生的行为类似于flush命令. 不重启找回root密码首先需要有个较低权限的账号,比如可以修改t ...

  10. Nodejs的npm安装模块时候报错:npm ERR! Error: CERT_UNTRUSTED的解决方法

    npm http GET https://registry.npmjs.org/grunt-cli npm http GET https://registry.npmjs.org/grunt-cli ...