内容简介:Github地址:Gitee地址:
比原项目仓库:
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个的限制
以上所述就是小编给大家介绍的《Bytom矿池接入协议指南》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- iOS 自动化测试标签生成工具接入指南
- Match开发笔记 肆 极光推送接入指南(Swift版)
- 码code | 小程序接入「激励式视频广告」硬核指南
- HomeBridge 操作指南:从零开始,将你的米家设备接入 Homekit
- 云转码接入视频网站解决方案 express-ffmpeg接入discuz方案
- 数据接入治理平台
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
函数响应式领域建模
【美】Debasish Ghosh / 李源 / 电子工业出版社 / 2018-1 / 79
传统的分布式应用不会切入微服务、快速数据及传感器网络的响应式世界。为了捕获这些应用的动态联系及依赖,我们需要使用另外一种方式来进行领域建模。由纯函数构成的领域模型是以一种更加自然的方式来反映一个响应式系统内的处理流程,同时它也直接映射到了相应的技术和模式,比如Akka、CQRS 以及事件溯源。《函数响应式领域建模》讲述了响应式系统中建立领域模型所需要的通用且可重用的技巧——首先介绍了函数式编程和响......一起来看看 《函数响应式领域建模》 这本书的介绍吧!