解读SCP:跳出Rollup定式的去信任化基础设施范式
作者:雾月,极客Web3
导语:本文将前瞻性地介绍一种看起来有点特立独行的Web3基础设施设计范式——存储共识范式SCP(Storage-based Consensus Paradigm),这种产品设计模式虽然在理论上,与以太坊Rollup等主流模块化区块链方案存在较大差异,但在落地简易度以及与Web2平台衔接的难易度上,可行性却很高,因为他从一开始就不打算像Rollup那样把自己限制在一个狭窄的实现路径上,想要以一种更宽泛、更开放的框架,将Web2平台与Web3设施融合起来,可以说是一个脑洞大开、颇具想象力的做法。
正文:让我们设想一种公链扩容方案,具有下列特性:
拥有媲美传统Web2应用或交易所的速度,远超任何公链、L2、rollup、侧链等。
没有Gas费,使用成本几乎为0。
资金安全性高,远超中心化设施如交易所等,逊于Rollup但大于等于侧链。
与Web2相同的用户体验,无需对区块链的公私钥、钱包、基础设施等有任何认知。
这样的方案确实令人非常兴奋:一方面它在扩容上基本已经做到了极致;另一方面在Web3的mass adoption上也奠定了很坚实的基础,基本消除了Web2与Web3使用体验的鸿沟。
不过,我们似乎想不到多少方案能做到如此完备,因为主流讨论与实践确实太少。
我们在上面用扩容这个大家非常熟悉的议题作为引子,实际上SCP并不仅限于扩容使用,其设计灵感确实来源于比特币、以太坊等公链的扩容方案与社区讨论。而它的愿景和实际应用是构建新一代的去信任化基础设施,甚至是非区块链结构的运算平台。
SCP基础组件和工作原理
一般而言,SCP也像以太坊和Celestia社区所说的“模块化区块链”一样,具有数据可用性层、执行层、共识层、结算层等模块划分。
数据可用性层:由一条被广泛认可且久经考验的公链来承担,或存储类设施作为数据可用性层,如以太坊、Arweave、Celestia等。
执行层:一台服务器,用于接收用户交易并执行,同时将用户签名后的交易数据批量提交到DA层,与Rollup的排序器相似。但执行层并不一定要有区块链式的链表结构,它可以完全是Web2数据库+计算系统,但整个计算系统必须开源,具备透明度。
共识层:由一群节点组成,它们拉取执行层提交到DA层上的数据,并用与执行层相同的算法,对这些数据进行运算,确认执行层的结果输出是否正确,并可以作为执行层的防灾冗余。用户也可以读取共识层各节点返回的数据,确保执行层没有欺诈行为。
结算层:由一群节点与其他链上的合约或地址组成,用于处理用户充值进入SCP,或提现离开SCP的行为,有点类似于跨链桥的运作模式。结算层节点通过多签合约或基于TSS的地址,控制充值地址的提现功能。充值时用户向所在链的指定地址充入资产,提现时则发送请求,结算层节点读取到数据后,通过多签或TSS对资产放行。结算层的安全程度,取决于采用的跨链机制。
该项目的DA层使用了永久存储设施Arweave,即图中的大圆圈。
协调者Coordinator,即执行层。用户将交易提交至协调者,协调者执行运算并展现运算结果,然后将用户的原始输入数据批量提交至DA层。
检测者Detector,从Arweave上拉取协调者提交的交易原始数据,使用与协调者一致的算法,对数据和结果进行验证。检测者的客户端同样也是开源的,任何人都可以运行。
守望者Watchmen,掌管了提现系统多签的一组检测者。会根据交易数据对提现请求进行验证和放行。另外守望者也负责签署提案。
交易所。基于SCP可以构建公开、透明的、高TPS的交易所,该交易所既可以有CEX迅速、0成本的特点,又保持了DEX的去中心化。CEX和DEX的分野在这里就变得模糊起来。
支付网络。类似于支付宝、PayPal等。
支持加载程序/合约的虚拟机/区块链。任意开发者可以部署任意的应用程序在其上,和其他程序共享所有用户的数据并根据用户的指令进行操作。
1.账号注册:用户在应用程序的注册页面输入用户名和密码。为保护用户的密码,服务器收到后会通过哈希函数来处理密码。为增加哈希的复杂性并抵御彩虹表攻击,通常会为每个用户的密码连接一个随机生成的字符串(称为“盐”),一起哈希处理。用户名、盐、哈希被明文存储在服务提供商的数据库中,并不对外公开。但即使如此,也需要做加盐和安全处理,一防内鬼,二防攻击。
2.用户登录:用户在登录表单上输入他们的用户名和密码。系统比对处理后的密码哈希值和数据库中存储的哈希值。如果两个哈希值匹配,表明用户提供了正确的密码,登录进程继续。
3.操作认证:登录验证通过后,系统会为用户创建一个会话。通常情况下,会话信息被存储在服务器上,并且服务器发送一个标识(例如cookie或token)给用户的浏览器或应用。用户在接下来的操作中不再需要重复输入用户名和密码:浏览器或应用会保存cookie标识,并在每个请求中附带标识,表明自己获得了cookie关联的服务器的许可。
1.账户注册:实际上没有账户注册这一过程,也没有用户名-密码体系。账户(地址)不需要注册,天然存在,谁掌握其私钥谁控制该账户。私钥由钱包在本地随机生成,也不涉及联网过程。
2.用户登录:区块链的使用并不需要登录,大部分dApp没有登录这个过程,而是连接钱包。有的dApp在连接钱包后,会要求用户进行签名验证,确保用户真的持有私钥,而不是仅仅是向前端传了个钱包地址。
3.操作认证:用户直接向节点提交签名后的数据,节点验证后会向整个区块链网络广播该交易,满足区块链网络共识后用户的操作即被确认。
如果想使用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去中心化地如何输入到系统内,日后应对私钥轮替的方法等,也值得探讨。
1.以太坊并不专门用于数据保存,相对于纯粹的数据存储公链来说价格太高。而对于SCP范式来讲,足够低的或者固定的存储成本是至关重要的。只有这样才可能支撑的起Web2级别的吞吐量。
2.证明系统非常难以开发,因为SCP中不光可以模拟EVM,而可以实现任何逻辑。而我们看大像Optimism这种团队目前其欺诈证明仍然没有上线,以及zkEVM的开发难度,就可以想象在以太坊上想实现各式各样的系统的证明,是难度极高的一件事。