主页 > imtoken最新下载 > 比特币的分布式共识机制是什么?

比特币的分布式共识机制是什么?

imtoken最新下载 2023-03-25 07:22:45

比特币的分布式共识机制是什么? 区块链的核心技术是第一个数字签名,比特币采用的是椭圆曲线数字签名算法。 第二个是加密级散列。 比特币使用 SHA256。 但是,在我们的系统中,仍然会有寡头负责记账。 当然,我们不用担心交易记录被伪造,因为有数字签名。

我们不用担心区块被篡改,因为它可以通过哈希值来验证。 但是我们不能阻止这个寡头故意不记账或者故意抛砖引玉。 所以这个制度是一个人人都可以查账的制度,但是大家要相信寡头不作恶。

比特币的分布式共识机制是什么?

比特币系统显然不会止于这种设计。 所以寡头们需要被替换掉。 比特币的做法是,所有参与整个比特币网络的参与者,不仅可以随意查账,还可以为大家记账。

这解决了寡头政治的问题,但它创造了新的问题。 如果每个人都有一个账本能和兄弟姐妹说比特币吗,谁的账本就是真相。 这就是比特币的共识问题。 这也是比特币体系中最难理解的部分,也是一些新的区块链项目试图创新和提升的部分。

拜占庭将军问题

在进入比特币共识问题之前,我们先简单说一下分布式系统中共识问题产生的背景。 按照图灵奖获得者 Lamport 的说法,所有的分布式系统问题最终都是共识问题。 可见,分布式系统下的共识问题非常重要。 同时,分布式系统的共识问题也非常棘手。

这里我们首先给出分布式共识的定义。 在分布式计算机系统中,分布式共识是某种协议。 参与该协议的节点可以提出一定的价值。 经过一系列步骤,所有节点达成共识,选择相同的值,而选择的值必须是节点提出的值之一,而不是凭空冒出来的。

要真正理解这个问题,我们需要理解比特币的共识机制,而理解共识机制,我们可以从1982年提出的“拜占庭将军”问题说起:

一群拜占庭将军各自率领一支军队围攻一座城市。 为了简化问题,将各军的行动策略限定为进攻或撤退。 由于一些部队进攻和一些撤退可能是灾难性的,将军们必须投票决定所有部队一起进攻或所有部队一起撤退的战略。

由于将军们分布在城池的不同方向能和兄弟姐妹说比特币吗,他们之间只能通过信使来往。 在投票过程中,每个将领会通过Messenger将自己投票进攻还是撤退的信息通知给其他所有的将领,这样每个将领就可以根据自己的投票结果和其他所有将领发送的信息知道共同的投票结果决定行动策略。

该系统的问题在于,将军中可能存在叛徒,他们可能不仅会投票给较差的策略,还会选择性地发送投票信息。 假设有 9 位将军投票,其中 1 位是叛徒。 8名忠将,4票进攻,4票撤退。

这时,叛徒可能故意给投票进攻的4名将军写信表示投票进攻,给投票撤军的4名将军写信表示投票撤军。 这样,从投票进攻的4位将军来看,投票结果是5人投票进攻,从而发起进攻; 而从投退的4位将军来看,投退的是5人。 这样一来,破坏了各军的团结协作。 具体来说,这些将军并没有达成共识。

当然,将军之间的投票协议不一定只需要一轮,现实中可能会非常复杂。 如果一个协议即使在有坏人混入的情况下,也能保证将军做出一致的决定,那么这个协议在计算机领域就可以说是拜占庭容错的。

Paxos协议

计算机领域对共识问题的研究由来已久,取得了许多成果。 其中最著名的是 Lamport 提出的 Paxos 协议。 这个协议在很大程度上支撑了谷歌的三驾马车,带领大家进入了大数据时代。

但是要正确实现Paxos是非常困难的。 于是斯坦福大学的一个PhD用了整个博士时间和一整篇博士论文来研究如何在工业环境下实现Paxos,并提出了一个更加简化的Raft协议。

Paxos 协议的通常实现不是拜占庭容错的。 当然,还有一个拜占庭容错版本的Paxos。 Paxos 协议使用多轮投票来确保如果投票过程终止,每个人都会达成共识。 但该协议也可能无限期地持续下去。 这些东西与本文的主要内容关系不大,不再赘述。

比特币是一个互联网系统,所以存在像拜占庭将军问题这样的情况。 没有人能保证比特币系统中的节点没有混入坏人。 再加上互联网上的网络拥堵、机器无法连接等各种问题,这使得比特币的共识问题从理论研究的角度来看成为一个难题。

比特币的共识机制问题

让我们更严格地定义比特币场景中的共识问题。 具体来说,在比特币的P2P网络中。 我们假设每个节点在本地都有一条大家已经达成共识的基线区块链,以及一堆待处理的交易。 比特币系统的共识意味着在某种程度上,每个人都同意区块链中的下一个区块。

理论上,比特币的共识问题应该是很难的。 但是中本聪实现的比特币共识算法并不复杂,而且在现实中运行了很多年,到今天依然稳定。 这导致近几年大家蜂拥而至做区块链技术。 大家需要做的不是不可篡改的账本,而是这个共识问题的实现。

下面我们先讨论一个简化版的共识算法。 一般步骤如下:

提议的交易信息被广播到比特币网络中的每个节点;

每个节点将收到的交易信息写入一个新的区块,如果写入新区块的交易信息成功加入区块链,则执行成功;

在每一轮开始时,整个比特币网络中的一个节点被系统随机选择,被选中的节点将自己的新区块广播给所有人;

每个接收到新块的节点都会检查记录在新块中的交易。 如果新区块中记录的所有交易都通过了验证,则在验证无误后,新区块将被添加到其本地账本中。

在这个算法中,系统如何随机选择节点将在后面讨论。 但是我们可以看到,如果整个系统中没有坏人,网络是完美的,那么我们可以想象,这个系统中每个人的本地区块链都是一致的。

但现实生活并不那么美好。 让我们先考虑简单的情况。 如果大家都是好人,但是因为网络问题,可能有的节点收到了新的区块,却收不到旧的区块。 这将阻止添加新块。 好节点会努力与兄弟姐妹同步自己的区块到最新状态。

比特币网络遵循一个简单的原则。 整个系统中最长的区块链是所有好节点需要同步的那条,也是整个系统认可的有效区块链。 其他的时间不够长的都是无效的,里面记录的交易也是无效的。

另一种情况是这个系统中有坏人。 让我们研究一下当系统中有坏人时会发生什么。 坏人作恶有几种可能。 先来看第一种,坏人想偷别人的钱。 这是没有办法的,因为坏人是无法伪造交易记录的,只要对方的私钥没有被盗。

第二种情况是坏人实施Deny of Service(拒绝服务)攻击。 When bad guys are selected to generate blocks, bad guys deliberately refuse to serve certain people. 这个问题不算太大,因为下次随机选出的好人会把交易信息放到它生成的区块中。

第三个案例更有趣。 如果坏人是交易发起者,他可以做更多的事情。 比如它可以在网络上广播两笔相互冲突的交易,一笔是从上次交易开始付给张三3块钱,另一笔是付给李四3块钱。 坏人的主要目的是希望他们能花双倍的钱。

对于吃瓜群众来说,其实很难区分哪个是真钱,哪个是假钱,因为吃瓜群众不知道现实世界中哪笔交易是真的。 但是无论如何,两条交易记录不会同时进入一个区块,因为它们是冲突的。 这种块不能通过吃瓜群众的考验,所以不能加。

至于有的吃瓜群众选择了张三的交易,有的选择了李四的交易,这是完全有可能的。 而且,由于随机节点的选择和网络延迟等原因,可能会产生两个新的区块。 有的吃瓜群众接受了张三的战绩,有的吃瓜群众接受了李四的战绩。 .

所以我们看到区块链的账本已经开始分裂了。 在比特币区块链中,遵循一个简单的原则,整个系统中最长的区块链是公认的真理。 那么我们从张三的角度来思考一下。 当张三听到网上的广播说坏人付了他3块钱的时候,张三能确定自己的交易最终会被写入最长记录吗? 在区块链中,交易成功。 在现实世界中,张三给坏人送货怎么样?

张三此时也不确定。 假设过了一段时间,张三收到了一个包含这条记录的新区块,张三验证后将自己的本地账本连接到这个新区块上。 这个时候,张三的底气应该会大一些。 因为至少目前来说,他的记录已经进入了张三认为最长的街区。

比特币系统允许每个节点随时询问其他节点他们最长的区块链是什么,以便同步到系统中更长的链。 假设同步之后,此时张三收到了第二个新区块。 这个新的区块,张三,再次连接到他的账本上。 张三查看了账户,发现支付给他的交易记录并没有丢失。 这个时候,他对于自己的交易记录能够永久存在于整个系统最长的一条链上的信心,也更加坚定了一些。

所以只要张三一直看下去,如果每次给兄弟姐妹同步最长链和添加新区块的过程中,支付给他的交易记录没有丢失,他对这笔交易就很满意了。 人们也越来越有信心将交易永久记录在整个区块链的最长链上。

在这个过程中,现实中每个收款人默认的经验值通常是6次确认。 如果添加6个新区块后交易记录还在区块链中,那么张三可以认为他的记录被踢出系统最长区块的概率很低。

从这个例子中,我们可以说明两点。 首先是坏人不可能通过拒绝服务来伪造记录或破坏比特币网络。 但不良行为者确实可以生成重复且相互矛盾的交易记录。 比特币网络保证任何交易记录成功提交到区块链是一个概率问题。 比特币网络不保证每个提议的记录都记录在区块链中,即使该记录是合法的。 在现实中,接收方判断与自己相关的交易是否成功也是一个概率问题。 新区块加的越多,记录还在,信心就越大。 在一般实践中,使用 6 个确认。

关于比特币挖矿

比特币共识问题的简化版本大致相同。 还有两个问题。 首先是如果比特币系统的共识能够稳定有效的维护,比特币系统中的每个节点都需要尽可能的好。 但是为什么这些节点都是好人呢? 第二个问题就是这个随机选择一个节点来生成并广播下一个区块的随机选择过程是什么。 为什么被选中的节点愿意努力工作来产生这个区块,而不是懒惰和溜鱼。

这两个问题的本质是一样的。 比特币的解决方案可以用两句话来概括:

做好人,系统会给你丰厚的奖励,大家来抢这个丰厚奖励的机会,有快手也有慢手。

前者鼓励大家做好人,后者解决随机选择节点的问题。

具体做法是这样的,每一个创建新区块的人,如果它创建的区块最终进入了系统中最长的区块链,就可以获得大量的钱:

对于它成功写入的每笔交易,都会收取手续费。

每个新区块的创建者都会获得一个额外的比特币。 比特币的数量每四年减半。 前四年是 50 个比特币,然后是 25 个。我们现在是第三个四年,12.5 个。

如果一个比特币价值 10,000 美元,那么每次成功让所有人接受您创建的区块时,您现在至少可以赚取 125,000 美元。

所以比特币挖矿,通俗地说,就是创造一个新的区块,这个区块被整个系统所接受。 挖矿奖励是系统凭空产生的比特币。

那么谁可以创建可以接受的区块呢? 怎样才能保证绝对的公平公正,人人都愿意工作呢? 为什么现在比特币挖矿需要大量电力和专用矿机? 它是什么? 这是本节的最后一个问题。

比特币网络采用的技术是工作量证明。 这个技术本身并不是比特币发明的,而是1993年就存在的技术。我在这里做一个不太严谨的解释:简单的说,我们知道在创建一个块的时候,需要计算一个hash来防止伪造. 比特币使用 SHA256 算法。 生成的结果有 256 位。

区块链中有一个填充随机数的空间,这个空间在区块中没有其他意义。 它唯一的区别是为块生成不同的哈希值。 比特币网络要求生成的哈希值前几位全为0。

简单回复一下SHA256哈希的几个特点:没有简单的方法可以从哈希值生成合法的输入

输入的微小变化可能导致输出散列的巨大变化。

因此,为了生成一个合法的哈希值,生成新区块的节点必须使用穷举的方法反复改变随机区域的值,然后一遍又一遍地计算,直到找到一个结合前几位的哈希值为 0。如果找到,您可以通过网络广播您的区块。

正如你所看到的,这是一个只能硬计算不能推测的过程。 每个节点产生合法区块的概率与其算力成正比。

比特币网络如何决定需要多少位才能为 0? 它的方法很简单,每两周同步一次。 同步的原则是无论网络算力如何变化,比特币区块都应该在10分钟内产生。 一。 所以如果网络中有更多的计算能力,前面的0的数量也会更多。

一开始大家都在个人电脑上挖比特币,总的算力不多,大家可以挖一些。 然后有人在 GPU 上进行哈希处理。 GPU 比 CPU 快得多,用 CPU 挖矿的人产生新区块并被系统接受的概率较低。 后来大家都用定制的矿机,GPU就淘汰了。 这种拼写能力的方法是工作量证明。 工作量证明是比特币饱受诟病的地方之一。

在这个系统中,如果比特币很值钱,那么很多人会为了赚钱投入大量的算力,努力做好人。 系统将处于非常稳定的状态。 如果比特币一文不值,那么坏人进入并破坏系统就没有什么好处。 没有好处,坏人为什么要来?

让我们总结一下今天的内容。 比特币系统去掉了寡头,大家一起记账。 会计方法本身并不复杂。 在这个系统中,每笔具体交易是否被记录是一个概率问题。 比特币系统通过用比特币奖励好人来鼓励大家向善,通过让好人玩数学游戏来竞争来解决随机选择节点构建新区块的问题。

比特币系统一直饱受诟病,新区块链2.0、3.0蜂拥而至主要有以下几个原因:

比特币的交易速度很慢,10分钟出一个区块,交易的确认也需要时间。

比特币需要大量的电力来燃烧,通过工作量证明协议来达到随机选择节点的目的。

在比特币的分布式共识系统中,唯一能解决的就是转账问题。

因此,一些新的区块链解决了比特币交易的速度,有的解决了工作量证明,扩大了共识问题的应用范围,有的引入了智能合约。