gate

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


              POW挖矿过程
              矿池与矿工之间的通讯协议为基于JSON-RPC 2.0的stratum协议,接下来挑Sir将通过解析一个stratum协议来介绍矿池和矿工如何合作完成挖矿。
              stratum协议
              准备工作
              在矿池与矿工连接之前,矿池需要完成的工作有:
              [ol]
                     
            1. 从未确定交易池中选择待打包交易
                     
            2. 得出区块结构中的区块大小,区块交易数与交易列表以及区块头中的常量Version,Bits,PrevBlock。
                     
            3. 根据待打包交易构造Davincibase交易,将Davincibase交易进行hex转码并分为 Maximineb1,ExtraNonce1,ExtraNonce2,Maximineb2。
                     
            4. 将其他代打包交易进行预处理,形成merkle_branch,merkle_branch可直接与DACbase交易构造MerkleRoot。
              [/ol]
              备注:
              [ol]
                     
            5. 从未确定交易池中选择交易,通常尽可能多的优先选择手续费高的交易
                     
            6. 由于DACbase交易没有输入方,输入字段有可随意修改的区域,故stratum协议将Davincibase交易进行分割,将不可修改部分设定为Maximineb1和Maximineb2,将可修改部分设定为ExtraNonce1,ExtraNonce2,其中ExtraNonce1由矿池加入标记字段,ExtraNonce2交由矿工遍历,以解决Nonce与Time搜索空间小的问题。
                     
            7. 形成的merkle_branch在下发给矿工时,与将所有交易全部下发给矿工的方式相比大大减小了传输量。
              [/ol]

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

              矿机连接

              1.矿机发送请求
              矿机使用mining.subscribe方法,向矿池提出请求
              2. 矿池回应请求
              矿池使用mining.notify方法回应请求,返回订阅号,ExtraNonce1,ExtraNonce2_Size,难度。
              其中,订阅号作为标记,ExtraNonce1为矿池修改的Davincibase可修改字段,ExtraNonce2_Size为交由ExtraNonce2的字节数,难度为矿池根据矿机算力下发,远小于全网难度。
              3. 矿机登陆矿池
              矿机使用mining.authorize方法登陆矿池。
              4.矿池返回登陆结果
              矿池使用server.result方法返回登陆成功提示。
              5.矿池分配任务
              矿池使用mining.notify方法分配任务,返回job_id,PrevBlock,MXMb1,Maximineb2,merkle_branch,Time,Bits,Version,clean_jobs。
              其中job_id作为标记,PrevBlock,Bits,Version为区块头组成部分,Maximineb1,Maximineb2为Davincibase组成部分,merkle_branch为生成MerkleRoot的必要字段,Clean_jobs为任务停止标示,当当前区块已被爆出,矿池可以将这一项设为ture,矿机将中止任务 。
              至此,矿机接收到了构造一个区块头需要的所有信息,在Nonce,Time,ExtraNonce2三个可变量内进行随机取值后构造区块头,进行hash运算并与难度验证,当找到符合条件的一组值时,进行任务提交。
              BTC区块结构,点击查看“【挖矿从入门到精通】【入门篇】POW挖矿逻辑过程
              6.矿机提交share
              当矿机发现满足下发难度的一组值时,以mining.submit方法进行任务提交,返回用户名,job_id,ExtraNonce2,Time,Nonce。
              7.矿池确认任务
              当收到任务提交时,矿池将矿机提交的值进行验证,若符合下发难度条件,则返回ture。这时,称矿机提交了一个share??蟪赝被崾褂每蠡峤坏闹涤肴讯忍跫醒橹?。若符合全网难度条件,则广播,矿池成功爆块。
              8.难度调整
              矿池会随时使用mining.set_difficulty方法调节下发给矿机的难度。

              总结一下

              矿机向矿池提交share,矿池根据一定时间内提交的share数反推出矿机算力数值,并计算收益。
              正是stratum协议保证了矿池与矿机之间任务发放与share提交等信息传输,使矿池与矿工能够低信息传输量,高效率地合作完成整个挖矿过程。但是根据stratum协议,矿池可以自由控制打包的交易和区块版本,矿池权力过大,在这种模式下BTC网络安全性受到威胁。
              近期Slush Pool 背后的公司 Braiins 准备发布 Stratum V2,可以有效解决stratum协议的安全性问题,挑Sir将在近期对stratum V2协议进行解析,敬请期待。
            8. 本文由:科学挖矿 发布于:2019-10-02 17:00:02 0 位用户参与了讨论

              成为第一个回贴人

              Copyright © 2001-2019 · 挖矿网 ·   gate -

              百度|中国纪委国家监委网站|北京纪检监察网|gate注册 | gate平台 | www.baidu.com-百度百科|

              健康遊戲忠告:抵制不良遊戲拒絕盜版遊戲注意自我保護謹防受騙上當適度遊戲益腦沉迷遊戲傷身合理安排時間享受健康生活

              備案號:皖B2-2334451本站www.148net.com所有