第三财经网
首页 > 区块链 > 文章正文

存储共识范式:下一代区块链不必是区块链

第三财经网 2024-11-16 13:05 781

欧易交易所

欧易交易所

软件大小:268.26MB

软件版本:v3.4.2

设想一种公链扩容方案,具有下列特性:

  • 拥有媲美传统Web2应用或交易所的速度,远超任何公链、L2、rollup、侧链等。

  • 没有Gas费,使用成本为0。

  • 资金安全性高,远超中心化设施如交易所等,逊于Rollup但等于侧链。

  • 与Web2相同的用户体验,无需对区块链的公私钥、钱包、基础设施等有任何认知。

这样的方案确实令人非常兴奋:一方面它在扩容上基本已经做到了极致;另一方面在Web3的mass adoption上也奠定了很坚实的基础,基本消除了Web2与Web3使用体验的鸿沟。

不过目前我们似乎想不到有什么方案能做到如此完备,因为主流的讨论与实践确实太少。本文将前瞻性地介绍这种非常优秀和超前的下一代Web3计算平台设计范式——存储共识范式(SCP,Storage-based Consensus Paradigm)。

SCP基础组件和工作原理
  • 数据可用性层:一条被广泛认可且久经考验的公链或永久存储设施作为数据可用性层,如以太坊、Arweave等。

  • 执行层:一台服务器用于接收用户交易并执行,同时将用户签名后的交易原始数据批量提交到DA层上,与Rollup的排序器有较高相似性。但这一执行层并不一定需要具有区块链的数据结构,或者EVM兼容性等区块链相关的概念。它也可以完全是Web2的数据库+计算系统,但整个计算系统必须是开源的。

  • 共识确认层:由一群节点组成,它们拉取执行层提交到DA层上的原始数据,并用执行层相同的算法对这些数据进行运算,用来确认执行层的结果输出是否正确,并且可以作为执行层的防灾冗余。用户也可以从共识确认层的各个节点返回的数据,来确保执行层没有欺诈。

  • 结算层:由一群节点与其他链上的合约或地址组成,用于用户充值进入SCP和提现离开SCP。节点同样需要运行执行层相同的算法,并拉取数据进行验算。节点通过多签合约或基于TSS的地址来控制充值地址的提现功能。充值时用户向所在链指定地址充值,提现时向执行层发送请求,在结算层节点读取到DA层的数据后,进行多签或TSS对资产放行。结算层的安全程度是与侧链或跨链桥的跨链机制是相同的,它们也使用了相同的或等效的提现结算系统。

everPay

everPay是SCP的先行者,已经基于SCP率先构建了自己的产品,目前everPay的主要功能为充值、转账、提现、swap,在此基础上日后几乎可以扩展出任何Web3和Web2功能。

现在我们通过everPay的工作流程来完整地理解存储共识范式。

everPay的DA层使用了永久存储设施Arweave,即图中的大圆圈。

协调者Coordinator,即执行层。用户将交易提交至协调者,协调者执行运算并展现运算结果,然后将用户的原始输入数据批量提交至DA层。

检测者Detector,从Arweave上拉取协调者提交的交易原始数据,使用与协调者一致的算法,对数据和结果进行验证。检测者的客户端同样也是开源的,任何人都可以运行。

守望者Watchmen,掌管了提现系统多签的一组检测者。会根据交易数据对提现请求进行验证和放行。另外守望者也负责签署提案。

我们可以看到整套系统他们达成的共识是全部位于链下的,这即存储共识范式的精髓——它抛弃了区块链式的节点之间的共识系统,从而让执行层摆脱繁重的共识交流和确认过程,只需要做好一台服务器的工作即可,从而达到近乎不受限制的TPS和经济性。这一点和Rollup非常类似,但SCP可以说是将Rollup这一概念更加抽象和拔高了,将其从一个扩容专属的用例变为了新一代Web3计算平台的设计范式。

everPay的协调者是一台服务器,但这并不意味着协调者可以为所欲为。和Rollup的排序器道理类似,在将用户提交的原始数据批量地在Arweave上提交后,任何人都可以运行检测者程序对其进行验证,并和协调者返回的状态进行对比。这一点本身是因为状态转换函数(STF)是确定性的函数,输入 —> STF —>输出。只要大家的STF相同,输入相同(全部提交至DA,无法篡改,公开可见),那么得到的输出一定是一样的。

在这种架构下,一个中心化的服务器、数据库并不构成根本的挑战。这也是SCP范式另一点精髓,将“中心化”和“单一实体”这两个概念绑定解耦了——一个去中心化的体系里,是完全可以有中心化的组件的,甚至可以是一个核心部件,但这并不影响整体上的去中心化。

由此我们可以喊出一个耸人听闻但又符合逻辑的口号——“下一代区块链不必是区块链”。因为人们发明和使用区块链的初衷是去中心化、账本一致、不可伪造、可溯源等等老生常谈的基本面,所以不论是旧公链的扩容方案还是一条全新的公链,大家都形成了一定的思维定式:我们做的东西必须是一条区块链(由节点交流的共识组成),或者是Rollup这种看起来是一条链的方案(只是有区块链的数据结构,但并没有节点交流共识)。但现在来看,基于SCP的方案即使它不是区块链,也可以满足中心化、账本一致、不可伪造、可溯源等等一系列需求。

执行层

执行层是在整个系统中是至关重要的,它承担了整个系统的吞吐量与运算,也决定了整个系统上可以运行怎样的应用。

无限可能的执行环境

理论上执行层中的执行环境可以做成任何形态,可能性是无穷无尽的,具体取决于项目方如何定位自己的项目:

  • 交易所。基于SCP可以构建公开、透明的、无限TPS的交易所,该交易所既可以有CEX迅速、0成本的特点,又保持了DEX的去中心化。CEX和DEX的分野在这里就变得模糊起来。

  • 支付网络。类似于支付宝、PayPal等。

  • 支持加载程序/合约的虚拟机/区块链。任意开发者可以部署任意的应用程序在其上,和其他程序共享所有用户的数据并根据用户的指令进行操作。

因为用户完全摆脱了区块链形态的钱包,也只与服务器交互,它的用户体验与传统互联网应用是一致的,但同时又是去中心化的。

可以看到上述过程中已经包含了跨链swap和账户抽象等类似概念,当然仅仅是类似,我们仅仅是在SCP的语境下来理解。尤其是像账户抽象这种概念,对SCP来讲天然是不需要的,这个应该说是以太坊遗留的包袱。以太坊社区经过了很多轮的努力,终于推出了EIP-4337标准,来解决Web3大规模采用的问题之一——账户问题。而且EIP-4337仅仅是一个标准,其上的应用实践还有待考验。而在SCP架构下本身就不存在账户抽象的概念——你可以随意采用Web2标准账户和区块链账户等。从这个角度讲,许多成熟的Web2用例不需要重新思考和构建,就可以直接用于SCP上。

透明与非对称性

上面提到了账户系统,敏感的读者应该已经发现SCP虽然可以利用Web2的账户体系,但原封不动地使用似乎也有问题。

因为这整个系统,是完全透明的!直接使用用户对服务器的交互模型会出现严重问题,导致整个系n统毫无安全性可言。我们先回顾下传统的服务器-用户模型是如何工作的:

1. 账号注册:用户在应用程序的注册页面输入用户名和密码。为保护用户的密码,服务器收到后会通过哈希函数来处理密码。为增加哈希的复杂性并抵御彩虹表攻击,通常会为每个用户的密码连接一个随机生成的字符串(称为“盐”),一起哈希处理。用户名、盐、哈希被明文存储在服务提供商的数据库中,并不对外公开。但即使如此,也需要做加盐和安全处理,一防内鬼,二防攻击。

2. 用户登录:用户在登录表单上输入他们的用户名和密码。系统比对处理后的密码哈希值和数据库中存储的哈希值。如果两个哈希值匹配,表明用户提供了正确的密码,登录进程继续。

3. 操作认证:登录验证通过后,系统会为用户创建一个会话。通常情况下,会话信息被存储在服务器上,并且服务器发送一个标识(例如cookie或token)给用户的浏览器或应用。用户在接下来的操作中不再需要重复输入用户名和密码:浏览器或应用会保存标识,并在每个请求中附带标识。

我们再回顾下典型的Web3的区块链-用户交互体系:

1. 账户注册:实际上没有账户注册这一过程,也没有用户名-密码体系。账户(地址)不需要注册,天然存在,谁掌握其私钥谁控制该账户。私钥由钱包在本地随机生成,也不涉及联网过程。

2. 用户登录:区块链的使用并不需要登录,大部分dApp没有登录这个过程,而是连接钱包。有的dApp在连接钱包后会要求用户对连接钱包的身份进行签名验证,确保用户真的持有这个钱包的私钥,而不是仅仅是向前端传了个钱包地址。

3. 操作认证:用户直接向节点提交签名后的数据,节点验证后会向整个区块链网络广播该交易,满足区块链网络共识后用户的操作即被确认。

两种模式的差异是由对称和非对称导致的。在服务器-用户架构中,双方掌握相同的秘密。在区块链-用户架构中,只有用户掌握秘密。SCP的执行层虽然可以不是区块链,但所有的数据又需要同步到公开可见的DA层,因此SCP所使用的登录、操作的验证方式必须是非对称的。但又因为不想有让用户保管私钥、使用钱包等影响大规模采用的累赘动作和较差体验,在SCP上构建的应用使用传统的ID密码或者OAuth三方认证登录的需求也很强,那么如何结合二者呢?

由于非对称密码学和零知识证明对具有不对称性,我设想了两种可能的方案:

  • 如果想使用ID-密码体系,可以将这个保存密码的模块不做进SCP中,这样其他人也就不可见。SCP执行层内部依然使用区块链的公私钥账户和操作逻辑,没有注册,没有登录等。用户的ID实际上会对应一个私钥。这个私钥当然不能保存在项目方,比较可行的方案是使用2-3的MPC来解决中心化存储的问题,同时又不让用户有使用私钥的累赘。

  • 当依赖OAuth登录时,可以利用JWT(Json Web Token)可以作为身份认证的方式。这个方式会比上面的显得稍微中心化一些,因为它本质上需要依靠Web2大厂提供的第三方登录服务作为身份认证。第一次使用第三方登录时,将JWT中表征用户身份和服务商身份的字段注册在系统内。在用户的后续操作中,将操作指令作为public input,而JWT整体作为一个secret witness,用ZKP验证每一笔用户的交易。每个JWT有过期时限,用户下次登录时也会申请新的JWT,所以无需保管。另外这个系统内还需要依赖JWK,这里可以理解为大厂为验证JWK提供的公钥。那么JWK去中心化地如何输入到系统内,日后应对私钥轮替的方法等,也值得探讨。

不论使用哪种方式,这样都比传统方式的开发和运算的成本都要高一些,但这也是去中心化所付出的必要代价。当然,项目方如果并不认为做到极致的去中心化是必要的,或者在开发的不同阶段有不同的milestone,没有这些设计也是可以的,因为去中心化不是非黑即白,而是存在中间的灰色区域。

隐私性

上面刚才提到的透明的问题,不仅对用户的交互范式造成影响,也会对用户数据造成影响。用户的数据都是直接暴露的。虽然在区块链中不是问题,但这在某些应用中是不太能接受的,所以开发者也可以构建隐私交易系统。

收费

执行层如何收费是另一个值得关注的点。因为向DA层提交数据也需要成本,包括自身服务器的运行等。传统区块链向用户收取gas费的第一个核心目的是避免用户刷大量重复的交易来破坏交易网络,第二个才是根据gas来排序交易。Web2没有类似的担忧,所以只有对洪水、DDoS这些基本的概念。

执行层可以自定义各种的收费策略,比如完全免费或部分收费,也可以从其他的行为如MEV(在排序器中已经非常成熟),市场活动等进行获利。

抗审查性

执行层不具备抗审查性,理论上可以无限制地拒绝用户的交易。在Rollup中抗审查性可以由L1合约的强制归集功能来保证,而侧链或公链是完整的分布式区块链网络,也难以进行审查。

目前并没有明确的方案来修正这一问题,是SCP范式的一个问题。

共识确认层

该层是由松散的节点组成,这些节点并不主动构成任何网络,因此不是共识层,仅仅是用来向外界(如用户)确认当前执行层的状态的。例如,如果你对everPay的运行状态有所怀疑,可以下载其检测者客户端,其中会运行与协调者相同的STF。

不过这和Rollup类似,由于数据是批量提交的,执行层给用户返回的状态总是比DA层上的更新的。这里面就涉及一个软硬最终性的问题。执行层给用户的是软最终性,因为还没有提交到DA层;而共识确认层给用户提供的是硬最终性。用户对此可能不是特别在意,不过对于跨链桥等应用,必须遵循硬最终性。比如,交易所的充值提现系统是不会依赖Rollup序列器的瞬时最终性的。

除了能用来确认结果以外,共识确认层还有一点很重要的作用,就是作为执行层的防灾冗余。如果执行层永久罢工、严重作恶,这个时候理论上任意的共识确认层都可以接手执行层的工作,接收用户的请求。如果发生如此严重的情况,社区应该会选择出稳定可靠的节点来作为执行层的服务器。

结算层

由于SCP并不是Rollup,所以无法做到像Rollup提现结算层同样的不需要人工介入的、完全基于数学和智能合约代码的免信任的提现。它的安全程度是与侧链或跨链桥的跨链机制相同的,需要依赖有权限的观察者为资产放行,我们称为见证人模式。

将见证人桥做的尽可能去中心化,是很多跨链桥研究的议题。篇幅所限这里就不具体展开了。一个设计良好的SCP平台,在实践中也必须有信誉良好的去中心化桥的多签合作方,如everPay与MPC服务提供商Safeheron就进行了深度合作。

有人可能会问SCP为什么不使用有智能合约的链作为DA层?这样可以做出给予合约,完全免信任的结算层。

长远来看,只要克服一些技术困难,如果将DA层放到以太坊等有合约的DA层上并能构建出相应的用于验证的合约,SCP也可以获得与Rollup相同的结算安全性,而不需要使用多签。

但实践中这未必是最优选择:

1. 以太坊并不专门用于数据保存,相对于纯粹的数据存储公链来说价格太高。而对于SCP范式来讲,足够低的或者固定的存储成本是至关重要的。

2. 证明系统非常难以开发,因为SCP中不光可以模拟EVM,而可以实现任何逻辑。而我们看大像Optimism这种团队目前其欺诈证明仍然没有上线,以及zkEVM的开发难度,就可以想象在以太坊上想实现各式各样的系统的证明,是难度极高的一件事。

另外更关键的一点是,这个所谓的与Rollup相同的结算安全性,也仅仅是对于有智能合约的DA层这条链本身来说,比如以太坊,因为原始数据全部是传递到以太坊的,那么你在以太坊上的结算合约才能“引用”到原始的输入数据,来证明最终状态的正确性(注意,不是直接引用而是间接通过哈希或accumulator等留下原始calldata的状态标记,因为历史交易的calldata本身不能被合约引用)。但对于其他链来说,都无法享受到同样的安全性,因为他们上面什么数据也没有。如果要跨去其他链最终还是只能使用见证人模式的跨链桥。

所以Rollup这个方案只在特定的视角下有更优秀的结算安全性,也即你将一条链视为你的母链的情况下。SCP并不是某种公链的扩容方案,而是一种更大的Web3计算平台架构,所以也不一定要在某某链中心主义的视角下来施行。将结算层建立在智能合约上,除了母链以外它并不能保障其他链的结算安全,如果你不是专门来给这条链扩容的这就显得完全不合理。

总结

一张图对比SCP与其他范式。

SCP是一种全新的Web3计算平台范式,媲美传统的Web2交易的应用速度,交易成本可以忽略,在其上可以构建出无限可能的应用,且安全性上与主流方案保持一致。目前SCP范式下已经涌现出一批应用如everPay、PermaSwap、Mind Network等,基于其优秀的设计理念,非常有希望在本轮和下一轮牛市迎来爆发式的增长。