【冷知识】联合挖矿原理与收益

目前大部分矿池都上线了挖矿增币业务,比如挖比特币赠送NMC,ELA,Vcash,挖莱特币赠送狗狗币等。这得益于联合挖矿的技术实现。

目前大部分矿池都上线了挖矿增币业务,比如挖比特币赠送NMC,ELA,Vcash,挖莱特币赠送狗狗币等。这得益于联合挖矿的技术实现。


联合挖矿时,币种分为主链与辅链。比如莱特币与狗狗币联合挖矿,则莱特币为主链,狗狗币为辅链。辅链可以在不影响主链正常出块的情况下借助主链的算力验证自己的区块。比如莱特币与狗狗币联合挖矿,莱特币矿工收益不会受任何影响,而且还可以多挖到狗狗币收益,一举两得。那联合挖矿技术是如何实现的呢?这篇文章挑Sir带你一探究竟。


01

联合挖矿原理

1.区块构造


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


联合挖矿对主链的区块构造没有任何影响,只需要矿池在主链的coinbase的ExtraNouce1字段中加入辅链区块的区块头hash值信息即可,共44个字节。


POW区块coinbase解析,点击查看“【挖矿从入门到精通】【入门篇】矿池如何下发任务”


例如BTC与NMC联合挖矿,则BTC的coinbase中ExtraNouce1信息中有以下字段:


  • magic        // 作为标识代表以下字段为联合挖矿相关字段


  • nmc_block_header_hash        // NMC的区块头hash


  • merkle_size        // 只有一个辅链时设置为1


  • merkle_nonce        // 只有一个辅链时设置为0


高度599722比特币区块 图源:BTC.com


上图为20191017日爆出的高度为599722的比特币区块的coinbase交易。其字段输入字段为“��]e/BTC.COM/��mm�j�+�,^S��Ƒ;]&��# t%!iUO�=<�r�� X��”


mm标识着从mm开始44个字节的内容为联合挖矿的辅链信息。此外ExtraNouce1中还有BTC.com矿池标识。一般区块浏览器根据此标识判断爆块矿池。


主链区块结构不发生变化,但是辅链的区块结构需要较大变动。


辅链需要在原有区块结构(区块头,交易列表)中加入一个AuxPOW结构。以BTC与NMC联合挖矿为例,此结构主要包括以下几个部分:


  • btc_coinbase_txn        //BTC的coinbase交易


  • btc_block_header_hash        //BTC的区块头的hash值

  • btc_coinbase_branch        //BTC的coinbase 的merkle_branch

  • nmc_blockchain_branch        //NMC的merkle_branch

  • btc_blockheader        //btc的区块头


因为联合挖矿辅链区块结构与传统POW区块结构不同,所以原来不支持联合挖矿的辅链币种需要进行升级或硬分叉。例如狗狗币硬分叉后支持LTC联合挖矿。


2.辅链验证过程

 


验证方式:


传统的POW机制的验证区块是否爆块:


hash(BlockHeader)< 难度目标


POW挖矿逻辑过程,点击查看“【挖矿从入门到精通】【入门篇】POW挖矿逻辑过程”


联合挖矿中辅链的验证区块是否爆块分两步验证:


1.验证hash(主链的BlockHeader)< 辅链难度目标


2.验证辅链的区块确实与主链的BlockHeader关联。


以BTC与NMC联合挖矿为例,由于BTC是典型的POW爆块机制,需要不断地变换可变字段的值计算hash(BlockHeader)来满足BTC自己的爆块难度目标,所以当NMC与BTC联合挖矿之后,NMC作为辅链就可以使用hash(BTC的BlockHeader)来对比自己的难度目标值,当达到要求,即可爆块。这样可以做到NMC借助于BTC的算力来完成自己的爆块工作,而因为BTC本身就需要计算hash(BTC的BlockHeader),相当于举手之劳,所以对BTC本身算力,收益毫无影响。


根据验证过程,可以得到,因为辅链要使用主链的区块头hash爆块,因此主链与辅链必须是同一Hash算法才可以进行联合挖矿。如BTC与NMC都是SHA256算法,LTC与狗狗币都是Scrypt算法。


验证过程:


以BTC与NMC为例,在同一矿池内,主链与辅链节点同时运行。


准备工作:


组建NMC区块的交易列表,然后得到区块头,(注意:辅链不用遍历Nouce等值,直接默认打包即可)算出区块头哈希值hash(nmc_block_header)。


将hash(nmc_block_header)填入BTC区块的coinbase中的ExtraNouce1字段中。


对BTC的区块头中的可变字段(Nouce,Time,ExtraNouce2)进行遍历运算hash(btc_block_header)。


第一步验证:

目标:hash(btc_block_header)< NMC难度目标,由主链节点验证


hash(btc_block_header)分别与NMC难度目标与BTC难度目标对比。


若符合BTC难度目标则BTC爆块,NMC进入第二步验证。


若符合NMC难度目标但不符合BTC难度目标则BTC继续遍历,NMC进入第二步验证。


第二步验证:

确保NMC区块与BTC区块的关联,由辅链节点验证


根据AuxPOW结构中的btc_block_header_hash与辅链难度目标对比,再次确认hash(btc_block_header)< NMC难度目标。


根据AuxPOW结构中的btc_coinbase_txn,btc_coinbase_branch,btc_block_header_hash 验证btc_coinbase_txn被包含在主链区块中。


验证nmc_block_header_hash存在于btc_coinbase_txn。


验证结果无误则NMC爆块。



02

联合挖矿收益

各矿池联合挖矿币种收益皆以比值的方式发放,比如LTC与狗狗币发放比值为1:2000(取多数数据)。这个收益是怎么如何算出?


高度1720792莱特币区块 图源:chain.so


高度2939363狗狗币区块 图源:chain.so


可以得到20191017数据:


狗狗币难度:2,315,320.67

莱特币难度:9,419,531.81


由于两者同时使用同一数据爆块,全网难度也同步变化,故单位时间产出一个莱特币区块的同时会产出9,419,531.81/2,315,320.67 约等于4个狗狗币区块。而狗狗币一个区块奖励目前为10000Doge,莱特币区块奖励为12.5LTC,所以平均产生一个莱特币会同步产生40000/12.5共3200个狗狗币。附当前主流矿池送狗狗币比例:



其余联合挖矿币种收益也可用类似方法计算。


 

“挑Sir” 碎念

  1. 联合挖矿对矿工而言在算力不变的情况下增加收益。

  2. 联合挖矿有利于辅链的算力稳定。


声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。

点击阅读全文