区块链解释
到底什么是区块链?在本文中,我将尝试提供深入而简单易懂的解释。我将告诉你什么是区块链,它有什么功能,区块链网络中存在哪些用户组,以及他们如何相互交互。
注意:本文主要介绍公共区块链,在这些公共区块链中,主要是关于它们对加密货币的使用。公共区块链还有其他用途,也有私有区块链。私有(或许可)区块链具有相似的结构,但功能和机制不同。
概述
区块链只是一堆块。每个块都包含多条信息。在加密货币中,信息通常是一组交易。每个块都连接到前一个块。迄今为止,区块链的主要用途是加密货币。加密货币是一种电子现金系统,无需中央机构即可运行。加密货币之所以被采用,是因为它们解决了双重支出问题——分散现金系统的不诚实用户两次花费相同硬币的情况。在比特币、以太坊和其他加密货币中,两次使用相同的硬币几乎是不可能的。区块链是一种组织和存储数据的方法。当然,还有其他方法,尽管区块链有几个独特的功能。
特征
为什么要使用区块链?为什么不使用传统的存储方法,例如 SQL 数据库或键值存储?区块链提供了 2 个特性,使其非常适合加密货币:它是分布式的和无需信任的。即使公司使用数据复制,通常也是 2-5 份。在区块链中,副本的数量可以是数百或数千。这样,区块链是 分布式的 . 比特币账本的副本数等于全节点数。要清除有关交易的信息,您需要将其从全球每个完整节点中删除。要阻止区块链,你不能只入侵一台计算机甚至整个国家。您需要从不同位置破坏计算机,运行不同的操作系统并采取不同的安全措施。通过入侵每个完整节点来停止区块链实际上是不可能的。在 PayPal 中,您相信所有交易都会完成,并且您可以随时从余额中提取资金。在区块链中,你不需要信任任何公司。您也不需要信任任何特定用户。相反,您相信大多数用户会诚实行事。从这个意义上说,区块链是 无信任 系统。无信任系统的特点之一是对每个人都公平的规则。例如,PayPal 是数字货币的垄断者,因此它可以增加佣金、锁定您的资金、延迟提款。基本上,它可以用你的钱做任何事情。在区块链中,没有人有权制定自己的规则。相反,它是由多数人和自由市场驱动的。
缺点
区块链不是灵丹妙药,它也有自己的缺点。它们中的大多数是部分可修复且可以忽略不计的,尽管其中一些可能会成为问题。请注意,这只是可能出现的问题的概述;清单并不详尽。
女巫攻击
第一个问题是女巫攻击的可能性。这是一个人控制几个节点并说服另一个用户所有这些节点属于不同用户的情况。基本上,当成功时,这种攻击允许用户完全阻止另一个用户进入网络。当攻击者可以决定向您展示哪些交易以及不向您展示哪些交易时,这可能会导致交易审查。攻击者还可以通过不将您的交易广播给其他用户来阻止您的交易。它可能导致双花,并可能阻止您访问网络的其余部分。为了防止 Sybil 攻击,节点可以将出站连接限制为每个子网一个。另一种减轻攻击的方法是寻找具有可疑低哈希率的节点。
拒绝服务攻击
另一个可能的问题是拒绝服务 (DoS) 攻击。攻击者可以通过向节点发送大量数据来使节点过载。例如,它可以发送一个非常大的块或带有执行时间过长的脚本的交易。比特币和其他加密货币对 DoS 攻击有一定的保护作用。例如,许多加密货币具有最大可能的块大小。
可扩展性
公共区块链系统难以扩展。困难意味着既不容易也不不可能。这并非不可能,因为没有任何技术障碍可以提高网络的吞吐量。这并不容易,因为只是增加它会使系统更加集中。增加区块链的容量意味着增加运行完整节点的硬件要求,这意味着更少的人想要并且能够维护节点。这是一个区块链是否应该首先具有巨大可扩展性的问题。首先,区块链不是灵丹妙药——没有必要将它用于一切,即使它与金钱和金融有关。其次,区块链可以通过链下解决方案进行扩展。例如,可以通过闪电网络增加比特币吞吐量。
阻止内容
每个块由两部分组成:标题和数据。块头是元数据。通常,它包含诸如块号、时间戳(创建块时的记录)、块哈希和随机数等信息。
块数据是有效载荷。这是我们需要存储的有用信息。数据通常包含多条共享相同结构的信息。在比特币中,每个块包含大约一百个这样的块。每一块都是一笔交易。为简化起见,每笔交易都是发件人地址、收件人地址、交易金额和费用。在以太坊中,每笔交易还包含“输入数据”字段,用于将数据传递给智能合约。
创世区块
创世块是块号为零,是区块链中创建的第一个块。创世块与其他块相同,只是它没有与前一个块的链接。
块生成
向区块链添加新信息的唯一方法是在其末尾添加一个块。添加的信息量通常受到软件的限制,否则可能会变得臃肿,并且大多数用户无法保留区块链的整个历史。一般的想法是在相等的时间段内添加新块。合格的用户创建块并将它们发送给其他网络参与者。如果该块有效,则其他用户接受它。如果它无效,他们会忽略它并可能惩罚块创建者。有效块在几秒钟内通过网络传播。
工作证明
在工作量证明(PoW)系统中,添加新块通常称为“ 挖矿” ”。每个矿工独立地尝试找到具有所需难度的有效哈希。这个难度是由软件自动定义的,以控制新块的数量。第一个找到正确哈希的矿工成为新区块的创建者。随着越来越多的矿工加入网络,总哈希率——所有矿工的综合计算能力——增加。如果没有限制,矿工会越来越频繁地找到散列,从而找到块。但大多数硬币都在寻找新区块的恒定速率,因此它们会根据哈希率改变挖矿难度。难度告诉用户矿工应该找到多少哈希才能获得正确的哈希。难度越高,需要的哈希值越多。当哈希率增加时,难度增加。以这种方式,挖矿难度抵消了矿工不断增长的计算能力。网络的难度根据过去挖掘新区块的频率重新平衡。可以在每个块或几个块之后重新调整。例如,在比特币中,难度每 2016 个区块重新调整一次,大约需要 2 周时间。
权益证明
在权益证明(PoS)中,区块生产者是根据他们拥有的硬币数量来选择的。此选择可以随机进行,也可以通过选择获得最多选票的人来进行。你拥有的硬币越多,你被选为下一个生产者的概率就越高,或者你拥有的投票权就越大。选定的生产者然后在指定的时间制作块。为了阻止节点对错误的区块进行投票,可以引入惩罚。一种方法是惩罚那些在同一轮中对多个区块进行投票的节点。另一种方法是惩罚那些投票支持不受欢迎的选择的节点,假设获得少数票的块是不正确的。质押过程可以委托给其他节点。例如,如果用户拥有大量硬币,但他不想或不能定期投票,他可以将质押委托给另一个用户。该用户将拥有与其他用户的硬币相结合的投票权。获得利润后,受托人可以分享他的部分收益。委托和分享利润的整个过程可以自动完成。
散列
哈希就像数字文件的足迹。不同的文件产生不同的哈希值,相同的文件产生相同的哈希值。您可以很容易地找到每个文件的哈希值,但很难通过哈希值找到原始文件。此外,稍微不同的文件会产生非常不同的哈希值,因此您无法根据它们的哈希值判断两个文件的不同之处。在区块链中,每个区块都包含前一个区块的哈希值。那样的话,如果某个区块稍微改变,它的哈希值也会改变,所有后续区块的哈希值也会改变。每笔交易的哈希都是基于之前的哈希和区块数据。它还可以包含时间戳。如果块是通过挖矿创建的,网络难度和随机数也包含在哈希中。
不变性
不变性意味着某些东西不能改变。当人们说区块链是不可变的时,他们的意思是改变旧块是不切实际的。如果你改变一个交易,这个交易的哈希值也会改变,这反过来又会改变 Merkle 根的哈希值,进而改变区块的哈希值。由于每个块都保留了前一个块的哈希值,因此更改块之后的所有块也将失效。想象一下,攻击者想要更改 1 小时前进行的交易。攻击者需要挖掘所有区块,从已更改的区块到最新的区块。此外,他还需要挖掘所有未来的区块,这些区块将在他挖掘之前的区块时创建。即使是最早的区块也确实可以更改,但需要控制一半以上的总算力,因此 51% 攻击的含义。通常,块越旧,攻击者成功更改它的可能性就越小。商家通常会等待 6 个区块以确保他们能拿到钱,因此有 6 个确认规则。
节点
节点是读取和写入区块链的计算机。不同类型的节点具有不同的角色和能力。
挖矿节点
挖矿节点是产生区块的节点。他们通常拥有巨大的计算资源。矿工通常不验证区块,因为他们不存储区块链。要制作新区块,他们只需要一组最近的交易和最后一个区块的哈希。
全节点
全节点是存储区块链整个副本的节点。他们验证他们收到的块,并将验证的块传播到网络。他们还可以将自己的交易发送到池中。
轻节点
轻节点不存储整个区块链。它们通常存储块头和非常小的交易集。轻节点无法验证区块,需要信任全节点。然而,轻节点可以连接到其他节点、接收新块并发送交易。
网络“节点”
Web 节点根本不是节点。它们是连接到中心化服务器的钱包。他们不存储区块链的任何部分。网络钱包无法连接到其他节点、接收区块或发送交易。他们只能要求服务器这样做,并期望服务器会提供正确的信息。他们完全信任他们所连接的服务器。不存储区块链数据的移动钱包也属于那里。
网络
在去中心化系统中,节点来来去去。不能保证某个特定节点今天或明天会在线。这一事实严重影响了连接节点和与节点交互的方法。
对等发现
对等发现是了解其他网络参与者的过程。当用户第一次启动一个节点时,它没有跟踪要连接的对等点。为了与网络交互,它应该找到对等点并将它们保存在内存中。有几种方法可以发现其他对等点,包括硬编码地址、用户输入、DNS 查找等。最原始的方法是连接到钱包程序中硬编码的地址。这些地址代表最初由开发人员设置的节点,用于在最初的几天或几周内发展网络。虽然这是一种简单的方法,但在成熟的网络中通常不是很普及。例如 ,当其他方法不起作用时,比特币中的硬编码地址仅用作最后的手段。用户也可以 手动 提供他们在其他地方获得的节点列表。用户可以将它们写入文本文件,作为命令行参数提供,或通过图形用户界面输入它们。另一种发现对等点的方法是 DNS 查找 。有保存节点列表的 DNS 服务器。这些列表由这些服务器的维护者更新。通常,有多个 DNS 服务器,因此如果其中一个服务器出现故障,其他服务器仍将提供服务。一旦一个节点找到至少一个对等点,他就可以连接它。如果连接成功,他们可以 交换 有关他们收集的对等点的信息。发现后,节点地址将存储在数据库中,以便在下一次计算机启动时获取它们。具有较新客户端软件版本的节点是首选。旧的、非活动节点的地址被删除。
区块链下载
一旦一个节点连接到其他对等点,它就可以开始逐块下载区块链。第一种方法是简单地让节点从其他对等点下载块。它可能很慢,因为它不仅取决于您的 Internet 连接速度,还取决于对等方的带宽有多宽。但它是一种分散的方法,这意味着它不依赖于单个站点或服务器。下载区块链数据的另一种方法是从 Internet 上的某些外部来源下载。它可以是某个随机网站、torrent 文件或您朋友发送给您的档案。这可能比通过 p2p 连接下载要快,但它也是集中式的,需要信任您从中下载它的来源。不仅如此,许多曾经通往区块链档案的链接现在可能已经死了。无论下载区块链的方法是什么,都应该对其进行验证,这可能需要更长的时间。计算机应该验证创世区块中的每个区块。验证过程包括检查工作量证明,确保一个区块中的所有交易都是正确的,检查 Merkle Tree 根计算是否正确等。虽然下载速度取决于带宽,但验证依赖于 CPU 能力。有时,可以跳过整个区块链的验证过程,只检查那些包含钱包交易的区块,即发送到所选钱包或从所选钱包发送的交易。这种轻度验证的可用性取决于您使用的钱包软件。计算机应该验证创世区块中的每个区块。验证过程包括检查工作量证明,确保一个区块中的所有交易都是正确的,检查 Merkle Tree 根计算是否正确等。虽然下载速度取决于带宽,但验证依赖于 CPU 能力。有时,可以跳过整个区块链的验证过程,只检查那些包含钱包交易的区块,即发送到所选钱包或从所选钱包发送的交易。这种轻度验证的可用性取决于您使用的钱包软件。计算机应该验证创世区块中的每个区块。验证过程包括检查工作量证明,确保一个区块中的所有交易都是正确的,检查 Merkle Tree 根计算是否正确等。虽然下载速度取决于带宽,但验证依赖于 CPU 能力。有时,可以跳过整个区块链的验证过程,只检查那些包含钱包交易的区块,即发送到所选钱包或从所选钱包发送的交易。这种轻度验证的可用性取决于您使用的钱包软件。验证依赖于 CPU 能力。有时,可以跳过整个区块链的验证过程,只检查那些包含钱包交易的区块,即发送到所选钱包或从所选钱包发送的交易。这种轻度验证的可用性取决于您使用的钱包软件。验证依赖于 CPU 能力。有时,可以跳过整个区块链的验证过程,只检查那些包含钱包交易的区块,即发送到所选钱包或从所选钱包发送的交易。这种轻度验证的可用性取决于您使用的钱包软件。
发送交易
在传播新交易和区块时,加密货币通常使用一种叫做 Gossip 协议的东西 . 就像很多人在传播八卦,直到每个人都知道它。它从一个节点进行交易以发送资金开始。交易签署后,节点将其发送给邻居节点。当这些节点收到交易时,他们会检查它。如果交易结构正确(具有正确的格式、签名等)并且不是双花,他们将依次将其发送给他们的同行。当然,一个节点可能在它的对等方试图发送它时已经拥有该事务。因此,节点首先发送交易的哈希值。如果接收节点有带有该哈希的交易,它将不会再次下载它。如果接收节点没有交易,它将下载并进一步发送。最终,所有连接的节点,包括矿工,都将收到交易。
块传播
积极出块的矿工和矿池收集所有传入的交易。他们在下一个区块中包含尽可能多的交易在经济上是可行的,因为他们将获得所有交易费用。在矿工或矿池找到正确的哈希值后,他会将区块发送给他的同行。之后,该过程与发送交易相同。收到新块的节点将其发送给其对等节点,一段时间后,每个人都拥有该块。在 PoS 系统的情况下,过程几乎相同。当区块生产者需要出块时,他会收集所有交易,将它们放入自己的区块中,然后将区块发送给对等方。
达成共识
为了正常工作,像加密货币这样的去中心化系统应该不断尝试达成共识。这基本上意味着每个节点应该有相同的区块和交易集,它们以相同的顺序存储。大多数时候,共识会毫无问题地达成。正确的交易和区块会传播,不正确的交易和区块会消亡。但是,在某个阶段,两个块可能会指向同一个父块。换句话说,这条链将被分叉成两条链。 叉子 在 PoW 和 PoS 系统中都可能发生。在工作量证明链中,两个矿工可以同时找到一个哈希值,并且两者都将引用同一个区块,即之前开采的那个区块。在权益证明中,区块生产者可以选择一个较旧的区块,而不是最后一个区块作为其父区块。为了解决一个分叉,整个网络应该就哪个分叉将成为主要分叉以及哪个将消亡达成一致。经验法则是“最长链获胜”。在 PoS 链中,这仅仅意味着最终,一个分叉会比另一个分叉长至少一个区块,所有诚实节点和区块生产者都将在该分叉上工作,并放弃另一个。在 PoW 链中,“最长”通常意味着“完成了更多的工作量证明”,因此获胜的叉子不是区块数最大的叉子,而是更多矿工工作的叉子。
应对攻击
但是当有欺诈节点试图覆盖历史或审查网络时,如何达成共识呢?有三种可能的情况。首先,攻击者没有多数。大多数是在采矿设备(PoW)或硬币(PoS)中。在那种情况下,他的可能性非常有限。他可以尝试进行 51% 的攻击,但失败的可能性很高。他还冒着在电费、挖矿电脑上浪费金钱或通过购买硬币获得股份的风险。其次,攻击者控制了多数。在那种情况下,他几乎可以控制网络。但是,即使某些权威机构会控制网络,它也可能会赔钱。加密货币的美妙之处在于它们在构建时考虑了博弈论原则。在加密货币中,拥有权力总是意味着有风险。它可以是 GPU、ASIC、赌注的硬币,或其他东西。攻击可能会伤害许多网络参与者,并且会影响价格。攻击者拥有的采矿设备和质押的硬币如果有价值的话,就会失去价值。有人甚至不试图发动攻击就控制了大部分权力可能是危险的。如果这一事实被人所知,它将迅速传播并可能影响价格。第三,大多数节点表现不佳。事实上,大多数甚至不需要有人来协调。仅仅通过错误的行为,他们不太可能进行双花,但他们可以阻止网络。这是非常不可能的事件,因为大多数人通常遵守法律,尽管理论上是可能的。与第二种情况一样,行为不端的大多数人可能会受到市场力量的惩罚。攻击可能会伤害许多网络参与者,并且会影响价格。攻击者拥有的采矿设备和质押的硬币如果有价值的话,就会失去价值。有人甚至不试图发动攻击就控制了大部分权力可能是危险的。如果这一事实被人所知,它将迅速传播并可能影响价格。第三,大多数节点表现不佳。事实上,大多数甚至不需要有人来协调。仅仅通过错误的行为,他们不太可能进行双花,但他们可以阻止网络。这是非常不可能的事件,因为大多数人通常遵守法律,尽管理论上是可能的。与第二种情况一样,行为不端的大多数人可能会受到市场力量的惩罚。攻击可能会伤害许多网络参与者,并且会影响价格。攻击者拥有的采矿设备和质押的硬币如果有价值的话,就会失去价值。有人甚至不试图发动攻击就控制了大部分权力可能是危险的。如果这一事实被人所知,它将迅速传播并可能影响价格。第三,大多数节点表现不佳。事实上,大多数甚至不需要有人来协调。仅仅通过错误的行为,他们不太可能进行双花,但他们可以阻止网络。这是非常不可能的事件,因为大多数人通常遵守法律,尽管理论上是可能的。与第二种情况一样,行为不端的大多数人可能会受到市场力量的惩罚。攻击者拥有的采矿设备和质押的硬币如果有价值的话,就会失去价值。有人甚至不试图发动攻击就控制了大部分权力可能是危险的。如果这一事实被人所知,它将迅速传播并可能影响价格。第三,大多数节点表现不佳。事实上,大多数甚至不需要有人来协调。仅仅通过错误的行为,他们不太可能进行双花,但他们可以阻止网络。这是非常不可能的事件,因为大多数人通常遵守法律,尽管理论上是可能的。与第二种情况一样,行为不端的大多数人可能会受到市场力量的惩罚。攻击者拥有的采矿设备和质押的硬币如果有价值的话,就会失去价值。有人甚至不试图发动攻击就控制了大部分权力可能是危险的。如果这一事实被人所知,它将迅速传播并可能影响价格。第三,大多数节点表现不佳。事实上,大多数甚至不需要有人来协调。仅仅通过错误的行为,他们不太可能进行双花,但他们可以阻止网络。这是非常不可能的事件,因为大多数人通常遵守法律,尽管理论上是可能的。与第二种情况一样,行为不端的大多数人可能会受到市场力量的惩罚。有人甚至不试图发动攻击就控制了大部分权力可能是危险的。如果这一事实被人所知,它将迅速传播并可能影响价格。第三,大多数节点表现不佳。事实上,大多数甚至不需要有人来协调。仅仅通过错误的行为,他们不太可能进行双花,但他们可以阻止网络。这是非常不可能的事件,因为大多数人通常遵守法律,尽管理论上是可能的。与第二种情况一样,行为不端的大多数人可能会受到市场力量的惩罚。有人甚至不试图发动攻击就控制了大部分权力可能是危险的。如果这一事实被人所知,它将迅速传播并可能影响价格。第三,大多数节点表现不佳。事实上,大多数甚至不需要有人来协调。仅仅通过错误的行为,他们不太可能进行双花,但他们可以阻止网络。这是非常不可能的事件,因为大多数人通常遵守法律,尽管理论上是可能的。与第二种情况一样,行为不端的大多数人可能会受到市场力量的惩罚。仅仅通过错误的行为,他们不太可能进行双花,但他们可以阻止网络。这是非常不可能的事件,因为大多数人通常遵守法律,尽管理论上是可能的。与第二种情况一样,行为不端的大多数人可能会受到市场力量的惩罚。仅仅通过错误的行为,他们不太可能进行双花,但他们可以阻止网络。这是非常不可能的事件,因为大多数人通常遵守法律,尽管理论上是可能的。与第二种情况一样,行为不端的大多数人可能会受到市场力量的惩罚。