5 张图描绘Web3 堆栈全景

更新日期: 2019-11-11阅读: 1.7k标签: 堆栈

一年前,我描述了我当时理解的Web3 堆栈。从那时起,我又学到了很多东西,生态系统也在不断进化,所以我决定更新对 Web3 堆栈的介绍。

2018 年版只对 Web3 堆栈的一个实例进行了平面可视化,而 2019 年版的目标是将 Web3 堆栈作为一组可互操作的网络来展示。为了实现这一点,我把 2019 年版分为 4 张图片(外加一张附加图),先从一个狭窄的视角开始,然后从那里扩展出去。你可以在此下载英文、中文和韩文版的这 5 张图片。

这些图片很大,在 Multicoin 网站或你的电子邮件收件箱里阅读起来不太方便。虽然我们在这篇文章中也列出了图片,但可能需要你下载后在专用的图像查看器中打开,才能更好地加以理解。为了便于指代,这些图片分别被标记为 v2.1、v2.2、v2.3、v2.4 和 v2.1bonus。

这篇文章将这样展开:我会先对整个生态系统中可观察到的主题进行一些观察和评论。然后,将解释这些观察结果如何反映在我们的投资组合结构中。最后,我会总结这 4+1 张图片。


观察#1:异构性、碎片化和不确定性

2018 版和 2019 版之间最显著的区别是,2018 版没有很好地展示 Web3 堆栈的异构性。当我在 2018 年 7 月发表 2018 版的文章时,除了以太坊,没有其他任何智能合约链在运行。今天,围绕着以太坊、EOS、Tezos 和 Cosmos,一系列生态系统在不断成长,同时,在 Kadena、Polkadot、Near、Solana、Dfinity、Tari 和 Coda 等即将上线的区块链周围,也已经建立起了较小的社区。很明显,正如我今年早些时候在 《以太坊的分拆》 中所写的那样,Web3 生态系统正在发展得越来越多样化。

一年前,开发人员不必考虑在哪个链上构建,因为只有一个选项。如今,大量的选项给在现有链上构建协议和服务的团队以及进入加密货币领域的新团队都带来了极大的复杂性。让我们来看一个示例:

Aragon 是早期建立在以太坊上的协议之一。几个星期前,Aragon 团队 宣布 他们将在 Cosmos SDK 的基础上扩展他们的协议,同时继续在以太坊上支持 Aragon 协议。他们表示切换区块链的主要动机在于高昂且多变的费用(在 《以太坊的分拆》 中我已经指出,费用将是迫使团队离开以太坊的主要驱动力之一)。

Terra 每天为韩国逾 100 万美元 的电子商务提供动力,其采用也在迅速增长。Terra 团队选择在 Cosmos SDK 上构建,因为他们需要既快速又廉价的支付手段。

纵观 Web3 生态系统,我发现碎片化的速度正在加快。尽管大多数开发人员优先考虑以太坊,但是许多团队有着以太坊现在无法支持的需求。这为其他链的协议开发人员创造了大量的机会,拥有挑战地位的区块链正在加紧采取行动以支持应用程序开发人员。

以太坊 1.0 和 2.0 的不确定性加剧了这种分裂。例如,以太坊核心开发人员最近(无限期地?)延迟了 1.0 链上的状态租期。虽然这对现有的合同来说是件好事,但从长远来看,这对以太坊的生态系统来说可能并不理想,因为这会在更长的一段时间内留下更多悬而未决的难题。与此同时,很明显,以太坊 2.0 规范还远未最终完成; 以太坊 2.0 的分片计数最近从 1024 减少到 64。

开发人员不希望整天为了底层协议引入破坏性的更改而操心。

如果有哪个区块链可以率先提供以下所有服务,一定将会赢得切实的机会:

1) 高吞吐量,低延迟,低手续费,充分的共识层去中心化,清晰的可伸缩性解决方案 2) 稳健的执行环境和开发工具 3) 应用程序 / 分片 / 第 2 层复杂性最小化 4) 提供向后兼容性和未来稳定性的有力保证。

开发人员不希望整天为了底层协议引入破坏性的更改而操心。他们想要一个可靠的基础,并在此基础上进行构建。


观察#2:中间件的兴起

在 2018 版的文章中,我在堆栈的右侧突出显示了中间件堆栈。在 2019 年版中,我改为在链上协议和链下服务之间划分出中间件。

在过去的一年里,中间件出现了爆炸式的增长,最明显的是在以太坊生态系统中以 开放金融(又称 DeFi)的形式出现。虽然对于某些类型的开放金融协议(如 Set )存在价值捕获问题,但是对于其他类型的开放金融协议(如 Compound 和 Maker ),则有明确的价值捕获机制。

据我所知,还没有一个链上中间件协议被移植到其他链上。然而,一些链下服务正在跨链移植。Loom 在跨以太坊、EOS 和 Tron 运行,甚至允许用户跨所有三个链传输 DAI。考虑到以太坊 2.0 的不确定性、Cosmos 生态系统的崛起和一些新生态系统的发展,我预计在未来 12 个月里,我们将看到跨链服务的加速发展。例如,像 Keep 的 tBTC 这样的服务自然会被用于将 BTC 移植到以太坊和币安链 (Binance Chain) 等众多链上。

一些服务将被跨链移植,并且仍将提供大体相同的功能。例如,Keep 的 tBTC 不管被移植到哪个链,都可以提供基本一致的服务。与此同时,如 dFuse 和 The Graph 这类链下服务,由于可支持更多的链得以发展得更好。由于这些服务增加了对特定用例链的支持,比如 Arweave (一次性付费并获得基于 IPFS 的永久文件存储)和 Handshake (去中心化 DNS),这些服务越来越多地充当开发人员的单一抽象层,而不管底层数据位于何处。因此,这些类型的链下服务激增,将加快整个生态系统的发展速度。

链下服务的另一个常见主题是,它们通常采用效用代币模型 。这反映出开发人员的一种共识,即特定于应用程序、没有流通速度下沉的支付货币将不会捕获价值,而效用代币提供了一种可量化的方式来评估链下服务的价值。

除了提供定制的链下服务外,Cosmos 和 Polkadot 生态系统还都接纳了效用代币模型。在 Cosmos 生态系统中,每个区域 (Zone) 都将使用其原生质押代币进行安全保护,而验证器可能会从 tBTC 和稳定币等流动性更强的支付代币的交易费用中获得大部分收入。由于大多数 Cosmos 区域没有原生的流动支付货币,所以预计每个区域将利用 Cosmos 的区块链间通信 (IBC) 协议将 tBTC 和稳定币移植到每个区域,用于支付和智能合约。此外,作为 Cosmos 中心 (Hub) 的原生代币,ATOM 是一个效用代币,它将通过在多个区域之间传递消息产生费用。Polkadot 的 DOT 与 ATOM 类似:它们执行同样的功能——在平行链 (Parachains) 之间传递信息以换取费用。

最后,需要说明的是,我相信中间件协议和服务可以以一种独立的、模块化的方式从第 1 层智能合约平台获取价值。因为中间件协议的价值可以使用传统的贴现现金流 (DCF) 模型进行评估,所以不管底层的哪条链胜出,中间件协议和服务都应该能够捕获价值。然而,大多数通用的第 1 层最终都是在竞相争取成为非主权货币 ,而第 1 层的价值捕获将独立于中间件层的价值捕获。


Web3 堆栈 2019 版:单链,平面可视化

第一张图片是我去年演示过的 Web3 堆栈的更新版本:


最重要的变化是:

  1. 对链上协议和链外服务进行分类。最终的设想是将所有支持 Web3 的机械基础设施抽象出来,这样开发人员就可以将精力集中在更高层级的问题上。因此,利用链上智能合约的模块化功能,越来越多的应用程序基于单链上的其他协议构建。这一点在以太坊的开放金融生态系统中表现得很明显。模块化和可组合性是开放金融的定义特征。该图中显示的大多数链上协议都与开放金融相关。
  2. Web3 堆栈运行在许多不同的物理计算机上,这些计算机被组织成不同的逻辑网络。2018 年版显示了整个堆栈,就好像它运行在一块硬件上。2019 年版使用左边的分块来区分堆栈的每一层。这使得大家更容易追寻和查看不同物理机器之间的交互。
  3. 我从核心堆栈,即侧链、Interledger 协议(ILP)和状态信道中删除了一些可选组件,转而在右侧将它们作为可选组件列出。这使得整个图像更易于阅读,也令堆栈网络的逻辑表现更为一致,这一点在下一张图像中也有所体现。

我构建了这个图示包含了一些在 Web3 生态系统里的公司。



Web3 堆栈 2019 版:单链,分层可视化

2019 年版的第二张图片基本上展示的内容与第一张相同。不过,第一种方法平面地描述了堆栈,但第二种方法将堆栈显示为物理计算机网络。与第一张图相比,这种可视化使一些事情更加清晰,比如每个子堆栈在哪里开始到哪里停止,不同逻辑网络上子堆栈的分层,以及跨网络的 api 调用流。


在这幅图中,我展示了三个中间件网络示例:一个查询层网络(如 The Graph )、一个侧链网络(如 Skale )和一个永久存储网络(如 Arweave ,它也可以用作任何其他网络的数据可用性层)。根据特定的应用程序,可能会涉及许多其他中间件网络。我强调这三个是因为我认为它们是最广泛使用的网络。这就是我们投资这三家公司的原因。

还有一些有趣的发现:首先,这些层并不是严格依序的。例如,查询层可以索引来自侧链和存储网络的数据。其次,终端用户客户机不必严格依赖中间件网络。它们可以从第 1 层网络直接查询数据(不过这常常导致用户体验很差,因此我们预计查询层更加稳健并获得更广泛的采用,这种情况会越来越少)。第三,独立的数据可用性网络可以充当第 1 层的数据可用性层(这一点没法可视化处理)。

Web3 堆栈 2019 版:多链,平面可视化

正如我在上面提到的,Web3 生态系统正在变得更加异构化,而不是同质化。随着更多的第 1 层推出,这是很自然的现象。这张图示试图说明,当更多链开始相互连接时,生态系统会是什么样子:


尽管 Cosmos 团队预计随着时间的推移会出现多个中心,但是不可能提前知道哪条链会连接到哪个中心上。我列出了 2 个 Cosmos 中心,因为 1) 我无法在一个中心周围列出所有的非 Polkadot 平行链;2) 我预计会出现很多中心。显然,只有当中的一个中心可以由 ATOM 提供动力。第二个可以是 Iris,也可以是别的某个中心。币安链(使用 Cosmos SDK 构建)本身甚至也可以成为一个中心,如果币安 DEX 发展出足够的流动性,可以作为所有其他链的信任最小化的价格预言机,那么这尤其可能发生。

考虑到互操作性机制还处于多么早期的阶段,这个图示并不能提供太多信息——它主要展示了对未来的展望。我在这里提供的图示相当清晰;但实际上,情况可能会更加混乱。例如,除了比特币和以太坊之外,币安链已经比其他任何一条链都更能促进经济活动。此外,BNB 拥有更高的市值,流动性远高于 ATOM,这意味着币安链可能比基于 ATOM 的链能提供更多的共识安全。最后,币安链主要是一个 DEX,在拥有足够的流动性的前提下,它可以充当一个信任最小化的价格预言机。凭借这三个结构上的优势,Cosmos SDK 就有可能成为事实上的开发标准,而币安链和 BNB 则可以发挥全部的价值。

我还在比特币和以太坊 1.0 (位于右下方)之间加入了一个 Interledger 协议(ILP)进行桥接,以表明并非所有形式的互操作性都需要以通过中心链传递的原子消息的形式存在。虽然 ILP 理论上可以桥接图示中的每个链,但我选择不这样阐释,因为这会使图像很难阅读。


Web3 堆栈 2019 版:多链、分层可视化

最后的图像是前两张图像的组合。这个可视化的目的是强调中间件网络将跨几个第 1 层运行:


出于可读性的目的,我 1) 删除了 ILP;2) 没有保留各种终端用户客户端和中间件堆栈之间的蓝色箭头。


一些结论

Web3 堆栈最令人难以置信的一点是,它们不需要任何集中协调就可以组合在一起。开发本身是去中心化的。没有主架构师。这与地球上几乎所有其他的开发堆栈项目形成了鲜明的对比。在 Linux 基金会,少数人设定整个 Linux 的方向。在谷歌的 Android 和苹果的 iOS 等系统上,情况也是如此。这些组织中的少数高层人员决定了这些庞大生态系统的整体架构。

考虑到这当中缺乏集中协调,这一切居然能行得通,真是一件难以置信的事情。当然,有些项目仍然显得有些笨拙,但是开发人员和用户的体验在整个堆栈中都在迅速改进。

往往大的变化会缓慢开始,之后突然发生。Web3 目前的开发模式可能遵循类似的规律。很难预测何时形势会突然急速前进,但是至少现在可以在市场上看到所有主要部件的基本形状和轮廓,而且在开发人员社区中,人们对如何将它们完全结合在一起已经有了一个普遍的理解。

感谢 Peng Zhong 和 Avani Miriyala 在图片设计方面提供的帮助。

披露:Multicoin 已制定、保持和执行合理设计的书面政策和程序,以识别和有效管理与其投资活动有关的利益冲突。Multicoin Capital 对本报告中所列资产在公开发布后 72 小时内(「无交易期」)遵守「无交易政策」。 在无交易期间,任何高级管理人员、董事或雇员均不得买卖文中任何所涉资产。在发布此报告时,Multicoin Capital 持有的头寸包括 Kadena、Near、Solana、Dfinity、Oxio、Keep、dfuse、The Graph、Livepeer、Arweave 和 Coda。

来源链接: multicoin.capital
作者:Kyle Samani,Multicoin Capital 管理合伙人

链接: https://www.fly63.com/article/detial/6835

如何优雅地查看 JS 错误堆栈?

在前端,我们经常会通过 window.onerror 事件来捕获未处理的异常。假设捕获了一个异常,上报的堆栈是这个:这个堆栈,你看得出问题来吗?我们发布到 CDN 的脚本文件,普遍是经过 UglifyJS 压缩的,所以堆栈可读性相当的差。

连续赋值(从堆栈角度解析) a.x = a = {n:2}

今天看到一个面试题,一直想把这个题目解析更加直观化,就跟看小人书一样,看图就能明白其中的原理,所以用PPT做了几张图。接下来我们从以下几点分析以下:

JavaScript中的执行上下文和堆栈是什么?

在这篇文章中,我将深入研究JavaScript最基本的部分之一,即执行上下文。在这篇文章的最后,您应该更清楚地了解解释器要做什么,为什么在声明一些函数/变量之前可以使用它们,以及它们的值是如何确定的。

js中的堆和栈

栈(stack):栈会自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间;堆(heap):动态分配的内存,大小不定也不会自动释放

异步堆栈追踪:为什么 await 胜过 Promise?

与直接使用 Promise 相比,使用 async/await 不仅可以使代码更具可读性,而且还可以在 JavaScript 引擎中实现一些有趣的优化。这篇文章是关于一个这样的优化,涉及异步代码的堆栈追踪。

使用 JavaScript 的数据结构:堆栈和队列

Web 开发中最常用的两种数据结构是堆栈和队列。许多 Internet 用户,包括 Web 开发人员,都没有意识到这一惊人的事实。如果您是这些开发人员中的一员,那么请准备好两个具有启发性的示例:文本编辑器的撤消操作使用堆栈来组织数据

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!