zoukankan      html  css  js  c++  java
  • Bitcoin-NG 可扩展的区块链协议

    背景

    基于比特币和由比特币所引领的密码学货币 , 已经在很多方面展示了其作为基础设施的潜力,例如匿名在线支付、费用低廉的汇款、无需信任的数字资产交易和智能合约。

    尽管区块链协议有这些潜力,但也面临着严重的可扩展障碍。

    因为系统能够处理的最大交易数目已经被所选择的两个参数限制了:区块大小区块间隔。增加区块大小能够改善吞吐量,但是会导致大区块需要更长的时间在网络上传输,这样会增加延迟。

    减少区块间隔可以减少延迟,但是当系统处于不一致时会导致不稳定,降低系统的安全性。为了改善效率,就需要妥协吞吐量和延迟。

    本文提出了Bitcoin-NG,一个基于比特币信任模型的可扩展的区块链协议。Bitcoin-NG仅受限于网络的传输延时。

    概括起来,本文有3个贡献。

    第一,   提出了Bitcoin-NG可扩展区块链协议,该协议在维持了比特币信任前提的情况下实现了比比特币更大的吞吐量和更低的延迟。

    第二,   该协议介绍了评估中本聪协议的量化指标。这些指标是根据比特币衍生货币中选取参数的讨论来设计的。

    第三,   通过大规模的试验量化了Bitcoin-NG的稳健性和可扩展性。

    比特币特点

    复制状态机

    首先,区块链系统可以看作复制状态机模型,该模型一句话描述就是:多个节点上,从相同的初始状态开始,执行相同的一串命令,经过分布式传播后,仍然产生相同的最终状态。

    中本聪共识可以实现在分布式系统里,节点状态保持一致的目标。

    挖矿

    矿工节点通过挖矿来获得记账权,即不停地对随机数哈希,直到结果小于目标值,则可以创建区块,同时打包交易。系统通过调整挖矿难度,将每个区块的产生间隔控制在10min左右。

    挖矿奖励来源于矿工打包的交易里包含的交易费,还有创建区块时发行的比特币。并且挖矿的可能性和算力成正比。

    分叉:

    多个矿工同时挖到一个区块的现象,在比特币协议里非常常见,事实上比特币账本可以看作是一棵树,而不是一条链。通过修建短链,保持最长的链,来维持系统安全性。分叉容易导致双花攻击。一般情况下,只要经过1个区块的确认时间基本上就能确保“相对的安全”。比特币必须要等待6个区块的确认才能保证安全,因为攻击者要想构造攻击链追上已经经过6个区块确认的主链需要花费的算力成本是非常大的,很有可能得不偿失。因此,Bitcoin在最终确认之前,对每一个区块重复验证6次,即交易成功需要的总的时间为 1小时或更久。

    这段时间的作用是什么?这段时间的作用是:只要在这一小时内,网络中正义力量(诚信节点的算力)能有一次掌握主动权的机会(只需要一次),那么,整个黑客的破坏就会被立即瓦解,超过了1小时,破坏就造成永久性伤害(写入区块了)。所以,这段时间短一点怎么样?短一点就意味着诚信节点的算力必须在更短的时间内重新夺回控制权,这会大大降低整个系统的安全性。

    因此,比特币协议必须在安全和表现方面做出权衡。表现主要体现在带宽和延迟上。

    这是比特币系统打包区块的过程,打包区块有两个作用,领导选举和交易序列化。Bitcoin-NG在此基础上进行了改进,将这两个过程分开,分为关键区块和微区块。

    总结一下,比特币系统 “十分钟”产生一个区块的目的是保证每一个区块不是黑客攻击所创建的!而非限制说这 “十分钟” 你只能创建一个区块!

    因此,Bitcoin-NG就是在安全机制上采取和Bitcoin一样的措施,但增加了这 “10分钟” 内创建区块节点的数目!进而不降低保证安全前提下,提高了系统的交易性能。

    关键区块在原来比特币区块的内容里添加了leader的公钥;

    微区块包含交易记录和数据头。数据头包含上一个区块的引用、目前的时间戳、账本记录的密码学哈希以及数据头的密码学签名。签名使用的私钥与区块链中的最新关键区块的公钥相匹配。

    关键区块的产生间隔和比特币出块间隔一样,而微区块的间隔是一个确定时间,例如10s。

    奖励机制:矿工和领导人的职责、链的选择规则、小费分配40、60

    分叉的风险:btc-NG有一个专用交易称为poison transaction翻译成污染交易,可以取消作弊leader的收益。这个机制来自前人写过的文章。这笔交易里包含短分叉的第一个区块的数据头,作为欺骗证据。污染交易必须在恶意首领确认收益之前,放置在下一个新生成的关键区块后面。除了作废生成分叉首领的收益,污染交易还给现在的首领发放部分补偿。

    查了一下前人的工作:以太坊提出一种分叉的惩罚算法称之为Slasher,

    如果攻击者在不同的链上创建块,创建区块时扣除一定的押金. 是通过一个揭发机制来实现的,也即验证者能够通过发现其他验证者的攻击行为来获得奖励,作为报酬能够获得其他验证者被罚没的资金。

    本文的区别在于,每一个新的矿工作为验证者,观察到了短分叉,但不跟随,然后默默记录下短分叉的关键块的数据头,里面有作弊者的公钥。

    安全性:

    微区块没有重量,甚至不会作为次级索引。如果有这些的话,会给系统增加自私挖矿的脆弱性。在私自挖矿中,攻击者扣留挖到的区块,将它们选择性地发布到主链中以获得更优的存在。如果微区块有重量,攻击者能够秘密地挖矿微区块,并且不把挖到的微区块发布给其它人以获得优势。

    我们推断,Bitcoin-NG并没有给私自挖矿带来新的脆弱性,因此,Bitcoin-NG可以抵抗小于1/4全网算力的攻击者。因此,假定比特币也是这样实现的话,那么Bitcoin-NG也实现了中本聪共识有效性。

    第一种攻击方式:

    首领将交易放置在一个微区块中可以获得40%的交易收益。然而,他可能会秘密地尝试去赚取100%的交易费。为了实现该目的,首先,首领创建一个含有交易的微区块,但并不发布它。然后,他尝试挖矿该秘密的微区块,而其他矿工在挖矿旧的微区块。如果首领成功挖到了接下来的关键区块,极端情况下,他将获得100%的交易费。否则,他会等待其他矿工将该交易放置在微区块中,并尝试去挖矿该微区块。

    在这种情况下,假设一个矿工的算力在全网占到α,他作为leader可以获得的收益比例是所有交易的rleader,剩下1-rleader给下一个leader。要使得矿工在私藏微块的情况下,获得的收益期望值小于正常情况。有这样一个式子:算力的比例作为挖矿成功的概率。

    分为挖到和挖不到的情况,假如下一个区块被其他矿工挖到了,他仍然可以继续挖,如果挖到了则可以获得这些交易里的1-rleader比例收益。(我有个疑问就是,这两种情况下的交易是不同的)

    得到这个结果,同时α不能大于1/4,因此rleader的比例必须大于37%。

    第二种攻击方式:

    为了增加从交易中获得的收益,矿工可以避免交易的微区块,从上一个关键区块开始挖。然后他将交易放在自己的微区块中,并尝试挖下一个关键区块。上面的是攻击者。同样,在这种攻击下也要保证他的收益小于正常挖矿程序。

    公式里假设攻击者已经挖到了第一个关键块。同样α要小于1/4.

    其他问题:

    当以更高的频率生成微区块时,几乎在每一个关键区块生成时Bitcoin-NG都会观察到分叉,因此上一个首领持续生成微区块,直到它收到关键区块(图2)。这些分叉能被迅速解决 — 一旦新的关键区块到达一个节点,将转换到新的首领。

    微块分叉:

    相比于比特币,当以这么高的频率运行比特币时,分叉只能通过最重区块链延伸规则来解决,而且因为不同的矿工在不同的分叉上挖矿,因此分叉存在的时间比Bitcoin-NG的要长。

    关键块分叉:

    关键区块分叉。区块2和3’拥有相同的区块链重量,直到生成区块7,分叉才解决。由于很低的频率和更小关键区块可以快速传输,关键区块的分叉很少发生,但持续时间很长。尽管不希望发生这样长时间的分叉,但它们并不危险。分叉会广播到全网,一旦它到达节点,矿工就知道了未确认的状态,直到该分叉链获得领先。

    测量标准:

    带宽:带宽是单位时间上传输的数据量;因为bitcoin-NG只受限于网络延迟,所以测试时把带宽设为常数。在带宽一定的情况下,检测延迟情况和安全性能如何。

    延迟:引入了共识延迟的概念。共识延迟是系统达到一定共识比例时所需要的时间。

    算力利用率:POW的安全性是由维护它的挖矿算力比例所提供的,挖矿算力利用率等于,维护系统安全的算力/总算力。

    公平性:计算了两个比值:(1)非最大矿工的转换与所有转换的比值,(2)非最大矿工的算力与全部算力的比值。我们将这些比值称为公平性。最好的公平性是1。最大矿工和非最大矿工在转换设置中的表现应该与它们各自的挖矿算力一样。

    结果:

    我们评估了Bitcoin-NG,并在变化区块频率和区块大小的两组实验中于比特币进行了对比。

    结果:

    频率影响:首先,我们对改善共识延迟进行了实验。对于比特币,我们通过减少工作量证明难度来改变区块生成频率。对于Bitcoin-NG,我们保持关键区块的生成速率为每100秒生成1个,而改变微区块的生成频率。对于每一个频率,我们设定有效吞吐量是相同的。

    比特币:

    更高的区块频率减少了比特币的共识延迟,因为在账本中交易的写入频率更高了。相比于bitcoin-NG,比特币频繁的分叉导致了相对更高的共识延迟。

    随着频率的增加,比特币的挖矿算力利用率下降的很快,趋近于1/4,是最大矿工的算力。在极端情况下,区块的生成很快,以至于当一个矿工得知另外矿工生成了一个区块时,其它的矿工已经生成了更多的区块。只有最大的矿工生成主链区块,其它矿工追赶。

    同样公平性也在下降。

    Bitcoin-NG:因为在Bitcoin-NG中,竞争仅限于关键区块的生成,尽管微区块的频率很高,但分叉仍然很稀少。增加微区块频率可以减少共识延迟。其它所有指标均不受影响,保持在最优水平。

     

    区块大小影响:为了研究带宽的可扩展性,我们使用不同的区块大小来进行实验。我们使用高频率来观察系统的限制,将比特币的区块频率设定为1/10秒,Bitcoin-NG微区块的频率设定为1/10秒,关键区块的频率设定为1/100秒。

    对于比特币来说:大区块需要更长的时间来验证和传输。因此,尽管频率是固定的,矿工得知一个新区块的时间变得更长了,因此分叉机会增加了。

    这些实验表明了在带宽和延迟之间预期的妥协。由于分叉,共识延迟增加了,因为需要更长时间来选择主链。

    但该妥协是可接受的,考虑到最佳的妥协点,但真正的问题是安全。分叉导致了严重的挖矿算力损失,在比特币带宽中达到了80%,使得系统容易受到更小算力矿工的攻击。

    更多的不利是公平性的减少。即使是很小的公平性降低也是很危险的,因为它提供了激励来让矿工通过共同加入到更大的矿池来享受挖矿的优势,从而避免损失。这会导致挖矿算力的中心化,忽略了比特币的安全属性。

    Bitcoin-NG演示了定性改善,且在公平性和挖矿算力安全相关的指标上没有大的下降。然而,在高带宽下,客户端的能力接近饱和,观察到了共识延迟的恶化。

    总结:结果表明,通过调整参数可以改善比特币共识的延迟和带宽,但是所有安全相关的性能指标就会恶化。Bitcoin-NG定性地别比特币好,因为它没有这样的恶化,而且在整个测量范围内几乎所有指标都表现出了优越的性能。

    本文主要的突破点是从系统交易性能的角度上看,10分钟的区块创建时间,这10分钟是经验上的安全时间——缩短可有利于系统交易性能的提升,但会导致系统出现安全危机。

    考虑“10分钟” 的深层含义?(这个问题很好,它隐藏着提高性能的突破口)

    难道真的没有办法吗?我们退一万步问问自己:为什么创建一个区块需要10分钟?我们知道其原因是保证每一个区块不是由 “51%攻击” 的黑客所攻击创建的,因此,Bitcoin才会在最终确认之前,对每一个区块重复验证6次,即交易成功需要的总的时间为 10×6 分钟(1小时或更久)。这段时间的作用是什么?这段时间的作用是:只要在这一小时内,网络中正义力量(诚信节点的算力)能有一次掌握主动权的机会(只需要一次),那么,整个黑客的破坏就会被立即瓦解,超过了1小时,破坏就造成永久性伤害(写入区块了)。所以,这段时间短一点怎么样?短一点就意味着诚信节点的算力必须在很短的时间内重新夺回控制权,这会大大降低整个系统的安全性。

    总而言之,上面所说的 “十分钟” 的真正目的是保证每一个区块不是黑客攻击所创建的!而非限制说这 “十分钟” 你只能创建一个区块!因此,Bitcoin-NG就是在安全机制上采取和Bitcoin一样的措施,但增加了这 “10分钟” 内创建区块节点的数目!进而不降低保证安全前提下,提高了系统的交易性能。

     

     参考:

    https://www.8btc.com/article/71943

    https://blog.csdn.net/Canhui_WANG/article/details/54981489

  • 相关阅读:
    Android SingleTask启动模式与Home键的问题
    Flutter Widget截图
    Flutter 以Dialog Activity形式展现
    Flutter Text或者RichText不换行的问题
    Adnroid提高效率之资源移动
    GO学习之 输入输出
    GO学习之 运算符
    GO学习之 值类型与引用类型
    GO学习之 指针
    GO学习之 变量与变量的基本数据类型
  • 原文地址:https://www.cnblogs.com/juanjuanduang/p/11006386.html
Copyright © 2011-2022 走看看