时间:2023-04-21|浏览:207
同时,由于 StarkNet 的系统设计中有很大一部分与零知识证明和 Merkle Tree 相关的资料结构有关,因此也会需要读者大概认识什麽是零知识证明和相对 Merkle Tree,会在阅读过程中顺畅很多!未来有机会也会继续深入各个系统部件做深入讨论。
Author: ChiHaoLu(chihaolu.eth) @ imToken Labs
StarkNet OS(Operating System)主要由Cairo这个StarkNet的原生语言写成,类似于Solidity,可以用来编写智能合约并且是一个零知识证明语言,用于构建StarkNet核心的作业系统和各种功能。
所有在StarkNet这条链上的逻辑都会被包含在StarkNet OS中,例如如何定义帐户状态、交易原理、合约执行,甚至是如何进行位元运算、杂凑运算和原生的签章演算法等。OS需要在交易与合约接收 input 之后产出output,并且将这个output更新在StarkNet这个L2的状态(State)中。
那为什麽要使用零知识证明语言来编写StarkNet OS呢,而不是其他常见语言?
相信大家都知道扩容的其中一个大方向就是“把繁杂的计算丢到Off-Chain并且只要在On-Chain做验证即可”,而StarkNet它会将Cairo编写的ZK-STARK Program执行完的内容透过STARK-proof system进行证明(prove)与在Ethereum进行验证(verify)。
StarkNet的系统架构我认为有三个重点,Sequencer、Prover&Verifier和L1 Core Contract。另外还有原生AA设计的User Account、Full Node、Fact Register等部件,但这篇文我们先着重在前三个重点的概括介绍上。
StarkNet System Overview
StarkNet作为一个Rollups没有像矿工角色存在,但依旧需要一个角色来“验证交易”、“决定交易顺序”、“构建区块”,而负责这三者工作内容的人就是Sequencer。
Sequencer是一个off-chain服务器,工作流程的第一步是接收用户送上来的交易(数笔来自不同用户的不同交易),之后Sequencer会决定交易顺序并且构建L2的区块。
Sequencer需要确认交易是被帐户拥有者授权的(由于StarkNet使用了原生AA的帐户系统,因此这裡不一定是单纯确认签章正确,有可能是多签或其他验证逻辑)。透过StarkNet OS执行一次交易,接收input后执行合约逻辑并产出output。
Sequencer执行过交易这件事情会生产出一个trace,并将这些执行内容的“过程见证”送去给Prover让其生产证明。也就是告诉大家:“我执行过这段程式码囉。”。
在我们接下来要讲的Prover和Verifier验证成功之后,Sequencer会更新L1 StarkNet Core Contract中的状态。
Prover同样也是一个Off-Chain Server,这个角色主要就是接收Sequencer执行完程式码产生的trace,并且生产出相对应的STARK proofs,然后交给在L1上的Verifier Contract验证,验证通过之后会注册fact供未来的L1 StarkNet Core Contract进行查询。
Image Source: Starkience Tweets
Verifier Contract会在L1上负责验证以上一切是否是合法的,接受input以及STARK Proof 来决定。
补充说明:目前StarkNet中只有一个Prover,不仅为StarkNet生成证明,还为运行在StarkWare自己的StarkEx rollup上的所有其他应用程序(例如 Immutable X、dYdX、Sorare等)生成证明。这就是为什麽该服务被称为Shared Prover或SHARP的原因。
StarkNet L1 Core Contract储存著L2上状态们的证明。当我们的trace经过Prover产生proof并且在L1 Verifier Contract验证之后,就会告诉L1 Core Contract这个“状态更新”