对Web3数据结构演变的思考
成吉思汗的骑兵,攻击速度与二十世纪的装甲部队相当;北宋的床弩,射程达一千五百米,与二十世纪的狙击步枪差不多;但这些仍不过是古代的骑兵与弓弩而已,不可能与现代力量抗衡。基础理论决定一切,未来史学派清楚地看到了这一点。——《三体》
1.背景和展望
在上一篇文章《彩虹桥上的棱镜塔》的结尾,我提到了链上世界和链下世界中的空白环节,这些环节是任何一个Dapp都无法跳过的步骤,出于链上数据获取成本的高昂以及和区块链网络通信的复杂和繁琐,诞生出了服务于这些环节的平台。有关它们是否符合去中心化理念的争论从未停止,这不禁让我感到好奇,Dapp的去中心化程度究竟有多少? 所谓的web3基础设施背后的架构究竟是如何的? 本文将通过分析几种类型的web3公司背后的技术设计架构来对web3基础设施层的演变进行分析。而在这之前,请允许我介绍一个相对古老而又不那么web3的事物,以及它在web3世界中起到的作用。
2.ETL和区块链
什么是ETL ETL代表提取(Extract)、转换(Transfer)、加载(Load),是一种数据的集成过程。通过将来自多个数据源的数据组合到一个单一、一致的数据集中,然后再加载到数据仓库或者其他目标系统之中。随着数据库在1970年代的普及,ETL被引入作为在分析和计算中加载和集成数据的过程,最终成为企业数据仓库项目集成数据的主要方法。 通常来说组织使用ETL的目的是:
从遗留的系统中提取数据
清理数据以提高数据的质量和一致性
将数据加载到目标数据库
ETL和Web3的关系
区块链技术就是一种高级的数据库机制,在一些web3的企业IT架构中是这么实现的。通过ETL工具将区块链上的数据清洗、处理并且加载在数据仓库之中。
Blockchain ETL
在2018年,谷歌云的开发者Allen Day 和Evgeny Medvedev 正尝试将比特币和以太坊区块链的交易数据和基本的检索工具加载到谷歌的BigQuery 数据分析平台。并且鼓励全世界的开发者使用和改进这一开源ETL工具。通过Blockchain ETL所归集的数据源包括Ethereum、BSC 、Polygon 等区块链网络,而BigQuery作为使用Blockchain ETL的公共数据集,被大量的Dapp和链上数据分析工具所采用,包括Nansen。
如何处理区块链数据
在这里一定会有人产生疑惑。区块链网络不是公共的吗?我们为什么还要把数据进行这么复杂的处理并且存在数据仓库中呢? 因为节点上的链上数据并非以结构化的方式存储,而是通过交易的方式打包在区块之中。如果用户希望索引某些需要大量历史区块的数据时,单一的请求无法满足其数据分析的需求。尽管以太坊客户端提供一些常用访问功能的API(例如:检查交易状态、钱包交易关联、检查钱包余额),可API端是无法提供所有链上数据的。
举个例子,假设你需要从头开始做一个nft 的展示网页。用户可以通过输入钱包地址信息来获取该钱包所拥有的nft信息。那么我们需要将该钱包历史上所有的交易都导出,并且将erc721或是1155合约mint的信息以及nft 转账的信息从中过滤出来。这其中就包括了图片的metadata、tokenid、合约metadata 、时间信息等等,这些信息全部来自于区块链网络中并且随着时间和账户的行为不断变化。例如图片的元数据、NFT的所有权、地板价都是不断的发生变化的。而不间断的向区块链网络请求数据是不现实的,一方面开发者并不知道某个具体NFT的转账发生在哪个区块中,另一方面在于某些用户关注的特定数据(NFT交易但地板价)在区块链网络中仅仅只是一笔简单的交易,区块链网络本身没有筛选的功能。
因此需要一个步骤将区块链上复杂非关系性的数据转化成有关系的可供sql语句查询的数据。而我们在市面上看见的大部分数据分析平台都是由此演化而来。换言之,为了更加高效和快捷的区块链数据检索,一个与真实区块链网络并行的缓冲层应运而生。 此架构被大量应用在现代web3基础设施公司中,并且随其业务不断变化和演进。
3.web3基础设施层的演变
搭建一个dapp所需要的web3基础服务往往包含以下两种:
节点:区块链节点本质上是一种运行程序,而共识机制则是验证各个节点数据的特殊规则,区块链网络就是通过全球各地不同节点的通讯而建立起的一张庞大网络。早期开发者需要自行建立全节点来与区块链网络建立通信以方便部署智能合约,而得益于web2时期云服务的弹性伸缩的发展,当前大多数开发者将节点部署在ec2实例之上运行。也因此诞生了远程调用节点的商业模式例如Alchemy、Infura 。
数据:数据的写入并非什么难事,难点在于数据的精确索引和稳定提供。随着dapp本身所实现的功能越来越复杂,用户所需求的数据种类也会变的越来越五花八门。过去业内普遍的模式则是项目方建立自己的服务器,并且将处理过的数据保存到数据库并在上面建立api终端,以方便内部查询和调用,这一种模式往往成本过高、需要维护并且将会在未来被更新型的架构所淘汰。 上文所述分类实际上是按照区块链开发环境和架构来进行的划分,而目前市面上多家基础设施机构往往集成了其中的几个阶段,例如alchemy 和 moralis的业务包括了 节点服务、数据服务和开发人员工具服务。而dune 和 big query 并不提供节点服务只提供了数据服务。 考虑到在链上存储数据或者部署合约所需要的成本以及公链本身的性能限制,Web3应用并不会让所有的业务数据和后端代码上链。所以大多数应用依旧保留了自己的链下数据库和后端代码,例如规定项目核心业务逻辑的智能合约、用户的核心资产往往会上链。而不那么重要的核心功能逻辑和其他数据则通过传统web2的方式构建一个服务端。这一种方案可以最大化的兼顾用户体验和研发运维成本。
随着用户的不断涌入,web3目前呈现出多链并存的生态。项目方会在一条公链进行主要的部署和测试之后,往往会选择兼容其他的L1/L2的公链从而覆盖更多的用户群体。当项目需要支持多链的时候,其架构如下图所示。我们可以看到,每当项目方决定支持一条新链,就需要把之前的研发流程重新设计,这种模式会使得研发工作和运维成本都会成倍数的增加。
这一种模式如同互联网早期的电商平台和app端软件开发选择自建idc机房一样,随着用户请求数量的不断增多和区块链网络本身存在的数据状态爆炸,其成本会随着程序设计的复杂度同步上升,同时也不利于快速拓展市场。一方面某些高性能公链的节点对运行设备的硬件要求较高,另一方面数据的同步和清洗需要不断消耗人力和时间成本。
随着区块链基础设施层的不断演化,项目方目前也可以通过链上云数据仓库服务的方式从而摆脱自建数据仓库的困扰,使其可以将开发重心放在其项目本身。
这一类企业选择将过去项目方所承担的存档节点维护、链上数据etl、数据库的调用等步骤集成起来,通过提供多链数据和节点api来最大化降低web3应用访问和区块链网络的利用门槛,我们将其称为链上数据服务(Blockchain data warehouse)。
这些企业所提供的数据类型和其设计架构有所趋同,但根据其面临的客户差异会衍生出不同的商业模式。而这一领域也会被原有的web3开发者平台和rpc提供方所参与,如alchemy、moralis 、dune api 都会提供类似的服务。
案例
chainbase 、luabase 这些服务商他们的客户往往是web3领域的b端客户,例如链上钱包、nft交易平台、数据追踪商、链上安全检测服务商等。
与alchemy 等提供固定api数据的供应商不同的是,开发者可以通过写sql的方式自定义其想要调用的区块链网络数据。这种方式能够极大提升开发效率、并且最小化索引链上数据的成本。 而luabase则通过集成更多的第三方开发者数据分析平台、协作工具等saas服务,使得开发者能够自由的在其平台上进行数据组合和筛选,并且推送到主流saas服务中。
这些方便的举措都是为了吸引更多的开发者使用并且推广他们的产品,从而实现产品驱动增长。
随着dune api 的服务推出、越来越多的项目意识到了这一类方案很有可能成为未来web3基础设施的主流设计方案,这一领域的竞争持续加剧。我认为有几个重要的指标可以评价此类项目的竞争力。
更快的数据索引:数据检索的速度和数据库的性能息息相关,考验项目团队的底层数据设计能力。(OLAP)
丰富的开发社区:优秀开发社区离不开良好的氛围和优质的内容,考验项目团队的运营和开发者关系维护能力。
Dune Analytics
Dune是一个强大的区块链数据分析平台,用户可以通过查询、索引、导出区块链上的数据并且将其可视化。只需通过SQL语句对相应的区块链数据进行检索,即可获得对应的数据。
而Dune又是如何实现看似“实时、准确“的链上数据展示呢?
从Quick Node的官网和Dune的文档里面可以看到Dune 的技术架构发展历程。
早期的Dune 使用的是自托管的存档节点,再将数据进行清洗、整理放入其数据仓库中(postgreSQL),因此我们可以用sql语句对其整理好的区块链数据进行索引和查询。随着存档节点的数据量越来越大,自托管节点的维护成本越来越高。最终Dune选择了quicknode 作为他们存档节点的服务商。而这样的架构设计特性就决定了用户在网页侧所访问的数据是Dune自己维护的私有数据仓库,其数据集并非与真实区块链网络同步,而是在某一个特定的时间进行更新。
随着链上数据的不断增加和用户对复杂查询的需求,一些相对复杂的语句可能需要花费几个小时的时间才能在Dune上运行出结果。因此V2版本的dune 决定从过去的PostgreSQL 转移到托管在Databrick 上的Apache Spark。
对于用户来说,仅仅是将检索的语法从postgre 改成了spark sql,但是对于dune这个公司而言,他们后端的整一个开发框架都发生了变化(见上图)。尽管加快了用户检索和筛选的速度,但是其链上数据依旧是延迟并且不可导出的。而对于一些实效性依赖较高的项目方来说,dune的数据分析的实效性是远远不达标的。从笔者的角度看 dune 更像是一个依赖于公共区块链数据的BI(business intelligence)工具。然而依赖于看板和偏c端用户付费的商业模式,其未来营收会面临增长瓶颈。
因此在22年的年中,其推出了 dune api 来给企业端客户提供服务。我们也可据此推断出dune 的会员支付收入无法覆盖其维护后端服务器、数据清洗、调用的成本。其未来能够真正大规模盈利的业务在于数据本身,这一步也将让dune 与chainbase、flipside、luabase、transpose、spice 等基础数据设施(blockchain data warehouse)产生了竞争关系。
这一种服务架构能够极大提升开发者的效率以及减少后端不必要的维护,该架构依旧存在着中心化的风险。正如同现在rpc服务面临的中心化指责一样,我们不能保证未来用户所调用的数据一定和链上数据是相同的。区块链网络本身的分叉和回滚设计也会带来后期数据库清理和去污染的成本。另一方面,现有的数据服务商之间所提供的数据并没有形成一个普遍的标准,例如有些区块数据中缺少transaction index、而有些value的格式和其余的商家并不兼容。这些不兼容和中心化的风险会给后续区块链开发者带来不必要的麻烦。业界也在正视和处理此类的问题,例如infura所提出的数据标准同盟以及space&time 正在研发的去中心化数据库架构都能够给未来开发者带来更加友好的开发环境。
5、开发者的变化和节点的部署
衡量开发者的活跃度主要有三种途径:library的使用情况、智能合约的部署以及活跃dapp的数量。通过alchemy发布的2022年开发者报告中我们可以看到:
2022 年第三季度,开发人员下载了 Ethers.js 库 948,981 次,自 2021 年以来增长了 212%,而 web3.js 的下载量为 587,567 次,自 2021 年以来增长了 137%。
开发者总计发布了 48,689 个经过验证的智能合约,与 2021 年第三季度发布的 20,040 个经过验证的智能合约相比,同比增长 143%。
开发者在以太坊部署了 117,922 个经过验证的智能合约,这是迄今为止数量最多的一年。占总智能合约部署量的36%
开发者的数量仅是一个衡量维度,并不能完全代表一个行业的发展状况,一个良好有序的开源社区才是真正能够衡量其活跃的指针。正如《人月神话》所传递的理论:“以大量的人员和较短的时间并不能缩短软件的开发进度,将进度落后的专案追加人力,只会使得进度更加落后。”而开源对于软件行业的影响是深远的。我们以linux为例,作为现代服务器首选的操作系统——排名前100万的网络服务器中有96.3%运行linix。
截止2022年12月,从ethnode的数据中可以看到,在以太坊节点操作系统中,使用linux系统进行部署的占比95.64%。在云托管节点服务中,仅aws就占以太坊主网上托管节点的68.5%。而oracle(2.0%)、谷歌(3.5%)也提供以太坊主网托管节点服务。
开源软件和相对中心化的云服务依旧是web3世界的根基和支柱。绝大部分的去中心化应用都会将其部署的智能合约开源。一方面可以通过对开源的合约进行审查可以减少因为漏洞所带来的资产损失。另一方面这些开源项目也可让更多开发者进行协作和创新,大大减少中心化协调所带来的摩擦成本。
案例
Alchemy 作为102亿美金估值的基础设施平台,其核心模式便在于引导更多的开发人员和工程师使用它们的服务从而成为web3世界的aws。从其官方文档中可以看到,alchemy的文档对区块链开发相关初学者相当友好。从今年刚刚推出的alchemy university 计划中我们也可以看到其对培养新一代web3开发者的重视。
另一方面通过提供测试网水龙头、免费的api调用方案、智能合约教学视频等方法,吸引更多的开发者注册从而建立起庞大的开发社区。
Moralis作为新兴web3开发者平台,其战略不仅在于教育和培养新一代web3的开发者,还希望通过开放更多api接口和sdk种类来吸引更多的web2端开发者进入。我们从其今年发布的moralis 2.0中可以看到——提供一流的 Web3 后端服务并实现与 Web2 开发人员已经使用的 Web2 平台的集成。现有的dapp大多以网页为主,也就导致了现有的web3前端开发依然是以react技术栈为主,构建网页所需要的技术栈和构建移动端app是有所不同的。而Moralis通过集成firebase 和playfab等web2后端开发平台实现了与flutter、ios、安卓系统的打通。
从上述两个例子中可以看到,虽然alchemy和moralis 的功能和商业模式有所差异,这两家基础设施公司对待开发者的布局是趋同的。 一是通过详细的教学文档和视频将更多的web3爱好者培养成合格的开发者。 二则是通过集成现有的web2开发堆栈,降低重新学习的门槛。
当然,我们也仍需面对一个事实,即使web3相关开发者的数量呈现出爆发式的增长,当前web3开发者的人数远远小于其他软件领域(java、python、javascript)的开发者数量。
同样令人值得注意的是2018 年和 2021 年开发人员参与web3领域的激增发生在加密货币估值达到峰值之后。这类似于从 2013 年左右开始,在对 Snowflake、GitLab 和 Sentry 等公司进行大量 VC 投资的支持下,开发人员涌向云原生生态系统的情况。
借由节点供应商,开发者可以减少对基础设施的维护从而将精力专注在产品开发上,用户只需通过注册对应的api—key便可在以太坊、polygon、arbitrum、sui等网络节点调用消息。然而这一种商业模式往往受制于其云服务器花费开销(维护一个全节点的价格为100美金一个月,存档节点则高达1000美金一个月。),并且随着竞争对手的增加以呈现出蓝海变红海的趋势。
5、总结和展望
上文所提到的节点和数据层相关赛道和机构其实只是基础设施建设的一小部分,还有大量的去中心化索引和涉及质押的节点层没有提到。上述资料我在2022年中就已经梳理和整理完成,迟迟没有放出来的原因在于当时我并没有思考明白这些基础设施层所出现的原因和未来大规模应用的前置条件。以太坊2015年7月正式启动,为什么节点供应商到2018年才逐渐出现?而数据层和索引层的项目在2022年才开始融资和落地?
未来的种子深埋在过去之中。作为一个风险投资从业者,我常常问的一个问题就是“为什么是现在?”这个问题,并非是我用来刁难创业者或者是应付投决会的投委的,这个问题是我作为投资人要时常反省乃至思考的一件事情。
任何的技术发展和应用的创新都离不开客观规律在背后所起的决定性因素,如果没有椭圆曲线密码学的支撑,现有的加密货币都不复存在。如果没有1985年mit的那一篇研究论文,也不会存在现有对zk的实际应用。 那么换回到web3的基础设施层来看,我们可以清楚的看见。Alchemy 、quick node、infura、等远程节点供应商都是在2018前后年成立并且完成商业化和规模化。
这些节点供应商所成立时间,恰好就处于云计算发展的黄金阶段。这也能够回答上述的问题,云计算和虚拟化技术的发展带动了web3早期基建的商业化,让开发者方便的使用节点服务。
而数据层和索引层项目的融资和创立,大部分发生在2022年,以luabase、chainbase、spiceai、flipside、duneapi(2022年提出)等为代表。
正如我在上文中所提及的,这些索引层和数据层项目的商业化实现和其底层数据架构的设计息息相关即——olap(On-Line Analytical Processing)系统的设计。其中核心引擎的采用,就是索引层性能优化的关键(索引速度、稳定性),常见的引擎包括Hive、Spark SQL、Presto、Kylin、Impala、Druid、Clickhouse 等。其中性能强大并且在国内互联网公司应用广泛的clickhouse 在2016年开源,并且在2021年获得2.5亿美元融资。因此,新一代数据库和更好的数据索引优化架构催生了web3数据索引层的诞生,使得这一类公司能够以更快更高效的方式提供数据api的服务。
困扰web3开发团队的性能、负载、安全性、扩展性是一直存在的,只要他没有脱离软件的这一个范畴。所以一个好的基础设施就是为了解决这几个问题而诞生的,接下来则是提供这些服务的可扩展性和稳定性。一旦能够实现在安全性、稳定性保障的条件下大幅提升开发效率,那么业务开发就会越来越容易。人们的双手一旦解放,就会激发出想象力和创新能力,从而实现越来越多有趣的应用层。而应用层在不断的扩展中就会提出各种各样过去市场上从未有过的需求,从而反哺基础设施的发展,这一点是相辅相成的。基础设施和应用永远都不是对立的,过去云计算发展的周期和各个互联网公司底层技术的演变都普遍遵循这样的规律—
—王权没有永恒:过去头部的协议乃至dex如果仍然固执的使用老旧的架构和开发方式,那就会被使用新型基建的新项目方所超越。dune 从过去老旧的数据架构重构之后确实比以前的版本更加快速,但是依然被新一代的基础设施例如flipside 、chainbase等在性能上所超越。 对于投资人和开发者来说,我们须在尊重客观规律的前提下,时刻对前沿的应用、协议的更新、乃至开发语言的变化、开源社区的态度等等内容进行持续的关注和应用,甚至是对自己的上游,例如云计算服务(虚拟化技术)、数据库提供商有所关注。这样才能够真正迎接应用层大规模应用时代的到来。
回到之前的“为什么是现在?”,可以得到一个有趣的规律。节点服务商大规模应用和爆发的先决条件就是北美云服务和虚拟化技术的爆发,而链上数据层的先决条件在于更好的开源数据库架构以及服务,这也是近几年各类BI产品所采用的各类数据框架方案。客观规律就是这些创业公司想要完成商业化所必需达到的技术先决条件。而对于web3项目来说也蕴含着一个规律即——使用先进基础设施的项目方可以打败使用老旧架构的项目方,例如更快的更方便的nft交易所(opensea的市场份额被侵占就是一个极好的例子)。这也是为什么我在开头引用三体的缘故,一个垄断市场的协议层如果依旧使用老旧的基建架构,那么就如同北宋的床弩一样,从数据层上看起来强大和不可一世,可依然无法匹敌二十世纪的装甲军团。因为从根本架构和理念上,他们就不是同一个物种。对于新型基础设施项目方来说也是一样,一个破坏式创新的产品在早期往往会被边缘和新型的企业所使用,因为垄断市场的项目方往往拥有技术债务,他们替换新的后端架构的需求会被企业内部的管理层所制约,同时也存在替换的时间和开发成本。那么对于风险投资来说,我更会去关注使用新型基建架构的项目方和吸引新市场新用户的应用层。
同样的如果在基础设施层没有完善的情况下,应用层是不可能迎来大规模应用的时刻的,老旧的架构使得其成本随着用户增多而指数级增加,用户的体验也变的十分糟糕(stepn应用最火的时候用户提现的卡顿和程序时常维护就是一个很好的例子)。作为一个投资人,掌握这样的第一性原理的好处在于可以第一时间判断项目是否所技术创新还是商业创新,以及项目未来的壁垒和未来困境在哪里。而作为创业者来说,了解这些领域能够在早期避免老旧架构对于未来用户拓展的影响以及估算创业所需的研发成本。客观规律不以人们的意志为转移,尊重科技发展的规律就不会被过高的宏大叙事所诱惑从而迷失方向。
这一点我想引用罗素所说的话来作为结尾:“不管你是在研究什么事物,还是在思考任何观点,只问你自己,事实是什么,以及这些事实所证实的真理是什么。永远不要让自己被自己所更愿意相信的,或者认为人们相信了,会对社会更加有益的东西所影响。只是单单地去审视,什么才是事实。”
6、相关资料引用
Moralis 内部讨论贴 https://forum.moralis.io/t/is-moralis-centralized/2135/8 Alchemy ceo 在推特上的对话 https://twitter.com/nikil/status/1290870587909443584 字节跳动与clickhouse https://www.infoq.cn/article/gz7yxwgcwnwees1m8kop Web3后端架构说明 https://chainbase.online/blog/article/the-non-tech-people-friendly-guide-to-web3-backend-architecture 秘而不宣的分叉 https://twitter.com/nikzh/status/1326466297153122304?s=20&t=jh-b3304Ckcm36mfgtYytQ 开发智能合约 Geth的 数据导出 https://www.cnblogs.com/Evsward/p/contract.html Too complicated https://www.coindesk.com/layer2/2022/01/03/web-30-is-too-complicated/ crypto data stack https://twitter.com/zk7hao/status/1614430361299349505?s=20&t=el_FwAYaxXyULViF7kY3ew olap https://www.ibm.com/topics/olap