StarkNet 背后团队 StarkWare 在 11 月 29 日官宣了 StarkNet 性能路线图。
本文将解读路线图中即将推进的三件事:排序器并行、Cairo VM 的 Rust 实现、排序器的 Rust 实现;并将解释 StarkNet 的性能瓶颈。
一、排序器并行
排序器是 StarkNet 网络中的一个链下服务器,接收所有的事务、订单,在验证确认后将他们打包到区块,类似以太坊上的矿工(值得注意的是StarkNet仅在链下执行交易,并生成执行证明,链上验证证明)。
排序器引入并行交易执行的意义在于,排序器可以同时执行多笔交易,从而提高整个网络的交易处理量/TPS。
具体而言,有的交易可以并行执行,有的不可以。比如在一个区块中,可能有来自一个用户的三笔交易:交易A)将 USDC 换成 ETH交易;B)为 NFT 支付 ETH交易;C)将 USDT 换成 BTC。在这个例子中,交易 A 和 B 不能并行执行,B 必须在 A 之后执行。但交易 C 可以和 交易 A 同时并行执行。假设每笔交易需要 1 秒钟执行时间,引入并行后将把总执行时间从 3 秒减少到 2 秒,TPS 也将增加 0.5。
StarkNet 即将引入的并行执行将借鉴 Aptos 开发的 BLOCK-STM,将乐观并行引入到排序器。简单来讲,排序器将会乐观地假设所有交易都是可并行执行的,并将直接并行运行事务,最后会在发现冲突时再重新执行。
二、Cairo VM 的 Rust 实现
以太坊的智能合约在以太坊虚拟机 EVM 中运行,其开发语言为 Solidity。
而 StarkNet 的虚拟机为 Cairo VM,StarkNet 上所有的智能合约在 Cairo VM 中运行,其开发语言也叫 Cairo。Cairo VM 不同于以太坊的 EVM,它本身并不执行计算,仅仅验证计算的正确性。
目前,排序器正在使用 Cairo VM 的 Python 实现(Python语言编写Cairo VM),Cairo VM 的 Rust 实现(Rust语言)的意义在于可以进一步优化 VM 的性能。目前业界基本公认 Python 的实现并不是最优的方案。
我们可以通过 EVM 的 Python 实现来感受其低效。
想起来 @msfew_eth 说的一句话:“知道不行,但是没想到这么不行。”(我要笑死了🤣)
三、排序器的 Rust 实现
排序器的 Rust 实现的目的与 Cairo VM 的 Rust 实现的目的一样,也是为了让 Rust 实现替代更加低效的 Python 实现。
四、性能瓶颈
-
证明加速
StarkNet 承认证明加速是性能提升最重要的瓶颈之一,不过这是一个对所有 ZK 项目都需要解决的问题。路线图中没有公布更多的硬件加速相关的信息。根据我对 Cairo 的了解,猜测 StarkNet 可能做一个 ZK CPU,因为 Cairo VM 本身就是一个图灵完备的 CPU,而且做出一个 Cairo CPU 之后,理论上来讲还可以通过 Cairo VM 中软件编程的方式无限接近 ASIC 的性能。
-
交易打包
StarkNet 需要为交易生成证明,然后发送到以太坊验证。交易量越大,均摊的以太坊验证成本越低,用户均摊的 calldata 成本越低。而如果交易量不足,StarkNet 仍然需要在固定时间打包出块的话,StarkNet 就需要自行承担损失。StarkNet 减少这个损失的方法是把 StarkEx 的交易也纳入 StarkNet 的证明中,以均摊成本。
StarkWare 联合创始人 Eli Ben-Sasson 曾在首尔会议表示,其新的递归有效性证明理论上可以将以太坊区块链上多达 6000 万笔交易汇总为以太坊上的一笔交易。
-
验证成本
Cairo 使用 STARK 证明系统,验证成本和电路规模、函数调用呈对数关系。函数调用增加 99 倍,成本可能只增加两倍(f(x)=log1.2(x)),简单来讲就是交易越多,平均验证成本越低。因此从验证成本的角度来看,StarkNet 的性能瓶颈会达到一个非常恐怖的量级,当验证时间为一秒时,能够完成的函数调用约在 1.51 e+79(10的79次方)这样的量级。
上图数据来自 ethSTARK 文档。