SCP是一种新的Web3基础设施设计范式,可以提供媲美传统Web2应用的速度,没有Gas费,资金安全性高,且与Web2相同的用户体验。它可以使用传统的ID密码或者OAuth三方认证登录,可以利用MPC和JWT来解决中心化存储的问题,同时又不让用户有使用私钥的累赘。它可以摆脱EVM体系,融入更多的Web2,是一种更大的Web3计算平台架构。
原文作者:极客Web3
原文来源:极客Web3
导语:本文将前瞻性地介绍一种看起来有点特立独行的Web3基础设施设计范式——存储共识范式SCP(Storage-based Consensus Paradigm),这种产品设计模式虽然在理论上,与以太坊Rollup等主流模块化区块链方案存在较大差异,但在落地简易度以及与Web2平台衔接的难易度上,可行性却很高,因为他从一开始就不打算像Rollup那样把自己限制在一个狭窄的实现路径上,想要以一种更宽泛、更开放的框架,将Web2平台与Web3设施融合起来,可以说是一个脑洞大开、颇具想象力的做法。
正文:让我们设想一种公链扩容方案,具有下列特性:
这样的方案确实令人非常兴奋:一方面它在扩容上基本已经做到了极致;另一方面在Web3的mass adoption上也奠定了很坚实的基础,基本消除了Web2与Web3使用体验的鸿沟。
不过,我们似乎想不到多少方案能做到如此完备,因为主流讨论与实践确实太少。
我们在上面用扩容这个大家非常熟悉的议题作为引子,实际上SCP并不仅限于扩容使用,其设计灵感确实来源于比特币、以太坊等公链的扩容方案与社区讨论。而它的愿景和实际应用是构建新一代的去信任化基础设施,甚至是非区块链结构的运算平台。
一般而言,SCP也像以太坊和Celestia社区所说的“模块化区块链”一样,具有数据可用性层、执行层、共识层、结算层等模块划分。
我们可以通过如下框架,来理解SCP范式。一个满足SCP框架的产品,可以具备如充值、转账、提现、swap等主要功能,在此基础上还可以进一步扩展。下图是一个此类产品的原理图:
我们可以看到整套系统,他们达成的共识是全部位于链下的,这即存储共识范式的核心——它抛弃了区块链式的节点共识系统,让执行层摆脱繁重的共识交流和确认过程,只需要做好一台服务器的工作即可,从而达到近乎不受限制的TPS和经济性。这一点和Rollup非常类似,但SCP走向了和Rollup不同的道路,将其从一个扩容专属的用例,尝试转向为一种Web2到Web3的新的过渡模式。上面提及的协调者是一台服务器,但这并不意味着协调者可以为所欲为。和Rollup的排序器道理类似,在将用户提交的原始数据批量地在Arweave上提交后,任何人都可以运行检测者程序对其进行验证,并和协调者返回的状态进行对比。某种程度上,这和铭文类应用的思路如出一辙。在这种架构下,一个中心化的服务器、数据库并不构成根本的挑战。这也是SCP范式另一点,将“中心化”和“单一实体”这两个概念绑定解耦了——一个去信任化的体系里,可以有中心化组件,甚至可以是一个核心部件,但这并不影响整体上的去信任化。
我们可以喊出这样一个口号——“下一代去信任化基础设施不是非要依赖于共识协议,但应当是开源的系统与P2P节点网络”。人们发明和使用区块链的初衷是去信任化、账本一致、不可伪造、可溯源等等老生常谈的基本面,这在比特币白皮书里有明确阐述。但在以太坊之后,不论是旧公链的扩容方案,还是Rollup或模块化区块链,大家都形成了思维定式:我们做的东西必须是一条区块链(由节点的共识协议组成),或者是Rollup这种看起来是一条链的方案(只是有区块链的数据结构,但节点没有直接的共识消息互换)。但现在来看,基于SCP的框架下,即使不是区块链,也可以实现去信任化、账本一致、不可伪造、可溯源等等一系列需求,当然前提是要有更明确的实现细节。
执行层是在整个系统中是至关重要的,它承担了整个系统的运算过程,也决定了系统上可以运行怎样的应用。
理论上执行层中的执行环境可以做成任何形态,可能性是无穷无尽的,具体取决于项目方如何定位自己的项目:
SCP这种支持任意执行环境的设计模式,有其独特的好处:不必再依赖于某些存在历史包袱的组件,尤其是像以太坊社区独创的“账户抽象”概念,对SCP来讲天生就不需要。而在SCP架构下,本身就不存在账户抽象的概念——你可以随意采用Web2标准账户和区块链账户等。从这个角度讲,许多成熟的Web2用例不需要重新思考和构建,就可以直接用于SCP上。这一点或许是SCP相比于Rollup的益处。
上面提到了账户系统,敏感的读者应该已经发现,SCP虽然可以利用Web2的账户体系,但原封不动地使用似乎也有问题。因为这整个系统,是完全透明的!直接使用用户对服务器的交互模型,会出现严重问题,导致整个系统毫无安全性可言。我们先回顾下传统的服务器-用户模型是如何工作的:
1.账号注册:用户在应用程序的注册页面输入用户名和密码。为保护用户的密码,服务器收到后会通过哈希函数来处理密码。为增加哈希的复杂性并抵御彩虹表攻击,通常会为每个用户的密码连接一个随机生成的字符串(称为“盐”),一起哈希处理。用户名、盐、哈希被明文存储在服务提供商的数据库中,并不对外公开。但即使如此,也需要做加盐和安全处理,一防内鬼,二防攻击。
2.用户登录:用户在登录表单上输入他们的用户名和密码。系统比对处理后的密码哈希值和数据库中存储的哈希值。如果两个哈希值匹配,表明用户提供了正确的密码,登录进程继续。
3.操作认证:登录验证通过后,系统会为用户创建一个会话。通常情况下,会话信息被存储在服务器上,并且服务器发送一个标识(例如cookie或token)给用户的浏览器或应用。用户在接下来的操作中不再需要重复输入用户名和密码:浏览器或应用会保存cookie标识,并在每个请求中附带标识,表明自己获得了cookie关联的服务器的许可。
我们再回顾下典型的Web3的区块链-用户交互体系:
1.账户注册:实际上没有账户注册这一过程,也没有用户名-密码体系。账户(地址)不需要注册,天然存在,谁掌握其私钥谁控制该账户。私钥由钱包在本地随机生成,也不涉及联网过程。
2.用户登录:区块链的使用并不需要登录,大部分dApp没有登录这个过程,而是连接钱包。有的dApp在连接钱包后,会要求用户进行签名验证,确保用户真的持有私钥,而不是仅仅是向前端传了个钱包地址。
3.操作认证:用户直接向节点提交签名后的数据,节点验证后会向整个区块链网络广播该交易,满足区块链网络共识后用户的操作即被确认。
两种模式的差异是由对称和非对称导致的。在服务器-用户架构中,双方掌握相同的秘密。在区块链-用户架构中,只有用户掌握秘密。SCP的执行层虽然可以不是区块链,但所有的数据又需要同步到公开可见的DA层,因此SCP所使用的登录、操作的验证方式必须是非对称的。但又因为不想有让用户保管私钥、使用钱包等影响大规模采用的累赘动作和较差体验,在SCP上构建的应用使用传统的ID密码或者OAuth三方认证登录的需求也很强,那么如何结合二者呢?由于非对称密码学和零知识证明对具有不对称性,我设想了两种可能的方案:
不论使用哪种方式,都比传统方式的开发和运算的成本都要高一些,但这也是去中心化所付出的必要代价。当然,项目方如果并不认为做到极致的去中心化是必要的,或者在开发的不同阶段有不同的milestone,没有这些设计也是可以的,因为去中心化不是非黑即白,而是存在中间的灰色区域。
上面提到的透明的问题,不仅对用户的交互范式造成影响,也会对用户数据造成影响。用户的数据都是直接暴露的。虽然在区块链中不是问题,但这在某些应用中是不太能接收的,所以开发者也可以构建隐私交易系统。
执行层如何收费是另一个值得关注的点。因为向DA层提交数据也需要成本,包括自身服务器的运行等。传统区块链向用户收取gas费的第一个核心目的是避免用户刷大量重复的交易来破坏交易网络,第二个才是根据gas来排序交易。Web2没有类似的担忧,所以只有洪水、DDoS这些基本的概念。执行层可以自定义各种的收费策略,比如完全免费或部分收费,也可以从其他的行为如MEV(在排序器中已经非常成熟),市场活动等进行获利。
执行层不具备抗审查性,理论上可以无限制地拒绝用户的交易。在Rollup中抗审查性可以由L1合约的强制归集功能来保证,而侧链或公链是完整的分布式区块链网络,也难以进行审查。目前并没有明确的方案来解决抗审查问题,是SCP范式的一个问题。
该层是由松散的节点组成,这些节点并不主动构成网络,因此不是严格意义的有共识的一层,而仅仅是用来向外界(如用户)确认当前执行层状态的。例如,如果你对这些节点的运行状态有所怀疑,可以下载其检测者客户端,其中会运行与协调者相同的程序代码。不过这和Rollup类似,由于数据是批量提交的,执行层给用户返回的状态总是比DA层上的更新的。这里面就涉及一个预确认的问题:执行层给用户的是预确认、软最终性的结果,因为还没有提交到DA层;而共识层给用户提供的是硬最终性。用户对此可能不是特别在意,不过对于跨链桥等应用,必须遵循硬最终性。比如,交易所的充提现系统是不会相信Rollup序列器在链下广播的数据的,必须要等这些数据上以太坊后,才认可。除了能用来确认结果以外,共识层还有一点很重要的作用,就是作为执行层的防灾冗余。如果执行层永久罢工、严重作恶,这个时候理论上任意的共识层都可以接手执行层的工作,接收用户的请求。如果发生如此严重的情况,社区应该会选择出稳定可靠的节点来作为执行层的服务器。
由于SCP并不是Rollup,所以无法做到像Rollup的提现结算层那样,不需要人工介入、完全基于密码学和智能合约代码的去信任化提现。SCP跨链桥的安全程度是与侧链或第三方见证人跨链桥相同的,需要依赖有权限的多签管理者为资产放行,我们称为见证人模式。
将见证人桥做的尽可能去中心化,是很多跨链桥研究的议题。篇幅所限这里就不具体展开了。一个设计良好的SCP平台,在实践中也必须有信誉良好的去中心化桥的多签合作方。有人可能会问SCP为什么不使用有智能合约的链作为DA层?这样可以做出给予合约,完全免信任的结算层。长远来看,只要克服一些技术困难,如果将DA层放到以太坊等有合约的DA层上,并能构建出相应的用于验证的合约,SCP也可以获得与Rollup相同的结算安全性,而不需要使用多签。
但实践中这未必是最优选择:
1.以太坊并不专门用于数据保存,相对于纯粹的数据存储公链来说价格太高。而对于SCP范式来讲,足够低的或者固定的存储成本是至关重要的。只有这样才可能支撑的起Web2级别的吞吐量。
2.证明系统非常难以开发,因为SCP中不光可以模拟EVM,而可以实现任何逻辑。而我们看大像Optimism这种团队目前其欺诈证明仍然没有上线,以及zkEVM的开发难度,就可以想象在以太坊上想实现各式各样的系统的证明,是难度极高的一件事。
所以Rollup这个方案只在特定的情况下,才有更优秀的实践可行性,如果你打算实现一种更宽泛、更开放,摆脱EVM体系转而融入更多的Web2 feature,则以太坊Rollup的思路并不合适。SCP并不是某种公链的扩容方案,而是一种更大的Web3计算平台架构,所以显然不需要走以太坊Layer2的思路。
一张图对比SCP与其他范式