此前 PANews 在文章《 Layer2 之后该怎么扩容,深度解读 Celestia 的数据可用性模块 》中 简单介绍过什么是模块化, 但 这次希望在此基础上,谈谈为什么区块链需要被模块化。

首先来复习一下模块化是什么。在这个概念中,一条公链可以被分解成安全层,数据可用层和执行层。安全层通常是承载共识的,也就是负责让最终交易结果上链。数据可用层则可以被简单理解成帮助执行层“自证清白”,防止执行层作恶的。我们常挂在嘴边的 Rollup ,或者 Layer2 就是执行层,它是一个模块,同时也是区块链模块化的产物,负责执行交易。

这三项功能原本被放到一整条公链中,直到链上的节点越来越多,区块越来越大,交易越来越忙不过来,最后的结果就是,不但 Gas 费爆炸了,出块速度还很慢。于是 就有我们常说的区块链“ 不可能三角 ”理论 , 即 如果用加大区块大小来提高数据流通量,就得拉高节点的门槛,淘汰掉算力不达标的节点同时,也降低公链的去中心化程度。如果想要保住去中心化,只有增加更多更强大的节点,可节点一多,交易速度又慢了,只得继续增加区块大小,就又回到了最开始的问题。这个故事有很多种讲法, 核心 是只能靠牺牲一部分来成全另一部分,就像 Solana ,价格低,速度快,但是中心化程度高,它赌的是摩尔定律,赌算力和带宽的成本增长追不上链上交易给它带来的收入增长。

到这里,模块化的必然性就已经出现了,现在我们甚至不必再讨论扩容的方法将会有哪些, Layer2 已经从一种可能性坍缩成了现实,将公链解耦的模块化就是答案。我们可以把上述三项功能中,其中至少一项单独外包出去的公链称为模块化公链,比如以太坊,它把执行层外包给了 Layer2 。也比如 Polkadot 和 Near ,它们有分片验证的外包设计。而 Avalanche 则像一个伪模块化公链,它看到了模块化的好处,于是做了一个单片链的组合,也让公链的基本功能在自家门内做了解耦,缺憾是目前还没有做好共享安全性。 Cardano 则处在一个临时状态,尽管没把已经解耦的功能外包出来,但从路径图上看也只是时间问题了。这些都是公链在模块化上所做的尝试,而模块化的最终愿景可能是 Celestia 与 Evmos 合作的那样——一个 Rollup 套娃 ,具体在开头所提文章中有展开阐述 。所以,长远来看,模块化是公链扩容的必经之路,即便是“反对模块化”的 Near 其实反对的也只是“别人来做我的模块”, 因为 它 要 “我自己做我的模块”。

目前不仅执行层在模块化之后的成就有目共睹( Arbitrum 和 Optimism 的体验明显好过 Solana 或是 Fantom 这类的 Layer1 公链,因为前者只需要一个算力足够强的节点来做 Sequencer 就够了,而后者哪怕是牺牲了去中心化来提升节点性能,也需要至少 21 个节点来做 Sequencer ),数据可用性也因此需要和执行层解耦。只有这样,当 Layer2 出问题时,用户才能借助数据可用性来提出“挑战”(针对 OP )或是强行把自己的资产从 Layer2 上拉回 Layer1 (针对 ZK )。这样的一个数据可用层,放在 Layer2 上(或是 Layer2 提供的链下第三方验证机构),你会不放心。放在 Layer1 上,你会心疼钱。分片并且放在一个单独的链上,随用随取,可能是目前最好的答案。这就是模块化开始快速发展的背景,长期趋势仍在酝酿,短期痛点已然出现。

模块化背后 的——递归思维

考虑到这个话题对大多数人是无意义的,就像我们吃鸡蛋,却不必知道没心情下 蛋 的母鸡该怎么哄。所以我希望能和大家讲讲模块化背后的抽象思维,也许再听完后,你会发现这种思维其实无处不在,并且在理解后,能帮我们解决不那么抽象的问题,就像乐事薯片的“双曲抛物面”如此坚固,背后的道理却和蛋壳结构相同。

“模块化”的概念在 web2.0 已经被实践了很多年了,甚至可以说,从打有计算机开始,我们就在想办法把一类问题,做成一个模块。坦白讲计算机的本质是机械运动,就像算盘,我要去拨动算珠,算盘才能执行运算,我每拨动一下,算盘运算一次,所以这个时候真正在 执行计算的是我,不是算盘 。我今天遇到了一个算数问题,我拨了 100 次才把这个问题解决,但我没有把这个问题的答案记下来。如果第二天,我遇到了同样问题,我还是需要拨 100 下算盘。相信各位读者都有投资的经验,不难看出,我这两天一共拨了 200 次算盘,解决了两次问题,这是我用时间换来的基础收益。可如果我在第一次计算这个问题的时候把答案记下来了,那无论我遇到这个问题几次,我都只需要拨最开始那 100 次算珠。 资源的复用,才能带来超额收益 。在这个例子里,被复用的是“时间”。“把答案记下来”就是我得到的最基础的模块。在此之后,我还可以把更多计算公式也做成一个个模块,这样当计算机收到我的提问后,会找到对应的模块执行,最终把执行的结果反馈给我。此时在 执行计算的是计算机,不是我 。这个过程,就叫递归,所有的 Rollup 本质也是一种递归,它们通过不断的调用自身,来满足数据可用层的验证要求,这种资源的复用,是我们在大多数时候觉得计算机比人类效率更高的主要原因。

人类对这个世界的认识是由近及远、从少到多,一点点扩展来的,这就是人类固有的认识和思维方式,根植于我们的基因中。这样的认识和思维方式让我们很容易理解具体的事务,但是限制了我们的想象力和大局观。当需要思维触达 那些 远离我们生活经验的地方时,我们就会出现理解障碍。

和人不同,计算机在一开始就被设计用来处理规模大得多的问题,因此计算机有条件采用与常人完全不同的方式来解决问题。如果一个人能够站在计算机的角度想问题,就可以被算作拥有“计算思维”,这就如同我们说某个人具有科学思维或者工程思维一样。如果一个人在做事情的时候,采用的是计算机解决问题的方法,这个人就具有计算机的方法论。在计算机的思维中,最重要的是一种自顶向下,先全局后局部的逆向思维,它被称为递归( Recursive )。与之相对的,是人类采用的自底向上,从小到大的正向思维,它被称为递推( Iterative )。

在扩容的问题上,假如我们用现在的常规思维去想,交易变多了,那我需要给矿工更多的费用,而且我收到的交易费一定要高于我给矿工的费用,否则就会亏损,但我现在没这么多钱,所以我只能提高交易费,可这样一来交易量会缩小,于是我只好增加吞吐量,同时让节点数量减少,在安全性上做妥协。这种情况下,如果不减少节点数量,又不提高交易费,就只好发行更多的代币,用来支付矿工,这样做的结果就是这条公链的通胀越来越严重。比如 Solana ,至今为止,它一共执行了 562 亿次交易,按照其官网公布的,每笔交易手续费为 0.00025 美金,其收取的手续费总额为 1400 万美金左右。如果我们去 Stakingrewards 上看一下,可以查到它目前的 Staked Value 在 455 亿美金左右,按照较低一档的 APY 5.88% 计算, Solana 最近三十天内要分给质押者约 2.2 亿美金。也就是说自其主网上线至今收到的所有交易费,仅相当于最近一个月支出的 6.2% 。以至于 Solana 需要 15.4 万 TPS 的吞吐量才有可能做到收支平衡,尽管我们知道它赌的就是摩尔定律能把带宽和算力成本拉下来,但这种规模的亏损,怕是禁不起一场熊市。这就是递推的思维,我遇山开山,遇水架桥,直到走进一个“死胡同”里。

以太坊没有采用这种通胀模型,其结果就是交易费用爆炸,但它在一天里收取的交易费用,甚至比 Solana 和 Polygon 一年的交易收入加起来都多。如果我们逆向去想这件事,矿工收取用户手续费,仅仅是因为矿工执行了交易么?交易人人都能执行,之所让矿工帮忙上链,无非是因为用户希望自己的交易能得到去中心化的安全保障。那让一条链把安全和交易全做了,岂不是自找不痛快? Solana 收取交易的费用,付给矿工的是安全的钱,那它肯定亏本啊;用户交给 Eth 交易的任务, Eth 收的却是安全的钱,那用户显然也不痛快。所以为什么要把安全和交易混为一谈呢?假如把数据可用性和分片从公链上分担出来,那节点越多,数据吞吐量就越大,而且节点门槛可以做到和手机一样,凭着这种可以无限增大的性能和与 Layer1 上矿工收入完全无关成本,我可以让这条链上的 Rollup 少说增加一个数量级。众多的 Rollup ,收取的也仅仅是交易的费用,提供的也是交易的服务。 Rollup 的数量上来了,能交给 Layer1 和数据可用层的费用就也增加了,前者的矿工这下任务轻了,把数据压缩上链就行了,后者也有钱买更多节点了,于是这下又增加了 Rollup 的空间。重复执行这项“递归”,公链将得益于全局思考的模块设计,走上一个正循环。

模块化的深化, Web3 加强组合性

我甚至认为模块化在占领区块链底层后依然不会停下脚步。 Web3.0 才刚刚开始形成概念,我们就已经看到有 个 GameFi 项目 Metasport ,用 ETH 做资产层, Starkware 做 P2E 激励层,用 Internet Computer 做游戏玩法和逻辑层, IPFS 做存储冗余层。模块化不应该被如此简单地定义在底层技术上。虚拟世界与现实之间的主要不同,在于虚拟世界更加稳定,不会因为一场突如其来的疫情,就让各国之间的供应链断裂,生产者被迫囤积大量库存,或干脆自己做自己的供应商。虚拟世界最大的风险不过是熊牛转换,在现实世界面前不值一提,所以我们也希望看到越来越多的应用开发者,在自己保留部分基础能力的同时,将实际任务外包给其它生态成员。毕竟虚拟世界的干扰因素少,所以我们有能力实现理论上的效率最大化。唯一需要考虑的就是安全问题,这个问题的难度等价于现在的跨链问题,但说到底也没什么大不了的,既然是技术问题,就总有解决的时候。

我想说的效率,其实还有另外一层。就是在区块链世界逐渐被大众所熟悉的今天,会有更多的优秀人才和资本被吸引进来。在 web3.0 概念中,供应商们很难像 web2.0 那样把用户留存在自己的生态里。如果是这样,这些“增量”会选择以一种什么样的方式进入到区块链世界中?我能想到的方式有两种,一是做卖铲子的人,他们将是模块的供应方,在现有的基础设施中找到可以被改进的点,唯有这样才能不依赖“流量”,同时利用模块化打造出自己的长板,与所在生态拼接成一个“木桶”。还有一种方式是将自己在链下的流量导流到链上,流量的入口仍然在链下,他们将作为模块化的需求方,需要的是开箱即用的体验,以及快速的应用搭建速度。

而模块化的区块链世界无疑能进一步拉低创新的门槛,我们甚至可以期待一个效率远超 web2.0 的区块链世界。 只有当低水平的重复工作被模块化工具所终结,真正的创新才能开始 ,对区块链来说是这样,对我们每个人来说也一样。远的不提,大家有没有发现几乎所有 DEX 的前端页面全都长得像一个样子,几乎每个 Solidity 初学者做的第一个完整项目都是把 Uniswap 的代码复制一遍。对于开发者而言,这些常被拿来“学习”的内容,本身就是一个个封装好的“模块”,很多人就是在“学习”的过程中,站在前人的肩膀上,发现他们之前没有解决好的漏洞,做出一点点改进,然后成为其他人可以站上的肩膀。

现在开始,世界各地,从瑞士到马耳他到塞舌尔到新加坡到旧金山,会有更多一无所有的年轻开发者每天晚上扪心自问 :

和尚摸得,为什么我摸不得 ? 别人可以简简单单的在前人的代码上改进出新的项目,为什么我不可以 ? 既然模块化已经提供了足够的基础组件,我为什么要花时间自己再重新写一遍?当更多开发者发出这样的问题后,区块链上的创新将会指数增长。

总结

模块化是扩容的答案:现有的公链要么已经开始模块化的尝试,要么仍处在币价涨幅难以支付矿工费用的亏损中。安全保护和计算执行是两种服务,理应分开收费。而这些仍在挣扎的公链,越早一天接入 Layer2 ,其原始价值能被保留的越多,否则只能在无尽的通胀中被稀释殆尽。当然,将自己直接转化为某条公链的 Layer2 也是个可取的思路,我们不需要太多的公链用独立的安全层承载属于自己的共识,过度分散的共识对效率没有帮助,而自由的市场,终究会毁灭“更高效率”面前的所有阻碍 。

商业竞争促成模块化:只有资源的复用能带来超额收益,诚然公链可以开发自己的模块化来解决自己的扩容问题,但在同等劳动付出下,完全独立的模块化项目会服务更多的用户,商业法则会淘汰那些得不到超额收益的竞争者。而模块化无论对需求方还是供给方而言,都是效率最高的方式。

安全问题很严峻,但不要被吓倒: web2.0 解决安全性的方式能给我们带来一定启示,组件化在一开始带来的问题,比它解决的问题还要多。很多人一看到某些项目因为采用了多个供应商提供的模块 \ 组件,结果被黑客找到机会,给用户带来了损失,就认为这个方向本身不对。实际上这可能仅仅是因为时间太短,我们还看不出效果。在区块链世界中,模块化的概念仍在早期,实践的步伐要慢,但既然已经迈出了第一步,在想要改变这个方向之前,要更慢。同理对于那些坚持单片设计的公链,大家也要多一些耐心。

任何方向的改变在一开始都会有很大的下行的不确定性。比如我们常常讲免税可以刺激经济发展,从长远来讲能够获得更高的税收,但是幅度太大的免税会使得政府一下子入不敷出,然后不得不推高债务,成为经济发展的负担。牢记万事皆有滞后性,夏至来临的时候,往往还不到一年中最热的时候,把一克冰融化成水的能量,却能把这一克水从 1 度加热到 80 度。 Web2.0 的组件化花了很多年才初见成效。安全问题虽然是 web3.0 模块化的桎梏,但我相信它终有一天会被打破。