以比特币脚本来实现SNARK Verifier

news/2024/6/24 7:59:18/文章来源:https://blog.csdn.net/mutourend/article/details/137185925

1. 引言

前序博客有:

  • 基于BitVM的乐观 BTC bridge
  • BitVM:Bitcoin的链下合约
  • Bitcoin Bridge:治愈还是诅咒?
  • BitVM2:比特币上的无需许可验证

比特币脚本的基础限制有:

  • 最大脚本size为:4MB
  • 最大stack size为:altstack + stack,一共小于1000个元素
  • 单个stack元素最大size为:520字节
  • 算术opcodes的最大输入size为:32-bit words

比特币脚本的实际限制为:

  • 以32-bit words的最大脚本输入:1000 items * 32-bit/item = 32 kB
  • 脚本之间传输状态的开销为:
    • 使用Winternitz签名:31 bytes per bit
    • 1 stack item for every 4bits(每个item 20字节)
    • 每个Script的最大输入状态size:1000 items * 4 bit/item = 4000 bits = 500 bytes(需要20kB签名数据)
    • 单个full block可承诺数据量约为:4 MB / block * 31 bytes / bit = 16 kB

2. 可能的证明系统

可 以比特币脚本实现的,可能的证明系统有:

  • Groth16 ( 22000 Fq multiplications )
  • FFlonk ( 14000 Fq multiplications + hash function )
  • FFlonk + slonk

这3个证明系统均基于BN254曲线。

这些证明系统的示例实现有:

  • Arkworks的 https://github.com/arkworks-rs/groth16
  • Iden3的 https://github.com/iden3/snarkjs

3. 以比特币脚本来实现SNARK Verifier

以比特币脚本来实现SNARK Verifier,对应的代码模块有:

  • Lamport signatures / Winternitz signatures
  • u256 arithmetic
    • addition, multiplication, Karatsuba multiplication
  • bn254 field arithmetic
    • addition, multiplication, inversion
    • Montgomery reduction
  • bn254 curve operations
    • point addition, inversion, scalar multiplication
  • bn254 degree-2, degree-6, and degree-12 extensions
  • bn254 pairings
    • constant vs variable inputs

4. 复杂度分析

以比特币脚本来实现SNARK Verifier,对应的复杂度分析为:

  • Groth16 Proof size约为300个字节。其public inputs还另需约100个字节。
  • 当前,占满比特币整个区块空间的手续费小于0.3BTC,约2万美金。
  • assertTx可能需承诺多达16KB的trace数据。
  • 单个degree-12 extension field element 约为3 KB。因此assertTx可能需承诺多达5个中间结果。
  • 因此,Verifiers可能需从多达6个disproveTx Tapscripts中选择,且所有Tapscripts的组合size将多达 6 x 4 MB = 24 MB。

5. 优化思路

以比特币脚本来实现SNARK Verifier,当前的优化思路有:

  • Prover可在其kickoffTx中做另一large commitment。
  • 可使用一系列的commit交易,高效将该commitment分散至多个区块。
  • f 1 , f 2 , f 3 , ⋯ f_1,f_2,f_3,\cdots f1,f2,f3, 无需按顺序排列。其输入输出可形成任何类型的DAG。因此不需要在每一步中发送全局信息。
  • commitment脚本可以使用条件。如,“若 z 3 = = 1 z_3 == 1 z3==1,则承诺 z 11 z_{11} z11,否则承诺 z 17 z_{17} z17
  • 可使用 f i f_i fi 的提示/辅助输入,如提供某inverse倒数,然后使用乘法来验证。
  • 可将脚本输入预先解析为正确的格式。如,将某value以bits在stack上表示,而不是30-bit limbs。
    将 STARK 包裹进 SNARK。一次性设置可实现快速、紧凑的通用计算。
    • 如,RISC0:Bonsai 和 Local
  • disproveTx 可非常大,因为只有不诚实的Prover才需要为此付费。
  • 可对中间结果进行哈希处理,压缩assertTx,但代价是必须在 disproveTx 中计算哈希函数。

参考资料

[1] SNARK Verifier in Bitcoin Script

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1034943.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux中如何修改界面为中文, 设置中文输入法

目录 修改界面为中文方法一方法二方法三(kali中)方法四方法五(kali中) 切换为中文/英文输入法方法一方法二(kali中) 待续、更新中 修改界面为中文 方法一 查看当前系统拥有的中文语言包 locale -a | grep CN zh_CN.utf8 : 简体中文语言包 打开文件locale.conf vi /etc/lo…

完整部署一套k8s-v.1.28.0版本的集群

一、系统情况 虚拟机版本:esxi 6.7 系统版本:centos7.9_2009_x86 配置:4核8G(官网最低要求2核2G) 192.168.0.137 master节点 192.168.0.139 node2节点 192.168.0.138 node1节点(节点扩容练习&#xf…

5.C++:string常用函数及模拟实现

一、resize() void test7() {string s("hello world");s.resize(5); //改变长度s.resize(20,x); //改变空间大小 } int main() {test7();return 0; } 二、string常用函数接口 1.打印 2.、push_back、append 3.迭代器,读写;s.begin()、s.…

Linux虚拟机环境搭建spark

Linux环境搭建Spark分为两个版本,分别是Scala版本和Python版本。 一、 安装Pyspark 本环境以 Python 环境为例。 1、下载spark 下载网址:https://archive.apache.org/dist/spark 下载安装包:根据自己环境选择合适版本,本环境…

爱上数据结构:栈和队列的概念及使用

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:数据结构 ​ 一、栈 1.栈的基本概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,…

数据结构——栈(C语言版)

前言: 在学习完数据结构顺序表和链表之后,其实我们就可以做很多事情了,后面的栈和队列,其实就是对前面的顺序表和链表的灵活运用,今天我们就来学习一下栈的原理和应用。 准备工作:本人习惯将文件放在test.c…

Python基础之pandas:文件读取与数据处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、文件读取1.以pd.read_csv()为例:2.数据查看 二、数据离散化、排序1.pd.cut()离散化,以按范围加标签为例2. pd.qcut()实现离散化3.排序4.…

AI复活:商业新风口还是情感禁区?

随着人工智能技术的飞速发展,AI已经渗透到我们生活的方方面面,其中,“AI复活”服务作为新兴的技术应用,正逐渐走进大众视野。然而,这一技术带来的不仅是商业机会,更伴随着伦理和情感的争议。 “AI复活”服务…

深度解析C语言——预处理详解

对C语言有一定了解的同学&#xff0c;相信对预处理一定不会陌生。今天我们就来聊一聊一些预处理的相关知识。预处理是在编译之前对源文件进行简单加工的过程&#xff0c;主要是处理以#开头的命令&#xff0c;例如#include <stdio.h>、#define等。预处理是C语言的一个重要…

Element Plus:图标

第一步&#xff1a;npm install element-plus/icons-vue 第二步&#xff1a;在main.js里 import * as ElementPlusIconsVue from element-plus/icons-vueconst app createApp(App) for (const [key, component] of Object.entries(ElementPlusIconsVue)) {app.component(key,…

HarmonyOS 应用开发之通过键值型数据库实现数据持久化

场景介绍 键值型数据库存储键值对形式的数据&#xff0c;当需要存储的数据没有复杂的关系模型&#xff0c;比如存储商品名称及对应价格、员工工号及今日是否已出勤等&#xff0c;由于数据复杂度低&#xff0c;更容易兼容不同数据库版本和设备类型&#xff0c;因此推荐使用键值…

ubuntu22.04@Jetson Orin Nano安装配置VNC服务端

ubuntu22.04Jetson Orin Nano安装&配置VNC服务端 1. 源由2. 环境3. VNC安装Step 1: update and install xserver-xorg-video-dummyStep 2: Create config for dummy virtual displayStep3: Add the following contents in xorg.conf.dummyStep 4: Update /etc/X11/xorg.con…

【详解】运算放大器工作原理及其在信号处理中的核心作用

什么是运算放大器 运算放大器&#xff08;简称“运放”&#xff09;是一种放大倍数非常高的电路单元。在实际电路中&#xff0c;它常常与反馈网络一起组成一定的功能模块。它是一种带有特殊耦合电路和反馈的放大器。输出信号可以是输入信号的加法、减法、微分和积分等数学运算…

c++对象指针

对象指针在使用之前必须先进行初始化。可以让它指向一个已定义的对象&#xff0c;也可以用new运算符动态建立堆对象。 定义对象指针的格式为&#xff1a; 类名 *对象指针 &对象; //或者 类名 *对象指针 new 类名(参数); 用对象指针访问对象数据成员的格式为&#xff1a…

Django详细教程(二) - 部门用户管理案例

文章目录 前言一、新建项目二、新建app三、设计表结构四、新建数据库五、新建静态文件六、部门管理1.部门展示2.部门添加3.部门删除4.部门编辑 七、模板继承八、用户管理1.辨析三种方法方法一&#xff1a;原始方法方法二&#xff1a;Form组件(简便)方法三&#xff1a;ModelForm…

1.Netty介绍及NIO三大组件

Netty网络编程Netty的底层是NIO&#xff08;非阻塞IO&#xff09;&#xff0c;常用的多线程和线程池使用的是阻塞IO&#xff0c;其效率并不高。支持高并发&#xff0c;性能好高性能的服务端程序、客户端程序 NIO三大组件 一、Channel 读写数据的双向传输通道 常见的传输通道…

【C++第二阶段】继承多态电脑组装实例

你好你好&#xff01; 以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 继承继承语法继承方式继承中的对象模型继承中构造和析构顺序同名成员处理同名静态成员处理多继承语法菱形继承问题 多态多态基本概念重写&重载 多态原理多…

linux基础命令篇: centos7虚拟机网络配置——NAT模

linux基础命令篇&#xff1a; centos7虚拟机网络配置——NAT模式 1搞清楚NAT模式概念 在网络地址转换&#xff08;NAT&#xff09;模式下&#xff0c;虚拟机与宿主机共享一个IP地址。虚拟机的所有网络流量都会通过宿主机的IP地址进行转换&#xff0c;然后发送到外部网络。这意…

【HTML】标签学习(下.2)

&#xff08;大家好哇&#xff0c;今天我们将继续来学习HTML&#xff08;下.2&#xff09;的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 二.列表标签 2.1 无序列表(重点) 2.2有序列表(理解) 2.3 自定义列表(重点…

基于多数据源融合的医疗知识图谱框架构建研究

基于多数据源融合的医疗知识图谱框架构建研究 提出背景医学数据源医学数据获取方法知识图谱的构建 提出背景 论文&#xff1a;基于多数据源融合的医疗知识图谱框架构建研究 本文以医疗领域的实际应用需求为出发点&#xff0c;从医疗大数据获取、医疗实体及关系标注、医疗实体…