主页 > imtoken钱包激活 > 比特币和区块链(3):比特币的共识机制

比特币和区块链(3):比特币的共识机制

imtoken钱包激活 2023-06-03 07:44:37

在上一篇文章中,我们详细介绍了不可变账本区块链数据结构的实现。第一个核心技术是数字签名。比特币采用椭圆曲线数字签名算法。第二个是加密级别的哈希,比特币使用 SHA256。

然而,在我们的系统中,仍然只有一位寡头负责记账。当然,我们不必担心交易记录被伪造,因为有数字签名。我们也不必担心区块被篡改,因为它可以通过哈希值进行验证。但我们不能阻止这个寡头故意不记账或故意掉块。所以,这个制度是人人可以查账的制度,但大家要相信寡头不作恶。

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

这解决了寡头的问题,但同时也带来了新的问题。如果每个人手里都有一本账本,那谁的账本就是真相。这就是比特币的共识问题。这也是比特币系统最难理解的部分,也是一些新的区块链项目尝试创新和提升的部分。

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

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

这个共识问题有多难?我将复制任何分布式系统都会讲述的著名拜占庭将军的故事。

一群拜占庭将军各自率领军队围攻一座城市。为了简化问题,各军的行动策略仅限于进攻或撤退。因为有的兵进攻,有的兵退会带来灾难性的后果,所以将军们必须投票同意要么全军一起进攻,要么全军一起撤退的战略。

由于将领们分布在城市的不同方向,他们只能通过信使相互交流。在投票过程中,每一位将军会通过信使通知所有其他将军是投攻还是撤退,这样每一位将军就可以根据自己的投票和所有其他将军发送的信息知道共同的投票结果。来决定行动策略。

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

比特币挖矿软件花钱吗?_比特币能花吗_比特币挖矿人花姐

此时,叛徒可能会故意给投攻击票的4名将军发信投攻击票,并给投投撤离的4名将军发信表示投撤离。这样一来,在投攻的4名将军眼中,投票的结果是5人投攻,从而发动了进攻;而在投票撤离的4名将军眼中,投票撤离的就是5个人。因此,各军的团结被破坏了。具体来说,将军们没有达成共识。

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

计算机领域对共识问题的研究历史悠久,成果众多。最著名的协议之一是 Lamport 提出的 Paxos 协议。这份协议在很大程度上支撑了谷歌的三驾马车,进而引领大家进入了大数据时代。

但是Paxos的正确实现是一件非常困难的事情。所以斯坦福大学的博士。花了整个博士学位。时间和整个博士学位。论文研究如何在工业环境中实现 Paxos,并提出了一种更简化的 Raft 协议。

通常意义上实现的 Paxos 协议不是拜占庭容错的。当然,Paxos 也有拜占庭容错版本。Paxos 协议已经通过了多轮投票,保证了如果这个投票过程被终止,大家一定会达成协议。但该协议也可能无限期地进行。这些东西和本文的主要内容关系不大,就不深入了。

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

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

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

让我们首先讨论共识算法的简化版本。一般步骤如下。

比特币挖矿软件花钱吗?_比特币能花吗_比特币挖矿人花姐

提议的交易信息被广播到比特币网络的每个节点。每个节点将其接收到的交易信息写入一个新块。如果写入新区块的交易信息成功加入区块链,则执行成功。每轮开始时,系统会随机选择整个比特币网络中的一个节点,被选中的节点将自己的新区块广播给所有人。每个收到新区块的节点都会响应新区块中记录的交易。. 如果新区块中记录的所有交易都经过验证,则新区块将在验证后添加到自己的本地账本中。

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

但现实生活并不那么美好。让我们首先考虑简单的情况。如果每个人都是好人,但由于网络问题,一些节点可能会收到一个新块,而不是旧块。这将阻止添加新块。一个好的节点会努力将其块与其兄弟节点同步到最新状态。比特币网络遵循一个简单的原则。整个系统中最长的区块链是所有好的节点节点都需要同步的一条,也是整个系统认可的有效区块链。其他不够长的都是无效的,其中记录的交易也是无效的。

另一种情况是系统中有坏人。让我们看看当系统中有不良行为者时会发生什么。坏人做坏事有几种可能性。看第一个,坏人想偷别人的钱。这是没有办法的,因为坏人不能伪造交易记录,只要对方的私钥没有被盗。

第二种情况是当坏人进行拒绝服务攻击时。When the bad guys are selected to generate blocks, the bad guys deliberately refuse to serve certain people. 这不是什么大问题,因为下一次随机选择的好人会将这些交易信息放入它生成的区块中。

第三种情况更有趣。如果坏人是交易发起者,他可以做更多的事情。例如,它可以在网络上广播两笔相互冲突的交易,一是自上次交易以来向张三支付 3 元,另一种是向李四支付 3 元。坏人的主要目的是希望他们能花双倍的钱。

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

至于有的吃瓜群众选择了张三的交易,也有的选择了李斯的交易,完全有可能。而且,由于随机节点的选择和网络延迟等原因,可能会产生两个新的区块。一部分吃瓜人接受了张三的记录,一部分吃瓜人接受了李斯的记录。.

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

比特币能花吗_比特币挖矿软件花钱吗?_比特币挖矿人花姐

张三此时也不确定。假设经过一段时间后,张三收到了一个包含这条记录的新区块。经过验证,张三将他的本地账本连接到这个新区块。这个时候,张三的信心应该大了一点。因为至少现在,他的记录已经进入了张三认为的最长的格挡。

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

所以只要张三一直看着,支付给他的交易记录在与兄弟姐妹同步最长链的过程中并没有丢失,而且他每增加一个新区块,他也不会丢失。人们也越来越相信交易会永久记录在整个区块链的最长链中。

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

从这个例子中,我们提出两点。首先是不良行为者不可能通过拒绝服务来伪造记录或破坏比特币网络。但坏人确实会产生重复和矛盾的交易记录。比特币网络保证任何交易记录最终成功提交到区块链是一个概率问题。比特币网络不保证每个提议的记录都被区块链记录,即使该记录是合法的。实际上,接收方确定与他相关的交易是否成功也是一个概率问题。添加的新块越多,记录仍然存在的记录就越多,他就越有信心。在一般实践中,使用 6 个确认。

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

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

做个好人,系统会给你丰厚的回报。每个人都有机会获得这个巨大的奖励。

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

比特币能花吗_比特币挖矿软件花钱吗?_比特币挖矿人花姐

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

对于它成功写入的每笔交易,它都会向它支付费用,并且每个新区块的创建者都会获得额外的比特币。这个比特币数量每四年减半,前四年是 50 个比特币,然后是 25 个,现在是第三个四年,12.5 个。

如果比特币每块价值 10,000 美元,那么现在每个人每成功接受一个他们创建的区块,就可以获得至少 125,000 美元。

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

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

比特币网络采用的技术是工作量证明,它并不是比特币本身的发明,而是1993年就已经存在的技术,这里我就不那么严谨的解释了。

简单来说,我们知道在创建区块的时候,需要计算一个哈希值来防止伪造。比特币使用 SHA256 算法。结果结果有 256 位。

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

下面简单回复一下SHA256哈希的几个特点:

比特币挖矿人花姐_比特币挖矿软件花钱吗?_比特币能花吗

没有简单的方法可以从散列生成合法输入。输入的微小变化可能导致输出哈希值的巨大变化。

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

如您所见,这是一个只能计算而不能推测的过程。每个节点生成合法区块的概率与其拥有的计算能力成正比。

比特币网络如何决定它前面有多少位应该是 0?它的方法非常简单。它每两周同步一次。同步的原则是,无论网络算力如何变化,10分钟内都应该产生一个比特币区块。因此,如果网络中的计算能力越多,前面的0就会越多。

比特币本来是在个人电脑上挖的,算力不大,大家可以挖点。后来有人上了 GPU 做散列。GPU 比 CPU 快得多,使用 CPU 挖矿的人生成新块并被系统接受的概率较低。后来大家都用定制矿机,GPU被淘汰了。这种计算能力就是工作量证明。工作量证明是比特币受到批评的地方之一。

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

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

比特币系统一直被大家诟病,新区块链2.0和3.0蜂拥而至的主要原因有几个:

比特币的交易速度非常慢。生成一个块需要 10 分钟,交易的确认需要时间。比特币需要大量电力。工作量证明协议用于达到随机选择节点的目的。比特币是一种分布式共识系统。, 唯一能做的就是转移问题

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