近期亦来云的全网开放正在紧锣密鼓的推进当中,全网开放大家最关心的莫过于联合挖矿和DPoS的规划,关于两种共识机制的优势,它们的互相结合又将碰出怎样的火花。4月7日的亦来Talk邀请到了亦来云区块链开发工程师周洋与大家分享 AUXPoW、 DPoS共识的那些事。
这次分享我们先分别介绍一下两个共识机制,然后再谈一谈这两个共识机制结合起来的效果以及亦来云为什么要这么选择。
PoW 及 AUXPoW 共识
在比特币出现之前,也出现过其他数字货币,比如 bitgold,但他们都失败了。中本聪认为之前这些数字货币失败的原因是:它们都存在一个中心化控制部分。 2009年2月15日,中本聪在邮件中写了下面一段话:
A lot of people automatically dismiss e-currency as a lost causebecause of all the companies that failed since the 1990’s. I hope it’s obviousit was only the centrally controlled nature of those systems that doomed them.I think this is the first time we’re trying a decentralized, non-trust-basedsystem.
他认为比特币的独特之处在于去中心化,并且这是其成功的关键。在一个去中心化的网络要想达成共识是不容易的。比特币使用了 PoW (proof of work)共识,并且稳定运行了 10 年。
PoW共识即矿工通过消耗电力,大量的计算区块 hash 值来获取给比特币账本记账的机会,并因成功记账而获取收益。PoW 共识是去中心化的,任何节点都可以接入网络参与挖矿,不需要准入条件。PoW 共识让我们获得了一个去中心并且可信的账本。
比特币挖矿会耗费很多电力。但幸运的是,AUXPoW共识在耗费同样电力的情况下,能创造出更多的去中心可信账本。在 2011 年,namecoin 以比特币为父链,首先实现了联合挖矿机制。其实现过程中本聪也参与了讨论。
参考:
https://bitcointalk.org/index.php?topic=1790.msg28…
联合挖矿规则详细参考:
https://en.bitcoin.it/wiki/Merged_mining_specifica…
这里被复用算力的那条链称为父链(parent blockchain),依托父链联合挖矿的链称为辅链(auxiliary blockchain)。亦来云依附比特币网络联合挖矿,即比特币是父链,亦来云是辅链。
联合挖矿简单说就是比特币矿工拿到亦来云一个区块的 hash,设法把这个 hash放到比特币的区块的 coinbase里面,然后计算出一定的工作量,返回给亦来云主链。如果工作量达到亦来云难度值要求,即 auxpow被认可,就样就挖出一个 auxblock。
无论是PoW 共识还是 AUXPoW都会面临一个问题,即51%攻击风险。比特币早期大家使用 cpu 挖矿,节点比较分散,去中心化程度较高。随着全网难度增加,单个节点越来难挖到区块,挖到区块的周期不稳定导致收益不稳定,这是矿工无法接受的。于是矿工选择加入矿池,大家集中算力去与其他矿工节点竞争。矿池的算力很大,这样使挖到区块的周期相对稳定了。矿池挖到区块后按照算力贡献比例分配奖励,这样使矿工有了稳定的收入,但是比特币的去中心化程度也发生了一定变化。
当算力集中,就有发生 51% 攻击的风险。51%是指当攻击方的节点总算力超过全网算力的 51%,他可以恶意制造一个有益于自己的账本分叉点,并在这个分叉点上持续挖矿。由于他的算力比其他所有人算力和还大,理论上他的分叉链最终会成为最长链。根据 PoW 规则,其他矿工会调整账本并转到这条分支上挖矿。这样攻击方就有可能篡改账本,造成攻击,其实 51% 这个数字是一个逻辑概念。假如某攻击方算力达到全网算力的 40%,也是有可能发生攻击的。他只要足够幸运,连续挖出几个区块,也会使他的分支短暂的成为最长链,篡改了账本。虽然这发生的概率很低,但仍然有这个可能性。这也是为什么比特币钱包、交易所收到转账后至少要等 6 个确认才放心。因为以现在的算力分布情况来看,某一方连续挖出 6 个以上区块的概率极低。
不过以上这些都是从理论或技术层面来讨论的,其实矿工、矿池都是整个生态非常重要的建设者,他们其实是最希望整个网络稳定的,而且矿池的能力都是矿工赋予的,如果矿池算力真的达到一个危及整个网络的水平,矿工应该会选择离开。因为矿工的投资很大,他们会主动的去保护整个网络,所以51%的攻击应该很难发生。
PoW共识的另一个问题是区块没有一个最终确认的机制。矿工都沿着最长链去挖矿,其中短暂出现的分叉区块会被重组掉,账本也就有被回滚的可能性。
这对于亦来云主链是一个严重的问题,为什么呢?亦来云是主侧链结构,有一条主链和若干条侧链,主侧链之间会进行资产的转移。拿主链向侧链做充值交易来说,用户看到的是在主链发了一笔交易,然后侧链充值到账。但在内部实际上是分两步走的,用户先在主链上去创建一个要往侧链充值的交易,然后超级节点看到这个交易,把充值交易的密码学证明发到侧链上去,侧链拿到这些证明后去给用户创建资产。 整个过程是一个事务,要么完全成功,要么回滚到最初状态。不能存在前半段成功,后半段没成功这种中间错误状态。如果主链采用单纯的PoW机制,就有可能发生主链向侧链转移资产,侧链表示收到了,然后主链因为PoW的重组机制,将充值交易回滚掉了。此时就会出现侧链说你充值了,主链说不,我没充值,这就造成了状态的不一致。
引入DPoS共识后,就能很自然的解决掉上述问题,下面说一下DPoS共识。
DPoS共识
DPoS共识最先是比特股(BTS)引入的。以比特股为例,首先由社区投票选出 101 个可信节点,即 delegate。然后 101 个委托人按照全网共识的周期和顺序逐个生成区块,并记录到链上。这 101delegate 节点类似 101 个矿池,他们彼此的权利是相等的。持币人可以随时通过投票更换这些 delegate 节点,以便剔除那些宕机、作恶等未正常履行职责的 delegate。
那么亦来云如何结合 PoW 与 DPoS 两种共识的呢?
我们可以看到,无论是 PoW 还是 DPoS 共识,节点在生产区块的过程中同时做了2件事(这里的节点指比特币矿工节点或者DPoS的delegate节点)。
1.打包交易,制作出合法的区块。
2.将上面的区块加入区块链。
可以看出,PoW 的矿工或者 DPoS 的代理人作为生产区块的节点有着很大的权利。他们既是区块生成者又是区块最终确认者,也是协议升级的执行者。由于权利大,社区出现过一些有争议事件。比如:EOS 21个超级节点可以尊重 ECAF 的主张联合冻结 7 个账户,之后 EOS 纽约节点也可以选择不再执行 ECAF 的主张。
亦来云将上述 2 个步骤分开,使其不在一个节点完成。首先,通过投票选出仲裁人节点,类似DPoS。然后矿工按照 AUXPoW协议,联合挖矿产生合法的区块。但此时矿工不可以直接将新区块直接接入区块链,而是需要广播给仲裁人节点。这些仲裁人节点轮流当值发出提案,并通过拜占庭容错(bft)与其他仲裁人节点同步提案,验证区块合法性并且决定是否对此区块进行签名。当新区块收集到大于 2/3 个仲裁人节点的签名后,才可将区块接入区块链。
这里矿工可以生产区块,但不能最终确定区块。仲裁人可以最终确定区块,但不能生产区块。协议的升级,矿工要尊重仲裁人的意见,不然挖到的区块可能不被签名。持币人的投票又可以决定仲裁人的选举结果(类似 DPoS)。
由于每个新增区块都需要仲裁人签名确认,就确定了这个区块就在链上,不会被回滚掉。从而解决了前面说的51%攻击问题和区块回滚问题,主侧链之间的转账也能被事务性的保证。
新区块的 coinbase 奖励以 35% : 35% : 30% 的比例分给矿工、仲裁人、CR。仲裁人节点会按照自己定义比例将奖励分给投票的用户。这样持币人既可以投票选出自己信任的仲裁人节点,又可以因此获取收益。
来源:ELAfans
亦来Talk,越来越好了