DCR共识的特点

可能了解DCR的人都知道,DCR采用PoW和PoS混合的方式进行挖矿。在进行POS挖矿时有个硬性的要
求,那就是投票的钱包必须是一个长期稳定且一直处于解锁的钱包,那为什么会有这样一个要求呢?而
我们常说的投票到底是投的什么票,作用是什么?我们投票成功又是如何获得我们买票的币和对应的奖
励呢?接下来我们就来说说DCR到底是怎么实现POW和POS混合挖矿的。

DCR的POW和我们熟悉的BTC的原理是一样的,首先由矿工对交易进行验证,之后把交易分为两个类型
进行打包,一个是常规交易,一个是买票交易。对应的数据结构如下:

   "stx" : [
"466fe29dd96e3f00f9aea94405a92b6717b2888def3dc43d42757b052cf8ee55",
"494f27293061768ab68fbdf32648462ee0477f13a8c74e6d006d846f0c08a223",
"0bdbb8acc9481d3af2744ff3e04d77b3c65a05f2f0e68a20b5c80e5a350ba4d7",
"0fc020215bd93f17b2531e998937d2449fdc75cbe2d41c7f30f9a8a556a58112",
"5026fdcefc675c19aca8f0078f2667038c8a5e756aa12174fcb994b0168c8e5a",
"ac4e79927dd918ab4695a4e89a388c3226107fb6a05779b079d504ce09a6cbca",
"4a6696e543383c8fd03339916bb58b6f9cf18e69870d298c1af5371f2125a146"
    ],
"sbits" : 95.48797324,
"merkleroot" : "81c157aff346e33ddc33be781f3562f80f5692ec5b654563d92b310fddf9e7c9",
"height" : 249170,  
    "tx" : [
        "94ca365af201c29ce4eaf9dc8d40bf52571e7f7fc924c8cbc1f6c71700665d89",
        "e74da8d3a78a6ce4841582934ed7fc9c87972f5260674583956891797fde0149",
        "40c6c39a39f55a0475c8601af89c63ee2573dae2e30cb500d7ff63ca9381a4f8",
        "5046d4e4db049b5c8228301d9f227ed1b7956e2a4221245512cc2bc2efea1f24",
        "8a85db1ea71a5689287aefb1beb1e3409e109d336a7460542f3f36adba68824b"
    ],

上面的stx对应的就是买票交易,tx对应的就是普通的转账交易。矿工对对应交易的有效性进行验证,之后
进行区块头hash的计算,找到满足一定难度的计算目标的数字后,提交区块通过P2P网络进行传播,到这
里POW的工作就完成了。

下面就是验证区块的有效性,这里和比特币的共识机制就不一样了,比特币是依靠全网的矿工共同验证,
最终以累积算力最大的链上的区块为有效区块,这样的好处是安全。而对应的缺点就是效率低下,并且
由于从打包到验证所有的过程都是由矿工参与并拥有决定权,就进而导致了谁拥有更大的算力就拥有了
话语权,就很容易出现去年(2017年)流行一时的各种分叉币的局面,不利于社区稳定的发展。

而DCR则使用了另外一种更高效而且民主的方式来完成区块有效性的验证,那就是我们在文章开头提
到的POS。我们都知道DCR在新区块出现时会随机从票池中选取5张票进行投票,只有在至少3张选票通
过的情况下区块才被承认有效,这里的选票通过指的是什么呢。其实所谓的投票就是:新区块会被随机
选中的五张票所对应的买票地址(一般是一个个人钱包地址和矿池地址的多签地址)对应的钱包和全节
点进行验证,而不是被全网所有的节点验证;这也就是我们之前提到的为什么pos投票需要有一个长期处
于稳定且一直处于解锁状态的钱包的原因,在DCR网络发送被验证区块给买票地址对应的钱包时,钱包必
须验证交易的有效性并给与反馈,否则该票则为丢失票。一旦用户票为丢失票则不会再具有投票权,用户
需要发起手动撤销动作来释放买票的DCR。

成功验证区块后得到的奖励为30枚新DCR币,它们将会被分成,60%归PoW矿工,30%归PoS选票持
有人,剩下10%预留给参与软件开发的程序员。我们都知道Pow矿工会在coinbase交易中,生成一个指向
自己地址的UTXO来获取挖矿奖励;而我们通过POS投票成功之后,是如何获取到相应的奖励和我们买票的
币的呢。当一个区块被验证是有效区块之后,被选择用来投票对应的钱包会发起一笔交易,该交易对应两个
input,第一个是stakebase交易,这个交易就是我们投票成功获得奖励数量;第二个input是我们买票的时候
生成的UTXO,如下图所示:
"vin" : [
{
"sequence" : 4294967295,
"blockindex" : 4294967295,
"amountin" : 1.25716648,
"blockheight" : 0,
"stakebase" : "0000"
},
{
"scriptSig" : {
"asm" : "30440220324e0a76af30921d284d69984fb5895af188da5cee292afccc72f6fb59657ed302203a8283e650c8e47d389434e881fee85096a451dd28d193c67adbbddb13332f1c01 5121027e489297a84b4ab0188f8e1a9db05785a64e839c00ebb0b4d27fcb9f6ea52aad2103d6851bf8fdb553003d8a532f1a8c38e5dbcc7f68f9c1ef11a1afd6256e95bcb652ae",
"hex" : "4730440220324e0a76af30921d284d69984fb5895af188da5cee292afccc72f6fb59657ed302203a8283e650c8e47d389434e881fee85096a451dd28d193c67adbbddb13332f1c01475121027e489297a84b4ab0188f8e1a9db05785a64e839c00ebb0b4d27fcb9f6ea52aad2103d6851bf8fdb553003d8a532f1a8c38e5dbcc7f68f9c1ef11a1afd6256e95bcb652ae"
},
"txid" : "08c0991a1da833d5a840b3a71c8ba5dc6323af82e666dccf53f58936866ea71c",
"sequence" : 4294967295,
"vout" : 0,
"tree" : 1,
"amountin" : 95.60623877,
"blockheight" : 238400,
"blockindex" : 8
}
],
我们买票成功的时候pos矿池(不是solo挖矿)会帮我们生成一笔交易,该交易会把我们买票的币锁定
在一个多签名地址上(用户和矿池的多签地址),也就是上面对应的第二个input里面的UTXO。当投票成
功之后将其花费掉,转到我们自己的钱包地址,这就是说我们是通过花费我们买票生成的utxo来获得我们之
前买票的DCR。

从decred的共识机制的设计上来看确实解决了比特币的一些弊端,从架构上来看,decred将dcrd和
dcrwallet、dcrctl分割开来,底层采用了模块化的设计,具有非常好的扩展性,可以很容易地添加
新特性。所以从技术实现上来看是一个非常优质的币种,也希望decred能发展的越来越好。

猜你喜欢

转载自blog.51cto.com/10131249/2145447