主页 > imtoken苹果钱包app > 区块链:技术驱动的金融——第 2 章比特币如何去中心化

区块链:技术驱动的金融——第 2 章比特币如何去中心化

imtoken苹果钱包app 2023-02-04 06:29:20

如何从架构图开始让架构设计平滑落地

云原生

程序员的移动资料库

2.1 中心化与去中心化

中心化和去中心化并不是不相容的。事实上,没有一个系统是完全集中的或完全分散的。比如电子邮件是一个去中心化的系统,任何人都可以随心所欲地设计自己的电子邮件服务器,但对于大多数普通人来说,这并不是必需的,所以这个任务就交给了电子邮件服务提供商。同样,比特币系统是去中心化的,但比特币交易所(将比特币转换为其他货币的平台)、钱包软件、用户管理比特币的软件可以是中心化的或去中心化的。

要了解比特币是如何去中心化的,我们需要了解以下五个问题:

谁在维护交易账本?

谁有权批准哪笔交易有效?谁在制造新的比特币?谁在制定制度变革的规则?比特币如何获得交易价值?

点对点(P2P)网络是最接近去中心化的系统。用户只需下载比特币客户端即可在其计算机上运行节点。一个节点既可以作为普通用户,也可以作为矿工(在比特币挖矿中会详细说明),但是挖矿需要大量的资金投入,所以并不是所有的用户都是矿工。

2.2 分布式共识

分布式共识是区块链中一个非常重要的概念。

计算机社区研究分布式共识多年。一个直观的例子是:一个社交网络的后端平台包含一个由数万台服务器组成的分布式数据库,每条信息都记录在几个节点上。系统,这些节点必须同步。

分布式共识协议的定义如下:

分布式共识协议 在一个有 n 个节点的系统中,每个节点都有一个输入值,其中一些是错误的,甚至是恶意的。分布式共识协议具有以下两个属性:

要了解分布式共识在比特币中的使用,重要的是要注意比特币系统是一个点对点系统,当 Alice 向 Bob 付款时,她实际上是在向构成比特币的所有节点广播她的交易信息网络。如图2.2.1。也就是说,Alice 将交易广播到所有节点,以防止 Bob 在收到付款后拒绝交易。

图2.2.1 Alice向比特币网络广播交易信息

在比特币网络中,有各种用户向网络广播交易信息,节点必须就哪些交易可以广播以及交易发生的顺序达成共识,这样系统才会形成唯一的全球交易账本。因此,在比特币系统中,我们会对每个区块进行共识处理。

在任何时候,每个节点都有:

每个节点的总账是一样的,而交易池略有不同,因为点对点网络并不完善,所以在任何时候,有的节点收到交易信息,有的没有。

所有节点如何就一个区块达成共识?

一个直观的方法是:在一段时间内,比如每十分钟,每个节点提议从自己的交易池中选择未确认的交易打包进区块,作为已经达成共识的区块链下部。一个块。此时,每个节点都会将此区块发送给所有其他节点,其他节点会将此区块作为共识协议的输入,检查该区块中的交易是否有效。当所有其他节点都确认了这个区块中的交易是有效的,那么这个区块就会被添加到区块链的末尾(当然这里会涉及到共识协议的一些细节)。

可能会指出,这个区块并不包含所有有效的交易,但没关系,那些没有被包含在区块中的交易可以等待下一次机会。

上述方法与比特币有一些相似之处,但存在几个技术问题:首先,达成共识一般是一个难题,因为有些节点会崩溃、下线或根本就是恶意节点;第二,上述方法要求所有节点通信二对二连接(即全连接网络),而比特币网络是点对点网络,并不完美。实现一个所有节点都参与的共识协议似乎不现实;第三,由于交易信息分布在整个互联网上,信息的传递会出现明显的延迟。

延迟和全局时间

比特币协议在达成共识时必须面对两个主要障碍:

严重网络延迟的一个后果是节点没有统一的全局时间概念。那么,共识协议的一些指令,比如“第一步发送第一条消息的节点必须在第二步执行X”就不能执行了,因为所有节点都不知道谁先发送了第一条消息步。对新闻有不同的看法。

不可能的结论

全球时间的不一致给共识协议算法带来了诸多限制。事实上怎么使用比特币支付,由于这些限制,很多分布式共识的文献对于能否达成共识持悲观态度,很多共识是不可能的结论已经得到证实,如“拜占庭将军问题”、“Fischer-Lynch-Paterson can't结出硕果。” 尽管如此,还是有一些文献提出了一些分布式共识协议,其中最著名的是 Paxos 算法。Paxos 算法做了一些妥协。一方面,它能够不产生不一致的结果。另一方面,算法做出的妥协是,在某些条件下(虽然不太可能),协议会冻结并卡住,因此无法继续运行。

打破传统假设

这些“不可能的结论”是针对分布式数据库的研究,只是在某些特定模型下建立起来的,并不能完全应用于比特币。毕竟,比特币本身已经破坏了很多原有的分布式数据库。做出的假设。

首先,比特币引入了奖励的概念,这是分布式共识协议的全新概念。在这种情况下,人们自然会变得诚实。因此,比特币并没有真正解决分布式共识问题,只是在特定的货币体系下解决了这个问题。

其次,比特币系统包含随机性的概念。此外,不再纠结于指定共识的起点和终点,而是在更长的时间内达成共识,在实际系统中,达成共识大约需要一个小时左右。但即使过了一个小时,节点仍然无法确定哪个区块应该进入分类帐。但随着时间的推移,我们对一个区块的了解(即是否应该进入账本)与最终的整体共识一致的概率,不一致的概率会成倍下降。

2.3 使用区块链实现无身份共识

在传统的分布式共识中,需要节点实名制,或者节点身份清晰,可以使设计更容易。例如,对于真实身份怎么使用比特币支付,我们可以使用“编号最小的节点开始执行某些操作”的指令。

在比特币系统中,不强制用户使用真实身份加入,这是比特币的一个重要特征,也是比特币系统的核心理念。真实身份的缺失给比特币的共识协议带来了诸多困难。我们可以做出两个较弱的理论假设:

隐式共识

任意节点选择的假设可以实现隐式共识。

我们的共识协议有多个轮次,每轮对应于区块链中的一个区块。在每一轮中,都会选择一个随机节点来提议区块链的下一个区块。请注意,在比特币网络中,每个节点都会向其他节点广播交易,因此随机选择的节点可以将这些交易打包成块。

没有共识算法,也没有任何投票过程来决定选择哪些交易,随机选择的节点将直接决定区块链的下一个区块,但万一这个节点是恶意的,在区块交易中打包一些非法的,或者自私的节点,只打包那些对自己有利的交易。对于这个问题,可以使用隐式共识方法。

其他节点可以隐式接受或拒绝先前随机选择的节点。如果他们接受,他们将在这个块之后继续;如果他们拒绝,他们将忽略这个块并选择他们接受的上一个块继续。值得注意的是,这里之前接受的区块不一定是这个区块的前一个区块,因为很可能在之前的几轮中,随机选择的节点都是恶意节点。其他节点已经隐式拒绝了多轮。

比特币共识算法(简化版)

该算法的简化假设是可以随意选择一个节点,并且这些节点中没有一个节点容易受到 Sybil 攻击。

1. 新交易被广播到所有节点。

2. 每个节点将新事务放入一个块中。

3. 在每一轮,一个随机选择的节点可以广播它的区块。

4. 其他节点可以选择接受该块,前提是该块中的交易是有效的(具有真实签名)。

5. 节点可以将上述接受区块的哈希值放入自己的区块中,以表示对这个新区块的认可。

接下来,让我们看看这个算法是如何抵抗一些常见的攻击的。

窃取比特币

假设 Alice 在这一轮提出了区块链的下一个区块。如果她想窃取 Bob 的比特币,那么 Alice 发起一笔交易,将 Bob 的比特币转移到她自己的地址,伪造 Bob 的数字签名来签署交易并将其放入下一个区块。显然,如果数字签名机制是安全的,那么 Alice 就无法达到目的。

拒绝服务攻击

假设这一轮由 Alice 提出区块链的下一个区块,如果她不喜欢 Bob,那么她可以拒绝将任何与 Bob 相关的交易放入该区块。虽然这是 Alice 可以执行的有效攻击,拒绝向 Bob 提供服务,但这显然是一个小问题。Bob 只需要等待下一个诚实节点提出区块,他的交易就有可能被包含在区块中。

双花攻击

假设 Alice 是 Bob 在线商店的客户,并且 Bob 提供了一些付费软件下载。Alice 可以像这样发起双花攻击:

爱丽丝从鲍勃那里购买了一个软件,她在自己的地址上向鲍勃的地址发起比特币交易,并将交易广播到整个网络。现在假设某个诚实节点制作了下一个区块并将该交易放入该区块中。在看到交易放入区块链后,Bob 认为 Alice 已经付钱给他,并允许 Alice 下载软件。那么,假设下一轮随机选择的节点恰好是 Alice 控制的节点,那么 Alice 可以生成一个新的区块并进行交易,即将她支付给 Bob 的币转移到一个由 Alice 控制的节点上。她。在控制的地址上,将该块连接到上一个诚实节点生成的块的前一个块,从而忽略诚实节点创建的块。

这是一个经典的双花攻击,因为两笔交易在同一个币中,并且只能将一笔交易放入区块链。

你可能会问,既然 Alice 在第一笔交易中明确将币转给了 Bob 的地址,而这枚币的所有者是 Bob,那么 Alice 如何创建第二笔交易将币转给自己呢?受控地址呢?这需要伪造 Bob 的签名吗?显然,伪造签名是窃取比特币的行为,而不是双花攻击。

事实上,我们需要对交易的结构有一个清晰的认识。在比特币中,交易是一个包含三个主要部分的数据结构:

前两个元素很好理解。第三个元素是一个哈希值,表示指向先前交易输出的指针,指示硬币的来源。该指针必须指向已被共识链上某个先前区块确认的交易。换句话说,任何人都可以在交易中追踪比特币的来源。

请记住,有两种哈希指针很容易混淆:一种是在块内使用的哈希指针,用于指示哪个块跟在前一个块之后;另一个是交易中的一个或多个,使用一个哈希指针指向之前确认的交易,表明比特币的来源。

下图是双花攻击的示意图:

图2.3.1 双花攻击示意图

双花攻击的成功与否取决于哪个区块最终包含在长期共识链中,是包含 CA->B 的区块,还是包含 CA->A' 的区块。诚实节点遵循“在最长有效分支之后延伸”的规则,但实际上,对于延伸到哪个分支之后,并没有明确的答案。

从伦理的角度来看,这两个分支是不同的,第二次交易应该是无效的(即支付到她自己的地址),但这种区别只是基于我们知道 Alice 先付钱给 Bob 然后付给自己的前提向下。从技术角度来看,两种交易都是有效的,节点没有办法区分哪一种是道德上合理合法的交易。

事实上,提议下一个区块的节点可能会选择在包含双花的区块上进行扩展,特别是如果 Alice 还贿赂该节点(如果她知道谁控制该节点),那么这种可能性更大。在这种情况下,包含双花区块的链会比另一条链长,后续的诚实节点会继续在这条链上延伸,并且随着过程的进行,包含双花的链更有可能成为长期共识链的一部分。相反,包含支付给 Bob 地址的交易块的链完全被网络遗忘并成为孤块。

现在,让我们从商家 Bob 的角度来考虑他是如何保护自己免受双花攻击的,这也是理解比特币安全措施的一个重要部分。

当 Alice 广播第一笔交易——支付给 Bob 时,Bob 也在在线收听。如果 Bob 很草率,一旦他收到 Alice 广播的交易,并验证 Alice 的签名有效,就允许 Alice 立即下载软件,这称为零确认交易。这样,如果 Alice 控制了下一个随机选择的节点,那么 Alice 可以立即广播第二笔交易——双花,该节点可以将这笔交易放入下一个区块,并且该区块链接到包含该区块的前一个区块第一个事务,产生一个分支。

显然,这是因为鲍勃太“马虎”了。如果 Bob 谨慎,他不会让 Alice 立即下载软件,而是等待后续区块出现,从这些区块中查看 Alice 是否发起了双花攻击。一旦 Bob 发现 Alice 试图发起双花攻击(即包含双花交易的区块被添加到区块链中),他就会放弃该交易并拒绝让 Alice 下载软件。如果接下来的几个区块是基于第一个交易(即被后续区块确认),那么 Bob 可以相信这个交易会被包含在长期共识链中。现在可以允许 Alice 下载软件。

上述过程如下图所示。

图 2.3.2 Bob 的双花

总而言之,一笔交易获得的确认越多,它就越有可能被纳入长期共识链。诚实节点总是选择延伸最长的共识链,因为较长的链增长得更多,包含双花的链追上较长链的概率越来越小。这个结论在只有少数恶意节点的情况下尤其正确,因为要让短链赶上长链,需要一直选择恶意节点。

此外,值得注意的是,即使包含双花的链成为长期共识链的一部分,这并不意味着系统是错误的。如前所述,双花交易仅从道德角度来看是非法的,但从技术角度来看,该交易是完全合法有效的,就像爱丽丝将钱从她的一张银行卡转移到另一张银行卡一样是相同的。在允许 Alice 下载软件之前,Bob 必须确保资金确实进入了他的地址(即确认是长期共识链的一部分),他有责任并且应该这样做,因为这符合 Bob 自己的利益。如果双花交易成为长期共识链的一部分,那么 Bob 应该拒绝为 Alice 服务。

事实证明,成功双花的概率随着确认次数的增加呈指数下降。在比特币生态系统中,最常见的方法是等待 6 次确认。并不是说数字 6 有什么特殊含义,而是在等待时间和确认感兴趣的交易会被纳入长期共识链之间有一个很好的平衡。就是这样。在实际应用中,我们可以根据应用场景的需要来决定确认次数。

2.4 奖励机制和工作量证明

前面的章节主要集中在比特币去中心化的技术手段上,让我们考虑另一个重要的部分:比特币的奖励机制。

之前我们试图大胆地相信随机选择节点时,至少有 50% 的机会会选择诚实节点的假设,这可能是有问题的。如果对破坏过程的参与者有金钱奖励,这种诚实假设尤其成问题,在这种情况下,我们不能真正假设节点是诚实的,因为一旦有金钱奖励,一些节点可能是诚实的。所以问题就变成了:我们可以奖励行为诚实的节点吗?相反,回想一下双花问题,我们可以惩罚创建双花区块的节点吗?

事实上,无论奖励还是惩罚都无法在现实中实现,因为我们不知道这些节点的真实身份,所以我们无法向这些节点的家乡地址发送现金,也无法抓到创造双的节点——花块。. 但如果有某种替代数字货币,我们可以实施奖励机制。

在此之前,我们讨论了使用抽象算法来实现分布式共识,而不是针对特定的应用程序。现在我们要跳出模型,构建分布式共识过程的应用其实就是一种货币,具体来说,我们要奖励那些诚实行事的节点,用这种货币。

块奖励

比特币有两种不同的奖励机制,其中之一是区块奖励。

根据比特币的规则,创建区块的节点可以在区块中添加造币交易,并指定交易的接收地址。通常,节点会指定自己的地址。我们可以认为这是对节点在共识链上创建区块的奖励。比特币规定,每产生 210,000 个区块,大约每 4 年,区块奖励量减半,具体取决于区块产生的速度。比特币的前 4 年,区块奖励是 50 个比特币,现在是第二个 4 年,所以现在一个节点因生成一个区块而获得 25 个比特币的奖励。

区块奖励如何鼓励诚实行为?乍一看,一个节点会因为提出一个有效的区块或恶意伪造它而获得奖励,但事实并非如此。想想节点如何获得区块奖励。铸币交易与其他交易一样,只有在包含在共识链中时才会被其他节点接受。这种设计激励节点想方设法让其他节点扩展自己的区块。因此,如果网络中的大多数节点都遵循“延长最长分支”的规则,那么这样的设计将激励所有节点遵循这个规则。

如前所述,每产生 210,000 个区块,奖励减半,因此至少在目前的规则下,比特币的总数为 2100 万。请注意,这是允许创建新比特币的唯一方法,没有其他机制可以添加新比特币。以目前的奖励分配速度,比特币区块奖励将在 2140 年分配。这是否意味着系统无法在 2140 年继续运行并变得不安全,因为不再有奖励诚实行为的动力?其实并非如此,因为区块奖励只是比特币的一种奖励机制,还有另外一种奖励机制——交易手续费,可以保证系统的安全运行。

手续费

比特币的第二种奖励机制称为交易费用。任何交易的制造者都可以选择使交易的输出值小于输入值,第一个创建区块并将该交易放入区块链的人可以获得差额作为交易费用。如果您是一个节点并且您正在创建一个包含 200 笔交易的区块,那么这 200 笔交易的交易费用将支付到您放入区块中的您自己的地址。目前,这些交易费用完全是自愿的,因为现在有块奖励。然而,随着区块奖励的逐步分配,这些交易费用变得越来越重要和必要,因为用户需要通过交易费用来保证合理的服务质量。这很好理解。例如,Alice有一笔交易,其输出值等于输入值,即没有交易费用。显然,Bob 在创建区块时,不会将这笔交易打包到区块中,这是比较极端的做法。是的,所有后续节点在创建区块时都不愿意打包这个交易,所以无法确认 Alice 的交易。

虽然目前交易费用完全是自愿的,在某种程度上,交易费用已经开始了,但是这个系统会如何演变还不清楚,取决于目前还不完善的博弈论的研发,这也是比特币的一个有趣之处研究领域。

采矿和工作证明

我们已经看到了比特币的共识机制如何抵抗某些攻击,并初步了解了比特币的奖励机制如何激励节点诚实行事,但仍有几个问题需要解决。

事实证明,上述问题是相互关联的,都有相同的解决方案——工作量证明(POW)。工作量证明的核心思想是将节点的随机选择改为根据节点占用某种资源的比例来选择节点,并且该资源不能被任何人垄断。如果这种资源是计算能力,我们称之为工作量证明。如果这个资源是某种货币的所有权,我们称之为权益证明(POS)。

根据计算能力选择节点到底是什么意思?换句话说,我们让节点利用自己的算力相互竞争,结果就是算力的比重决定了一个节点被自动选中的概率。

比特币使用哈希函数来解决难题以证明工作。对于任何提出并创建一个块以创建下一个块的节点,该节点必须找到一个临时随机数,使得以下公式成立:

这个公式的意思是:将临时随机数、前一个区块的哈希值、要打包到本区块的交易列表连接成一整串,作为哈希函数的输入,通过哈希得到计算。输出正好落在某个目标区间内。这表明找到了一个合格的临时随机数。

当节点发现这样一个临时随机数时,它会将临​​时随机数放入区块中并广播该区块。值得注意的是,如果散列函数如第 1 章所述对谜题友好,则解决谜题的唯一方法是穷举尝试足够多的随机数,直到成功。

使用这种哈希函数解谜的工作量证明方法,我们可以完全放弃节点的随机选择。一旦节点找到一个随机数,它就可以创建并广播下一个块。这就是比特币系统实现完全去中心化的方式。

难以计算

哈希谜题具有三个重要的属性,第一个是一定的难度。不断尝试解决哈希难题的过程就是我们所说的比特币挖矿,参与挖矿的节点称为矿工。虽然从技术上讲,每个人都可以称为矿工,但由于挖矿成本高,挖矿生态系统消耗大量能源。因此,并非每个节点都是矿工。

参数化成本

哈希谜题的第二个特性是成本可以通过参数而不是固定值来改变。在比特币网络中,每产生 2016 个区块,所有节点都会重新计算目标区域的大小,这样后续区块的产生时间间隔约为 10 分钟。也就是说,大约需要两周时间重新计算。

调整目标区域的大小保持10分钟的间隔,原因是如果出块的时间间隔太小,会造成很多效率低下,失去很多优化的好处,比如在一个块中放入大量的交易。10分钟并没有什么神奇之处,只是平均时间间隔,按照指数分布来查看寻找下一个区块的时间,如下图所示。

图2.4.1 找到下一个区块所用时间的概率密度函数

请注意,上图是通过网络创建区块的频率,而不是发现区块的特定矿工。对于特定矿工,找到下一个区块所需的平均时间为:

平均找到下一个区块的时间=10分钟/这个矿工占总算力的百分比

容易证明

散列谜题的第三个特性是很容易验证随机数是否与散列谜题匹配。也就是说,一旦节点找到一个随机数并广播包含该随机数的区块,接收该区块的节点就可以快速验证该随机数是否符合要求,从而证明该节点是否正确计算了工作量证明。

2.5 总结

既然我们对比特币是如何实现去中心化有了很好的了解,那么我们来总结一些关键点,把它们放在一起,以便更好地理解。

身份。比特币协议不需要真实身份即可参与。用户只需要生成一对匿名密钥,用公钥代表身份,用私钥签名。6 确认。当我们说一笔交易上链时,实际上是指该笔交易已经被确认了很多次,但是对于多少次并没有明确的规定。6次是一个常见的数字。哈希谜题和挖掘。哈希难题具有三个属性:难以计算、可参数化的成本和易于证明。同时,由于挖矿成本高,并不是每个节点都是矿工。比特币深度使用分布式共识的概念。在比特币系统中,我们需要围绕比特币的价值达成共识,对账本情况达成共识。甚至你拥有多少比特币的算法也依赖于共识。也就是说,当我们说爱丽丝拥有一定数量的比特币时,我们真正的意思是,在比特币网络中,记录在区块链中的爱丽丝所有地址所拥有的比特币数量。这是比特币系统的终极真理:拥有比特币是其他节点的共识,即某一方拥有这些比特币。直观地说,在比特币网络中,你向所有人声称你拥有 1000 个比特币,这是没有用的,当所有人都认为你拥有 1000 个比特币时,你才真正拥有 1000 个比特币。这是比特币系统的终极真理:拥有比特币是其他节点的共识,即某一方拥有这些比特币。直观地说,在比特币网络中,你向所有人声称你拥有 1000 个比特币,这是没有用的,当所有人都认为你拥有 1000 个比特币时,你才真正拥有 1000 个比特币。这是比特币系统的终极真理:拥有比特币是其他节点的共识,即某一方拥有这些比特币。直观地说,在比特币网络中,你向所有人声称你拥有 1000 个比特币,这是没有用的,当所有人都认为你拥有 1000 个比特币时,你才真正拥有 1000 个比特币。