# StarkNet 组成和工作原理

By [albertwang.eth](https://paragraph.com/@albertwang) · 2023-03-15

---

在这篇文章中，我会向你介绍三个东西

1.  StarkNet 的组成部分
    
2.  StarkNet 的工作原理
    
3.  StarkNet 网络延迟的原因
    

首先我要说明，文中 75% 以上的知识是由 StarkNet 开发倡导者 [@barretodavid](https://twitter.com/barretodavid) 写的文章翻译而来，剩余的 25% 是我增添的，有英文阅读能力的小伙伴可以自行阅读原文。

[**Starknet’s Architecture Review**](https://david-barreto.com/starknets-architecture-review/#more-4602)

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

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

**组成部分**
--------

StarkNet 有五个组成部分。分别是在 StarkNet 上的 Prover（证明者），Sequencer（排序器）和全节点；以及部署在以太坊上的验证者（Verifier）和核心状态合约（StarkNet Core）。接下来我将逐步解释他们的功能，需要提醒的是下文出现的交易和事务都由 transaction 翻译而来，根据语境进行变换。

### **排序器**

是一个链下服务器，接收所有的事务、订单，确认（validate）并捆绑（bundle）他们到区块。目前只有一个由 StarkWare 控制的排序器。但在未来有去中心的区块创建计划。为了让排序器确认交易，它必须使用 Cairo 操作系统来执行交易，这是 EVM 的替代品，用于用 Cairo 编写的智能合约。

### **证明者**

证明者负责生成一个加密证明，以证明排序器在通过执行新区块中包含的交易得出新的全局状态时进行计算的完整性。为了让验证器生成有效性证明，它需要得到由排序器执行计算的 "执行轨迹"，由 Cairo 语言 生成 。

目前系统中只有一个证明者，它不仅为 StarkNet 生成证明，也为所有其他运行在自己的 StarkEx Rollup 上的应用程序（Immutable X, dYdX, Sorare,等等）生成证明。这就是为什么这项服务也被称为 "共享证明器"（Shared Prover）或 SHARP。

### **全节点**

是运行Pathfinder客户端的机器，以记录在 Rollup 中执行的所有事务，并跟踪系统的当前全局状态。

全节点通过 p2p 网络接收这些信息。全局状态的变化和与之相关的有效性证明在每次创建新区块时都会被共享。当一个新的全节点建立后，它能够通过连接到 Ethereum 节点并处理所有与 StarkNet 相关的 L1 事务来重构 Rollup 的历史

### **验证者**

验证者是以太坊上的一个智能合约，它从证明者那里接收新生成的证明作为 L1 交易 并在链上进行确认。确认的结果被发送到 StarkNet 的核心智能合约以保存记录，并从StarkNet触发一组新的 L1 交易来更新链上的全局状态以保存记录。

### **StarkNet Core**

Core 是一个智能合约，每当一个新的 L2 区块被创建并且其加密证明被验证者成功地在链上确认时，它就会从 StarkNet 接收对 L2 全局状态的改变。

状态转换以 "calldata "的形式发送（EIP-4844后是blob），以节省多个 L1 事务的气体，因为单个区块的空间有限。

这些关于 StarkNet 的 "metadata "被 StarkNet 的全节点解密，以便在首次同步时重建网络的历史。

**工作原理**
--------

1.  当我们在 StarkNet 上发起一个交易，Starknet 中的排序器给交易排序，确认（validata）、出块后执行交易；
    
2.  StarkNet 上的证明者给交易生成证明，并发送给以太坊的验证者；
    
3.  验证者将收到的证明作为 L1 交易在以太坊验证(validata)，验证结果发送给同在以太坊上的 StarkNet Core 合约，
    
4.  当 StarkNet Core 合约确认验证者在链上成功确认其加密证明时，它都会接收对 StarkNet 全局状态的更改。状态事务作为“calldata” （EIP-4844后为Blob）来发送，以节省 L1 事务 gas。这些“metadata”可被 StarkNet 全节点解密。
    

全节点基本扮演存储角色，状态改变，元数据，证明。记录在 Rollup 中执行的所有事务，并跟踪系统的当前全局状态。在有必要的时候，解密“metadata”来重构 StarkNet 的历史。

StarkNet架构图：[https://david-barreto.com/starknets-architecture-review/#more-4602](https://david-barreto.com/starknets-architecture-review/#more-4602)

**网络延迟**
--------

目前我们在 StarkNet 上的网络延迟由两个因素构成。

第一个是 StarkNet 固定的一分钟出块时间（实际不足一分钟）。

关于一分钟出块时间，StarkNet 上的证明者每隔一分钟就会生成一个有效性证明，对应于过去 60 秒内发生的所有交易。有效性证明和该间隔期间的状态转换被提交给完整节点，每一分钟完成一次 StarkNet 上的结算。

简单来讲，StarkNet 每一分钟出一次块，有图为证：

可以看到经常会有一分钟两次块的情况，浏览器链接：[https://testnet.starkscan.co/](https://testnet.starkscan.co/)

而每隔一小时，系统会从每分钟创建的所有有效性证明中生成一个有效性证明，并将其与该区间内发生的所有状态变化一起提交给以太坊，每小时在以太坊上完成一次结算。不过这个一小时并不需要用户等待。

第二个因素是证明生成速度。它和一分钟出块的时间是并行的。

目前 StarkNet 的证明生成速度慢于排序（以及执行、验证）的速度，但在 StarkNet 之后的升级中增加了并行交易，因此可以进一步提升处理量。

总结：StarkNet 的等待（结算）时间由固定的一分钟出块和证明生成速度构成。前者实际不到一分钟，后者可以随着网络升级和 ZK 加速硬件的推进而得到改善，这两者也是并行的。因此，StarkNet 的网络延迟将会越来越低。

---

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