Project Icon

sirius

开源框架实现高效可增量验证计算

Sirius是一个开源的Plonkish折叠框架,为可增量验证计算(IVC)提供解决方案。其三层架构包括算术化层、折叠方案层和SNARK层,能够高效累积和验证多步计算。项目正在开发中,未来将实现高度门优化、cyclefold集成和GPU加速等功能,以满足区块链等领域对高效验证的需求。

logo

天狼星作为夜空中最亮的恒星而闻名, 它欺骗了肉眼,看似是一个孤立的光点, 实际上却是一个双星系统。受这种二元性的启发, 我们的项目以天狼星命名,捕捉了 看似单一实体的折叠实例的本质。

简介

天狼星是一个开源的Plonkish折叠框架,用于增量可验证计算[IVC]。

fig1

在IVC方案的背景下,证明者的角色是证明:将步骤函数F连续精确应用n次于初始值$z_0$后,结果为$z_n$。这里,步骤函数F接受两个输入$z_i$和$w$,并产生输出$z_{i+1}$。

架构

Sirius折叠框架采用三层架构设计。

fig2

  • 算术化层:该层作为约束系统的接口。用户定义的电路和证明数据被转换为由折叠方案定义的中间表示格式。我们当前的实现遵循Protostar中的特殊声音交互协议(SPS)。
  • 折叠方案层:框架的核心是折叠方案IVC电路,它积累多个步骤的计算。在每个步骤中,证明者首先计算前一步骤的实例-证明对,并将它们折叠到累加器中,然后计算折叠后实例-证明对的交叉项和误差向量。IVC电路接收证明者的输出并执行以下步骤:应用步骤函数F,将前一步骤的实例折叠到累加器实例中,并验证IVC电路的输入。
  • SNARK层:SNARK层利用多项式交互式预言机证明(PIOP)和多项式承诺方案(PCS)生成简洁的零知识证明(zkSNARKs)以实现简洁和零知识验证。IVC判定器的多项式关系检查被转换为多变量和检查协议。和检查协议的评估阶段取决于我们选择的多项式承诺方案(PCS),例如Hyrax。值得注意的是,当多项式稀疏时,我们可以使用Spartan的Spark编译器来高效处理它们。

路线图

  • 2023年第四季度 - 支持halo2前端
  • 2023年第四季度 - 针对plonkish自定义门的折叠方案
  • 2023年第四季度 - 针对查找参数的折叠方案
  • 2024年第一季度 - IVC电路
  • 2024年第一季度 - IVC基准测试
  • 2024年第二季度 - 来自Protogalaxy的高次门优化
  • 2024年第三季度 - 带有cyclefold的IVC
  • 2024年第三季度 - Snarkify Cloud集成和GPU加速
  • 2024年第四季度 - 聚合电路
  • 2024年第四季度 - 支持IOP + PCS SNARK(Spartan / Hyperplonk
  • 2025年第一季度 - 支持链上验证器

预计时间表可能会发生变化

入门指南

安装Rust

使用rustup

添加依赖

cargo add --git https://github.com/snarkify/sirius.git --tag v0.1.0 sirius

实现StepCircuit特质

/// 要允许您的电路被折叠,请实现此特质
/// `ARITY` - 输入和输出的大小
pub trait StepCircuit<const ARITY: usize, F: PrimeField> {
    type Config: Clone;
    fn configure(cs: &mut ConstraintSystem<F>) -> Self::Config;
    /// 此方法表示步骤函数`F: z_i -> z_{i+1}`
    ///
    /// 与`halo2::Circuit`不同,它接受已分配单元格的数组
    /// 并返回已分配单元格的数组
    fn synthesize_step(
        &self,
        config: Self::Config,
        layouter: &mut impl Layouter<F>,
        z_in: &[AssignedCell<F, F>; ARITY],
    ) -> Result<[AssignedCell<F, F>; ARITY], SynthesisError>;
}

设置和运行IVC实例

有关可运行的示例,请查看examples文件夹。 以下是使用 IVC API 的示例:

fn main() {
    let primary = poseidon_step_circuit::TestPoseidonCircuit::default();
    let secondary = step_circuit::trivial::Circuit::<ARITY2, _>::default();

    // 作为 IVC 算法一部分的随机预言机规格
    let primary_spec = RandomOracleConstant::<C1Scalar>::new(10, 10);
    let secondary_spec = RandomOracleConstant::<C2Scalar>::new(10, 10);

    let primary_commitment_key = get_or_create_commitment_key::<C1Affine>(COMMITMENT_KEY_SIZE, "bn256");
    let secondary_commitment_key = get_or_create_commitment_key::<C2Affine>(COMMITMENT_KEY_SIZE, "grumpkin");

    let pp = PublicParams::<
        '_,
        ARITY1,
        ARITY2,
        MAIN_GATE_SIZE,
        C1Affine,
        C2Affine,
        TestPoseidonCircuit<_>,
        step_circuit::trivial::Circuit<ARITY, _>,
        RandomOracle,
        RandomOracle,
    >::new(
        CircuitPublicParamsInput::new(
            PRIMARY_CIRCUIT_TABLE_SIZE as u32,
            &primary_commitment_key,
            primary_spec,
            &primary,
        ),
        CircuitPublicParamsInput::new(
            SECONDARY_CIRCUIT_TABLE_SIZE as u32,
            &secondary_commitment_key,
            secondary_spec,
            &secondary,
        ),
        LIMB_WIDTH,
        LIMBS_COUNT,
    )
    .expect("创建公共参数失败");

    let primary_input = array::from_fn(|i| C1Scalar::from_u128(i as u128));
    let secondary_input = array::from_fn(|i| C2Scalar::from_u128(i as u128));
    let fold_step_count = NonZeroUsize::new(10).unwrap();

    IVC::fold(
        &pp,
        primary,
        primary_input,
        secondary,
        secondary_input,
        fold_step_count,
    )
    .expect("运行 IVC 失败");
}

此代码将执行 fold_step_count 次折叠步骤,并在执行后检查证明。

运行示例

对于可运行的示例,请查看 examples 文件夹。

# 're' 是 'run example' 的缩写

# 通过命令行参数运行 IVC 的别名
cargo re-cli --help

# 运行 IVC 的平凡 `StepCircuit`(只是原样返回其输入)的别名
cargo re-trivial

# 运行 IVC 的 poseidon 电路的别名
cargo re-poseidon

时间分析

实现了跨度生命周期跟踪,可以让你详细了解特定步骤完成所需的时间。

# 're' 是 'run example' 的缩写

# 默认情况下,它会输出所有生命周期大于 1 秒的跨度
cargo re-poseidon | python3 .scripts/build_profiling.py

# 可以指定输出跨度的下限
cargo re-poseidon | python3 .scripts/build_profiling.py --min-runtime 0.1s

# 你也可以存储日志并在稍后处理它们
cargo re-poseidon > log; cat log | python3 .scripts/build_profiling.py 

内存分析

使用了 dhat 工具和实验性的 dhat-rs crate

# 使用默认 IVC(poseidon+trivial)运行 dhat
cargo cli-dhat

# 查看可用的运行参数
cargo cli-dhat --help

基准测试

对于基准测试,请查看 benches 文件夹。

cargo bench

Criterion

你也可以获得更详细的报告。请查看 criterion.rs 了解更多信息

cargo criterion

参与其中

我们希望你能成为我们社区的一员!

如果你和我们一样对 Sirius 充满热情,我们邀请你加入我们的 Telegram 开发者社区。这是一个很好的地方,可以及时了解最新情况、参与其中并为项目做出贡献。无论你是想贡献代码、提供反馈,还是仅仅想保持联系,我们的 Telegram 群组都是最佳选择。

:point_right: 加入我们的开发者社区

感谢你对 Sirius 的贡献兴趣!:sparkles:

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号