# StarkNet 技术架构和特色生态

By [grtrd.eth](https://paragraph.com/@grtrd) · 2023-11-02

---

### **简介**

StarkEx 是 StarkWare 创立的，为项目方定制 ZKR 的企业服务，它可以帮助项目定制应用专有的 ZKR，目前使用 StarkEx 的客户包括 dYdX 、Sorare、ImmutableX、DeversiFi 等。

与通用 ZKR 不同，在通过 StarkEx 定制的 ZKR 中，项目方往往具有超级管理员的权限，可以决定交易是否通过与排序，外部开发者不能免许可地部署应用，网络较为中心化，但优点是性能极高。

### **工作原理**

StarkEx工作流如下：

1.  打包交易：链下服务器（往往由项目方中心化运行）处理客户请求，将多个交易组合成一个“批次”，供 StarkEx 处理。
    
2.  确认交易和更新状态：链下服务器确认交易合法，并以被压缩后的哈希形式更新系统状态。
    
3.  为交易生成证明：SHARP 会为交易生成 STARK 证明以确认交易有效性，然后将证明和更新发送到链上 Verifier 智能合约，以确保交易的完整性。
    
4.  链上验证证明：一旦 STARK 证明被验证，状态更新被提交并结算回以太坊主网。所有交易都是在链外处理和验证的，而其完整性的证明是在链上验证的。
    

SHARP 是一个共享证明者，它同时为多个 StarkEx 客户/应用提供证明生成服务——生成计算完整性声明的证明。Verifier 是部署在以太坊上的智能合约，用于验证由 StarkEx 的交易生成的 STARK 证明的正确性。

[https://docs.starkware.co/starkex/architecture/solution-architecture.html](https://docs.starkware.co/starkex/architecture/solution-architecture.html)

**StarkNet**
------------

### **简介**

StarkNet 是一个通用的 ZK Rollup，理论上能够将 TPS 提高到 2000+，Gas 降低到 0.002 以下。

为什么 StarkNet 具有相比以太坊更高的性能？首先回顾一下以太坊的工作原理。在以太坊上，每提交一笔交易都需要所有节点检查、验证并执行交易来保证计算正确性，并将计算后的状态变化在网络中广播。

[https://ethereum.org/zh/developers/docs/evm/](https://ethereum.org/zh/developers/docs/evm/)

相比之下，StarkNet 仅在链下执行计算并生成一个 ZK 证明，然后在链上验证该证明的正确性，最后**把多个 L2 交易打包为以太坊上的一笔交易**。因此，StarkNet 上发生的交易成本可以被同一打包批次的其他交易所均摊，就像拼车（🚌拼多多）一样，交易越多，成本越低。StarkNet 为交易生成 ZK 证明的方法可以大大提高网络运行速度、减少链上通信量、增加网络吞吐，因此 StarkNet 相比以太坊具有更高 TPS 和更低 Gas。

简而言之，将验证计算正确性比喻为老师需要检查同学们是不是掌握了知识。**以太坊的方法是检查每个同学是否能背诵整本教科书，而 StarkNet 的方法是让同学们做卷子。后者的效率更高，成本更低，但仍然保证安全。**

### **EVM 兼容**

StarkNet 网络本身不兼容 EVM（以太坊虚拟机），而设计了另外一套 ZK 友好的 Cairo VM，是 Vitalik 所说的第四类 zkEVM,，但属于严格意义上的 zkVM。

[https://vitalik.eth.limo/general/2022/08/04/zkevm.html](https://vitalik.eth.limo/general/2022/08/04/zkevm.html)

在 zkVM 架构方面，StarkNet 实现了一套更加 ZK 友好的指令集、汇编语言、字节码、AIR（代数中间表示） 以及高级语言 Cairo。

[![]({{DOMAIN}}/editor/youtube/play.png)](https://www.youtube.com/watch?v=SEp5SFaYQHY)

**尽管 StarkNet 本身不兼容 EVM，但 StarkNet 仍然可以通过其他方式兼容以太坊。**

1、[Warp](https://github.com/NethermindEth/warp)：将 Solidity 转译为 Cairo 语言的转译器

Warp 是一个 Solidity-Cairo 转译器，目前已经由以太坊著名基础设施团队 [Nethermind](https://twitter.com/nethermindeth) 开发完成。Warp 可以把 Solidity 代码转译为 Cairo，但转译后的 Cairo 程序往往需要修改并增添 Cairo 特性（如调用内置函数，优化内存等）才能最大化执行效率。

2、[Kakarot](https://twitter.com/KakarotZkEvm)：一个用 Cairo 语言编写的 zkEVM

Kakarot 是一个用 Cairo 写的智能合约，目前部署在 StarkNet（goerli测试网）上，100% 字节码等效 EVM。目前处于测试阶段。以太坊应用可以通过部署到 Kakarot 的方式移植到 StarkNet。

*   ✅ Kakarot 可以：(a) 执行任意 EVM 字节码，(b) 按原样部署 EVM 智能合约，(c) 调用 Kakarot 部署的 EVM 智能合约的功能（视图和写入方法）。
    
*   ✅ Kakarot 是一个 EVM 字节码解释器。
    

目前已经支持 EVM 全部操作码。

[https://github.com/sayajin-labs/kakarot](https://github.com/sayajin-labs/kakarot)

### **工作原理**

StarkNet 有五个组成部分。分别是在 StarkNet 上的 Prover（证明者），Sequencer（排序器）和全节点；以及部署在以太坊上的验证者（Verifier）和核心状态合约（StarkNet Core）。

工作流程如下：

[https://david-barreto.com/starknets-architecture-review/#more-4602](https://david-barreto.com/starknets-architecture-review/#more-4602)

1、当我们在 StarkNet 上发起一个交易，一个链下服务器——排序器将会接收、排序、验证，并将它们打包到区块。执行交易，然后状态转换发送给 StarkNet Core 合约；

2、证明者将为交易生成证明，并发送给以太坊的验证者合约；

3、验证者将验证结果发送到以太坊上的 StarkNet Core 合约，并从 StarkNet Core 合约触发一组新的以太坊交易，以更新链上的全局状态以进行记录保存。状态事务作为“calldata” （EIP-4844后为Blob）来发送，以节省 L1 事务 gas。这些“metadata”可被 StarkNet 全节点解密。

全节点基本发挥存储功能。全节点存储状态改变、元数据、证明以及记录在 StarkNet 中的已被执行的所有事务，并跟踪系统的当前全局状态。在有必要的时候，全节点将解密“metadata”来重构 StarkNet 的历史。

参考 StarkNet 开发倡导者 [@barretodavid](https://twitter.com/barretodavid) 写的[《StarkNet's Architecture Review》](https://david-barreto.com/starknets-architecture-review/#more-4602)。

### **账户抽象**

不同于以太坊 EOA+CA 的双账户设计，StarkNet 实现了原生账户抽象，只有一种账户设计，借鉴了 EIP 4337 的精神，下图为交易模型：

**STARK 证明系统**
--------------

目前有许多不同的证明系统（生成和验证证明） ，如 Halo、PLONK、[Groth16](https://eprint.iacr.org/2016/260.pdf)、[Groth09](https://github.com/huyuguang/zkpblog/blob/master/groth09.md) 、Marlin、Plonky2 等，它们都属于 SNARK 证明系统。证明系统存在一个证明者生成证明，一个验证者验证证明。而不同的 ZK 项目几乎都会使用不同的证明系统，StarkNet 使用的 STARK 某种意义上属于一种特别的 SNARK 。

[https://medium.com/alliancedao/zkps-in-web-3-now-and-the-future-21b459348f29](https://medium.com/alliancedao/zkps-in-web-3-now-and-the-future-21b459348f29)

STARK 相比 SNARK 有更多创新。它不需要和 SNARK 一样依赖“可信设置”。**它还带有更简单的密码学假设，避免了对椭圆曲线、配对和指数知识假设的需要，纯粹依赖哈希和信息论，因此抗量子攻击。总体来讲 STARK 比 SNARK 更安全。**

在扩展性方面，STARK 的扩展性更强。证明生成速度具备线性扩展性，验证时间和证明大小具备对数扩展性。**但缺点在于生成的证明尺寸更大。但随着证明规模增加，验证成本将会边际递减——这意味证明越大，总成本越低。**

[https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/](https://consensys.net/blog/blockchain-explained/zero-knowledge-proofs-starks-vs-snarks/)

**总结一下，相比 SNARK，STARK 更安全，平均验证时间和证明大小将随着验证规模扩大而降低，缺点在于初始证明尺寸更大，因此更适合大规模应用。**

这里介绍一下 STARK 的重要特性：递归证明

任何通用的、简洁的知识系统的证明/论证（特别是STARKs） 都可以用来递增地验证计算。这意味着一个计算可以产生一个证明，以证明该计算的前一个实例的正确性，这个概念被非正式地称为 "递归证明组合"或者"递归STARKs"。

换句话说，一个递归 STARK 证明者可为一个陈述生成一个证明，即系统的状态可以从 a 移到 a+1。因为证明者已经验证了一个证实 a 的计算完整性的(递归)证明，并且忠实地执行了状态 a 的计算，达到了新的状态 a+1。**简而言之，你可以理解该过程将 a 和 a+1 两个证明合并为了一个证明，在理论上可以将近乎无限的证明合并为一个证明，这将大幅减少证明大小和验证时间。如下图所示：**

[https://medium.com/starkware/recursive-starks-78f8dd401025](https://medium.com/starkware/recursive-starks-78f8dd401025)

**Cairo VM 和 Cairo 语言**
-----------------------

### **Cairo VM 概述**

[![]({{DOMAIN}}/editor/youtube/play.png)](https://www.youtube.com/watch?v=SEp5SFaYQHY)

Cairo VM 是一个是一个采用冯诺依曼架构的 CPU VM，其编程语言也叫 Cairo，Cairo 语言基于 Cairo 汇编，因此编译效率非常高。 Cairo 是 **C**PU **A**lgebraic **I**ntermediate **R**epresentation （代数中间表达）的首字母缩写。Cairo VM 包含单个 AIR 来验证这个 「CPU」 的指令集。

它有时候也被叫做 StarkNet OS/Cairo OS 。它不同于 EVM，Cairo VM 不执行计算，仅为计算生成证明并验证正确性。

关于工作方式，它根据收到的输入的交易来更新系统的 L2 状态。促进 Cairo 合约的执行。Cairo VM 是基于 Cairo 的，合约可用的具体系统操作和功能可作为对操作系统的调用。

### **Cairo VM 特性**

灵活的 CPU 架构

Cairo VM 采用图灵完备的冯诺依曼 CPU 架构，可通过软件编程的方式无限接近 AISC 的性能，有对应的指令集，所以 Cairo 理论上可以复刻其他虚拟机。

只读非确定性内存模型

Cairo VM 采用只读的非确定性内存，这意味着每个内存单元的值由证明者选择，它不能随时间改变（在 Cairo 程序执行期间），是不可变的。该指令只能从中读取。我们可以将之视为一次写入的存储器：可以向一个单元写一次值，但事后不能改变它。而且它是连续的，如果有空会被任意值填充。

ROM 优点包括：低成本，电路比 ROM 更简单；永存储，内存值将保证永久存储；不可篡改，数据不能修改和删除。

### **Cairo 语言概述**

[https://www.cairo-lang.org/](https://www.cairo-lang.org/)

Cairo 是 StarkNet 的智能合约语言，基于 STARK 设计，Cairo 程序可生成 STARK 证明。

Cairo 程序是汇编代码的集合，Cairo 开发人员将以高级语言 Cairo 来编写智能合约而非 Cairo 汇编。当我们写了一个 Cairo 程序，Cairo 编译器会将 Cairo 代码编译成 Cairo 汇编，Cairo 汇编器将采用汇编代码生成 Cairo 字节码（它运行在 Cairo CPU）以在 Cairo VM 执行，当他最终运行到真实机器上还需要编译为操作码和机器代码（还有指令）。

### **Cairo 语言特性**

**启动加载：从哈希加载程序**

程序可以将另一个程序字节码写入内存，然后运行该程序。这有两个好处：

1.  可扩展性，验证时间和程序大小呈现对数关系，正如 STARK 部分提到的。
    
2.  隐私性，验证者可以验证程序是否正确执行而无需知道计算。
    

**内置函数：减少代码编译**

开发者直接调用内置函数可以减少计算开销，优化开发体验，而不需要代码转换。添加内置函数不会影响 CPU 约束。这只是意味着相同的内存在 CPU 和内置函数之间共享，如图所示。

[https://medium.com/@pban/demystifying-cairo-white-paper-part-i-b71976ad0108](https://medium.com/@pban/demystifying-cairo-white-paper-part-i-b71976ad0108)

Cairo 体系结构没有指定一组特定的内置函数。可以根据需要在 AIR （代数中间表示）中添加或删除内置函数。

**特色生态**
--------

与其他生态不同，StarkNet 有一些原生的创新应用，分别是全链游戏、合约钱包和链上 AI。

关于全链游戏（On-chain game），它不同于 GameFi。**全链游戏与 GameFi 的根本差别在于前者是去中心、免许可、可组合、互操作的，而后者仅仅将游戏中的关键道具铸造为代币。**

GameFi 只是将游戏资产上链，计算与存储的部分则在链下的中心化服务器上，比如知名的 StepN，Axie Infinity，尽管它们已经取得了非常好的成绩，但这些游戏的玩法和内容是有限的，且受到项目方中心化运营的影响，项目方可以更改游戏规则。GameFi 也不支持 UCG ——玩家和开发者不能免许可地创造游戏内的内容与资产，并且其他链上应用也难以与之互操作。

全链游戏则不仅仅是将游戏资产上链，整个游戏也以合约的方式存在于网络之中，游戏的状态存储、逻辑执行也完全在链上，符合区块链的去中心、免许可、可组合的基本属性。这意味着没有实体可以单方面更改游戏规则，游戏的主动权在玩家手中，游戏“官方”的概念将会逐渐消失。

[https://www.gamedeveloper.com/business/let-s-build-a-decentralized-game-economy-using-blockchains-part-1-](https://www.gamedeveloper.com/business/let-s-build-a-decentralized-game-economy-using-blockchains-part-1-)

更有价值的是，玩家与开发者可以基于开源代码自定义前端，在基本规则约束下对游戏内的设施和资产进行再创造，解锁 UCG——用户创作内容的可能性。而且任何符合全链游戏合约规则的 DApp 都可以免许可地与之互操作，这将把全链游戏的可组合性扩展到更大的生态范围之中，不仅各个链游可以相互操作，链游与 DeFi 、NFT 以及在未来可能涌现的任何 DApp 都能够与全链游戏相互操作，这将打破 Web2 以垄断为商业模式的业务格局，给开发者和用户更完美的应用体验以及更有想象力的创造机会。

推荐项目 [**Topology**](https://www.topology.gg/)**、**[**Cartridge.gg**](http://cartridge.gg/)**、**[**Briq**](https://briq.construction/)**、**[**Lootrealms**](https://realmseternum.com/)

关于合约钱包，它具有强大的可编程、可组合的特性，从而能够适应 DeFi 之外的新场景如全链游戏、社交等。推荐 StarkNet 合约钱包 Braavos 和 Argent，前者可以将手机变成硬钱包，后者支持社交恢复，并且还将不断更新功能。

[https://coincodecap.com/best-smart-contract-wallet](https://coincodecap.com/best-smart-contract-wallet)

关于链上 AI，StarkNet 允许 AI 模型在链下执行计算，将生成证明交由他人验证即可保证计算完整性，并且 STARK 证明系统存在网络效应，因此可降低需要大规模证明生成的 AI 模型的成本。

[https://elearningindustry.com/how-machine-learning-helps-transform-supply-chain-management](https://elearningindustry.com/how-machine-learning-helps-transform-supply-chain-management)

链上 AI 应用范围包括：游戏、预言机、交易（自动收益）、反女巫、KYC、数据隐私以及 AI 模型算力挖矿等。

**问答**
------

**Q：StarkNet 交易排序的逻辑是什么？是否也会有以太坊上的 MEV？官方排序器有 MEV 需求吗？能做吗？**

A：1）StarkNet 排序器排序，仍然是 gas 优先，去中心排序器后会做并行执行，目前去中心排序器的更多细节还没有确定，排序设计也还没有确定；L2 交易有顺序，在 L1 上作为批处理就不体现 L2 交易顺序；2）会有 MEV，但是还没确定排序器去中心的共识，可能会借鉴 Flashbots，PBS 之类的机制；3）目前 StarkNet 中心化运营排序器，官方没有做 MEV，Rollup 理论上都可以做。

**Q：L2 gas fee，速度在哪里可以看？哪里能看到它们最终的性能指标？**

A：Gas 在 [https://l2beat.com/scaling/tvl](https://l2fees.info/) 看，TPS 在这里看 [https://ethtps.info/](https://ethtps.info/)。目前 ZKR 的工程进度较慢，可能在年中才能迎来规模采用，现在比较性能意义不大，且 L3 的实现可能会给 TPS 计算造成阻碍。

**Q：为什么很多以太坊都部署在 Arbitrum？**

A：因为是 OPR，开发得更快；在前年就部署了，发展期更长。

**Q：ZKR 什么时候会迎来应用爆发？**

A：应用爆发分为两类，应用迁移和应用创新，迁移进度取决于不同 ZKR 的工程周期，可能会在 Q3-Q4；应用创新方面，哪些高 TPS、低单位收益的应用更能在 ZKR 上实现，可能会在年末爆发，取决于。

**Q：OPR 和 ZKR 的差别是什么？**

A：OPR 使用欺诈性证明，ZKR 使用有效性证明，后者更快更便宜，Vitalik 有过文章阐述

[**An Incomplete Guide to Rollups**](https://vitalik.eth.limo/general/2021/01/05/rollup.html)

[https://vitalik.eth.limo/general/2021/01/05/rollup.html](https://vitalik.eth.limo/general/2021/01/05/rollup.html)

**Q：StarkNet 有什么马上能用的合约钱包？**

A：Braavos、Argent。

**Q：账户抽象的未来是什么？**

A：基于账户抽象的合约钱包可编程，比如它允许用户自定义设置在某个时间内，低于一定价格的 Gas 都将被自动支付；而且相比 EOA 钱包更能适用 DeFi 之外的新场景如全链游戏、社交。它就是把钱包当成合约来设计，让钱包能实现合约能实现的功能。

**Q：StarkNet 上有哪些值得交互的项目？**

A：可以关注 Topology 团队开发的全链游戏 MuMu，它们近期还会推出一个新的链上 AI 格斗游戏；NFT 项目推荐 Briq，之前项目方给购买 NFT 的用户空投了圣诞树 NFT；推荐 Loot 系的游戏 Lootrealms，这个游戏发币了。

**Q：StarkNet 是不是更适合做链上 AI 和全链游戏？**

A：是的，因为 StarkNet 使用 STARK 证明系统，它的平均验证时间和证明尺寸会随着证明规模扩大而降低，因此具备网络效应，这是 SNARK 所不具备的特性，这对链上 AI 和游戏而言有助于降低成本和提高性能；另一方面 StarkNet 生态有很多全链游戏融资、开发的基础设施，如 MatchBoxDAO、Volt Capital、[Cartridge.gg](http://cartridge.gg/) 等，官方也在大力支持全链游戏的发展，因此 StarkNet 在技术和资源支持方面适合做链上 AI 和全链游戏。

**Q：StarkNet 可不可以和其他公链对接？**

A：官方宣称不会，只会以太坊作为结算层；技术上可以。

**Q：账户抽象的缺点是什么？**

A：现在比较早期，相关的工具、代码不够成熟，但随着时间的推进账户抽象会越来越成熟，账户抽象的优点是让交易更加可编程。

**Q：ZKR 的电路是什么？为什么要有电路？**

A：可以理解为 ZK 的代码；ZKR 需要为代码的计算生成证明，高级语言的代码需要编译为字节码再变成 ZK 电路才能够被用来生成 ZK 证明。

---

*Originally published on [grtrd.eth](https://paragraph.com/@grtrd/starknet-2)*
