SNARKs 和 UTXO链的未来
1. 引言
SNARKs 经常被视为“解决”扩容问题的灵丹妙药。虽然 SNARKs 可以提供令人难以置信的好处,但也需要承认其局限性——SNARKs 无法解决区块链目前面临的现有带宽限制。
本文旨在通过对 SNARKs 对比特币能做什么和不能做什么进行(相对)简单的概述来揭开 SNARKs 的神秘面纱。将研究其与比特币相关的功能如何简明扼要地概括为非交互式见证聚合 (Non-Interactive Witness Aggregation,NIWA)。如果了解比特币的工作原理,将能够理解本文。
值得注意的是,SNARKs 仍然是一个非常活跃的研究领域。许多 SNARKs 变体要么效率不够高,无法证明复杂的语句,要么证明大小过大,要么需要可信的设置。话虽如此,多年来已经取得了很大进展,预计未来十年将继续看到改进。本文是为了期待这样的改进而写的,即使它今天可能并不实用。【本文写于2020年,目前SNARKs技术已走向实用。】
2. 何为SNARKs?
SNARKs 是一种结构,它允许在给定规则集和起点的情况下高效地验证结果。导致结果的输入不会被透露(“零知识”)。
以简单的国际象棋示例来解释。
国际象棋示例:
- 规则:国际象棋规则集
- 开始:棋盘的起始位置 A
- 结果:棋盘的新位置 B
证明游戏从位置 A 有效过渡到位置 B 的常规方法是简单地揭示所有动作并检查它们是否有效。SNARKs 可以做同样的事情,但更好:
- 无需透露移动集合(私密,数据更少)
- 验证在计算上更高效
尽管创建 SNARKs 的计算成本往往很高。然而,在许多人希望验证相同结果的系统中,如区块链,这仍然是值得的。只有一个人需要付出努力来创建该 SNARK,从而提高每个人的验证效率。
区块链示例:
- 规则:全节点软件
- 开始:A 时刻的区块头和 UTXO 集合哈希值
- 结果:B 时刻的区块头和 UTXO 集合
与国际象棋示例类似,验证转换的常规方法是从时间 A 的 UTXO 集(所有未使用的交易)开始,接收所有区块,并一直更新 UTXO 集,直到到达时间 B。使用 SNARKs,不需要这些数据来证明有效性。事实上,如果将时间 A 设置为创世区块(空的 UTXO 集),将时间 B 设置为现在,则可以在不接收任何历史数据的情况下验证整个链。
需要注意的是,对于时间 B,需要整个 UTXO 集,而不仅仅是 UTXO 集哈希。虽然这些数据对于证明有效性并非严格必需,但也关心可用性。如果只有 UTXO 集哈希,那么虽然你知道存在有效状态,但实际上并不知道该状态是什么。这意味着你无法花费任何coins,因为无法证明特定 UTXO 是集合的一部分的数据。在国际象棋类比中,会有新棋盘位置的哈希,但实际上不知道该位置是什么,因此无法继续玩游戏。
请注意,无论是谁制作了 SNARKs(大概是矿工)都会拥有这些数据(因为首先需要这些数据来创建 SNARK),但他们可能会选择向你隐瞒这些数据。
3. SNARK UTXO链
为了保证每个人都能使用自己的coins,更新 UTXO 集所需的所有数据都必须与每个区块进行通信。需要知道哪些 UTXO 已被使用(输入),哪些是新添加的(输出)。这就是所谓的non-witness data非见证数据。
转换的有效性可以通过单个 SNARK 来验证,从而取代所有witness data见证数据(脚本、签名),并且几乎不占用带宽。输入和输出之间的关系并不明显——一个区块看起来就像一个大的 Coinjoin 交易。大部分数据将是非见证数据。
与普遍看法相反,SNARKs 无法解决轻节点或non-federated非联合侧链背后的根本问题,因为必须始终下载非见证数据。如果非见证数据缺失,全节点具有拒绝有效 SNARK 的关键能力,而如果轻节点忽略了下载非见证数据,它可能会错误地认为缺少数据的链有效。如果矿工隐瞒哪怕一条非见证数据,除了那些特定的矿工之外,没有人能够创建具有有效 SNARKs 的新区块,从而将其变成一个许可系统。
4. SNARKs 消耗witnesses见证
UTXO链的 SNARK 或许可以概括为实现以下功能:
非交互式见证聚合 (Non-Interactive Witness Aggregation,NIWA)
在此广泛使用“见证”一词。
- 在比特币中,见证是交易内部的数据,用于证明是否允许创建特定的 UTXO。
- 但随着时间的推移,当 UTXO(非见证数据)被使用时,它就会成为自己的见证。当 1 BTC 从 Alice 发送给 Bob 再发送给 Carol 时,Bob 的交易就是 Alice 向 Carol 转账的见证。
- 同样,自创世以来的所有已使用交易都是当前 UTXO 集的见证。
还要注意,SNARKs 本身就是见证。如果每笔交易都由 SNARKs 验证,也可以 NIWA 这些 SNARKs 成每个区块的单个 SNARK。而且由于输出在被使用时就成为见证,甚至可以将未确认但已使用的输出放入内存池中并聚合它们。Alice 到 Bob 再到 Carol 变成 Alice 到 Carol,实现非交互式Transaction cut-through交易直通。当单个 UTXO 带有许多分支链下交易(如闪电通道工厂的情况)被强制上链时,这可能特别强大。
5. 小结
本文总结了 SNARKs 对于具有NIWA UTXO链的核心功能。任何见证数据都可以通过 SNARKs 非交互式聚合。剩余的非见证数据直接反映了系统的状态——UTXO 集。虽然 SNARKs 可以实现一些很棒的功能,如允许仅通过下载 UTXO 集和单个 SNARK 即可从创世开始追赶,或者将未确认交易序列非交互式聚合为单个交易,但仍然需要发布每个新区块的所有非见证数据,以允许所有节点更新其 UTXO 集。因此,SNARKs 无法解决UTXO链的基本带宽限制。

NIWA 在行动。SNARKs消耗见证,同时也是自己的见证。SNARK 消耗 SNARK。
参考资料
[1] Ruben Somsen 2020年10月博客 SNARKs and the future of blockchains
相关文章:
SNARKs 和 UTXO链的未来
1. 引言 SNARKs 经常被视为“解决”扩容问题的灵丹妙药。虽然 SNARKs 可以提供令人难以置信的好处,但也需要承认其局限性——SNARKs 无法解决区块链目前面临的现有带宽限制。 本文旨在通过对 SNARKs 对比特币能做什么和不能做什么进行(相对)…...
JavaScript设计模式 -- 外观模式
在实际开发中,往往会遇到多个子系统协同工作时,直接操作各个子系统不仅接口繁琐,还容易导致客户端与内部实现紧密耦合。**外观模式(Facade Pattern)**通过为多个子系统提供一个统一的高层接口,将复杂性隐藏…...
百达翡丽(Patek Philippe):瑞士制表的巅峰之作(中英双语)
百达翡丽(Patek Philippe):瑞士制表的巅峰之作 在钟表界,百达翡丽(Patek Philippe) 一直被誉为“世界三大名表”之一,并且常被认为是其中的至高存在。一句“没人能真正拥有一枚百达翡丽&#x…...
阿里云一键部署DeepSeek-V3、DeepSeek-R1模型
目录 支持的模型列表 模型部署 模型调用 WebUI使用 在线调试 API调用 关于成本 FAQ 点击部署后服务长时间等待 服务部署成功后,调用API返回404 请求太长导致EAS网关超时 部署完成后,如何在EAS的在线调试页面调试 模型部署之后没有“联网搜索…...
分享一款AI绘画图片展示和分享的小程序
🎨奇绘图册 【开源】一款帮AI绘画爱好者维护绘图作品的小程序 查看Demo 反馈 github 文章目录 前言一、奇绘图册是什么?二、项目全景三、预览体验3.1 截图示例3.2 在线体验 四、功能介绍4.1 小程序4.2 服务端 五、安装部署5.1 快速开始~~5.2 手动部…...
【练习】【双指针】力扣热题100 283. 移动零
题目 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出…...
QT 互斥锁
一、概述 1、在多线程编程中,为了防止多个线程同时访问共享资源而导致的不确定性和错误,经常会使用互斥锁(Mutex)进行保护。 2、QMutex是Qt提供的一个互斥锁类,用于确保在同一时间只有一个线程访问共享资源。 3、QM…...
什么是算法的空间复杂度和时间复杂度,分别怎么衡量。
1. 时间复杂度 时间复杂度衡量的是算法运行时间与输入规模之间的关系。它通常用大O记号(Big O Notation)表示,例如 O(1)、O(n)、O(n2) 等。 衡量方法: 常数时间复杂度 O(1):无论输入规模如何,算法的执行时…...
VMware Workstation 17.0 Pro创建虚拟机并安装Ubuntu22.04与ubuntu20.04(双版本同时存在)《包含小问题总结》
目录 一、创建虚拟机 二、下载安装22.04 三、一些配置问题总结(小屏,网络,复制贴贴等) 1、网络问题 2、sudo apt install net-tools出现无法定为软件包 3、小屏与ubuntu虚拟机与windows系统之间复制粘贴 4、安装终端:Termi…...
Windows 10 ARM工控主板CAN总线实时性能测试
在常规的Windows系统中支持CAN总线应用,需要外接CAN总线适配器,通常为USB转CAN模块或PCI接口CAN卡。实时性本身是CAN总线的显著特性之一,但由于Windows并非实时操作系统,应用程序容易受到系统CPU负载影响,导致调度周期…...
如何在不依赖函数调用功能的情况下结合工具与大型语言模型
当大型语言模型(LLM)原生不支持函数调用功能时,如何实现智能工具调度?本文通过自然语言解析结构化输出控制的方法来实现。 GitHub代码地址 核心实现步骤 定义工具函数 使用tool装饰器声明可调用工具: from langcha…...
【Linux AnolisOS】关于Docker的一系列问题。尤其是拉取东西时的网络问题,镜像源问题。
AnolisOS 8中使用Docker部署(全)_anolis安装docker-CSDN博客 从在虚拟机安装龙蜥到安装docker上面这篇文章写的很清晰了,我重点讲述我解决文章里面问题一些的方法。 问题1: docker: Get https://registry-1.docker.io/v2/: net/h…...
【Elasticsearch】Mapping概述
以下是Elasticsearch中提到的关于Mapping的各模块概述: --- 1.Dynamic mapping(动态映射) 动态映射是指Elasticsearch在索引文档时,自动检测字段类型并创建字段映射的过程。当你首次索引一个文档时,Elasticsearch会根…...
GPT-4o悄然升级:能力与个性双突破,AI竞技场再掀波澜
在大模型竞技场中,GPT-4o悄悄发布了全新版本,凭借其卓越的多项能力,迅速超越了DeepSeek-R1,成功登上并列第一的位置。这次更新不仅在数学(第6名)上有所突破,还在创意写作、编程、指令遵循、长文…...
如何选择合适的超参数来训练Bert和TextCNN模型?
选择合适的超参数来训练Bert和TextCNN模型是一个复杂但关键的过程,它会显著影响模型的性能。以下是一些常见的超参数以及选择它们的方法: 1. 与数据处理相关的超参数 最大序列长度(max_length) 含义:指输入到Bert模…...
C# SpinLock 类 使用详解
总目录 前言 SpinLock 是 C# 中一种轻量级的自旋锁,属于 System.Threading 命名空间,专为极短时间锁竞争的高性能场景设计。它通过忙等待(自旋)而非阻塞线程来减少上下文切换开销,适用于锁持有时间极短(如…...
【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题
【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题 【承接商业广告,如需商业合作请+v17740568442】 文章目录 【linux】在 Linux 上部署 DeepSeek-r1:32/70b:解决下载中断问题问题描述:解决方法方法一:手动中断并重启下载方法二:使用 Bash 脚本自动化下载在…...
机器学习所需要的数学知识【01】
总览 导数 行列式 偏导数 概理论 凸优化-梯度下降 kkt条件...
4.【线性代数】——矩阵的LU分解
四 矩阵的LU分解 1. AB的逆矩阵2. 转置矩阵3. ALU3.1 2x2矩阵3.2 3x3矩阵3.3 nxn的矩阵分解的次数? 1. AB的逆矩阵 { ( A B ) ( B − 1 A − 1 ) I ( B − 1 A − 1 ) ( A B ) I ⇒ ( A B ) − 1 B − 1 A − 1 \begin{cases} (AB)(B^{-1}A^{-1}) I\\ (B^{-1}A^…...
【清晰教程】本地部署DeepSeek-r1模型
【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面-CSDN博客 目录 Ollama 安装Ollama DeepSeek-r1模型 安装DeepSeek-r1模型 Ollama Ollama 是一个开源工具,专注于简化大型语言模型(LLMs)的本地部署和管理。它允许用户在本地计算机…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
