前言
当前,区块链之上的各种应用的雏形已经具备,但如何让区块链技术在更广泛的用户和场景中应用,是所有的公链需要解答的问题。
...
分层是一种人类社会习惯的解决扩容问题的方式,比如司法系统,政治机构,都是通过分层的方式来解决扩容难题,只要实现不同层之间的制约机制即可保证安全。
区块链的不可能三角中,Layer1 应该更侧重安全。
不同的应用,应用的不同阶段,对去中心化的要求,对安全的要求,对吞吐的要求都不一样,需要有一种渐进的演变的方式和定制化的方案,通过分层的方式更容易实现。不同的应用,应用的不同阶段,对去中心化的要求,对安全的要求,对吞吐的要求都不一样,需要有一种渐进的和面向应用的演进方案,通过分层的方式更容易实现。
Stargate 是 Starcoin 区块链网络上的分层协议框架。它通过统一的抽象,支持不同的分层方案。DApp 可以根据自己的需求进行定制,但可以和主网共享同一套基础设施。
关键方案
分层的所有方案中,主要面临三个技术难题:
如何在 Layer1 校验 Layer2 的执行结果并进行仲裁?Layer3 到 Layer2 同理。
Layer2 以及 Layer3 能否依赖 Layer1 的合约?
合约的状态如何在不同的层之间迁移?
交易校验
区块链上执行一个交易,虽然要基于历史状态进行,但实际上不会读取全部的历史状态。如果只提供该交易所依赖的状态,也可以计算出新的状态。
...
校验富状态交易不依赖于外部状态,所以校验所需的 VM 是 StateLess 的,交易执行所包含的合约代码以及其依赖也一并包含在 ReadSet 中。
智能合约的依赖
区块链分层后,对智能合约之间的依赖关系带来了难题,Layer2 的合约能否依赖 Layer 1 的合约?这里的依赖包含两层意义,一代码的依赖,二状态的依赖。在 Ethereum 上,合约之间不能在编译期依赖,合约之间的依赖都是通过合约内的动态调用的方式实现的,一和二是同一个问题。这个问题在Ethereum 当前的所有 Layer2 方案中,都未得到很好的解决。
...
如果 Layer2 合约依赖的 Layer1 的合约是无状态的,不需要读取状态(比如纯算法的合约),则和 Layer1 合约和 Layer1 合约之间的依赖一样。
如果 Layer2 合约依赖的 Layer1 的合约获取了只读状态(使用 borrow_global 指令),则通过远程状态加载器从 Layer1 获取状态。不过读取的状态不是 Layer1 获取状态,不过依赖的状态 的最新状态,而是该 Layer2 交易关联的 Layer1 的区块的历史状态。高度的历史状态。
如果 Layer2 合约依赖的 Layer1 的合约获取了可修改状态(使用 borrow_global_mut/move_from/move_to 指令),则表明这个交易是一个跨层的交易,需要到 Layer1 执行跨层的状态迁移交易。这部分是否可以做成对开发者完全透明,需要进一步技术调研。当前先通过一种显示的方式进行状态迁移。
这样,就可以提供一种近乎于无缝的跨层的编程体验。
状态迁移
状态在不同的 Layer 之间迁移,类似于跨链方案,当前大多数方案都是通过合约将 Token 或者资产在某一层锁定,然后在另外一层铸造出来,需要针对每一种状态或者资产类型设计校验以及铸造方案(比如 Token 和 NFT 的校验是不一样的),或者只实现跨链的合约调用,确保交易执行成功,并不校验状态(有安全风险)。
...
可以合并的状态,例如 Token。比如 1000 个 A Token 和 100 个 A Token 可以合并为 1100 个 Token。每种可以合并的状态需要在 Layer1 累加一个总数,跨层迁移时进行校验,保证二层不能凭空创造出 Token。
不可合并的状态,例如 NFT,或者用户合约自定义的自由状态。SpacetimeBox 中记录了原始状态的哈希,保证状态跨层迁移时状态不会被改变。不可合并的状态,从一层迁移到二层,只能改变归属,不可变更。 中记录了原始状态的哈希,保证状态跨层迁移时状态不会被改变。不可合并的状态,从 Layer1 迁移到 Layer2,只能改变归属,不能在 Layer2 更新。
技术架构
Drawio | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
Layer1 通过 PoW 共识保证安全(Security)和无准入(Permissionless)。这部分已经实现。
Layer2 通过 PoS 共识给 Layer1 提供终局性(Finality),同时给 Rollup 的 Accumulator 提供去中心化能力。 Rollup 方案可以让网络整体的 TPS 提高到 10~100 倍。
Layer3 通过状态通道(State Channel)以及 DAppChain ,将不同的应用的共识隔离在应用的局部网络中,可提供无限的扩展能力。
Rollup
Rollup 是一种相对成熟的扩容机制,一些项目已经实现,在 Rollup 中有几个角色:
...
Rollup 依然依赖 Layer1 的全局共识,所以受限于 Layer1 的吞吐能力。它的主要目标是降低 Layer1 的计算成本,将状态维护在链下,通过乐观(Optimistic)挑战机制保证安全,可以即时确认 Layer2 的交易状态,给用户提供类似互联网应用的体验,同时也为 Layer3 的扩展方案打好基础。
State Channel
状态通道(State Channel) ,或者叫支付通道(Payment Channel),以闪电网络(Lightning Network )为代表,也是一种比较成熟的扩容方案。它的思路是双方各自抵押一部分资产在链上,然后在链下维护一个两个参与方(理论上也可以扩展到多个参与方)的局部共识状态,每次变更都需要双方确认。但为了解决单方不合作难题,任何一方都可以单方在链上发起关闭通道的交易,等待一个挑战期后,通道自动关闭,参与方按最后一次双方确认的状态进行清算。
...
State Channel 中可以执行合约,这样通道不仅仅用来转账,还可以执行一些复杂的,有状态累计的合约。
因为它可以执行合约,所以也可以支付任意类型的 Token,以及 NFT。
状态通道构建在 Layer2 之上,而不是 Layer1 之上,主要是要依赖 Layer2 的即时确认能力,降低建立通道的成本以及确认时间。
状态通道之所以没有大规模的应用,关键原因有两个,Layer1 状态通道之所以没有大规模的应用,其中一个关键门槛是,Layer1 上的状态通道创建成本比较高,等待确认时间比较长。
但如果状态通道在 Layer2 之上,则可以消除这两个难题。这样 之上,则可以消除这个门槛。这样 Starcoin/Stargate P2P 网络中的任意两个节点,都可以将自己的 P2P 连接升级为状态通道,然后通过状态通道进行数据传输和流式计费。同时,也为 DAppService 提供了基础设施。
DAppService
基于 Stargate 框架搭建的,通过状态通道网络提供付费的 RPC 服务。
DAppService 本身不是去中心化的,但它是在 本身不是去中心化的,但它运行在 P2P 网络上的,可以通过 网络上,可以通过 P2P 网络进行服务发现以及远程调用,通过状态通道进行计费。
它相当于 Web2 服务到 Web3 服务的一个桥,任意当前的互联网服务都可以将自己的付费机制变更为流式计费机制,直接接入到 Web3 的 P2P 网络中。
DAppChain
基于 Stargete 框架搭建的,包含子共识机制的 DApp Chain。它的核心逻辑由合约写成,并且注册到 Layer2 中,注册时需要抵押一定数额的链上资产。它的安全受 Layer2 约束,但因为它是一个局部共识,Layer2 并不知道它的所有交易,所以安全性比 Rollup 方案要低。如果用户遇到欺诈,可向 Layer2 提交欺诈证明,Layer2 会对 DApp 进行惩罚,但惩罚的上限以 DApp 的注册抵押资产为上限。
...
Layer1 与 Layer2,Layer3 以及用户的终端钱包,都在同一个 P2P 网络中,都通过 P2P 网络进行通信。
终端钱包有自己在 P2P 网络中的身份,可以执行和验证交易,可以存储交易历史,提供数据可用性,如果发现 Layer2 节点作弊可以直接提交 Layer1 仲裁。同样,也可以提交 DApp 的欺诈证明给 Layer2。
不同的 DApp,比如 X DApp, Y DApp 可选择不同的 Layer2 方案接入到 可选择不同的方案接入到 Starcoin 网络。
最后回答一下,开篇提出的两个问题:
区块链如何接受大规模用户?Starcoin 通过分层的方案来实现扩容。并且一个链要支持大规模的 DApp 接入,仅仅靠 Rollup 方案很难达到目的,必须考虑局部共识机制,所以 Stargate 提供了整体的解决方案。
应用应该以什么形态和链结合?未来应用会以两种方式和链结合,一种是只将链作为付费通道,Stargate 提供 DAppService 可以将传统的 WebService 直接接入到 Web3 的基础设施中。另外一种是 DApp 本身作为一个链,Stargate 提供一个应用链框架,可以快速搭建应用链,并且很容易接入到 提供一个应用链框架,可以快速搭建应用链,并接入到 Starcoin 网络中,同时安全受 网络中,安全受 Layer2 和 Layer1 的约束,资产可以在不同的层以及 DApp 之间迁移。
路线图
Drawio | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
...
EasyGas,实现以任意 Token 支付 Gas 的能力。该特性依赖于链上的 swap。大约在 2022 年第一季度实现。
轻节点,轻节点虽然不保存全局状态,但可以执行交易,校验区块,生成富状态交易。嵌入式轻节点(浏览器或者手机客户端)依赖轻节点的实现,富状态客户端钱包依赖嵌入式轻节点的实现。
分层的混合共识机制,在 PoW 基础上新增一套 PoS 的共识机制,给 Layer1 提供终局性。
Rollup 第一阶段,不考虑 Accumulator 的高可用,主要实现富状态交易的验证,状态的在不同层之间的迁移,以及跨层的合约依赖。
Rollup 第二阶段,将 Rollup 和 PoS 共识整合在一起,解决 Accumulator 高可用和去中心化的问题。
P2P 网络之上的 RPC 框架,这个是一个通用的 P2P 网络服务框架,用来简化 P2P 网络上的 RPC 服务的开发。
基于 Rollup 的状态通道,以及状态通道之上的 DAppService 框架。
基于 Rollup 的 DAppChain 框架。
术语说明
自由状态:在 Move 中,如果某种类型的实例可以由外部 Module 持有,则认为该状态的自由的。
...