解码Starknet Verifier:深入逆向工程之旅

embedded/2024/9/22 11:09:17/

1. 引言

Sandstorm为:

  • 能提交独立proof给StarkWare的Ethereum Verifier,的首个开源的STARK prover。

开源代码见:

  • https://github.com/andrewmilson/sandstorm(Rust)

L2Beat 提供了以太坊上Starknet的合约架构图:
在这里插入图片描述
主要分为2大部分:

  • Sequencer:用于管理状态。由状态A到状态B。
  • SHARP Prover 和 STARK Verifier:STARK Verifier验证STARK proof,以确认该state transition是正确的。本文重点关注的是本部分——生成一个STARK proof,然后提交到以太坊上Starknet的STARK Verifier solidity合约并验证通过。

STARK Verifier solidity合约:

  • 实际是验证某hard-coded program——即bootloader program。

在这里插入图片描述
bootloader program:

  • 负责booting其它programs。

从高层来看,Starknet的以太坊verifier合约有:

  • FriStatementVerifier.sol合约:验证FRI proof
  • MerkleStatementVerifier.sol合约:验证Merkle proofs
  • StarkVerifier.sol合约:验证STARK proof

2. 反向工程面临的挑战一:解码约束

Starknet很酷的点在于:

  • verifier:evaluates the constraints on a single row
  • prover:evaluates the constraints on every row

因此,约束在verifier内。
在这里插入图片描述
其中:

  • 首个约束为initial_pc,即initial program counter。

在这里插入图片描述

3. 反向工程面临的挑战二:Progress feedback loop

从以太坊下载合约,借助Foundary,支持:

  • running locally
  • incrementally tests progress
  • 支持打印调试

在这里插入图片描述

4. Sandstorm在Starknet生态中的角色

4.1 何为Sandstorm?

Sandstorm为:

  • Cairo assembly proof generator(Cairo0和Cairo1)
  • 所生成的proof可用于:
    • Cairo verifier(for recursive proofs)
    • Ethereum verifier
  • 提供了Rust语言编写的Cairo proof verifier

4.2 已经有Stone了,为何还需要Sandstorm?

已经有Stone了,为何还需要Sandstorm?原因在于:

  • Stone和Sandstorm二者是互补的
  • 有利于Starknet生态系统的去中心化

在这里插入图片描述
Sandstorm可定位为:

  • Verifying proofs in WASM
  • Parsing proofs for dispatch to Cairo and Ethereum verifiers
  • Rust > C++
    • Prover + Verifier experimentation

Sandstorm基于一些amazing rust库构建:

  • arkworks:为crypto primitives
  • rust-crypto:哈希函数
  • ruint:快速unsigned integers
  • serde:反序列化
  • starknet-rs:快速Pedersen哈希
  • rayon:并行化

4.3 Sandstorm用例

Sandstorm应用场景有:

  • recursive proving:曾将Sandstorm用于为headers chain生成面向Cairo Verifier的proof。
  • client side proving
  • WASM proof verification:可很方便的编译为webassembly。
  • Dispatching proofs to StarkWare verifiers

Andrew Milson致力于zerosync项目。zerosync的目标是:

  • 为Bitcoin同步创建stark proof。

Andrew Milson曾使用Sandstorm来为headers chain,生成面向Cairo Verifier的proof。

4.4 Sandstorm展望

  • 为Sandstor proofs添加Zero Knowledge属性
  • 改进整体性能
  • 模块化

参考资料

[1] 2023年9月11日Andrew Milson分享视频 Decoding the Starknet Verifier: A Deep Dive into the Reverse Engineering Journey | Andrew Milson


http://www.ppmy.cn/embedded/29832.html

相关文章

使用 ORPO 微调 Llama 3

原文地址:https://towardsdatascience.com/fine-tune-llama-3-with-orpo-56cfab2f9ada 更便宜、更快的统一微调技术 2024 年 4 月 19 日 ORPO 是一种新的令人兴奋的微调技术,它将传统的监督微调和偏好校准阶段合并为一个过程。这减少了训练所需的计算…

web server apache tomcat11-30-The Tomcat JDBC Connection Pool

前言 整理这个官方翻译的系列,原因是网上大部分的 tomcat 版本比较旧,此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎,轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…

Vue3+Nuxt3 从0到1搭建官网项目(SEO搜索、中英文切换、图片懒加载)

Vue2Nuxt2 从 0 到1 搭建官网~ Vue3Nuxt3 从0到1搭建官网项目 安装 Nuxt3,创建项目初始化的 package.json项目结构初始化项目pages 文件下创建index.vue引入sass修改 app.vue 文件查看效果 配置公共的css、metaassets下的cssreset.scss 重置文件common.scss 配置nux…

python关键字(pass)

5、pass 在Python编程中,pass 是一个特殊的空操作关键字,用于表示一个语句的存在,但它不执行任何操作。pass 关键字在语法上需要一条语句但又不希望有任何实际操作的场景下非常有用。无论是Python的基础学习者还是经验丰富的开发者&#xff…

JAVA面试专题-框架篇(Spring+Mybatis)

Spring Spring框架中的单例bean是线程安全的吗? bean上面可以加入注解Scope,如果是singleton(默认),意味着bean在每个spring IOC容器中只有一个实例;如果是prototype,说明一个bean定义可以有多…

【亲测有效】Element UI 自定义 Notification 通知样式不生效,设置this.$notify样式不生效问题

不生效的源代码 <style lang"scss" scoped> ::v-deep .el-notification__group {margin-left: 130px; } </style><style lang"scss" scoped> .el-notification__group {margin-left: 130px; } </style>以上两种代码均不生效 解决…

【跟马少平老师学AI】-【神经网络是怎么实现的】(九)长短期记忆网络

一句话归纳&#xff1a; 1&#xff09;RNN也会存在梯度消失的问题。 2&#xff09;同一句话&#xff0c;对于不同的任务&#xff0c;句中不同的词起的作用也不一样。 3&#xff09;LSTM&#xff08;长短期记忆&#xff09;子网络&#xff1a; 门&#xff0c;让输入经过运算&…

React Router 路由配置数组配组持久化

在一些特定场景下,你可能需要将路由配置数组进行持久化,例如从后端动态加载路由配置或根据用户权限动态生成路由配置。这时,持久化路由配置数组就很有用,可以避免每次应用启动时重新获取或计算路由配置。 持久化路由配置数组的步骤如下: 定义路由配置数组 首先,你需要定义一…