我的博客地址:https://blog.csdn.net/qq_41907991
本节主要学习股份授权证明(DPoS)。每篇文章都会涉及我之前的笔记,大家可以抽空看下~
PoS机制使用一个确定性算法以随机选择一个股东来产生下一个区块,该算法中,账户余额决定了节点被选中的可能性。然而,该系统并未使区块链变得越来越安全而不可逆,因为最终区块链的区块产生权掌握在账户余额最多的少数节点手中。同时PoS面临的挑战是如何通过即使而高效的方法达成共识。(此节内容可参考我的上一篇区块链的文章)。
为了达到这个目标,每个持币节点可以将其投票权授予一名代表。获票数最多的前101名代表按既定时间表轮流产生区块。每名代表被分配到一个时间段产生区块。所有的代表将收到等同于一个平均水平的区块所含交易费的1%作为报酬。如果一个平均水平的区块含有100股作为交易费,一名代表将获得1股作为报酬,即可大大提高共识效率。这就是DPos的核心思想。
通过引入“受托人”这个角色,DPOS可以降低中心化所带来的负面影响。一共有101位受托人通过网络
上的每个人经由每次交易投票产生,他们的工作是签署(生产)区块。通过去中心化的投票过程,DPOS能让网
络比别的系统更加民主。与其要让我们完成在网络上信任所有人这个不可能完成的任务,不如让DPOS通过技术
保护措施来确保那些代表网络来签署区块的人们(受托人)能够正确地工作。除此之外,在每个区块被签署之
前,必须先验证前一个区块已经被受信任节点所签署。像DPOS这样的设计,实际上缩减了必须要等待相当数量
的未授信节点进行验证后才能够确认交易的时间成本。
缩减对于确认的需求将会让交易速度直线上升。签署区块的任务将会托付给由网络选出的可信之人。这样
的设计中,我们不用再设置人为的障碍来减缓区块签署的过程。相较于传统的POW和POS系统,DPOS能够在单
一区块内容纳更多笔交易。这会将加密货币技术带到一个新的层次,使其能够与中心化的结算系统相媲美,例如
目前被使用最广泛的电子支付体系的巨鳄 – Visa和万事达卡。
在DPOS系统中,中心化现象仍然存在,但它是受约束的。区别于其他保障加密货币安全的算法,DPOS体
系里每个客户端都能够决定谁能够被信任,而不用必须信任拥有最多资源的人。这使得DPOS网络能够获取中心
化的一些主要优点,同时又以适当的程度维持了去中心化的本质。系统会通过公平选举的方式进行强化,并让每
个人都有机会成为代表大多数用户的受托人。
因为去中心化已经成为一个流行术语,所以其定义很难完全固定。我们将自由市场看作去中心
化的基本形式,并将对进入自由市场设置障碍看作是所有中心化的基础。像任何事物一样,中心化有
程度之分,所以我们把授权股权证明机制与其它方案的中心化程度进行对比。对比如下:
1.比特币(pow机制)
比特币系统目前正以授权工作量证明(Delegated Proof of Work, DPOW)为基础而运行,因此有大约10名代表控制了绝大多数的哈希算力(补充:使用比特币,用户必须选择一个矿池,每个池通常具有10%或更多的哈希算力。 这些矿池的运营者就像矿工委任的代表。 比特币希望用户在矿池间切换以避免算力过度中心化,但总体而言五个主要池控制网络,并且如果其中一个矿池出了问题,就需要用户进行手动干预。 如果一个矿池出现故障,那么直到它恢复之前,区块的生产率都会等比例地下降。由哪个矿池挖矿成为了一个政治问题。)。在那些为其竞争而能使用规模经济进行无收益挖矿的人手中,哈希算力本身就是中心化的。最后,工作量证明机制为进入市场设置障碍,使得“在职”的区块制造者无法轻易被取代。与比特币系统相比,DPOS在区块生产方面至少去中心化了10倍,并且也许在市场竞争方面去中心化了无数倍。尽管在哈希算力方面有一定量的去中心化,当想到掌控比特币系统的股东(比特币持有者)所持股份的占比,我们认为比特币系统是最中心化的。如果你考虑使用比特币体系的用户总数,其中参与挖矿的人很可能少于百分之一。
2.点点币 (pow pos混合机制)
点点币是一个混合系统,所以它由于工作量证明机制而是部分中心化的。和比特币系统一样,它也有矿池。
与比特币相比,点点币无疑是更去中心化的,然而,因为股权证明机制矿池需要用户保持他们的电脑在线且钱包
解锁,只有一小部分的股东参与了任何形式的挖矿。
2.受托人的角色和作用
• 受托人,是生产并广播区块的被授权方。目前在比特股XT测试网络中有101位受托人。
• 生产区块,这些区块当中包括由P2P网络上收集的交易信息,并以受托人的私钥签署。
• 在每一轮中,所有的101位受托人都拥有“生产且只生产”一个区块的权力。
• 假设你作为一名受托人的选票足够排在前101名当中,那么你在本轮出块中的位置是由前一个区块的广播后随机
指定的。
3.如何成为一名受托人
• 你需要使用以下指令,在区块链中注册一个名称并标记'delegate'-flag:wallet_account_register {} true
• 如果你已经有了一个账号,便可以用以下指令将你的账号升级为受托人:
wallet_account_update_registration {} true
• 注册为受托人并不是免费的,它(目前)需要大约10 XTS 的费用,并将会从__所指定的账号支付。这笔费用大约
相当于担任受托人两周的收益。这表示如果一位受托人想要保本的话,他应该要维持受托人的职位达两周以上
4.投票算法
struct Block{
hash secret; // HASH( S[n] ) where n is the index in the array of secrets generated by this delegatehash revealed_secret; // S[n-1]
};
对于每一个区块,在标头(header)区域加入HASH(S[n])。S[n]则是下一轮受托人产生区块时需要展示的秘钥。同时也在标头中写入S[n-1]。
现在我们能够在每次区块产出时(每15-30秒)拥有一连串的秘钥。从这一连串的秘钥中,我们可以通过以下方式,在该区块生成随机数R:
if( first_block_produced_by_delegate ) then Block[HEAD].revealed_secret = 0
ASSERT( HASH( Block[HEAD].revealed_secret) == GetLastBlockProducedByDelegate(Block[HEAD].delegate_id).secret )
R = HASH( Block[HEAD].revealed_secret )
for( uint32_t i = 1; i < 101; ++i )
{
R = HASH( Block[HEAD-i].revealed_secret + R) // where + is concat
}
R = 本区块生成的随机数。
每个R是经由101位受托人在上述过程中导入的秘钥所计算得出的。而即使101位受托人当中只有一位在工作,所生成的R也会是真正的随机数。
参考文章:http://www.bts.hk/dpos-wiki.html