当前位置: 首页 > news >正文

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

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

相关文章:

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

1. 引言 Sandstorm为: 能提交独立proof给StarkWare的Ethereum Verifier,的首个开源的STARK prover。 开源代码见: https://github.com/andrewmilson/sandstorm(Rust) L2Beat 提供了以太坊上Starknet的合约架构图&…...

【C++语言】类和对象--默认成员函数 (中)

文章目录 前言类的六个默认成员函数:1. 构造函数概念特性做了什么?易错注意:显式定义和默认构造函数 2. 析构函数概念特征做了什么?注意事项: 3.拷贝构造函数概念特征做了什么?注意事项: 4.赋值运算符重载…...

前端递归常见应用

概览 在 JavaScript 中,递归是一种编程技术,指的是函数直接或间接调用自身的过程。 递归通常用于解决可以分解为相同子问题的问题。通过不断地将问题分解成更小的、相似的子问题,直到达到某种基本情况(不再需要进一步递归的简单情…...

AI工具如何改变我们的工作与生活

AI工具在当今社会中扮演着越来越重要的角色,它们已经开始改变着我们的工作方式和生活方式。在接下来的2000字篇幅中,我将详细探讨AI工具如何影响我们的工作和生活。 AI工具在工作中的影响: 自动化和智能化生产流程: AI工具可以通…...

深入了解C/C++的内存区域划分

🔥个人主页:北辰水墨 🔥专栏:C学习仓 本节我们来讲解C/C的内存区域划分,文末会附加一道题目来检验成果(有参考答案) 一、大体有哪些区域?分别存放什么变量开辟的空间? …...

C++构造函数和析构函数的调用顺序

一般情况下,调用析构函数的次序正好与调用构造函数的次序相反,也就是最先被调用的构造函数,其对应的析构函数最后被调用,而最后被调用的构造函数,其对应的析构函数最先被调用。 当然对象的构造函数和析构函数调用时机和…...

智能家居1 -- 实现语音模块

项目整体框架: 监听线程4: 1. 语音监听线程:用于监听语音指令, 当有语音指令过来后, 通过消息队列的方式给消息处理线程发送指令 2. 网络监听线程:用于监听网络指令,当有网络指令过来后, 通过消息队列的方…...

Leetcode 3139. Minimum Cost to Equalize Array

Leetcode 3139. Minimum Cost to Equalize Array 1. 解题思路2. 代码实现 题目链接:3139. Minimum Cost to Equalize Array 1. 解题思路 这一题是一道hard的题目,而且看了一下答出率低的离谱,就一开始被吓到了,不过实际做了一下…...

【element-ui】el-table横向滚动后,通过is-scrolling-left获取滚动高度失效的问题

el-table横向滚动后,通过is-scrolling-left获取滚动高度失效的问题 需求 现在有一个需求,需要监听el-table的纵向滚动,当滚动高度达到特定值时进行一些操作。 代码如下: methods:{throttledHandleScroll() {// 如果已经有定时器…...

JAVA中的日期

获取当前的日期 LocalDate LocalDate today LocalDate.now();System.out.println("今天是:"today);//今天是:2024-05-06String format today.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日"));System.out.println("今天是:"…...

一起了解开源自定义表单的优势表现

随着社会的进步和科技的发展,越来越多的中小企业希望采用更为先进的软件平台,助力企业实现高效率的流程化管理。低代码技术平台、开源自定义表单已经慢慢走入大众视野,成为一款灵活、高效的数字化转型工具。流辰信息专注于低代码技术平台的研…...

体育老师工资高吗,奖金有吗

教师的薪资水平与多种因素相关,包括教育经验、工作地点、学校类型以及个人的教学成果等。在讨论体育教师的工资问题时,不能仅仅关注数字,更应了解教育价值和个人发展。 初中体育教师的工资水平受多种因素影响。根据网络统计的数据&#xff0c…...

Linux驱动开发——(十一)INPUT子系统

目录 一、input子系统简介 二、input驱动API 2.1 input字符设备 2.2 input_dev结构体 2.3 上报输入事件 2.4 input_event结构体 三、代码 3.1 驱动代码 3.2 测试代码 四、平台测试 一、input子系统简介 input子系统是管理输入的子系统,和pinctrl、gpio子…...

大数据毕业设计Python+Django旅游景点评论数据采集分析可视化系统 NLP情感分析 LDA主题分析 bayes分类 旅游爬虫 旅游景点评论爬虫 机器学习 深度学习 人工智能 计算机毕业设计

毕业论文(设计)开题报告 学生姓名 学 号 所在学院 信息工程学院 专 业 指导教师姓名 指导教师职称 工程师 助教 指导教师单位 论文(设计)题目 基于朴素贝叶斯算法旅游景点线上评价情感分析 开 题 报 告…...

FSNotes for Mac v6.7.1中文激活版:强大的笔记管理工具

FSNotes for Mac是一款功能强大的文本处理与笔记管理工具,为Mac用户提供了一个直观、高效的笔记记录和整理平台。 FSNotes for Mac v6.7.1中文激活版下载 FSNotes支持Markdown语法,使用户能够轻松设置笔记格式并添加链接、图像等元素,实现笔记…...

课程34:Windows Docker部署.Net Core项目

这里写目录标题 🚀前言一、安装Docker Desktop1.1 官网下载Docker1.2 安装Docker1.2.1 选择配置,默认都勾选1.2.2 安装中1.2.3 安装成功1.2.4 启动1.2.5 启动成功二、.Net Core 项目发布与部署2.1 修改Dockerfile文件2.2 Web项目发布2.3 修改配置2.3.1 修改dockerfile<...

分布式与一致性协议之ZAB协议(四)

ZAB协议 ZooKeeper是如何选举领导者的。 首先我们来看看ZooKeeper是如何实现成员身份的&#xff1f; 在ZooKeeper中&#xff0c;成员状态是在QuorumPeer.java中实现的&#xff0c;为枚举型变量 public enum ServerState { LOOKING, FOLLOWING, LEADING, OBSERVING }其实&…...

在M1芯片安装鸿蒙闪退解决方法

在M1芯片安装鸿蒙闪退解决方法 前言下载鸿蒙系统安装完成后&#xff0c;在M1 Macos14上打开闪退解决办法接下来就是按照提示一步一步安装。 前言 重新安装macos系统后&#xff0c;再次下载鸿蒙开发软件&#xff0c;竟然发现打不开。 下载鸿蒙系统 下载地址&#xff1a;http…...

Linux基础-socket详解、TCP/UDP

文章目录 一、Socket 介绍二、Socket 通信模型三、Socket 常用函数1 创建套接字2 绑定套接字3、监听连接4、接受连接5、接收和发送数据接收数据发送数据 6、关闭套接字 四、Socket编程试验1、源码server.cclient.c 2、编译&#xff1a;3、执行结果 五、补充TCP和UDP协议的Socke…...

【菜单下拉效果】基于jquery实现二级菜单下拉效果(附完整源码下载)

Js菜单下拉特效目录 &#x1f354;涉及知识&#x1f964;写在前面实现效果&#x1f367;一、涉及知识&#x1f333;二、具体实现2.1 搭建一级菜单2.2 搭建二级菜单项2.3 引入js文件2.4 构建CSS文件 &#x1f40b;三、源码获取&#x1f305; 作者寄语 &#x1f354;涉及知识 ht…...

焕新Windows资源管理器:打造惊艳毛玻璃视觉体验

焕新Windows资源管理器&#xff1a;打造惊艳毛玻璃视觉体验 【免费下载链接】ExplorerBlurMica Add background Blur effect or Acrylic (Mica for win11) effect to explorer for win10 and win11 项目地址: https://gitcode.com/gh_mirrors/ex/ExplorerBlurMica 每天面…...

【Python时序预测实战】基于贝叶斯优化的Transformer单变量时序预测模型构建与调优

1. 为什么选择Transformer做时序预测&#xff1f; 我第一次用Transformer做销量预测时&#xff0c;心里其实挺没底的。毕竟这玩意儿原本是搞自然语言处理的&#xff0c;就像拿菜刀削苹果——工具不太对口。但当我看到预测结果比传统LSTM提升了23%的准确率时&#xff0c;立刻真香…...

Vue3 的 JSX 函数组件,每次更新都会重新运行吗?

我用最直白、最无歧义、100%准确的方式&#xff0c;只回答你这一个问题&#xff1a; ✅ 最终答案&#xff08;背它&#xff09; 在 Vue3 中&#xff1a; 你写的 JSX 函数组件&#xff0c;整个函数 只会在组件初始化时运行 1 次&#xff01; 更新时&#xff0c;整个函数 不会重新…...

3种方法让加密音乐重获自由:Unlock Music浏览器解密工具详解

3种方法让加密音乐重获自由&#xff1a;Unlock Music浏览器解密工具详解 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址:…...

告别向日葵和TeamViewer!用你家路由器自带的DDNS功能,免费搭建Windows远程桌面(保姆级教程)

告别第三方远程工具&#xff1a;用路由器DDNS解锁Windows远程桌面全速体验 每次打开向日葵或TeamViewer时&#xff0c;那个转圈加载的进度条是否让你眉头紧锁&#xff1f;当免费版突然弹出"会话时长已达上限"的提示时&#xff0c;是否恨不得砸键盘&#xff1f;作为常…...

CI/CD 流水线性能优化:从构建到部署

CI/CD 流水线性能优化&#xff1a;从构建到部署 前言 哥们&#xff0c;别整那些花里胡哨的理论。今天直接上硬菜——我在大厂一线优化 CI/CD 流水线性能的真实经验总结。作为一个白天写前端、晚上打鼓的硬核工程师&#xff0c;我对效率的追求就像对鼓点节奏的把控一样严格。 背…...

使用Perfetto进行Settings中网络热点开启后anr分析的整体流程记录

目录 一.背景 二.Perfetto使用流程 阶段一&#xff1a;抓取 Perfetto Trace 文件 1. 指令核心解析 2. 数据源功能详解 (这些是抓取的“维度”) 3. 该指令的作用场景 阶段二&#xff1a;导入并认识 Perfetto UI 面板 1. 致命异常&#xff1a;Duration: (Did not end) 2…...

iPhone 抓包失败 4 种具体情况逐个解决方法

抓不到包这个描述太模糊了&#xff0c;在实际调试中&#xff0c;这句话至少对应四种完全不同的情况&#xff1a; 完全没有请求只有浏览器能抓到能抓到但 HTTPS 解不开能抓到但数据不完整 如果不先分清楚是哪一种&#xff0c;就会一直重复安装证书或改代理配置。一、先做一个验证…...

基于Spring AI的MCP服务开发实战指南

1. Spring AI与MCP服务初探 第一次接触Spring AI框架时&#xff0c;我就被它简洁优雅的API设计所吸引。作为Spring生态中专门为AI应用开发提供的工具集&#xff0c;它让Java开发者能够像开发普通Web应用一样轻松构建AI服务。而MCP&#xff08;Model Calling Protocol&#xff0…...

Windows上搭建PostgreSQL监控神器:Grafana+Prometheus+Postgres_Exporter保姆级干货教程

❓想要实时掌握 PostgreSQL 数据库的运行状态&#xff1f; &#x1f440;想知道复制延迟、锁等待这些核心指标&#xff1f; &#x1f192;这里是Moshow的「CSDN https://zhengkai.blog.csdn.net/」 &#x1f680;这篇文章带你从零开始&#xff0c;在 Windows 上搭建一套企业…...