時(shí)間:2023-04-21|瀏覽:298
同時(shí),由于 StarkNet 的系統(tǒng)設(shè)計(jì)中有很大一部分與零知識證明和 Merkle Tree 相關(guān)的資料結(jié)構(gòu)有關(guān),因此也會需要讀者大概認(rèn)識什麼是零知識證明和相對 Merkle Tree,會在閱讀過程中順暢很多!未來有機(jī)會也會繼續(xù)深入各個(gè)系統(tǒng)部件做深入討論。
Author: ChiHaoLu(chihaolu.eth) @ imToken Labs
StarkNet OS(Operating System)主要由Cairo這個(gè)StarkNet的原生語言寫成,類似于Solidity,可以用來編寫智能合約并且是一個(gè)零知識證明語言,用于構(gòu)建StarkNet核心的作業(yè)系統(tǒng)和各種功能。
所有在StarkNet這條鏈上的邏輯都會被包含在StarkNet OS中,例如如何定義帳戶狀態(tài)、交易原理、合約執(zhí)行,甚至是如何進(jìn)行位元運(yùn)算、雜湊運(yùn)算和原生的簽章演算法等。OS需要在交易與合約接收 input 之后產(chǎn)出output,并且將這個(gè)output更新在StarkNet這個(gè)L2的狀態(tài)(State)中。
那為什麼要使用零知識證明語言來編寫StarkNet OS呢,而不是其他常見語言?
相信大家都知道擴(kuò)容的其中一個(gè)大方向就是“把繁雜的計(jì)算丟到Off-Chain并且只要在On-Chain做驗(yàn)證即可”,而StarkNet它會將Cairo編寫的ZK-STARK Program執(zhí)行完的內(nèi)容透過STARK-proof system進(jìn)行證明(prove)與在Ethereum進(jìn)行驗(yàn)證(verify)。
StarkNet的系統(tǒng)架構(gòu)我認(rèn)為有三個(gè)重點(diǎn),Sequencer、Prover&Verifier和L1 Core Contract。另外還有原生AA設(shè)計(jì)的User Account、Full Node、Fact Register等部件,但這篇文我們先著重在前三個(gè)重點(diǎn)的概括介紹上。
StarkNet System Overview
StarkNet作為一個(gè)Rollups沒有像礦工角色存在,但依舊需要一個(gè)角色來“驗(yàn)證交易”、“決定交易順序”、“構(gòu)建區(qū)塊”,而負(fù)責(zé)這三者工作內(nèi)容的人就是Sequencer。
Sequencer是一個(gè)off-chain服務(wù)器,工作流程的第一步是接收用戶送上來的交易(數(shù)筆來自不同用戶的不同交易),之后Sequencer會決定交易順序并且構(gòu)建L2的區(qū)塊。
Sequencer需要確認(rèn)交易是被帳戶擁有者授權(quán)的(由于StarkNet使用了原生AA的帳戶系統(tǒng),因此這裡不一定是單純確認(rèn)簽章正確,有可能是多簽或其他驗(yàn)證邏輯)。透過StarkNet OS執(zhí)行一次交易,接收input后執(zhí)行合約邏輯并產(chǎn)出output。
Sequencer執(zhí)行過交易這件事情會生產(chǎn)出一個(gè)trace,并將這些執(zhí)行內(nèi)容的“過程見證”送去給Prover讓其生產(chǎn)證明。也就是告訴大家:“我執(zhí)行過這段程式碼囉。”。
在我們接下來要講的Prover和Verifier驗(yàn)證成功之后,Sequencer會更新L1 StarkNet Core Contract中的狀態(tài)。
Prover同樣也是一個(gè)Off-Chain Server,這個(gè)角色主要就是接收Sequencer執(zhí)行完程式碼產(chǎn)生的trace,并且生產(chǎn)出相對應(yīng)的STARK proofs,然后交給在L1上的Verifier Contract驗(yàn)證,驗(yàn)證通過之后會注冊fact供未來的L1 StarkNet Core Contract進(jìn)行查詢。
Image Source: Starkience Tweets
Verifier Contract會在L1上負(fù)責(zé)驗(yàn)證以上一切是否是合法的,接受input以及STARK Proof 來決定。
補(bǔ)充說明:目前StarkNet中只有一個(gè)Prover,不僅為StarkNet生成證明,還為運(yùn)行在StarkWare自己的StarkEx rollup上的所有其他應(yīng)用程序(例如 Immutable X、dYdX、Sorare等)生成證明。這就是為什麼該服務(wù)被稱為Shared Prover或SHARP的原因。
StarkNet L1 Core Contract儲存著L2上狀態(tài)們的證明。當(dāng)我們的trace經(jīng)過Prover產(chǎn)生proof并且在L1 Verifier Contract驗(yàn)證之后,就會告訴L1 Core Contract這個(gè)“狀態(tài)更新”