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 交易来更新链上的全局状态以保存记录。
Core 是一个智能合约,每当一个新的 L2 区块被创建并且其加密证明被验证者成功地在链上确认时,它就会从 StarkNet 接收对 L2 全局状态的改变。
状态转换以 "calldata "的形式发送(EIP-4844后是blob),以节省多个 L1 事务的气体,因为单个区块的空间有限。
这些关于 StarkNet 的 "metadata "被 StarkNet 的全节点解密,以便在首次同步时重建网络的历史。
当我们在 StarkNet 上发起一个交易,Starknet 中的排序器给交易排序,确认(validata)、出块后执行交易;
StarkNet 上的证明者给交易生成证明,并发送给以太坊的验证者;
验证者将收到的证明作为 L1 交易在以太坊验证(validata),验证结果发送给同在以太坊上的 StarkNet Core 合约,
当 StarkNet Core 合约确认验证者在链上成功确认其加密证明时,它都会接收对 StarkNet 全局状态的更改。状态事务作为“calldata” (EIP-4844后为Blob)来发送,以节省 L1 事务 gas。这些“metadata”可被 StarkNet 全节点解密。
全节点基本扮演存储角色,状态改变,元数据,证明。记录在 Rollup 中执行的所有事务,并跟踪系统的当前全局状态。在有必要的时候,解密“metadata”来重构 StarkNet 的历史。
