挖矿从入门到精通(四)

入门——挖矿基础知识

上期介绍了POW挖矿的整个逻辑过程,但如今挖矿行业有两大主体:矿池和矿工,两者究竟是何关系?又是通过什么方式合作完成整个挖矿过程的?挑Sir带给你答案!

5d8716ebb99071569134315 - 【四】矿池如何下发任务
POW挖矿过程

矿池与矿工之间的通讯协议为基于JSON-RPC 2.0的stratum协议,接下来挑Sir将通过解析一个stratum协议来介绍矿池和矿工如何合作完成挖矿。

stratum协议

准备工作

在矿池与矿工连接之前,矿池需要完成的工作有:

  1. 从未确定交易池中选择待打包交易
  2. 得出区块结构中的区块大小,区块交易数与交易列表以及区块头中的常量Version,Bits,PrevBlock。
  3. 根据待打包交易构造coinbase交易,将coinbase交易进行hex转码并分为 Coinb1,ExtraNonce1,ExtraNonce2,Coinb2。
  4. 将其他代打包交易进行预处理,形成merkle_branch,merkle_branch可直接与coinbase交易构造MerkleRoot。

备注:

  1. 从未确定交易池中选择交易,通常尽可能多的优先选择手续费高的交易
  2. 由于coinbase交易没有输入方,输入字段有可随意修改的区域,故stratum协议将coinbase交易进行分割,将不可修改部分设定为Coinb1和Coinb2,将可修改部分设定为ExtraNonce1,ExtraNonce2,其中ExtraNonce1由矿池加入标记字段,ExtraNonce2交由矿工遍历,以解决Nonce与Time搜索空间小的问题。
  3. 形成的merkle_branch在下发给矿工时,与将所有交易全部下发给矿工的方式相比大大减小了传输量。

准备工作可以保证给矿工的任务准确下发,下面解析矿工连接矿池的步骤。

矿机连接

1.矿机发送请求

矿机使用mining.subscribe方法,向矿池提出请求

2. 矿池回应请求

矿池使用mining.notify方法回应请求,返回订阅号,ExtraNonce1,ExtraNonce2_Size,难度。

其中,订阅号作为标记,ExtraNonce1为矿池修改的coinbase可修改字段,ExtraNonce2_Size为交由ExtraNonce2的字节数,难度为矿池根据矿机算力下发,远小于全网难度。

3. 矿机登陆矿池

矿机使用mining.authorize方法登陆矿池。

4.矿池返回登陆结果

矿池使用server.result方法返回登陆成功提示。

5.矿池分配任务

矿池使用mining.notify方法分配任务,返回job_id,PrevBlock,Coinb1,Coinb2,merkle_branch,Time,Bits,Version,clean_jobs。

其中job_id作为标记,PrevBlock,Bits,Version为区块头组成部分,Coinb1,Coinb2为coinbase组成部分,merkle_branch为生成MerkleRoot的必要字段,Clean_jobs为任务停止标示,当当前区块已被爆出,矿池可以将这一项设为ture,矿机将中止任务 。

至此,矿机接收到了构造一个区块头需要的所有信息,在Nonce,Time,ExtraNonce2三个可变量内进行随机取值后构造区块头,进行hash运算并与难度验证,当找到符合条件的一组值时,进行任务提交。

比特币区块结构,点击查看“【挖矿从入门到精通】【入门篇】POW挖矿逻辑过程

6.矿机提交share

当矿机发现满足下发难度的一组值时,以mining.submit方法进行任务提交,返回用户名,job_id,ExtraNonce2,Time,Nonce。

7.矿池确认任务

当收到任务提交时,矿池将矿机提交的值进行验证,若符合下发难度条件,则返回ture。这时,称矿机提交了一个share。矿池同时会使用矿机提交的值与全网难度条件进行验证。若符合全网难度条件,则广播,矿池成功爆块。

8.难度调整

矿池会随时使用mining.set_difficulty方法调节下发给矿机的难度。

总结一下

矿机向矿池提交share,矿池根据一定时间内提交的share数反推出矿机算力数值,并计算收益。

正是stratum协议保证了矿池与矿机之间任务发放与share提交等信息传输,使矿池与矿工能够低信息传输量,高效率地合作完成整个挖矿过程。但是根据stratum协议,矿池可以自由控制打包的交易和区块版本,矿池权力过大,在这种模式下比特币网络安全性受到威胁。

近期Slush Pool 背后的公司 Braiins 准备发布 Stratum V2,可以有效解决stratum协议的安全性问题,挑Sir将在近期对stratum V2协议进行解析,敬请期待。

挑Sir碎念

《挖矿从入门到精通》专为挖矿小白量身定做,将通过“入门”“实战”“进阶”三大阶段进行系统性专业性数字货币挖矿教学指导。

“入门”掌握核心挖矿知识/资源库,从此不是挖矿小白!

“实战”挑Sir带你免费体验挖矿过程,关注公众号并将文章转发至朋友圈将有机会在“实战”阶段获得挑Sir矿机体验资格!

“进阶”掌握挖矿业内人士核心技能,你也可以成为矿圈大佬!

下期预告:

《挖矿从入门到精通-入门篇》

挖矿行业生态图谱

不想错过任何测评内容?加入科学挖矿矿工交流群,已有挖矿各领域大佬入群,每日发布挖矿测评资讯内容!

5d8716ec60d4b1569134316 - 【四】矿池如何下发任务