zkSync研究

Hacker?Dōjō Web3前沿技術(shù) workshop文稿
資助金額:120 USDT
Bounty鏈接:https://dorahacks.io/daobounty/167
Workshop回顧:?https://b23.tv/aRF4b5b
內(nèi)容貢獻者:@0x7ac61a
本項目由Hacker Dōjō 資助,文章轉(zhuǎn)載請注明出處。
??學(xué)習(xí)量子計算、密碼學(xué)、Space等Web3前沿技術(shù)
??認領(lǐng)Bounty,賺取賞金
??參與Hackathon,獲得資助
更多Web3精彩技術(shù)分享盡在Dōjō??
WeChat: @HackerDojo0

一、擴容方案


Layer1擴容:對區(qū)塊鏈本身的性能提升(共識優(yōu)化,Sharding)
Layer2擴容:不更改區(qū)塊鏈本身,而是在鏈下計算,將結(jié)果上鏈
Data Availability(DA):數(shù)據(jù)可用性
State Validity(SV):狀態(tài)有效性防止Layer2停止維護數(shù)據(jù)丟失導(dǎo)致資產(chǎn)鎖死
Rollup

保證Data Availability
Layer2的數(shù)據(jù)壓縮后上傳到Layer1,由Layer1保證DA
Validium:數(shù)據(jù)不上傳到Layer1,由多個Validator托管
Volidation&zkPorter:用戶可以選擇數(shù)據(jù)是否上傳到Layer1

保證State Validity:
Optimistic rollup:利用欺詐證明(fraud proofs),
ZK rollup:利用有效性證明(validity proofs)
zkPorter

zkPorter在zkSync 2.0版本中可用,zkPorter的引入意味著用戶可以決定是否在鏈上或鏈下存儲他們的數(shù)據(jù)。
zkSync在zkRollup和zkPorter方面采取的雙賬戶方法將為用戶提供一個全面的目的地來進行他們的活動,同時保留高度的安全保證。zkRollup和zkPorter兩邊的智能合約和賬戶將完全可以相互組合。
zkRollup和zkPorter都是使用zkp進行驗證,只不過zkRollup數(shù)據(jù)可用性在鏈上保證,zkPorter數(shù)據(jù)可用性由“Guardians”這個PoS 網(wǎng)絡(luò)維護,類似于其它的L1 PoS系統(tǒng)。
維護zkPorter賬戶的PoS系統(tǒng)有Guardians和validators
validators負責(zé)將zkSync 2.0上的交易分組打包,完成產(chǎn)生zkp的運算工作(類似于zkRollup里面的Prover)
Guardians是zkSync代幣的持有者,Guardians必須以絕對多數(shù)(2/3)簽署每個狀態(tài)轉(zhuǎn)換(一批交易)。如果任何Guardians作惡,他們就有失去抵押資產(chǎn)的風(fēng)險。

涉及到zkPorter的安全性需要考慮到兩種情況:
如果超過了1/3的Guardians作惡,就不會有區(qū)塊產(chǎn)生,因為破壞了絕對多數(shù)原則;
如果2/3的守護者作惡,整個zkPorter狀態(tài)就會被凍結(jié),但這同樣也會凍結(jié)他們的質(zhì)押代幣,所以發(fā)生的可能性較??;

三、zkSync

Overview
運行zkSync網(wǎng)絡(luò)的節(jié)點需要能夠執(zhí)行以下操作:
監(jiān)控鏈上智能合約的操作(如存款)
接受交易
生成zkSync鏈塊
請求已執(zhí)行區(qū)塊的證明
將數(shù)據(jù)發(fā)布到智能合約

Layer1
zkSync Smart Contract:部署在以太坊網(wǎng)絡(luò)上的Solidity智能合約,用于管理用戶balances并驗證zkSync network操作的正確性。
Layer2
Mempool:收集交易(Layer1與Layer2的交易)
Block Proposer:將交易打包,發(fā)送給State Keeper執(zhí)行
StateKeeper:更新ZkSync的狀態(tài),在世界狀態(tài)更改后,發(fā)送給Block Committer生成證明需要的信息
Block Committer:負責(zé)持久化區(qū)塊、并更新state
Plonk Proving System:生成一個區(qū)塊的proof
Account表示
在zkSync沒有獨立生成新賬戶。zkSync的L2賬戶和L1賬戶一一對應(yīng),L1的私鑰的ECDSA簽名的結(jié)果會作為L2賬戶的私鑰。

在Layer2中Account結(jié)構(gòu)包括了以下幾個字段:
zkSync的Token信息由Layer1的Governance.sol維護,通過addToken函數(shù)tokenGovernance可以為網(wǎng)絡(luò)中添加一個新的token,每一個token都有一個對應(yīng)的從0遞增的tokenID,其中tokenID=0被保留,對應(yīng)為eth。
zkSync交易類型

zkSync目前支持如下交易類型(操作類型):
zksync實現(xiàn)了一個priority queue(優(yōu)先通道),所有L1 user發(fā)起的deposit和withdraw(full exit)都可以獨立于L2的交易優(yōu)先完成:
Deposit/FullExit

用戶參與Layer2,可以通過調(diào)用Layer1合約中的depositERC20函數(shù),將代幣轉(zhuǎn)入合約
將用戶請求encode成pubdata
放入priorityRequests隊列中
觸發(fā)事件,后續(xù)會被server監(jiān)聽到
Core application

在run_core的過程中,主要zkSync主要有以下幾個子模塊:(core/bin/server/src/main.rs->run_server->run_core):
Ethereum Watcher:監(jiān)控鏈上操作
zkSync state keeper, 執(zhí)行和封裝塊。
mempool:組織傳入的交易
block proposer, 為state keeper提交block
committer, 將待處理和已完成的塊存儲到數(shù)據(jù)庫中
API server

Ethereum Watcher

監(jiān)控鏈上操作的模塊
啟動時拉取鏈上最新的塊高block
restore_state_from_eth:更新Layer1交易事件,設(shè)置EthState
循環(huán)執(zhí)行poll_eth_node:
process_new_blocks,更新ETHState
Mempool

mempool handler收集交易
? ? 2.接收MempoolBlocksRequest::GetBlock請求,生成proposed block
State Keeper

Committer

上面4種操作最后會生成aggregate_operations、eth_unprocessed_aggregated_ops(除了create_aggregated_prover_task_storage)數(shù)據(jù),后被Ethereum Sender處理。
Ethereum Sender
L1相關(guān)合約

commit block:保存StoredBlockInfo在鏈上
提交的數(shù)據(jù)結(jié)構(gòu)包括:
依次執(zhí)行每個commitBlockInfo,主要調(diào)用commitOneBlock函數(shù)
檢查時間戳
執(zhí)行collectOnchainOps(_newBlock)函數(shù)
對區(qū)塊創(chuàng)建區(qū)塊的commitment
最后返回StoredBlockInfo
StoredBlockInfo結(jié)構(gòu)體:
Prover

Plonk證明系統(tǒng)涉及到三個功能模塊:Block Committer,Prover Server以及Prover。

PlonK

一種零知識證明的方法需要具備如下三個性質(zhì):
完備性 (Completeness):若所要證之事為真,則誠實的證明者能說服誠實驗證者
可靠性 (Soundness):若命題為假,則作弊證明者僅有極小機會能說服誠實驗證者該事為真。
零知識性 (Zero-knowledgeness):若命題為真,則驗證者除此之外,過程中沒有得悉任何其他信息。
PlonK的工作原理概述:如果用戶能夠?qū)佄锞€上的某一點連續(xù)給出正確答案,那么就可以確信他知道這條拋物線函數(shù)是什么,因為每一輪成功猜出正確答案的概率會越來越低。這個過程被轉(zhuǎn)換為電路所表示的約束,進行驗證的生成:

協(xié)議流程可以簡單描述為:
根據(jù)電路生成三個多項式,分別代表這電路的左輸入,右輸入,輸出;
利用置換校驗協(xié)議,去證明復(fù)制約束關(guān)系成立;
校驗門的約束關(guān)系成立。
Plonk中將約束主要分為門約束(運算和輸入)、線約束(復(fù)制約束),然后分別對這兩類約束構(gòu)建零知識證明和驗證。
這部分在源碼中對應(yīng)在circuit中。
witness生成

從電路的角度,每一種交易可以分割成多個Operation。一個區(qū)塊中的交易分割成多個Operation。

例如對于swap可以分為6個Operation,其他操作參考官方文檔:

在證明了這些Operation的正確性后,潛在證明了區(qū)塊中包含的交易的正確性。
witness生成:
prepare_witness_and_save_it
WitnessBuilder::new,基于賬戶樹及區(qū)塊信息構(gòu)建Builder
遍歷block_transactions,針對不同交易類型,先把交易應(yīng)用到賬戶樹,再生成operations、pub_data、offset_commitment
基于已有信息更新WitnessBuilder
load_committed_state:讀取已經(jīng)committed的account map
load_state_diff:加載verified_block與committed_block之間的AccountUpdates,包含account_balance_updates、account_creates、account_pubkey_updates、mint_nft_updates
circuit_account_tree.insert:往空的SparseMerkleTree插入account map的元素,得到committed狀態(tài)的zksync電路賬戶樹
比較持久化的committed block的root hash與計算得到的電路賬戶樹root hash是否一致
load_account_tree:加載區(qū)塊的賬戶樹,zksync電路使用用的賬戶樹
build_block_witness:基于circuit_account_tree生成WitnessBuilder,再由WitnessBuilder轉(zhuǎn)為ProverData(用于生成proof)
store_witness:將WitnessBuilder轉(zhuǎn)為ProverData并序列化,存入block_witness表
L1相關(guān)合約
合約中驗證proof:
zkEvm
ZK證明需要將它們證明的所有計算語句轉(zhuǎn)換為非常特定的格式——一種“代數(shù)電路”,然后可以將其編譯成 STARK或SNARK。
在zkSync中自定義了VM與對應(yīng)的轉(zhuǎn)譯器,zkSync正在同時開發(fā)兩個針對 zkEVM 的編譯器前端:Yul和Zinc。Yul是一種中間 Solidity 表示,可以編譯為不同后端的字節(jié)碼。Zinc是我們用于智能合約和通用零知識證明電路的基于Rust的語言。

Reference:
https://vitalik.eth.limo/general/2022/08/04/zkevm.html
https://twitter.com/LuozhuZhang/status/1521124870385405953?s=20&t=LEAtT7YABXdv2vw89_MJSQ
https://blog.matter-labs.io/zkporter-a-breakthrough-in-l2-scaling-ed5e48842fbf?
https://vitalik.eth.limo/general/2019/09/22/plonk.html
https://learnblockchain.cn/article/1642?

??關(guān)于Dorahacks
DoraHacks 是一個全球范圍內(nèi)的極客運動、全球黑客馬拉松組織者,也是全球最活躍的多鏈 Web3 開發(fā)者平臺之一。DoraHacks.io平臺使得世界各地的Hacker和開源開發(fā)者可以參與黑客馬拉松、Bounty、Grant、Grant DAO,以及公共物品質(zhì)押等加密原生協(xié)議和基礎(chǔ)設(shè)施進行協(xié)作并獲得資助。到目前為止,DoraHacks 社區(qū)的 4000 多個項目已經(jīng)獲得了來自全球行業(yè)支持者超過 3000 萬美元的資助。大量開源社區(qū)、DAO 和 超過50個主要區(qū)塊鏈生態(tài)系統(tǒng)正在積極使用 Dora 的基礎(chǔ)設(shè)施(DoraHacks.io)進行開源融資和社區(qū)治理。
??關(guān)于Dorahacks DAO Bounty
Dorahacks DAO Bounty,為各類DAO和組織賦能!
Bounty計劃為DAO和組織提供了一個強大的平臺,通過社區(qū)激勵的形式,發(fā)布問題,協(xié)調(diào)任務(wù),鼓勵用戶積極參與。
作為Bounty發(fā)布者,您可以根據(jù)我們的指南,發(fā)布社區(qū)相關(guān)的懸賞任務(wù),解決問題的同時,提升社區(qū)活躍度:https://dorahacks.io/blog/guides/publish-a-bounty/
作為賞金獵人,您可以在DAO Bounty計劃中發(fā)揮自己的專長和能力,認領(lǐng)懸賞,解決問題,獲得酬金:https://dorahacks.io/daobounty
??關(guān)于Hacker Dōjō
Hacker Dōjō是由Hacker共建的加密、Web3前沿技術(shù)開源知識社區(qū)。Dōjō會以直播/音頻/文字等形式定期組織分享session,內(nèi)容包括Web3領(lǐng)域前沿技術(shù)論文解讀、技術(shù)研討、工作坊、技術(shù)領(lǐng)袖研討會等。歡迎在Hacker Dōjo社區(qū)討論、學(xué)習(xí)和交流:Dora Dōjo - Dora Community Forum: https://community.dorahacks.io/c/buidl-dorahacks-io/6
目前Hacker Dōjō已分享的主題有:
密碼學(xué):基礎(chǔ)專題(對稱加密算法、哈希函數(shù)、群和公鑰加密、數(shù)字簽名和KZG承諾、零知識證明、非對稱密碼算法、分布式密碼學(xué))
密碼學(xué):抗量子計算破解算法專題
Layer1架構(gòu):Move系列、模塊化公鏈、共識協(xié)議Bullshark、內(nèi)存池協(xié)議Narwhal和共識協(xié)議Tusk、Aptos共識與交易并行執(zhí)行
Layer2架構(gòu):zkSync研究、Layer2的支付通道擴容方法、Polygon Hermez、Optimism、StarkWare技術(shù)與生態(tài)梳理
IRS系列:Interest Rate Swap and DeFi Platforms、Interest Rate Swap and Perpetual Swap、The Future Dencentralized Interest Rate Swap
量子計算系列:量子計算基礎(chǔ)、Qiskit專題(Qiskit入門、Deutsch-Jozsa算法、Bernstein-Vazirani算法、Simon算法、量子卷積神經(jīng)網(wǎng)絡(luò)、量子傅立葉變換、量子相位)、Pennylane專題(利用變分量子電路擬合傅里葉級數(shù))、實驗法觀測宏觀量子疊加態(tài)
AIGC系列:ChatGPT比較語料評測、GPT-4論文解讀
加入Dōjō的Hacker可以提出自己的學(xué)習(xí)期望,主動提案自己擅長的技術(shù)話題,由Dōjō組織分享。同時,Hacker Dōjō推出Web3前沿課題研究計劃,定期選題,由Hacker進行研究和講解,并以bounty形式獎勵研究貢獻者。歡迎各位Hacker認領(lǐng)Bounty:https://dorahacks.io/zh/daobounty
聯(lián)系我們:
Telegram:?@DoraDojo0
WeChat:?@HackerDojo0
E-mail:?hackerdojo0@gmail.com