这篇文章由 3 部分组成,重点介绍互联网历史上的最新章程— Web 3 的原因、内容和方式。第 1 部分解释了当今网络的缺点以及 Web 3 如何改进;第 2 部分重点介绍 Web 3 的运作模式是什么;第 3 部分重点介绍开发人员如何在其上进行构建。
今天的互联网有两个关键的缺失属性:
它不持有“状态”,独立于受信任的运营商;
它没有本地机制来传输状态。
缺乏状态是 Web 构建协议的简单性的结果,例如HTTP和SMTP。在任何时候,如果您要查询节点(连接到互联网的设备)的历史或当前状态,它都不知道。从用户的角度来看,这就像第一次从新浏览器(没有历史记录、收藏夹、保存的设置或自动完成)使用互联网,每次使用任何连接到互联网的东西。想象一下,每次您尝试使用某项服务或每次打开设备时下载所有喜爱的应用程序时,都必须提交您的用户信息。互联网将无法使用,或者至少效率极低。
然而,状态对于服务和应用程序的开发至关重要,因为它可以代表价值。因此,两个关键的发展已经弥补了缺陷。首先,正如 Brendan Eich 强调的那样,cookie 的发明是为了让用 JavaScript 编写的基于 Web 的应用程序保存每个本地设备上的状态。然而,cookie 的问题在于它们是由服务提供商创建和控制,而不是用户。用户无法控制哪个提供者为他们提供状态或有权访问他们的状态。
解决状态缺失的第二个发展是集中式服务提供商,它们在自己的机器上保存用户状态。如今,谷歌和 Facebook 等大型互联网公司都拥有数十亿人的国家,以及由此创造的价值。这本身并没有错,因为他们的用户已经从同一家公司创造的服务和价值中受益。问题在于互联网如何使这些中心化公司比公众受益更多。
互联网的第二个关键缺失属性,即缺乏传输状态的本地机制,部分是第一个问题的副产品。如果你不能持有状态(以及它创造的价值),你就不能转移它。轻松高效地转移价值的能力是经济发展和现代金融的核心。任何提高价值转移效率的改进都会产生级联的积极影响。今天的互联网使信息传输变得更加容易,数量级也因此为新的业务和服务创造了巨大的潜力。然而,如果企业没有简单的方法来交易价值,他们需要找到另一种方式来从他们的服务中获利。
这就是为什么多年来,网络现有的商业模式变成了广告,因为广告业务是唯一可以有效存储和传输数十亿用户状态的业务。同样,广告本身并没有错。但这次的问题是三个方面:
第三方中介促进每笔广告交易并从中获利;
广告有利于老牌企业,这使新企业处于不利地位,限制了经济的增长潜力;
更丰富的广告经济依赖于更多的用户数据(用于提供广告模型),从而与用户产生不一致的激励和糟糕的用户体验。
互联网的方向
网络本身就是一种技术发展。它只是一堆管道,对人类用它做什么漠不关心。最终,人类需要决定将其指向何处。对于网络的未来一两年,更好的方向是促进:
任何参与者创造本地经济价值;
将此原生价值转移给任何参与者。
随着区块链的发明,感谢中本聪和她/他/他们之前的其他学者,我们现在有办法让网络中的每个参与者以数字原生格式保存和传输状态。世界各地的许多开发人员和企业家已经开始在这个新的状态层上构建(或#BUIDL,视情况而定)。随着以太坊等开放平台的出现,这一天比一天容易。随着人们开始意识到这些新功能可以让他们做什么,他们已经开始支持更加开放和公平的互联网(也称为 Web 3.0)的呼声。
正如Part 1 部分中所解释的,今天的互联网是一个无状态的互联网——它的参与者不能保持自己的状态,也不能在本地将它从一个状态转移到另一个状态。从比特币开始,区块链为我们提供了一种以数字原生方式保存状态的方法。我们这些加密和区块链生态系统中的人已经开始将这种新的基本功能称为 Web 3.0。虽然我们仍处于早期阶段,但我们已经开始粗略地了解它会带来什么好处。
这部分是关于 Web 3.0 在今天和将来可能是什么样子的:
图片:Web3.0 的模块化构架
上面框架中的层从顶部开始,沿着 y 轴向下构建。颜色代表不同层中模块之间的兼容性。例如,今天的加密商品(黄色),如上所示,与 EVM(蓝色到黄色)兼容,但与比特币脚本(绿色到红色)不兼容。反过来,EVM 与以太坊区块链(蓝色)兼容,但与比特币区块链(绿色)不兼容。这使我们能够将与比特币脚本兼容并因此记录在比特币区块链上的未来加密商品放入框架中(尽管由于技术挑战,这极不可能)。这种模块化对于 Web 3.0 的健壮性至关重要,因为升级其中一层不应该需要完全重写它下面的所有内容。
状态层
状态层保留了它下面发生的所有事情的状态。它几乎完全由区块链基础设施提供,并允许任何参与者参与,只要他们遵守首选网络的规则。任何成功的网络的目标都是成为一个默认的、可靠的基础设施,类似于今天的 DNS 提供商。当它们按预期工作时,没有人会认出它们(99% 的时间),但当它们不工作时,我们都会感到痛苦。
该层可以是公共层或私有/许可层。有人可能会争辩说,默认情况下,状态是一个单一且普遍的真理,创建私有层类似于创建平行宇宙。公共层和许可层之间也存在技术差异,但它们超出了本文的范围,因此将推迟到开发人员作为其产品的设计选择。
从这里开始,每一层都建立在它下面的层上或与之兼容。
计算层
软件允许人类向计算机发出指令。Web 3.0 计算层允许人类指示状态层做他们想做的事。然而,并不是每个计算层都允许做任何事情。例如,比特币的脚本非常有限,因为它只允许交易订单之外的东西。另一端的以太坊虚拟机(EVM) 是一个完整的图灵完备机器,因此,允许由支持 EVM 的状态层执行任意复杂的计算。
为应用程序开发人员(以及区块链开发人员)选择计算层是一个关键因素,因为它决定了给定应用程序可以在哪些区块链上运行。例如,任何编译为 EVM 的应用程序今天都可以在以太坊区块链上运行,而不能在比特币区块链上运行。在以太坊基金会正在努力将以太坊的默认计算层改变为另一个名为技术eWASM,基于WebAssembly,或WASM。Dfinity等其他状态层项目也计划与 WASM 兼容。这意味着编译为 eWASM 的应用程序理论上可以在以太坊和 Dfinity 区块链以及任何其他决定与 WASM 兼容的区块链上运行。
组件层
将状态层与计算层相结合,可以将新型数字价值的设计空间增加 1,000 倍(又名可编程货币)。因此,我们已经开始看到开发人员进行了大量实验。其中一些实现具有如此大的潜力(下面的示例),可以想象整个子经济体都构建在给定组件之上。我在 Coinbase 的同事Jacob Horne将这种现象(连同协议层)描述为加密经济原语,并对其中一个,即加密商品进行了深入研究。
组件建立在计算层上,重复使用标准化的智能合约模板。OpenZeppelin是访问此类模板的完善资源。组件的创建者需要在状态层上发布新的智能合约。
这些组件的示例是:
本地货币:任何公共区块链的必需和核心部分。赋予任何参与者支付区块链费用并获得所需服务作为回报的权利,通常以交易的形式。示例:比特币、以太坊。
加密资产:具有一组基本功能和相关元数据的可替代资产。引发了 ICO 热潮,因为它允许任何人创造自己的货币。除了货币之外,还可以将许多其他资产类型数字化,例如股票、债券、所有权。最常见的标准是ERC-20。
加密商品:不可替代的资产,具有一组基本功能和与之相关的一组更丰富的元数据。也称为不可替代的代币 (NFT) 或加密收藏品。首先由探索CryptoPunks和制造流行CryptoKitties。使独特的商品能够被数字化,例如收藏品、游戏资产、访问权、艺术品。最常见的标准是ERC-721。
身份:身份信息的自我主权容器。就其本身而言,很少提供有关其识别内容的有价值的信息。但是,它允许声明与容器相关联,这可以来自大量来源,例如政府或其他受信任方(例如 Google、Coinbase)。领先的提案是ERC-725 / ERC-735和uPort 的一些协议提案。以太坊命名服务(ENS) 作为一种不同类型的标识符也高度相关。
稳定币:具有稳定价值的加密资产,与来源挂钩,例如美元的价值。一个非常复杂的问题,具有不同类型的理论和实践解决方案。一些例子是TrueUSD、Dai和Reserve。
协议层
一旦在状态层上创建了组件,它们就需要活跃起来。某些功能对于这些组件的生命周期非常重要和通用,以至于它们正在变得标准化。这不仅是因为这些函数需要使用相同的语言(因此称为协议层),还因为网络效应使它们更高效。这些协议基本上能够为相关组件形成健康的市场,就像我们在物理世界中所做的那样,只是便宜和高效几个数量级。
多种不同的协议已经开始受到关注。这些采用规范智能合约的形式,由开发协议的团队部署,并由每个想要将相关功能应用于组件的应用程序调用:
交易:如果一个组件要有价值,它需要是可交易的。交易协议允许以去信任的方式进行资产的钱包到钱包交易。重要的是要区分这些“中继器”和大多数“去中心化交易所”,后者在智能合约上托管资产。通过交易协议促进的交易永远不会保管交易资产。一些领先的项目包括0x和Kyber Network。要了解有关 0x 协议支持的每日交易量的更多信息,您可以访问此处。
贷款:贷款提高了任何资产的效率,因为它促进了投资回报,否则投资回报可能为零。通过标准的借贷协议,美国的一个人可以将钱借给津巴布韦的另一个人,从智能手机到智能手机。Dharma和ETHLend目前是该领域的两个领先项目。
衍生品:衍生品市场是世界上最大的市场,全球估计为 1.2 万亿美元。将衍生品构建为协议允许为状态层原生的组件形成去信任市场。dy/dx和Market Protocol是这个领域的两个项目。
扩展性/传输层
一旦在状态层上创建了组件,它们就需要活跃起来。某些功能对于这些组件的生命周期非常重要和通用,以至于它们正在变得标准化。这不仅是因为这些函数需要使用相同的语言(因此称为协议层),还因为网络效应使它们更高效。这些协议基本上能够为相关组件形成健康的市场,就像我们在物理世界中所做的那样,只是便宜和高效几个数量级。
多种不同的协议已经开始受到关注。这些采用规范智能合约的形式,由开发协议的团队部署,并由每个想要将相关功能应用于组件的应用程序调用:
交易:如果一个组件要有价值,它需要是可交易的。交易协议允许以去信任的方式进行资产的钱包到钱包交易。重要的是要区分这些“中继器”和大多数“去中心化交易所”,后者在智能合约上托管资产。通过交易协议促进的交易永远不会保管交易资产。一些领先的项目包括0x和Kyber Network。要了解有关 0x 协议支持的每日交易量的更多信息,您可以访问此处。
贷款:贷款提高了任何资产的效率,因为它促进了投资回报,否则投资回报可能为零。通过标准的借贷协议,美国的一个人可以将钱借给津巴布韦的另一个人,从智能手机到智能手机。Dharma和ETHLend目前是该领域的两个领先项目。
衍生品:衍生品市场是世界上最大的市场,全球估计为 1.2 万亿美元。将衍生品构建为协议允许为状态层原生的组件形成去信任市场。dy/dx和Market Protocol是这个领域的两个项目。
用户控制层
直到这一层,普通用户几乎不可能使用任何创建的功能,除非他/她通过命令行界面直接与计算层对话。该层的主要功能是管理用户的私钥并能够在状态层上签署交易。状态层的事务会更改用户帐户的状态,因此是用户与 Web 3 应用程序交互方式的核心。
有两种类型的钱包:
托管钱包:由 Coinbase 或其他加密货币交易所流行,通过控制状态层上的一组有限的专有余额来代表用户管理资金。这些可以将用户的资金汇集到聚合账户中,因此,在状态层之外管理个人用户的状态。如果仅考虑货币价值,这种操作可能是可行且经济的,但是随着 Web 3 应用程序带来的状态数量的增加,它变得更加复杂。
还有一些新型托管钱包的例子,它们为每个用户管理一个专用的区块链钱包,并支持使用去中心化应用程序。这些有望进一步提高灵活性,但尚未得到大规模证明。
用户控制的钱包:提供一种更加灵活和直接的方式来使用 Web 3 实现的所有任意复杂的操作。使钱包成为用户控制的钱包的原因是用户私钥的本地保管和每笔交易的本地签名。这意味着钱包软件不会以允许第三方代表用户提交交易的方式复制用户的私钥。
这是所有底层的最终用户接触点,因此需要向通过该层访问的应用程序公开所有可用功能。这通常是通过web3.js等前端库完成的。这篇文章的第 3 部分深入探讨了所有这些是如何结合在一起的。
应用层
与传统 Web 非常相似,Web 3 上的大部分活动将通过构建在以下所有层上的第三方应用程序进行。例如,用户意识到 CryptoKitties(即加密商品)的价值,因为所有功能都通过使用 CryptoKitties 的应用程序提供,例如cryptokitties.co或kittyrace.com或cryptogoods.com。基于 Web 3 构建的应用程序与传统 Web 应用程序具有不同的属性和要求,因此通常被称为去中心化应用程序或 DApp。正如Matt Condon所阐述的那样,如果要被数百万用户使用,DApp 将需要与现有应用无法区分。
然而,去中心化带来的新功能正是 DApp 如此强大的原因,也是为什么随着堆栈的成熟,我们可能会看到超出当今网络的使用量。我们已经看到世界各地的开发人员创建了不同类别的前沿用例,用户通过将资金投入他们认为有价值的地方来回应他们。
资金筹措:关闭至$ 20B上调,723000个唯一帐户参与,8,000+公司收到的投资。虽然该空间已经出现了欺诈行为,但截至本文发布之日,它是最受欢迎的应用程序类别,基于参与的帐户数量。此外,它的吸引力仍在继续,正如许多新的筹款平台所看到的那样,这些平台促进了受监管的 ICO。
交易平台:传统的加密交易平台充当您和国家层之间的中介(通过充当托管钱包),而构建为支持 Web 3 的应用程序的交易平台允许用户保持对其资金的控制,而不是将其存入第三方钱包地址。此外,交易体验还有潜在的用户体验优势。许多不同的项目正在努力克服一些技术挑战,但我们已经看到该领域的使用率有所上升。
游戏和收藏品:通过60,000 个拥有一些 Crypto Good 的独特账户筹集了50-1 亿美元。虽然比筹款小得多,但与加密商品互动的游戏为巨大的游戏市场提供了令人兴奋的潜力。
Web 2.0 与 Web 3.0 架构
今天 Web 2.0 架构的一个简单版本包括一个客户端软件,通常是一个浏览器或一个独立的应用程序,以及一套提供内容和逻辑的服务器,它们都由同一个实体控制——我们称之为游戏公司。在这个模式,Game Co. 对谁可以访问其服务器的内容和逻辑,以及哪些用户拥有该内容的内容和保存时间的跟踪记录拥有唯一控制权。在技术史的页面中有很多关于互联网公司如何改变对用户的规则或停止他们的服务的例子,用户无权保存他们创造的价值。
Web 3.0 架构利用了通用状态层所支持的功能。它通过允许两件事来做到这一点:
允许应用程序将其部分或全部内容和逻辑放在公共区块链上。与标准 Web 2.0 不同的是,此内容和逻辑可以公开并可供任何人访问。
允许用户直接控制此内容和逻辑。与 Web 2.0 不同,用户不一定需要帐户或特权 API 密钥来与区块链上的内容进行交互。
Web 3 应用程序在两个关键基础设施部分的帮助下实现了这一点:
钱包:除了作为 Web 3 堆栈的用户控制层之外,现代钱包(例如 Coinbase Wallet)还与主客户端前端交互,以实现无缝的用户体验。他们通过允许应用程序使用标准库向钱包本身发送请求来实现这一点,web3.js 是其中最受欢迎的。一个示例 web3.js 调用可以是一个支付请求,要求用户确认钱包可以向应用程序地址发送指定数量的资金。当用户接受时,会发生两件事:1)钱包通过响应让应用程序前端知道,因此它可以显示“付款已提交”屏幕,2)钱包进行 RPC 调用区块链服务器将批准的交易提交到区块链。这是第二个基础设施部分发挥作用的地方。
区块链节点:有两种类型的代理不断监控和参与区块链——存储服务商和节点。存储服务商直接维护和运行区块链,而节点监控并向区块链提交交易。人们可以认为它们类似于 ISP 与云服务提供商(例如 AWS)。与当今大多数应用程序使用 AWS 服务来运行其应用程序后端的方式类似,区块链节点提供商(例如Infura)对区块链节点也执行相同的操作。当钱包想要向区块链提交交易或从区块链查询状态信息时,它会调用节点提供者。应用程序的应用程序服务器也可以与节点提供者本身进行交互,通过进行类似的 RPC 调用来使应用程序的逻辑保持最新。
工具和框架
知道要使用哪些工具和框架并熟练使用它们是任何开发人员生活中的重要组成部分。尽管 Web 3 领域仍处于早期阶段,但我们已经开始拥有使开发人员能够进入 MVP 阶段并越来越快地迭代的可用工具。这在以太坊上最为明显,由于社区中许多人的努力,开发人员开始蜂拥而至。
设计选择
去中心化:这是一个新的关键选择。大多数早期开发人员的目标是尽可能地去中心化并将所有东西都放在区块链上。然而,鉴于当今区块链的缓慢和昂贵的性质,这是不可能大规模实现的。CryptoKitties 可能是第一个试图保持某些部分中心化的 DApp。比如他们的养殖逻辑是不公开的。尽管他们为此受到了一些批评,但这并没有阻止用户花费大量资金购买以这种逻辑饲养的猫。Gods Unchained是另一个例子,游戏本身将托管在标准的云基础设施上,但资产的所有权将在状态层上进行跟踪。
尽管许多 DApp 将采取不同的去中心化方法,但接近这种选择的首要原则方法是采用“最小可行的公共状态”方法。如果你正在构建一个用户可以拥有资产的游戏,那么所有权应该在区块链上。如果你正在建立一个预测市场,那么你的市场的报告和支付应该在区块链上。归根结底,如果用户能够对您的应用程序支持的关键活动拥有真正的所有权,他们会发现您的应用程序很有价值。
Web 应用程序与本机应用程序:这是一个已有数十年历史的选择,但在 Web 3 应用程序中呈现出新的形式。今天的大多数 DApp 都是网络应用程序,因为两个简单的原因:a)它不需要用户每次都下载一个新的应用程序,b)用户可以使用你的应用程序而不必每次都创建一个新的钱包。现有的少量原生 DApp 都导致用户创建新的钱包,这不是理想的用户体验。很容易看出这不是一个可行的未来,因为用户不会为数百个钱包维护密钥。在不久的将来,将会有更无缝的方式让原生应用程序能够克服这一 UX 挑战,但就目前而言,网络应用程序允许更轻松的入门体验。
桌面版 vs 移动版:这个选择的 Web 3 版本不是要在两者之间做出选择,而是关于用户最终如何在两者上使用你的 DApp。在桌面上,像MetaMask这样的 Chrome 扩展程序一直是大多数用户与DApp交互的方式。尽管它需要用户下载新的扩展程序,但用户仍然在与他们熟悉的浏览器界面进行交互。
然而,在移动设备上,扩展是不可能的,至少在 iOS 上是不可能的。这就是钱包应用程序(例如 Coinbase Wallet)将浏览器放置在其应用程序中的原因。进入浏览器视图后,DApp 体验与桌面相同。在为移动设备开发时,还有一些技术上的细微差别需要注意,Coinbase 钱包的工程主管 Pete Kim在这里介绍了这些细节。
迄今为止尚无解决方案的其他挑战:
谁为 gas买单:今天在以太坊上构建的每个 DApp 都让其用户支付交易成本,称为以太坊区块链的 gas。如果数百万非加密本地人要使用 Web 3 应用程序,那么从长远来看,这将是不可行的。有许多理论解决方案,其中一些更接近实用,例如gas 中继器,但还没有一个实用。
特定于应用程序的帐户与否:Web 3 令人兴奋的应用程序之一是通用标识。由于如今功能性身份解决方案并不多,因此一些 DApp 仍在要求用户创建帐户,以便将某些身份与他们在应用程序上的活动相关联。这与 Web 2.0 的做事方式没有太大区别。一旦我们有了功能性的去中心化身份解决方案,DApps 应该如何对待和呈现它?虽然没有明确的答案,但有些人已经提出了建议,例如使用 ERC-725 和 735 构建的Origin 演示。