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)的本地部署和管理。它允许用户在本地计算机…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...