从节点到网络:掌握 Web3 基础知识_区块链:COI

Web3庞大而又复杂,结合了各种组件、技术和概念。无论你是 Web3、区块链和加密货币的新手还是老手,通过这篇稿子,你都将获得一个关于支持 Web3 的各种组件的高层次概述,使你能够理解每个组件的目的和好处。具体来说,这个系列的目的是:

1.提供 Web3 基本组件的概述

2.评估各种组件的目的

我们将 Web3 定义为互联网的次迭代,将如今的互联网中我们所喜爱的东西与可验证的数字所有权、开放系统、透明度和不可更改性相结合。Web3、区块链和加密是三个密切相关的主题,但在本篇中会被视为三个独立的术语。

区块链:一种技术创新,能够实现可验证的数字所有权、透明度和不可更改性

Crypto:加密货币的简称,描述了区块链网络上加密安全的代币

Web3:包括区块链、加密货币,以及建立在它们之上的所有生态系统和创新

要了解 Web3,我们必须首先了解基础的区块链和加密技术。虽然 Web3 仍然是一个相对年轻的概念,比特币在 2009 年才推出,但随着新的技术创新以疯狂的速度进入市场,这个行业正在迅速发展。

我希望这个系列能帮助你深入钻研 Web3,并能帮助你找到可以在这个系列之外自己研究的感兴趣的领域。在每一个主题中,都可以找到几十个更深入的补充材料的链接,以帮助引导你找到有用的内容。

这个系列分为三个部分,你所在的第一个部分涵盖了从 Web3 节点基础设施到 layer 1 区块链网络如何工作的所有内容。下一篇文章将介绍 layer 2、互操作性和建立在本篇文章所概述的基元上的庞大的 dApp 生态系统。最后,最后一块将涵盖链外环境和链上/链下通信。

我们将 Web3 基础设施分为多个部分,反映了链上生态系统、支持链上生态系统的链下环境以及将去中心化的网络相互连接并允许这些网络与链下环境连接的中间件。

链上生态系统

第一层网络:单体网络、模块化网络、共识(PoW、PoS)、共享账本技术、虚拟机与 EVM 兼容、智能合约和 ERC 代币标准

第二层网络:闪电网络、optimistic rollup、零知识 rollup

节点层:挖矿/验证节点、节点客户端软件、挖矿/盯盘池

网络层:

去中心化的应用程序(dApp)层

链外环境:分析、审计与安全、钱包、中心化交易所(CEX)、开发者工具(框架、IDE)、去中心化云(存储、计算、索引)。

互操作性层(“中间件”):

网络互操作性:链桥、原子 swap

链上/链下通信工具。区块链 API、Oracle

链上生态系统分为三个主要层:

网络层

节点层

这三层结合在一起,实现了 Web3 最著名的由智能合约驱动的生态系统和应用。我们从节点层开始看链上的生态系统,然后一直到 dApp 层。

这一层也经常被称为硬件层,因为在这一层,硬件以及与操作硬件参与特定区块链网络有关的一切都被设置好了。

节点是一个服务器,它运行一个被称为客户端的网络专用软件,它允许节点参与网络的区块创建过程,允许访问整个区块链的历史数据,并允许执行 RPC 命令(在 Layer1 部分有更多介绍)。RPC 是指远程程序调用,它允许节点调用和执行某些命令。

在撰写这篇文章时,按市值计算,最大的两个区块链网络是比特币和以太坊。虽然参与每个网络有不同的要求,但它们都需要一个符合客户硬件规格的服务器(任何计算机),一个互联网连接,以及客户端软件。对于比特币,最流行的客户端软件是 Bitcoin Core,而对于以太坊,最流行的客户端是 GETH(Go Ethereum).

客户端还编纂了区块链的规则,并确保任何被验证的新区块也遵守同样的规则。这很重要,因为如果一个节点验证了一个其他节点不接受的区块,网络就会分叉:一组节点遵循一套规则,而其余节点遵循另一套规则。虽然他们可能共享相同的历史,但在不同的验证规则被引入的那一刻,一个新的链被创建并只被接受新规则的节点所接受。

虽然以上是最流行的客户端,但它们并不是可以用来参与区块链网络的唯一客户端。只要其他客户端使用相同的验证规则,他们就可以验证区块并为区块链作出贡献。

比特币客户端

以太坊客户端

要阅读更多关于区块链如何工作的信息,请跳到 Layer 1 网络部分。

通常鼓励普通用户运行自己的节点,以支持公共网络的去中心化。当更多的用户运行他们自己的节点时,单个行为者积累大多数运行节点并攻击网络的机会就会减少。用户被鼓励通过区块奖励和交易费用来运行他们自己的节点,网络将这些费用分配给节点运营商。

尽管有这些激励措施,用户不愿意自己建立节点的原因有很多:复杂的技术设置,购买必要硬件的前期资金有限,或者只是暂时需要节点。这就是节点基础设施供应商的作用。这些供应商负责节点的设置和操作,为客户提供端到端的服务。一些专门从事节点基础设施的大型供应商包括 Blockdaemon 和 Atlas.

这些节点基础设施供应商的一个经常被忽视的目的是为那些尚未建立强大的、去中心化的节点网络的新区块链项目建立节点。这些较新的网络可以利用节点基础设施供应商来启动一个全球分布式网络,而不需要在每个国家建立自己的基础设施。

节点基础设施提供商为客户建立节点,而挖矿池和质押提供商则运营自己的节点,但允许用户在其节点下汇集资源。这增加了节点从网络中获得区块奖励和交易费收入的可能性。对于想把自己的闲置硬件投入使用的用户来说,这意味着他们可以加入一个矿池,而不需要任何复杂的技术设置,并开始用他们现有的资源赚取收入。

不同共识机制的网络节点操作有一些细微差别。基本上,使用工作证明的网络汇集了计算资源,而权益证明的网络汇集了网络代币。对于工作证明网络来说,矿池大大降低了进入的技术门槛,而对于权益证明网络来说,质押提供者则大大降低了进入的财务门槛(所需的最低质押)。更多细节将在共识部分介绍。

一些最大的矿池包括 Foundry USA 和 F2POOL,而一些最大的质押提供商包括 Lido 和 Rocketpool.

Web3 的节点层由数千个全球分布的节点组成,每个属于特定网络的节点都运行该网络所需的客户端软件。只要客户端软件的验证规则与网络上的其他节点相同,该节点就可以正常运行,而不会造成区块链的分叉。

虽然任何人都可以在去中心化公链网络上运行自己的节点,但节点基础设施供应商专门负责设置和运营运行节点和启动网络所需的硬件。

最后,矿池和质押供应商的行为降低了采矿和质押业务的进入门槛。这使得用户可以参与挖矿和质押活动,赚取网络奖励,而不必满足全部网络要求。

区块链网络建立在上述的节点基础设施之上。网络层由各部分组成,包括各种技术,基本层是 layer 1 网络、layer 2 网络和在这些网络之间进行通信的互操作层。

比特币、以太坊和 Solana 可能是在撰写本文时最知名的 Layer 1 网络。Layer 1 网络是指 Web3 生态系统中结算交易的主要网络。Layer 2 网络是作为 Layer 1 网络的更深层存在的,交易可以被降级到 Layer 2 网络上(在我的下一篇文章中会有更多介绍)。虽然在架构上有很大的不同,但它们都依赖于一组类似的架构基元。

它们都有一个共享账本,跟踪网络上的交易

它们都采用机制来实现与哪些交易和区块被认为是有效的共识

它们都有一种方法来计算发送到网络的命令(以太坊、 Solana 和其他 EVM 兼容链的虚拟机,以及比特币网络的 Bitcoin Script)

在下面的章节中,我们将分别研究这三个要素,并剖析我们如何从交易到区块链。

所有去中心化的区块链网络都有一个共享账本。事实上,区块链就是共享账本。让我们退一步来说:账本是一个企业经济活动的记录,用来追踪金钱的转移或资产所有权的转移。术语共享账本意味着账本不是由一个单一实体持有和管理,而是由许多实体持有和管理。

在去中心化的区块链网络中,区块链(网络上所有活动的分类账)被保存在网络上的所有节点上。如果活动的账本只由一个中心化的机构管理和存储,我们会遇到以下挑战。

审查和排斥(见用户被 PayPal 平台封禁)

记录管理人的渎职行为(见 Luckin Coffee 虚报财务数据)

记录的丢失(见亚历山大图书馆的毁灭)

如果账本存储在全球数百甚至数千个节点上,我们就会得到一个很难被故意和无意篡改或破坏的系统。如果一个节点倒下了,还有许多其他节点,用户可以与之连接,继续与账本进行互动。

然而,这个系统确实带来了其他挑战:网络上的节点如何就什么是正确或有效的账目条目达成一致?这就是共识算法的作用。

在区块链网络中,共识一词指的是网络上的节点之间就哪些账本条目(交易和区块)是有效的并被节点接受的一般协议。

在学术界,这个问题被称为拜占庭将军问题。这个问题描述了这样一种情况:一个系统的行动者必须在战略上达成一致,以避免灾难性的失败,但系统中的一些行动者是不可靠的。

在这个假想的场景中,有三个行为者,他们必须协调他们在拜占庭战争中的下一步行动,以避免被敌人攻破。三个行为体中的一个是恶意的,向其余各方转发不一致的信息。系统中的诚实(非恶意)行为者如何知道该相信谁?或者换个说法:系统中的所有行为者如何能就接受哪条消息达成共识?

这个问题具有重要意义,因为随着更多的行动者进入系统,(错误)交流的复杂性会成倍增长。

第一个在全球范围内成功解决这一挑战的系统是比特币网络及其工作证明算法。

比特币网络的工作证明算法(也被称为 PoW)解决了拜占庭将军的问题,要求任何信息必须经过某种验证才能被节点接受。任何没有经过验证的信息都不被接受为有效信息,并被节点拒绝。

验证过程也需要计算资源,这使得伪造验证变得异常困难。这也是“工作证明”一词的由来:“向我证明你已经做了必要的工作,让我接受你的信息”。

让我们从理论到实践,更深入地挖掘交易、区块和 PoW 过程的机制。别担心——我们会保证深入浅出的!

比特币区块是储存交易的地方,是精心控制的信息单位,一旦完成加密拼图,就会在整个网络中广播。

比特币网络的一个区块由两个主要部分组成。

区块头

交易列表

交易列表就像它听起来一样:它是一个节点收到并包含在一个区块中的交易列表。在比特币网络中,交易是比特币网络上的比特币转移(注意:英文中小写 b 开头的比特币是指比特币资产,而大写 B 开头的比特币是指比特币网络)。比特币网络是一个共享的公共账本,追踪比特币资产的流动;因此,比特币网络上的交易是比特币在地址之间的转移。

比特币使用未花费交易产出,也被称为 UTXO 进行交易。交易和 UTXO 将在 UTXO 模型与账户模型部分进一步介绍。

区块头是事情开始变得有趣的地方。虽然交易的数量和每笔交易的转账金额因区块而异,但区块头的元素对每笔交易都是一样的。

虽然区块头包括许多元素,但每个元素都对系统至关重要,为了介绍的目的,我们将进一步详细介绍以下内容。

前一个区块头的哈希值:前一个区块的所有元素都被哈希化

难度目标:确定“前导零”的数量,从而确定挖矿的难度

Nonce:一个任意的数字(nonce 是“nonsense”的缩写)

Merkle root:该区块内所有交易的哈希输出

在我们继续之前,我们需要简单介绍一下哈希算法(hashing)。哈希化是将一串字符转化为另一个通常为固定长度的值的过程。当一个哈希算法是确定的,就意味着在相同的输入下,每次的输出都是一样的。然而,如果原始字符串的一个字符发生变化,哈希的输出就会完全改变,以至于无法推断出与原始字符串的关系。请看下面的 Bitcoin 与 bitcoin SHA256 哈希算法输出的比较。

在比特币网络中,一旦一个区块被开采出来,该区块的头就会被哈希化,并作为一个输入包括在下一个区块中。因为每个区块的前一个标题的哈希值被包含在下一个区块中,所以就形成了一个由区块构成的链:这就是区块链。

在任何区块中的任何变化都会破坏这条链,因为已经包含在下一个区块中的哈希输出将与新的哈希输出不同。因此,这样的变化会被网络上的节点所拒绝。

Merkle tree 是一种数据结构,其中数据结构中的元素被哈希和重哈希递归,直到只剩下一个元素。这个最后剩下的元素就是 Merkle Root.

Merkle tree 有一个有趣的数学特性,即在数学上,在只提供 Merkle root 和一个元素的情况下,可以证明这个元素是 Merkle tree 的一部分。

在比特币网络中,存储在区块头中的 Merkle root 是该区块中包含的所有交易的递归哈希输出。这意味着,如果任何交易被调整,Merkle root 也将改变,这也将改变整个区块头的哈希输出。这将再次导致区块的无效化。

我们知道了什么是哈希算法、区块是如何结构化的和区块是如何被链起来并形成区块链的,现在我们终于可以更深入地了解工作证明实际是如何工作的。回到拜占庭将军的问题,上面提到的验证信息实际上是区块链中的一个区块。

为了使一个区块得到验证,需要找到一个符合特定标准的哈希值。还记得仅仅一个位元(bit)的变化就会极大地改变哈希值的输出吗?这正是比特币网络的 PoW 算法寻找目标哈希值的方法:Nonce 是一个任意的数字,它被调整以改变区块头的哈希值输出。如果哈希值输出不符合目标哈希值,nonce 会再次被调整。这个过程不断重复,直到区块头的哈希值满足目标条件。一旦目标条件得到满足,区块头就算是得到了验证,区块会被广播给网络上的其他节点,让它们把新的区块附加到它们的区块链副本中。

目标条件,或预期的哈希值,是由它有多少个前导零定义的。如果生成的哈希值有足够的前导零,也就是说,已经完成了寻找符合目标条件的哈希值的工作,那么网络上的节点就接受该区块为有效:该区块被认为是“已挖矿”。

为了更好地理解这个过程,请浏览 Github 上的这个哈希算法模拟器。输入字符“bitcoin”,并在末尾添加数字,从 0 开始,以 1 的增量不断增加,直到达到一个前导零(例如,bitcoin0,bitcoin1,等等)。你会注意到,为了找到一个前导零,即哈希值的第一个字符是零,你只需要将数字增加到 3(“bitcoin3”)。现在试着找到两个前导零。剧透:第一个有两个前导零的哈希结果是 “bitcoin230”.

还有更多的规则需要节点遵守,比如最长的链总是有效的链(防止整个区块链被覆盖),已经开采的区块必须有一个在网络时间一定阈值内的时间戳(这样最新的区块就不会被覆盖),还有围绕如何确定网络难度(目标哈希的前导零数量)的复杂机制。有兴趣的读者可以浏览 Bitcoin.org 或 Bitcoin Wiki 了解更多细节。

上述机制,在历史上第一次允许交易被独立确认和验证,而不需要第三方见证和批准交易。与其将交易提交给遭受中心化挑战的银行,不如将其发送到一个独立的节点网络,这些节点可以在没有干预的情况下自主地处理交易。这种技术范式的转变和对账本的重新认识是今天 Web3 生态系统赖以建立的基本要素。

此外,由于加入这些网络的唯一要求是可以运行节点软件的计算设备和互联网连接,任何人都可以作为独立的节点加入网络,增强网络的分散性。

虽然像比特币网络这样的 PoW 网络有很多节点(根据 bitnodes.io,截至 2022 年 9 月 15 日,有近 15000 个节点),但有人批评说,由于网络上的高度竞争,单个节点的准入门槛太高。一个节点拥有的哈希能力(即计算资源)越多,该节点就越有可能首先解决哈希难题,因为它能以比网络上其他节点更快的速度进行更多的计算。作为一个哈希值较低的单一节点进入比特币网络,将导致能源成本,而成为第一个成功开采新区块的机会几乎不存在。

能源消耗也是一个备受争议的话题:网络需要大量的能源,一些估计指出,比特币网络的年能源消耗超过挪威。

这些能量被浪费在节点每秒进行数百万次的哈希计算,寻找哈希。虽然这增加了比特币网络的安全性,但它确实引出了一个问题,即是否有任何不那么浪费的方法来验证区块。这就是权益证明的由来。

在权益证明中,节点被赋予了根据其在网络中的质押来验证一个区块的权限。这是一种与 PoW 根本不同的方法,大大降低了验证所需的计算能力。节点不提供计算能力,而是将他们的本地网络代币作为抵押品,以换取验证区块的机会。这从本质上消除了基于竞争的计算,增加了能够成功验证区块的节点的分布。

合并后的以太坊是一个权益证明网络。它需要用 32 个 ETH 做质押才能成为一个验证者,之后节点可以参与区块验证,从而为网络增加新的区块作出贡献。 质押指的是锁住代币,是 PoS 网络的基础。

除了成为验证者的高额前期费用外,PoS 网络还采用其他方法来防止恶意行为者扰乱网络。一般来说,PoS 网络还要求多个节点同时验证同一个区块,这就减少了一个节点验证错误或恶意区块的可能性。此外,如果发现一个节点有恶意行为,他们的权益可以被砍掉。这意味着他们在协议中锁定的网络代币的数量被从节点中移除,并被转移到一个临时地址或烧毁。 代币的燃烧是指通过将代币发送到网络上没有人可以访问的地址,将其永久地从流通中移除。在以太坊网络中,这就是空地址(null address)。

除了工作证明(PoW)和权益证明(PoS)之外,还有许多为特定网络设计的具有特定目的的共识机制。下面是一份不完全的流行共识机制的清单。

Delegated Proof-of-Stage(DPoS)

授权证明(Proof-of-Authority, PoA)

活动证明(Proof-of-Activity, PoA)

Brun 证明(PoB)

Proof-of-Spacetime(PoSt)

历史证明(Proof-of-History, PoH)

实用拜占庭容错(pBFT)共识【Practical Byzantine Fault Tolerance (pBFT) Consensus】

前面我们提到,区块链是通过哈希算法将数据块相互加密连接起来,从而形成一个账本。这个账本被保存在整个网络的数千个节点上,使账本在这些网络中“共享”。任何账本,不管是共享区块链账本还是传统会计账本,都需要记账。记账指的是如何接受、执行交易并将新的余额存储在区块链上。在 Web3 中,有两种主要的记账模型。

未消费交易输出(UTXO)模型(如比特币网络)

账户模型(The Account Model,如以太坊网络)

为了帮助理解这些不同的记账模型,将区块链视为状态机是有帮助的。状态机是一个存储其状态的系统,其状态可以根据对设备的输入而改变。这意味着,在任何给定的时间点,系统处于某种状态,随着对系统的任何输入,例如通过交易,系统的状态会发生变化。当向系统提供输入并且状态发生变化时,系统就会经历一个状态转换。

如果我们通过状态机的视角来看区块链,这意味着在任何给定的时间点,区块链系统处于 n 状态,任何被添加到区块链的区块都会导致状态转换和 n+1 的新状态。这个 n+1 的新状态考虑到了被添加到新区块中的所有交易,导致了一个新的系统状态。

UTXO 模型和账户模型的区别在于如何记账——或记录交易——的处理。

简单来说,在 UTXO 模型中,不存在账户余额这种东西。相反,每笔交易都是一张收据,指出谁给谁发了多少钱。这就是未消费输出这个名字的由来,因为用户可以转移的余额是他们尚未花费的先前交易的多少。

当用户想发送比特币时,所选 UTXO 内的所有比特币都成为交易输入(见上图 UTXO0)。一个新的 UTXO 被创建,其中包含要发送的数量(见上图 UTXO2)。如果 UTXO 持有的比特币多于要发送的比特币,剩余的比特币将作为一个新的 UTXO 送回给用户(上图中有 0.5 个比特币需要发送,但 UTXO0 中持有 2.0 个,所以 UTXO2 包含要发送的 0.5 个,UTX03 包含返回给发送方的 1.5 个)。

这也实现了一个有趣的特性:由于 UTXO 模型,每一个原生代币的来源都可以追溯到它的创建,因为每一个交易输出必须有一个相应的输入。对于使用 UTXO 模型的比特币网络来说,这意味着每个比特币都可以追溯到它被挖矿的区块。因此,UTXO 模型中不存在余额的概念。相反,余额是网络中所有交易收据的汇总。

网络上的每一笔交易都精确地定义了谁从哪笔交易的输入中获得多少比特币。然后,系统会验证交易投入是否未被使用,以及发送方是否有权力发送比特币,以及接收方是否符合接收比特币的正确参数。因此,UTXO 模型可以被认为是一个验证系统。

虽然不包括在前面的例子中,但交给矿工的交易费也作为交易的一部分被扣除。UTXO3 不是 1.5 个币,而可能是 1.499 个币,其中的差额是交易费。

账户模型更接近于传统银行账户的数字表示。在每个状态转换中,所有账户和余额的集合被存储起来,而不是像 UTXO 模型中那样,必须根据一组收据来计算账户余额。为了开始一个状态转换,需要启动一个交易,指示系统改变余额。然后,系统计算每个账户余额的变化,在下一个状态中,新的余额集被存储。

在 UTXO 系统中,每个交易输入(从以前的交易中收到的 UTXO)都是单独验证的,必须大于输出,而在账户模型中,账户余额必须大于交易输出。这意味着,在 UTXO 系统中,多个 UTXO 可以合并并单独验证,以创造一个或多个交易输出,而在账户模型中,只有余额需要验证。

关于 UTXO 模型与账户模型的更多信息,我强烈建议阅读 Horizen.io 关于这个问题的这篇内容。

虚拟机是一个模拟计算机的软件。它取代物理设备,虚拟计算机的所有物理组件作为软件在另一个系统中运行。例如,一个 Windows 虚拟机可以在 MacOS 上运行,允许整个 windows 系统在 MacOS 内运行。Windows 虚拟机的物理组件是用软件模拟的,所以 Windows 系统是不知道的。

这个概念也适用于区块链网络:一个单独的虚拟机组件与共享账本一起存在,它允许计算任务被执行。这意味着,除了存储余额(账户模型)或余额变化(UTXO 模型)的共享账本外,还有一个单独的计算组件来计算余额。这个计算组件也可以用于简单的余额计算之外的更复杂的逻辑。这就是为智能合约铺平道路的原因——后面会详细介绍。第一个获得广泛成功的此类系统是以太坊虚拟机 (EVM)。

Bitcoin Script 也可以被认为是一个虚拟机,因为它是比特币网络的计算组件,节点用它来验证 UTXO 和执行交易。然而,比特币脚本是相当有限的,无法运行像 EVM 那样的复杂逻辑。

EVM 是一个模拟特定计算机系统的软件,在以太坊节点上运行。EVM 的主要目的是计算以太坊网络的世界状态,并运行智能合约。EVM 的创新之处在于两个方面:

EVM 实现了世界状态的去中心化计算,包括执行有点复杂的智能合约的计算逻辑

EVM 能够在去中心化的区块链网络(智能合约)上自主和无信任地执行代码

当一个网络声称“EVM-兼容”时,这意味着该网络可以部署和执行为以太坊虚拟机编写的智能合约。EVM 是最流行的虚拟机,并已成为 Web3 中智能合约计算的事实标准。 具有 EVM 兼容性允许较新的网络通过使项目更容易移植到他们的网络来引导其生态系统。这种标准化也使得网络之间的代币桥接更加容易,因为两个网络可以运行相同的代码。

关于 EVM 架构的一个梦幻般的自我解释的深入研究,我引导读者去看 Takenobu T. 的这篇内容(由于“合并”标志着以太坊生态系统在2022 年 9 月 15 日从 PoW 过渡到 PoS,这个演讲的 PoW 方面已经过时了)。

一个智能合约是一个存储在去中心化网络中的程序,当满足特定条件时,可以由虚拟机自主执行。这些条件可以是指当网络上发生特定事件或当用户与智能合约互动时被激活的任何条件。智能合约的复杂计算能力也使 ERC-20 代币和 NFT(非同质化代币)得以创建。

智能合约和 EVM 是推动行业超越区块链和加密、实现 Web3 概念的原因:由于这些创新,有可能拥有可组合的应用程序,在不可审查的去中心化网络上自主运行。这些创新的结合就是 Web3 庞大的 dApp 生态系统的由来。

dApp 是去中心化的应用程序,它使用智能合约的组合,通常也是一个容易访问的基于网络的前端,以实现与区块链网络的互动。dApp 的智能合约也可以通过节点直接访问,但是基于网络的前端大量减少了访问的障碍。在今天,最知名的 dApp 大概是 Uniswap.

Solidity 是以太坊区块链上最常用的智能合约的编程语言。开发者用 Solidity 编码他们的智能合约,将其编译成字节码,然后将字节码部署到网络中。Solidity 是一种面向对象和静态类型的编程语言,它是基于 C++、Python 和 JavaScript 而建立的。

Rust 是 Solana、Polkadot 和 NEAR 链上最受欢迎的智能合约的编程语言之一。Rust 是一种低级静态类型的编程语言,以其速度、效率和设计最佳实践而闻名。虽然它是一种较年轻的语言,但它在 2020 和 2021 连续两年被 StackOverflow 评为最受欢迎的编程语言。就像 Solidity 一样,代码被编译,字节码被部署到各个网络上。

只要代码可以被编译成网络可以阅读和解释的字节码,区块链接受各种编程语言。这也适用于比特币网络,它的主要脚本语言是 Bitcoin Script. Bitcoin Script 和 Solidity/Rust 之间的区别是,Bitcoin Script 实际上不是一种编程语言,而是一个用于交易的脚本系统。在比特币网络中,脚本是与每笔交易一起记录的指令清单,它描述了下一个想花被转移的比特币的人如何获得它们。请记住,UTXO 是未使用的交易输出;因此,每一个输出都可以有附带的要求,需要满足这些要求,才能允许输出成为另一个交易的输入。

从图灵完备性的角度来看,Solidity/Rust 和 Bitcoin Script 之间的差异变得更加清晰。图灵完备性指的是一个抽象机器(图灵机)的概念:在给定了无限的时间和计算资源的情况下,只要这个问题能够被编码或逻辑地构建,它就能够计算任何问题。

更复杂的逻辑问题需要使用条件语句和循环,Solidity 和 Rust 作为完整的编程语言支持这些。然而,Bitcoin Script 不支持这些。这是因为比特币网络不允许复杂的计算,而是依赖于一个相当简单的指令集,只围绕交易的想法工作(没有智能合约)。虽然这使得比特币网络不容易出错,可以说更安全,但它确实限制了它的可编程性。

以太坊、Solana 和 Polkadot 可以被认为是准图灵完备的。尽管由于 Solidity 和 Rust 的存在,它们能够进行复杂的计算,并且在理论上只要有足够的时间就能解决任何逻辑问题,但它们受到 gas fee 的限制。Gas fee 是网络为执行任何计算任务所收取的费用。虽然时间和计算资源在理论上可以是无限的,但原生网络代币的数量可能不是。因此,虽然理论上这些网络是图灵完备的,但在实践中,它们最多只能被视为准图灵完备的。

图灵完备性和非图灵完备性的区别对于更好地理解网络的能力和在网络上可以建立的东西非常重要。图灵机和图灵完备性还有更多的细微差别,感兴趣的读者可以在这里阅读更多内容。

ERC(Ethereum Request for Comment)指的是以太坊区块链中使用的技术编码标准。ERC 规定了以太坊智能合约必须遵循的一些规则和行动,以及如何实现这些规则和行动。

然而,ERC 已经是一个约定俗成的标准,已经包含在开发者同意使用的以太坊文档中。在一个 ERC 成为 ERC 之前,它开始是一个 EIP(Ethereum Improvement Proposal). EIP 本质上是非常详细的论坛帖子,用户可以在其中对以太坊区块链和生态系统的变化进行争论、讨论和投票。

这个系统在整个 Web3 生态系统中被非常广泛地使用,从网络(例如,比特币使用 BIP —— Bitcoin Improvement Proposals)到 dApp(例如,AAVE 使用 AIPS —— AAVE Improvement Proposals).

基于 ERC 的代币建立在以太坊网络上,但它们在技术上有别于以太坊代币,后者是以太坊网络的原生代币。以太坊代币被定义为网络的一部分,是网络的底层“货币”,以 gas fee 的形式支付交易和智能合约执行,而基于 ERC 的代币被定义在智能合约中。

ERC 标准的智能合约定义了代币的所有参数和所有行为,可以使用 etherscan.io 或任何其他与 EVM 兼容的网络的区块探索器在线查看。区块探索器是一种工具,它允许你查看存储在区块链上的实时和历史信息。由于这种标准化,基于 ERC 的代币的行为是可预测的,允许 dApp 和其他智能合约与任何使用这些标准的智能合约互动。

接下来,我们会介绍 ERC-20、ERC-721、ERC-1155 和 ERC-4626 标准。前三个标准涉及到创建同质化和非同质化数字资产,这些数字资产在区块链上生存,而 ERC-4626 标准规范了应用于 ERC-20 的收益功能。

ERC-20 是一个同质化代币的标准。同质性是指一种资产可以与另一种相同的资产互换,而两种资产是无法相互区分的。例如,一张一美元的钞票是同质化的,因为它可以与任何其他一美元的钞票进行交换。

ERC-20 标准允许在 EVM 兼容的网络上创建同质化代币。Curve 代币(CRV)、Uniswap 代币(UNI)或 AAVE 代币(AAVE)都是同质化代币的例子,但法定货币的数字代币也是 ERC-20,例如 USDT 或 USDC,它们与美元挂钩。

ERC-721 标准定义了非同质化代币(NFT)。NFT 的独特之处在于它的名字:代币是不可伪造的,这意味着每个代币都是独一无二的。NFT 是一个令人兴奋的发展,因为每个 NFT 的内容可以是创建者想要的任何内容,从个人照片到房地产的契约或任何其他证书。NFT 实现了对任何物理或独特数字资产的可公开验证的数字所有权。

流行的 NFT 包括 Cryptopunks、Bored Ape Yacht Club 和 Ethereum Name Service (ENS).

ERC-1155 是所谓的“多元代币(Multi-Token)”:它们结合了 ERC-20(同质化代币)和 ERC-721(非同质化代币)的功能。这意味着,除了通过多个“独特的”同质化资产,例如游戏中的一把剑(非同质化的)和 100 个供应量(同质化的)来实现新的用例之外,也可以在一个智能合约中管理多个代币类型。

将这些功能合并到一个智能合约中,可以使智能合约在 EVM 中使用的空间方面创造效率。这也为更大和更复杂的项目创造了简单性,因为多套代币可以从一个智能合约中管理。

流行的 ERC-1155 包括 ENJIN NFT,它使用 ERC-1155 来跟踪基于区块链的少数游戏中的资产,以及可能需要定期创建大量独特资产集作为一个合同的一部分的票务应用。使用 ERC-1155 的项目例子包括 The Sandbox Metaverse、Fanz 和 Azure Heroes.

ERC-4626 将代币金库标准化。保险库是一个有收益的智能合约,接受 ERC-20 代币存款,并向存款人提供另一种代币的代币奖励(收益)。它本质上是一个多签名的资产管理智能合约,产生代币作为存款的奖励形式,以后可以兑换最初存入保险库的代币。

例如,xSushi 是一个有收益的代币,可以兑换成 SUSHI 代币(SushiSwap dApp 的治理代币),基本上代表用户在 Sushi DeFi 协议中产生收益活动的份额。

这个代币标准使开发者能够接受任何 ERC-20 代币,而不必手动整合每个代币,并考虑他们的具体设计决策。这减少了可能导致资产损失的编码错误的风险。

Yearn V3 是第一个使用 ERC-4626 标准的主要协议,Balancer 和 Rari Capital 等协议也已开始实施该标准。

有向无环图(DAG)是一种不同的数据结构方法,一些项目将其作为区块链共享账本结构的替代方案。区块链的交易包含在区块中,区块按时间顺序进行验证和连锁。区块链被复制到网络上的所有节点。

在 DAG 中,交易被逐一验证,每个交易都与下一个交易相关联。为了验证一个交易,由网络决定的另外两个交易也必须被验证。这导致了一个类似于网络的结构,可以很容易地进行扩展,并允许交易的并行计算,这可以大大增加吞吐速度。由于验证交易是非常直接的,矿工在这个系统中扮演的角色非常小:任何与网络互动的用户都可以验证其他用户的交易,这大大降低了交易成本。

有向无环图这个词很好地描述了这种结构:

有向:数据结构只能在一个方向上移动(添加新数据)

无环:当沿着数据点之间的定向路径移动时,不可能碰到之前的数据点(非环形)

图:由节点/顶点和边(节点之间的连接)组成的非线性数据结构

虽然这种结构在交易吞吐量、验证速度和交易成本方面带来了好处,但 DAG 面临着完全不同的挑战。虽然在理论上这个系统允许强大的去中心化,但交易的减少在理论上会导致网络安全的降低:更少的交易意味着更少的随机验证者,这增加了单一验证者或一组验证者控制大多数交易的可能性。如果一个实体控制了大部分的网络活动,那么将恶意活动引入网络就会变得更加容易。

为了应对上述挑战,基于 DAG 的网络已经转向中心化的解决方案:实施中央协调人,为待验证的交易提供路线,控制具有更高权限的“证人”验证人,或直接使验证网络私有化。

尽管有这些挑战,DAG 网络填补了 Web3 生态系统中的一个重要空白:它们是稍微更中心化一些的高吞吐量网络,可以管理繁重的交易负载,并且随着 Web3 主流应用的进展,会发现更多的使用案例。

去中心化网络是复杂的系统,由各种组件组成,这些组件相互操作,创造出无信任和不可改变的网络。比特币、以太坊、Solana、Polkadot 和 NEAR 等网络都被认为是单片式区块链——它们都是“由单片形成”的网络,一个组件的任何变化都需要整个网络的更新。 模块化区块链拿出这些不同的组件并让它们被换成其他组件。

模块化区块链系统的各个组成部分包括:

执行层:交易执行和智能合约

结算层:交易验证、交易结算

共识层:共识机制

数据可用性:共享账本

通过将系统拆分成多个组件,可以对每个组件进行优化,提高每个组件的效率和安全性。Layer 2,将在本系列的下一部分中详细介绍,可以说是进入模块化的第一步。Layer 2 卸载了执行层,在一个单独的网络上执行交易和智能合约,并将结果反馈给 Layer 1 单体网络,在那里管理结算、共识和共享账本。

虽然模块化有许多好处,但模块化系统只有在其最薄弱的环节才会强大。有了模块化组件,个别组件就有可能更容易成为目标。此外,给网络增加模块化也引入了一个新的复杂程度,无论是从技术角度还是从网络原生代币的价值角度,都要确保网络的正常运行。如果结算层可以被另一个使用不同代币的结算层所取代,那么一个网络首先要证明代币的存在是有难度的。

尽管有这些挑战,模块化区块链的概念为新项目和新技术的发展提供了一个令人兴奋的方向,这可以帮助扩大和发展 Web3 生态系统。流行的模块化区块链项目包括 Celestia 和 Cosmos.

Web3 是一个庞大的概念,结合了区块链、加密和建立在它们之上的生态系统以及相关技术。

比特币是普及去中心化区块链技术的 layer 1 网络,而以太坊是提供准图灵完备计算功能的网络,实现了智能合约。正是通过对早期区块的数据进行哈希运算来串联数据块的想法,再加上在许多节点上分发所有存储数据的副本,才实现了不可更改性和数据的永久性。除了这些技术原素,节点基础设施也必须到位,才能发挥作用:如果网络上只有一个节点,那么网络本质上是中心化的,并面临着中心化的挑战:数据可以被改变,被删除,对它的访问可以被节点限制。

除了基础数据结构,还有一个问题是网络上的节点如何知道提供给它们的数据是否正确。这被概括为“拜占庭将军的问题”。比特币通过其工作证明(Proof-of-Work)共识算法解决了这个问题,该算法要求网络上的节点解决计算量大的加密难题,以证明他们已经完成了验证一个区块所需的验证工作。存在替代性的共识算法,例如 Proof-of-Stake,它需要的能量要少得多,而且被认为对环境更好。

比特币和以太坊是撰写本文时最受欢迎的两个区块链网络,它们使用的记账模式有很大的不同。比特币网络使用 UTXO 模式,而以太坊网络使用账户模型。UTXO 模型可以被认为是一个 "验证系统",每一个 UTXO 都是一个交易的账单。账户模型更像一个账户和余额的数据库,随着每个新区块被添加到区块链上而更新。

以太坊的计算组件被称为“以太坊虚拟机”,允许执行智能合约。智能合约是存储在去中心化区块链网络上的应用程序,可以根据可编程的触发标准自主执行。根据你所使用的区块链,智能合约可以用 Solidity、Rust 或其他编程语言编写。

智能合约的标准化是必要的,以实现智能合约之间更好的互操作性。ERC 是已经在以太坊文档中固化的编码标准,是“成功”的 EIP. EIP 是以太坊生态系统中任何人都可以提出的建议,并开放给任何人查看、讨论和投票。如果一个 EIP 被投票通过,提议的变化就会被应用到网络中。四个最流行的 ERC 代币标准是 ERC-20(同质化代币),ERC-721(非同质化代币,或“NFT”),ERC-1155 (多元代币)和 ERC-4626(金库标准).

虽然区块链一直是 Web3 去中心化网络最流行的账本格式,但随着现有的结构被调整为特定的用例,替代格式已经出现了。有向无环图(DAG)是这种替代结构的一个例子,它依赖于验证交易而不是完整的区块。模块化网络是我们需要重新思考现有结构这一想法的延伸。模块化网络旨在将分散的网络分成不同的功能层,每个功能层都可以单独优化。

这就是《掌握 Web3 基础知识》系列的第一部分,感谢您的阅读!如果你喜欢这篇文章,请考虑分享它!如果你对这篇文章有任何反馈,或者想讨论它的内容,请在 Twitter 上联系 @0xPhillan.

龙犄角

个人专栏

阅读更多

财经法学

成都链安

金色早8点

Bress

链捕手

PANews

Odaily星球日报

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金宝趣谈

[0:46ms0-6:721ms