简介"/>
RISC Zero项目简介
1. 引言
RISC Zero为致力于为为全球开发者创建利用ZK技术构建软件所需的基础设施和工具的初创公司。
ZK技术将重塑数字互动的方式。从历史上看,确认软件应用程序正确执行的唯一方法是通过冗余计算。ZK引入了一个新选项:可验证计算(verifiable computation)。
现在可将程序的输出与其self-certifying receipt结合,允许持怀疑态度的第三方验证执行的正确性——而且该verifier不需要重复原始计算,甚至不需要查看程序的输入!
可验证计算改变了我们所依赖的计算基础设施的弹性和经济性。它创造了许多喜闻乐见的新兴用例,如:
- zk coprocessors:支持链上应用将其逻辑复杂的部分移到链下,以降低gas开销。
- 区块链基础设施,包括在与Optimism合作。
当前RISC Zero技术栈有:
- Bonsai:proving服务,为软件开发栈,支持链上(即通过智能合约)和链下应用向RISC Zero zkVM请求和接收proofs。
- RISC Zero zkVM:为可证明任意代码正确执行的高性能工具。
- RISC Zero Proof System:为RISC Zero zkVM底层的密码学技术。
2. Bonsai
Bonsai发布于2023年,为支持链上和链下应用向RISC Zero zkVM请求和接收proofs的proving服务。
Bonsai为:
- 通用ZK证明服务,支持任意链、任意协议、任意应用使用ZK proofs的优势。其高度并行、可编程,并性能优良。
- 支持将ZK proofs直接集成到任意智能合约中,而不需要定制电路。
- 支持将ZK直接集成到任意EVM链的dApps
- 具备支持任意其它生态的潜力。
RISC Zero zkVM是Bonsai的基础,其具备广泛的语言兼容性,当前支持Rust,未来将支持可编译为RISC-V的其它语言,如C++、Go等等。
借助:
- 递归证明
- 专门定做的电路compiler
- state continuations
- 证明算法的持续改进
Bonsai将支持为大量应用生成高性能ZK proofs。
其中RISC Zero团队的Bonsai-ETH Relay作为dApp合约与Bonsai proving服务的中间人。为使用Bonsai ETH Relay,dApp开发者需完成:
- 1)在链上部署一个智能合约,该智能合约调用RISC Zero的relay合约。
- 2)将对RISC Zero zkVM编译的程序上传到Bonsai proving服务。
3. RISC Zero zkVM
RISC Zero zkVM首次发布于2022年4月,可证明任意代码的正确执行,支持开发者以成熟编程语言(如Rust和C++)来构建ZK应用。其发布意味着ZK软件开发的重大突破:
- RISC Zero zkVM,使得开发者不需要构建电路,也不需要以定制语言来编写ZK应用。
RISC Zero zkVM支持开发者以Rust来构建,并利用Rust生态系统的成熟度,使得开发者可迅速构建有意义的ZK应用,而无需任何数学或密码学背景。
相关应用有:
- JSON:证明JSON文件内某元素的内容,而保证其它数据的隐私。
- Where’s Waldo:证明JPG文件中出现了Waldo,但保持该图像的其它部分的隐私。
- ZK Checkmate:证明你发现了a mate-in-one,但不泄露该winning move。
- ZK Proof of Exploit:证明你可利用某以太坊账号,但不暴露该利用。
- ECDSA signature verification:证明某ECDSA签名有效。
所有这些例子都可利用成熟的软件生态:
- RISC Zero zkVM支持当前top 1000 Rust crates的70%多。
支持引入Rust crates,将颠覆ZK软件世界的游戏规则:
- 项目不再需要数月或数年才能开发完成。
RISC Zero在不断改进性能,当前支持CUDA和Metal GPU加速,并借助continuations支持对大型程序的并行证明。
4. RISC Zero Proof System
RISC Zero zkVM执行,会生成一个Receipt,用作特定Session的有效性证明:
pub struct Receipt {pub inner: InnerReceipt,pub journal: Vec<u8>, //包含该Session的公开输出。//journal的内容通过在guest代码中调用`env::commit()`和`env::commit_slice()`来指定。
}
pub struct Session {pub segments: Vec<Box<dyn SegmentRef>>, //The constituent Segments of the Sessionpub journal: Vec<u8>, //The data publicly committed by the guest program.pub exit_code: ExitCode, //The ExitCode of the session.pub hooks: Vec<Box<dyn SessionEvents>>, //The hooks to be called during the proving phase.
}
为确认该Receipt是诚实生成的,可使用Receipt::verify
,并将所执行代码的ImageID
作为参数,进行验证。
pub fn verify(&self,image_id: impl Into<Digest>
) -> Result<(), VerificationError>
此外,receipt对该程序的执行做了一些claims,具体见ReceiptMetadata
:
pub struct ReceiptMetadata {pub pre: SystemState, //The SystemState of a segment just before execution has begun.pub post: SystemState, //The SystemState of a segment just after execution has completed.pub exit_code: ExitCode, //The exit code for a segmentpub input: Digest, //A Digest of the input, from the viewpoint of the guest.pub output: Digest, //A Digest of the journal, from the viewpoint of the guest.
}
Receipt主要有2种形式:
- 可表示为一组
SegmentReciepts
,每个SegmentReceipt证明单个Segment。所有SegmentReceipts证明整个Session。 - 可表示为单个
SuccinctReceipt
,以证明整个session的有效性。借助递归证明,任意数量的SegmentReceipts都可压缩为单个SuccinctReceipt。
pub struct SegmentReceipts(pub Vec<SegmentReceipt>);
pub struct SegmentReceipt {pub seal: Vec<u32>,pub index: u32,pub hashfn: String,
}pub struct SuccinctReceipt {pub seal: Vec<u32>,pub control_id: Digest,pub meta: ReceiptMetadata,
}
密码学上,每个SegmentReceipt和SuccinctReceipt都是ZK-STARK.
参考资料
[1] RISC Zero简介
[2] RISC Zero Proof System
[3] Bonsai on Ethereum
[4] A Blockchain Developer’s Guide to the zkVM
RISC Zero系列博客
- RISC0:Towards a Unified Compilation Framework for Zero Knowledge
- Risc zero ZKVM:zk-STARKs + RISC-V
- 2023年 ZK Hack以及ZK Summit 亮点记
- RISC Zero zkVM 白皮书
- Risc0:使用Continunations来证明任意EVM交易
- Zeth:首个Type 0 zkEVM
更多推荐
RISC Zero项目简介
发布评论