zkSync研究
Hacker Dōjō Web3前沿技术 workshop文稿
资助金额:120 USDT
Bounty链接:https://dorahacks.io/daobounty/167
Workshop回顾: https://b23.tv/aRF4b5b
内容贡献者:@0x7ac61a
本项目由Hacker Dōjō 资助,文章转载请注明出处。
🔸学习量子计算、密码学、Space等Web3前沿技术
🔸认领Bounty,赚取赏金
🔸参与Hackathon,获得资助
更多Web3精彩技术分享尽在Dōjō👇
WeChat: @HackerDojo0

一、扩容方案


Layer1扩容:对区块链本身的性能提升(共识优化,Sharding)
Layer2扩容:不更改区块链本身,而是在链下计算,将结果上链
Data Availability(DA):数据可用性
State Validity(SV):状态有效性防止Layer2停止维护数据丢失导致资产锁死
Rollup

保证Data Availability
Layer2的数据压缩后上传到Layer1,由Layer1保证DA
Validium:数据不上传到Layer1,由多个Validator托管
Volidation&zkPorter:用户可以选择数据是否上传到Layer1

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

zkPorter在zkSync 2.0版本中可用,zkPorter的引入意味着用户可以决定是否在链上或链下存储他们的数据。
zkSync在zkRollup和zkPorter方面采取的双账户方法将为用户提供一个全面的目的地来进行他们的活动,同时保留高度的安全保证。zkRollup和zkPorter两边的智能合约和账户将完全可以相互组合。
zkRollup和zkPorter都是使用zkp进行验证,只不过zkRollup数据可用性在链上保证,zkPorter数据可用性由“Guardians”这个PoS 网络维护,类似于其它的L1 PoS系统。
维护zkPorter账户的PoS系统有Guardians和validators
validators负责将zkSync 2.0上的交易分组打包,完成产生zkp的运算工作(类似于zkRollup里面的Prover)
Guardians是zkSync代币的持有者,Guardians必须以绝对多数(2/3)签署每个状态转换(一批交易)。如果任何Guardians作恶,他们就有失去抵押资产的风险。

涉及到zkPorter的安全性需要考虑到两种情况:
如果超过了1/3的Guardians作恶,就不会有区块产生,因为破坏了绝对多数原则;
如果2/3的守护者作恶,整个zkPorter状态就会被冻结,但这同样也会冻结他们的质押代币,所以发生的可能性较小;

三、zkSync

Overview
运行zkSync网络的节点需要能够执行以下操作:
监控链上智能合约的操作(如存款)
接受交易
生成zkSync链块
请求已执行区块的证明
将数据发布到智能合约

Layer1
zkSync Smart Contract:部署在以太坊网络上的Solidity智能合约,用于管理用户balances并验证zkSync network操作的正确性。
Layer2
Mempool:收集交易(Layer1与Layer2的交易)
Block Proposer:将交易打包,发送给State Keeper执行
StateKeeper:更新ZkSync的状态,在世界状态更改后,发送给Block Committer生成证明需要的信息
Block Committer:负责持久化区块、并更新state
Plonk Proving System:生成一个区块的proof
Account表示
在zkSync没有独立生成新账户。zkSync的L2账户和L1账户一一对应,L1的私钥的ECDSA签名的结果会作为L2账户的私钥。

在Layer2中Account结构包括了以下几个字段:
zkSync的Token信息由Layer1的Governance.sol维护,通过addToken函数tokenGovernance可以为网络中添加一个新的token,每一个token都有一个对应的从0递增的tokenID,其中tokenID=0被保留,对应为eth。
zkSync交易类型

zkSync目前支持如下交易类型(操作类型):
zksync实现了一个priority queue(优先通道),所有L1 user发起的deposit和withdraw(full exit)都可以独立于L2的交易优先完成:
Deposit/FullExit

用户参与Layer2,可以通过调用Layer1合约中的depositERC20函数,将代币转入合约
将用户请求encode成pubdata
放入priorityRequests队列中
触发事件,后续会被server监听到
Core application

在run_core的过程中,主要zkSync主要有以下几个子模块:(core/bin/server/src/main.rs->run_server->run_core):
Ethereum Watcher:监控链上操作
zkSync state keeper, 执行和封装块。
mempool:组织传入的交易
block proposer, 为state keeper提交block
committer, 将待处理和已完成的块存储到数据库中
API server

Ethereum Watcher

监控链上操作的模块
启动时拉取链上最新的块高block
restore_state_from_eth:更新Layer1交易事件,设置EthState
循环执行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)数据,后被Ethereum Sender处理。
Ethereum Sender
L1相关合约

commit block:保存StoredBlockInfo在链上
提交的数据结构包括:
依次执行每个commitBlockInfo,主要调用commitOneBlock函数
检查时间戳
执行collectOnchainOps(_newBlock)函数
对区块创建区块的commitment
最后返回StoredBlockInfo
StoredBlockInfo结构体:
Prover

Plonk证明系统涉及到三个功能模块:Block Committer,Prover Server以及Prover。

PlonK

一种零知识证明的方法需要具备如下三个性质:
完备性 (Completeness):若所要证之事为真,则诚实的证明者能说服诚实验证者
可靠性 (Soundness):若命题为假,则作弊证明者仅有极小机会能说服诚实验证者该事为真。
零知识性 (Zero-knowledgeness):若命题为真,则验证者除此之外,过程中没有得悉任何其他信息。
PlonK的工作原理概述:如果用户能够对抛物线上的某一点连续给出正确答案,那么就可以确信他知道这条抛物线函数是什么,因为每一轮成功猜出正确答案的概率会越来越低。这个过程被转换为电路所表示的约束,进行验证的生成:

协议流程可以简单描述为:
根据电路生成三个多项式,分别代表这电路的左输入,右输入,输出;
利用置换校验协议,去证明复制约束关系成立;
校验门的约束关系成立。
Plonk中将约束主要分为门约束(运算和输入)、线约束(复制约束),然后分别对这两类约束构建零知识证明和验证。
这部分在源码中对应在circuit中。
witness生成

从电路的角度,每一种交易可以分割成多个Operation。一个区块中的交易分割成多个Operation。

例如对于swap可以分为6个Operation,其他操作参考官方文档:

在证明了这些Operation的正确性后,潜在证明了区块中包含的交易的正确性。
witness生成:
prepare_witness_and_save_it
WitnessBuilder::new,基于账户树及区块信息构建Builder
遍历block_transactions,针对不同交易类型,先把交易应用到账户树,再生成operations、pub_data、offset_commitment
基于已有信息更新WitnessBuilder
load_committed_state:读取已经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状态的zksync电路账户树
比较持久化的committed block的root hash与计算得到的电路账户树root hash是否一致
load_account_tree:加载区块的账户树,zksync电路使用用的账户树
build_block_witness:基于circuit_account_tree生成WitnessBuilder,再由WitnessBuilder转为ProverData(用于生成proof)
store_witness:将WitnessBuilder转为ProverData并序列化,存入block_witness表
L1相关合约
合约中验证proof:
zkEvm
ZK证明需要将它们证明的所有计算语句转换为非常特定的格式——一种“代数电路”,然后可以将其编译成 STARK或SNARK。
在zkSync中自定义了VM与对应的转译器,zkSync正在同时开发两个针对 zkEVM 的编译器前端:Yul和Zinc。Yul是一种中间 Solidity 表示,可以编译为不同后端的字节码。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

✨ 关于Dorahacks
DoraHacks 是一个全球范围内的极客运动、全球黑客马拉松组织者,也是全球最活跃的多链 Web3 开发者平台之一。DoraHacks.io平台使得世界各地的Hacker和开源开发者可以参与黑客马拉松、Bounty、Grant、Grant DAO,以及公共物品质押等加密原生协议和基础设施进行协作并获得资助。到目前为止,DoraHacks 社区的 4000 多个项目已经获得了来自全球行业支持者超过 3000 万美元的资助。大量开源社区、DAO 和 超过50个主要区块链生态系统正在积极使用 Dora 的基础设施(DoraHacks.io)进行开源融资和社区治理。
✨ 关于Dorahacks DAO Bounty
Dorahacks DAO Bounty,为各类DAO和组织赋能!
Bounty计划为DAO和组织提供了一个强大的平台,通过社区激励的形式,发布问题,协调任务,鼓励用户积极参与。
作为Bounty发布者,您可以根据我们的指南,发布社区相关的悬赏任务,解决问题的同时,提升社区活跃度:https://dorahacks.io/blog/guides/publish-a-bounty/
作为赏金猎人,您可以在DAO Bounty计划中发挥自己的专长和能力,认领悬赏,解决问题,获得酬金:https://dorahacks.io/daobounty
✨ 关于Hacker Dōjō
Hacker Dōjō是由Hacker共建的加密、Web3前沿技术开源知识社区。Dōjō会以直播/音频/文字等形式定期组织分享session,内容包括Web3领域前沿技术论文解读、技术研讨、工作坊、技术领袖研讨会等。欢迎在Hacker Dōjo社区讨论、学习和交流:Dora Dōjo - Dora Community Forum: https://community.dorahacks.io/c/buidl-dorahacks-io/6
目前Hacker Dōjō已分享的主题有:
密码学:基础专题(对称加密算法、哈希函数、群和公钥加密、数字签名和KZG承诺、零知识证明、非对称密码算法、分布式密码学)
密码学:抗量子计算破解算法专题
Layer1架构:Move系列、模块化公链、共识协议Bullshark、内存池协议Narwhal和共识协议Tusk、Aptos共识与交易并行执行
Layer2架构:zkSync研究、Layer2的支付通道扩容方法、Polygon Hermez、Optimism、StarkWare技术与生态梳理
IRS系列:Interest Rate Swap and DeFi Platforms、Interest Rate Swap and Perpetual Swap、The Future Dencentralized Interest Rate Swap
量子计算系列:量子计算基础、Qiskit专题(Qiskit入门、Deutsch-Jozsa算法、Bernstein-Vazirani算法、Simon算法、量子卷积神经网络、量子傅立叶变换、量子相位)、Pennylane专题(利用变分量子电路拟合傅里叶级数)、实验法观测宏观量子叠加态
AIGC系列:ChatGPT比较语料评测、GPT-4论文解读
加入Dōjō的Hacker可以提出自己的学习期望,主动提案自己擅长的技术话题,由Dōjō组织分享。同时,Hacker Dōjō推出Web3前沿课题研究计划,定期选题,由Hacker进行研究和讲解,并以bounty形式奖励研究贡献者。欢迎各位Hacker认领Bounty:https://dorahacks.io/zh/daobounty
联系我们:
Telegram: @DoraDojo0
WeChat: @HackerDojo0
E-mail: hackerdojo0@gmail.com

