RISC Zero为致力于为为全球开发者创建利用ZK技术构建软件所需的基础设施和工具的初创公司。
ZK技术将重塑数字互动的方式。从历史上看,确认软件应用程序正确执行的唯一方法是通过冗余计算。ZK引入了一个新选项:可验证计算(verifiable computation)。
现在可将程序的输出与其self-certifying receipt结合,允许持怀疑态度的第三方验证执行的正确性——而且该verifier不需要重复原始计算,甚至不需要查看程序的输入!
可验证计算改变了我们所依赖的计算基础设施的弹性和经济性。它创造了许多喜闻乐见的新兴用例,如:
当前RISC Zero技术栈有:
Bonsai发布于2023年,为支持链上和链下应用向RISC Zero zkVM请求和接收proofs的proving服务。
Bonsai为:
RISC Zero zkVM是Bonsai的基础,其具备广泛的语言兼容性,当前支持Rust,未来将支持可编译为RISC-V的其它语言,如C++、Go等等。
借助:
Bonsai将支持为大量应用生成高性能ZK proofs。
其中RISC Zero团队的Bonsai-ETH Relay作为dApp合约与Bonsai proving服务的中间人。为使用Bonsai ETH Relay,dApp开发者需完成:
RISC Zero zkVM首次发布于2022年4月,可证明任意代码的正确执行,支持开发者以成熟编程语言(如Rust和C++)来构建ZK应用。其发布意味着ZK软件开发的重大突破:
RISC Zero zkVM支持开发者以Rust来构建,并利用Rust生态系统的成熟度,使得开发者可迅速构建有意义的ZK应用,而无需任何数学或密码学背景。
相关应用有:
所有这些例子都可利用成熟的软件生态:
支持引入Rust crates,将颠覆ZK软件世界的游戏规则:
RISC Zero在不断改进性能,当前支持CUDA和Metal GPU加速,并借助continuations支持对大型程序的并行证明。
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 Session
pub 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 segment
pub 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