Web3 :用户控制的互联网

Coinbase 剖析 Web 3 开发背后的动机和技术(发表于2018年8月30日,向探路者的前瞻性致敬)https://blog.coinbase.com/understanding-web-3-a-user-controlled-internet-a39c21cf83f3

本文由 3 部分组成,重点介绍了万维网历史上最新篇章称为 Web 3 的原因、内容和方式:

第 1 部分解释了当今 Web2 的缺点以及 Web3 如何代表改进;

第 2 部分重点介绍 Web3 堆栈是什么;

第 3 部分侧重于开发人员如何在此基础上进行构建。

Part 1:Why

一、当今互联网的缺陷

今天的 World Wide Web(万维网)或 Internet(互联网)有两个关键的缺失属性:

1、它不持有 State(状态)

2、它没有本地机制来传输状态

缺乏状态是 Web2 所基于的协议简单性的结果,例如 HTTPSMTP。在任何时候,如果你要查询一个节点(连接到互联网的设备)关于它的历史或当前状态,它并不知道。从用户的角度来看,这就像每次您使用任何连接到互联网的东西时第一次从新浏览器(没有历史记录、收藏夹、保存的设置或自动完成)使用互联网。想象一下,每次您尝试使用服务或每次打开设备时下载所有您喜欢的应用程序时都必须提交您的用户信息,否则互联网将无法使用,或者至少效率极低。

然而,状态对于服务和应用程序的开发至关重要,因为它可以代表价值。因此,两个关键的发展已经弥补了状态缺陷:

1-1、首先,正如 Brendan Eich 强调的那样,他发明 cookie 是为了让用 JavaScript 编写的基于 Web2 的应用程序在每个本地设备上保存状态。然而 cookie 的问题在于它们是由服务提供商而不是用户创建和控制的。用户无法控制哪个提供者为他们提供状态或访问他们的状态。

1-2、解决状态缺失的第二个发展是集中式服务提供商,将用户状态保存在自己的机器上。今天的大型互联网公司,如 Google 和 Facebook,都掌握着数十亿人创造的价值。这本身并没有错,因为他们的用户从同一家公司创造的服务和价值中受益。问题在于 Web2 使这些集中化的公司比公众受益更多。

2、互联网的第二个关键缺失属性,即缺乏传输状态的本地机制,这是第一个问题的副产品。如果你不能保持状态(以及它创造的价值),你就不能转移它。轻松有效地转移价值的能力是经济发展和现代金融的核心。任何对价值转移效率的改进都会产生爆发式的积极影响。今天的互联网使信息传输变得更加容易,从而为新的业务和服务创造了巨大的潜力。但是如果企业没有简单的方法来交易价值,他们就需要找到另一种方式从他们的服务中获利。

这就是为什么多年来,网络现有的商业模式已经变成了广告,因为广告业务是唯一能够有效存储和传输数十亿用户状态的业务。同样,广告本身并没有错。但这一次问题在于三个方面:

1、第三方中介机构为每笔广告交易提供便利并从中获利;

2、广告有利于老牌企业,这使新企业处于不利地位,限制了经济的增长潜力;

3、更丰富的广告经济依赖于更多的用户数据(为广告模型提供数据),从而产生与用户不对等的激励机制和糟糕的用户体验。

二、互联网的方向

网络本身就是一种技术发展。它只是一堆 pipes ,与人类用它做什么无关。最终,人类需要决定将其指向何处。很明显,多年来它目前的方向不会使那些尚未从中受益的人受益。对于网络的未来十年或两年,更好的方向是促进:

1、任何参与者创造原生经济价值;

2、将该原生价值转移给任何参与者。

随着区块链的发明,感谢中本聪和他之前的其他学者,我们现在有一种方法让网络中的每个参与者以数字原生格式保存和传输状态。世界各地的许多开发人员和企业家已经开始在这个新的状态层上构建(或#BUIDL,视情况而定)。随着以太坊等开放平台的出现,这变得越来越容易。随着人们意识到这些新功能允许他们做什么,他们开始团结起来,呼吁建立一个更加开放和公平的互联网,也就是所谓的 Web3。

Part 2:What

正如第 1 部分中所解释的,今天的互联网是一个无状态的互联网——它的参与者不能拥有自己的状态,也不能将其从一个本地转移到另一个。 从比特币开始的区块链为我们提供了一种以数字原生方式保持状态的方法。 我们这些在加密货币和区块链生态系统中的人已经开始将这种新的基础能力称为 Web3。虽然我们仍处于早期阶段,但我们已经开始粗略了解它会带来什么好处。

这部分是关于 Web3 堆栈现在和未来的样子:

post image

框架中的层从顶部开始,沿着 y 轴构建。颜色代表不同层中模块之间的兼容性。例如,今天的 Crypto Goods(黄色)与 EVM(蓝色到黄色)兼容,但与比特币脚本(绿色到红色)不兼容。反过来 EVM 与以太坊区块链(蓝色)兼容,但与比特币区块链(绿色)不兼容。这使我们能够将与比特币脚本兼容并因此记录在比特币区块链上的未来加密商品放入框架中(尽管由于技术挑战这不太可能)。这种模块化对于 Web3 的健壮性至关重要,因为升级其中一层不需要完全重写它下面的所有内容。同样重要的是要注意,尽管每一层中的模块在 5 年内可能最终看起来完全不同,但这些层本身旨在全面并涵盖构成 Web3 的所有部分。

State Layer

post image

状态层保留了它下面发生的所有事情的状态。 它几乎完全由区块链基础设施提供,只要遵守首选网络的规则,任何参与者都可以参与。 任何成功的网络的目标都是成为一个默认且可靠的基础设施,类似于今天的 DNS 提供商。 当它们按预期工作时(99% 的时间)没有人认出它们,但当它们不按预期工作时,我们都会感到痛苦。

该层可以是公共层或私有/许可层。 有人可以争辩说,默认情况下,状态是一个单一且普遍的真理,创建私有层类似于创建平行宇宙。 公共层和许可层之间也存在技术差异,但它们超出了本文的范围,因此将推迟到开发人员作为其产品的设计选择。 从这里开始,每一层都建立在它下面的层之上或与之兼容。

Computation Layer

post image

软件允许人类向计算机发出指令。 Web3 计算层允许人类指示状态层做他们想做的事。 但是并非每个计算层都允许做任何事情。 例如比特币的脚本功能非常有限,因为它只允许交易订单之外的东西很少。 旁边的以太坊虚拟机 (EVM) 是一个完整的图灵完备机器,因此,支持 EVM 的状态层可以执行任意复杂的计算。

为应用程序开发人员(以及区块链开发人员)选择计算层是一个关键,因为它决定了给定应用程序可以在哪些区块链上运行。 例如任何编译到 EVM 的应用程序现在都可以在以太坊区块链上运行,而不是在比特币区块链上。 以太坊基金会正在努力将以太坊的默认计算层更改为基于 WebAssembly 或 WASM 的另一种被称为 eWASM 的技术。 其他状态层项目(例如 Dfinity)也计划与 WASM 兼容。 这意味着编译到 eWASM 的应用程序理论上可以在以太坊和 Dfinity 区块链以及任何其他决定与 WASM 兼容的区块链上运行。

Component Layer

post image

将状态层与计算层相结合,将新型数字价值的设计空间增加了 1,000 倍(又名可编程货币)。 因此我们已经开始看到开发人员进行了大量的实验。 其中一些实现具有很大的潜力(下面的示例),可以想象整个子经济体都建立在给定组件之上。 这种现象(连同协议层)描述为 Cryptoeconomic Primitives(加密经济原语),并对其中一个 Crypto Goods(加密商品)进行了深入研究。

组件建立在计算层之上,重用标准化的智能合约模板。 OpenZeppelin 是访问此类模板的完善资源。 组件的创建者需要向状态层发布新的智能合约。这些组件的示例是:

1、原生货币:任何公共区块链的必需和核心部分。赋予任何参与者支付区块链费用并获得所需服务作为回报的权利,通常以交易的形式。示例:比特币、以太币。

2、加密资产:具有一组基本功能和相关元数据的可替代资产。引发了 ICO 热潮,因为它允许任何人创造自己的钱。除了金钱之外,还可以将许多其他资产类型数字化,例如股票、债券、所有权。最常见的标准是 ERC-20。

3、加密商品:具有一组基本功能和一组更丰富的与之相关联的元数据的不可替代资产。也称为不可替代代币 (NFT) 或加密收藏品。最初由 CryptoPunks 探索,并由 CryptoKitties 流行起来。使独特的商品能够数字化,例如收藏品、游戏资产、访问权限、艺术品。最常见的标准是 ERC-721。

4、身份:身份信息的自主容器。就其本身而言,它提供的关于它所识别内容的有价值信息非常少。但是它允许声明与容器相关联,容器可能来自大量来源,例如政府或其他受信任方(例如 Google、Coinbase)。主要提案是 ERC-725/ERC-735 和 uPort 的一些协议提案。以太坊命名服务 (ENS) 作为一种不同类型的标识符也高度相关。

5、稳定币:具有稳定价值的加密资产,与来源挂钩,例如美元的价值。一个非常复杂的问题,具有不同类型的理论和实际解决方案。一些例子是 USDT、USDC、TrueUSD、和 DAI。

Protocol Layer

post image

一旦在状态层上创建了组件,它们就需要活跃起来。 某些功能对于这些组件的生命周期是如此基础和通用,以至于它们正在变得标准化。 这不仅是因为这些功能需要使用相同的语言(因此称为协议层),还因为网络效应使它们更加高效。 这些协议基本上能够为相关组件形成健康的市场,就像我们在物理世界中一样,只是成本低几个数量级,效率更高。

多种不同的协议已经开始受到关注。这些采用规范智能合约的形式,由开发协议的团队部署,并由希望将相关功能应用于组件的每个应用程序调用:

1、Trading(交易):如果一个组件要有价值,它就必须是可交易的。交易协议允许以无需信任的方式进行钱包到钱包的资产交易。区分这些 relayers(中继器)和大多数 decentralized exchanges(去中心化交易所)是很重要的,后者在智能合约上托管资产。通过交易协议促成的交易永远不会托管交易资产。一些领先的项目包括 0x 和 Kyber Network。

2、Lending(借贷):借贷提高了任何资产的效率,因为它促进了投资回报,否则投资回报可能为零。通过标准借贷协议,美国的个人可以通过智能手机向智能手机借钱给津巴布韦的另一个人。 Dharma 和 ETHLend 目前是该领域的两个领先项目。

3、Derivatives(衍生品):衍生品市场是世界上最大的金融市场,全球估计为 1.2 万亿美元。将衍生品构建为协议允许为状态层原生的组件形成去信任市场。 dy/dx 和 Market Protocol 是这个领域的两个项目。

Scalability / Transfer Layer

post image

区块链的可扩展性问题是令人头痛的。 比特币区块链的交易容量为每秒 7 笔交易,而以太坊的交易容量为每秒 15 笔。 尽管关于区块链本身是否应该做出让步以促进每秒数千笔交易存在大量争论,但人们普遍认为,需要用于状态转移的不同层(也称为第 2 层可扩展性)来支持健壮的拓扑结构 . 这些可扩展性解决方案需要与底层区块链的计算层兼容。 关于如何做到这一点有多种建议。 下面是一些例子:

1、Payment Channels(支付渠道):仅允许转移给定的本国货币。通过附加到状态层交易的可验证签名完成。要求存入资金以促进纠纷。示例:比特币的闪电网络、以太币的雷电、SpankChain 的以太币 Vynos 实现。

2、State Channels(状态通道):允许传输任何状态。通过附加到状态层交易的可验证签名来完成。要求存入资金以促进贸易。示例:EVM 的 Counterfactual、EVM 的 Celer Network、EVM 的 Arcadeum、EVM 的 FunFair 的 Fate Channel、EVM 的 Connext。

3、Side Chains(侧链):允许转移任何状态。由与主链兼容的其他区块链完成。要求侧链能够与主链上的计算层通信。还要求锁定资金以方便纠纷。侧链可以是集中或私有管理的基础设施。示例:用于 EVM 的 PoA 网络、用于 EVM 的 Loom 网络、用于 EVM 的 Plasma Framewok。应该注意的是,Plasma(有许多不同的实现)内置了额外的要求,以便它为用户提供安全地将其资产提取到计算层的保证。通过这种方式它的价值主张更类似于状态和支付渠道。

现在我们已经到了第五层,我们可以看到这个模块化堆栈如何使开发人员能够独立于较低级别的设计选择,例如构建哪个区块链。 让我们以在不久的将来假设的稳定币智能合约为例——编译为 eWASM,在以太坊上运行并与 Counterfactual 状态通道兼容(即它可以在状态通道上传输)。 理论上,上述稳定币的相同代码与 EOS 和 Dfinity 区块链兼容,因为两者都运行 WASM。 它甚至可以在这些区块链上运行的类似状态通道上转移。

User Control Layer

post image

直到这一层,普通用户几乎不可能使用任何创建的功能,除非他/她通过命令行界面直接与计算层对话。 该层的主要功能是管理用户的私钥并能够在状态层上签署交易。 状态层的交易改变了用户帐户的状态,因此是用户与 Web3 应用程序交互的核心。

Anatomy of a Transaction on the Ethereum Blockchain
Anatomy of a Transaction on the Ethereum Blockchain

有两种类型的钱包:

1、Hosted Wallets(托管钱包):由 Coinbase 或其他加密货币交易所流行,通过控制状态层上一组有限的专有余额代表用户管理资金。这些可以将用户的资金汇集到汇总账户中,并因此在状态层之外自行管理各个用户的状态。如果唯一考虑的是货币价值,这种操作可能是可行且经济的,但是随着 Web3 应用程序带来的状态数量的增加,它变得更加复杂。 还有一些新型托管钱包的例子,它为每个用户管理一个专用的区块链钱包,并支持使用分散的应用程序。这些承诺进一步的灵活性,但尚未大规模证明。

2、User Controlled Wallet(用户控制的钱包):提供一种更加灵活和直接的方式来使用 Web3 实现的所有任意复杂的操作。使钱包成为用户控制的钱包的原因是用户私钥的本地保管和每笔交易的本地签名。这意味着钱包软件不会以允许第三方代表用户提交交易的方式复制用户的私钥。 这是所有底层的最终用户接触点,因此需要向通过该层访问的应用程序公开所有可用功能。这通常通过 web3.js 等前端库来完成。这篇文章的第 3 部分深入探讨了所有这些是如何结合在一起的。

Application Layer

post image

与传统 Web2 非常相似,Web3 上的大部分活动将通过构建在下面所有层上的第三方应用程序进行。例如用户意识到 CryptoKitties(即加密商品)的价值,因为所有功能都通过使用 CryptoKitties 的应用程序提供,例如 cryptokitties.cokittyrace.comcryptogoods.com。基于 Web3 构建的应用程序具有与传统 Web2 应用程序不同的属性和要求,因此通常被称为去中心化应用程序或 DApp。正如 Matt Condon 所阐述的,如果 DApps 要被数百万用户使用,就需要变得与现有应用程序没有区别。

然而,去中心化带来的新功能正是 DApp 如此强大的原因,以及随着堆栈的成熟,我们可能会看到超越当今网络的使用量。我们已经看到世界各地的开发人员在不同类别中创建了尖端用例,用户通过将资金投入到他们认为有价值的地方来回应这些用例:

1、筹款:筹集了近 20B 美元,723,000 个独立账户参与,8,000 多家公司获得了投资。虽然该空间已经看到了欺诈的份额,但截至本文发布之日,它是最受欢迎的应用程序类别,基于参与的帐户数量。此外,它的吸引力仍在继续,正如许多促进受监管的 ICO 的新筹款平台所看到的那样。

2、交易平台:传统的加密交易平台充当您和状态层之间的中介(通过充当托管钱包),而构建为支持 Web 3 的应用程序的交易平台允许用户控制他们的资金,而不是将资金存入第三方钱包地址。此外,交易体验还有潜在的用户体验优势。许多不同的项目正在努力克服一些技术挑战,但我们已经看到该领域的使用量有所增加。

3、游戏和收藏品:通过 60,000 个拥有一些 Crypto Good 的独特账户筹集了 50-1 亿美元。虽然比筹款小得多,但与 Crypto Goods 互动的游戏为巨大的游戏市场提供了令人兴奋的潜力。

Part 2 总结

在这一部分中,我的目标是整理出 Web3 堆栈的整体图景。 如前所述,Web3 堆栈由模块化组件组成,允许在所有参与者之间保留状态,同时防止软件供应商锁定到下面的层。 多亏了这一点,如果应用程序想要更改状态层(即区块链),则无需重写其整个堆栈。 这很强大,因为它创造了健康的竞争,并允许每一层保留它创造的价值,而不必担心如果游戏规则以后发生变化会发生什么。

Part 3:How

在第 1 部分中,我们回顾了当今的互联网是如何成为无状态互联网的——它的参与者不能拥有自己的状态,也不能在本地将其从一个状态转移到另一个状态。 从比特币开始的区块链为我们提供了一种拥有有状态的计算机网络的方法。 我们这些在加密货币和区块链生态系统中的人已经开始将这个新的互联网称为 Web 3,我们在第 2 部分中对其进行了回顾。

Web3 添加了一个全新的基础设施层供应用程序交互,以及新的客户端功能和要求。 用户还需要学习新的用户体验概念才能使用这些应用程序。 因此,Web3 应用程序的架构为当前的 Web2 框架引入了额外的元素,以及开发人员熟悉的新构建模块和工具。

Architecture of a Web 2.0 application vs that of a Web 3.0 application
Architecture of a Web 2.0 application vs that of a Web 3.0 application

Web2 与 Web3 架构

当今 Web 2.0 架构的一个简化版本包括一个客户端软件,通常是一个浏览器或一个独立的应用程序,以及一套提供内容和逻辑的服务器,它们都由同一个实体控制——我们称之为 Game Co.(游戏公司)。在这种模式下,Game Co. 可以完全控制谁可以访问其服务器的内容和逻辑,以及哪些用户拥有哪些内容以及该内容保持多久的跟踪记录。互联网公司如何改变对用户的规则或停止服务,用户无权保留他们创造的价值,在技术史的页面中有很多例子。

Web 3.0 架构利用了通用状态层所支持的功能。它通过允许两件事来做到这一点:

1、允许应用程序将其部分或全部内容和逻辑放到公共区块链上。与标准 Web 2.0 不同,此内容和逻辑可以公开并可供任何人访问。

2、允许用户直接控制这些内容和逻辑。与 Web 2.0 不同,用户不一定需要帐户或特权 API 密钥来与区块链上的内容进行交互。

Web3 应用程序借助两个关键的基础设施部分实现了这一点:

1、钱包:除了作为 Web3 堆栈的用户控制层之外,现代钱包(例如 Coinbase 钱包)还与主客户端前端交互,以实现无缝的用户体验。 他们通过允许应用程序使用标准库向钱包本身发送请求来做到这一点,其中 web3.js 是最受欢迎的。 一个示例 web3.js 调用可以是一个支付请求,要求用户确认钱包可以将指定数量的资金发送到应用程序的地址。 当用户接受时,会发生两件事:1)钱包通过响应让应用程序前端知道,因此它可以显示“付款已提交”屏幕。2)钱包向区块链服务器发出 RPC 调用以提交 批准的交易到区块链。 这是第二个基础设施部分发挥作用的地方。

Sample web 3 code allowing a DApp to call a smart contract function from a user’s wallet
Sample web 3 code allowing a DApp to call a smart contract function from a user’s wallet

2、区块链节点:有两种类型的代理会持续监控和参与区块链——矿工和节点。 矿工直接维护和运行区块链,而节点监控并向区块链提交交易。 可以将它们类似于 ISP 与云服务提供商(例如 AWS)。 与当今大多数应用程序使用 AWS 的服务来运行其应用程序后端的方式类似,Infura 等区块链节点提供商也对区块链节点执行相同的操作。 当钱包想要向区块链提交交易,或从区块链查询状态信息时,它会调用节点提供者。 应用程序的应用服务器也可以与节点提供者本身进行交互,通过进行类似的 RPC 调用来保持应用程序的逻辑是最新的。

开发人员需要知道什么

一、工具和框架

了解使用哪些工具和框架并精通它们是任何开发人员生活的重要组成部分。 尽管 Web3 领域仍处于早期阶段,但我们已经开始拥有使开发人员能够进入 MVP 阶段并越来越快地进行迭代的可用工具。 这在以太坊上最为明显,由于社区中许多人的工作,开发人员开始蜂拥而至:

post image

二、设计选择

1、去中心化的内容:这是一个新的关键选择。大多数早期开发人员的目标是尽可能去中心化,并将所有东西都放在区块链上。然而,鉴于当今区块链的缓慢和昂贵的性质,这不可能大规模进行。 CryptoKitties 可能是第一个试图保持某些部分集中的 DApp。例如他们的育种逻辑是不公开的。尽管他们为此受到了一些批评,但这并没有阻止用户花费大量资金购买这种逻辑培育的猫。

尽管许多 DApp 将采取不同的去中心化方法,但处理这种选择的首要原则方法是采用“最低限度可行的公共状态”方法。如果您正在构建一个用户可以拥有资产的游戏,那么所有权应该在区块链上。如果你正在建立一个预测市场,那么你的市场的报告和支付应该在区块链上。归根结底,如果用户可以声称对您的应用程序启用的关键活动拥有真正的所有权,他们会发现您的应用程序很有价值。

2、Web 应用程序与原生应用程序:这是一个已有数十年历史的选择,但在 Web3 应用程序中呈现出新的形式。今天的大多数 DApp 都是 Web 应用程序,原因有两个:a) 它不需要用户每次都下载新应用程序,b) 用户可以使用您的应用程序,而无需每次都创建新钱包。存在的少量原生 DApp 都导致用户创建新的钱包,这不是理想的用户体验。很容易看出这不是一个可行的未来,因为用户不会为数百个钱包维护密钥。在不久的将来,将会有更无缝的方式使原生应用程序能够克服这一用户体验挑战,但就目前而言,Web 应用程序允许更轻松的入职体验。

3、桌面与移动:这种选择的 Web 3 版本不是在其中一个或另一个之间进行选择,而是关于用户最终如何在两者上使用您的 DApp。在桌面上,像 MetaMask 这样的 Chrome 扩展程序一直是大多数用户与 DApp 交互的方式。尽管它需要用户下载一个新的扩展,但用户仍然在与他们熟悉的浏览器界面进行交互。

然而,在移动设备上扩展是不可能的,至少在 iOS 上是这样。这就是钱包应用程序(例如 Coinbase Wallet)将浏览器放置在其应用程序中的原因。进入浏览器视图后,DApp 体验与桌面相同。

三、迄今为止没有解决方案的其他挑战

1、谁为 gas 买单:今天在以太坊上构建的每个 DApp 都让其用户支付交易成本,称为以太坊区块链的 gas。如果数以百万计的非加密本地人要使用 Web 3 应用程序,从长远来看,这将是不可行的。有许多理论上的解决方案,其中一些更接近实用,例如气体中继器,但还没有一个是功能性的。

2、是否特定于应用程序的账户:Web3 令人兴奋的应用程序之一是通用身份。由于今天没有很多功能性身份解决方案,一些 DApps 仍然要求用户创建一个帐户,从而使某些身份与他们在应用程序上的活动相关联。这与 Web 2.0 的做事方式并没有太大的不同。一旦我们有了功能性的去中心化身份解决方案,DApps 应该如何处理和呈现呢?虽然没有明确的答案,但有些人已经提出了建议,例如使用 ERC-725 和 735 构建的 Origin 演示。

总结

在第 3 部分中,我旨在总结 Web3 对应用程序架构带来的修改以及开发人员在开始构建 Web3 应用程序时应该了解的内容。 Cryptozombies 是初学者的一个很好的资源,这是一个有趣的研讨会,教任何人如何创建他们的第一个 Web3 应用程序。

尽管构建 Web3 应用程序的方式会随着围绕它的基础设施的发展而发生许多变化,但关键是现在正在构建应用程序。正如我们所知,这是网络的狂野西部,许多非常聪明的团队开始应对可用的挑战和机遇。

DYOR

================================

================================

欢迎大佬们的探讨指正~

您可以在这里找到作者 twitter:@ethan_ifdao