SNARKs 和 UTXO链的未来

news2025/5/19 19:28:57

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DeepSeek 通过 API 对接第三方客户端 告别“服务器繁忙”

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 上一期分享了如何在本地部署 DeepSeek R1 模型,但通过命令行运行的本地模型,问答的交互也要使用命令行,体验并不是很好。这期分享几个第三方客户端,涵盖了桌…

性格测评小程序07用户登录

目录 1 创建登录页2 在首页检查登录状态3 搭建登录功能最终效果总结 小程序注册功能开发好了之后,就需要考虑登录的问题。首先要考虑谁作为首页,如果把登录页作为首页,比较简单,每次访问的时候都需要登录。 如果把功能页作为首页&…

deepseek多列数据对比,联想到excel的高级筛选功能

目录 1 业务背景 ​2 deepseek提示词输入 ​3 联想分析 4 EXCEL高级搜索 1 业务背景 系统上线的时候经常会遇到一个问题,系统导入的数据和线下的EXCEL数据是否一致,如果不一致,如何快速找到差异值,原来脑海第一反应就是使用公…

国产编辑器EverEdit - “切换文件类型”的使用场景

1 “切换文件类型”的使用场景 1.1 应用背景 一般的编辑器都是通过扩展名映射到对应的语法高亮规则的,比如:文件test.xml中的扩展名“xml"对应XML的语法高亮,在编辑器中打开test.xml就会给不同标识符显示不同的颜色。 但有时一些应用程…

在linux系统中安装Anaconda,并使用conda

系统 : ubuntu20.04 显卡:NVIDIA GTX1650 目录 安装Anaconda第一步:下载合适版本的Anconda1. 查看自己Linux的操作系统及架构命令:uname -a2. 下载合适版本的Anconda 第二步:安装Aanconda1. 为.sh文件设置权限2. 执行.sh文件2.1 .…

机械学习基础-5.分类-数据建模与机械智能课程自留

data modeling and machine intelligence - CLASSIFICATION 为什么我们不将回归技术用于分类?贝叶斯分类器(The Bayes Classifier)逻辑回归(Logistic Regression)对逻辑回归的更多直观理解逻辑 /sigmoid 函数的导数我们…

代码随想录刷题攻略---动态规划---子序列问题1---子序列

子序列(不连续)和子序列(连续)的问题 例题1: 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的…

OpenAI 放王炸,将发布整合多项技术的 GPT-5,并免费无限使用,该模型有哪些技术亮点

对于 ChatGPT 的免费用户,将可以无限制地访问 GPT-5,但仅限于标准的智能级别。该级别会设定滥用限制,以防止不当使用(意思就是你得付费嘛)。 OpenAI CEO Sam Altman 今天在 X 上透露了 GPT-4.5 和 GPT-5 的最新发展计划。 OpenAI 将发布代…

C 语言版--销售预测项目案例分享

以下是一个 C 语言销售预测项目案例,该项目模拟根据历史销售数据使用简单的移动平均法来预测未来的销售额。移动平均法是一种常见且基础的时间序列预测方法,它通过计算一定时间段内数据的平均值来预测未来的值。 项目需求 给定一系列历史销售数据,使用简单移动平均法预测下…

DC-7靶机渗透测试全过程

目录 前期准备 一、渗透测试 1.IP地址查询 2.端口地址收集 3.网页信息收集 社工收集信息 Drush直接修改账户密码 下载PHP插件 反弹shell 二、总结 前期准备 攻击机 : kali windows11 靶机: DC-7(调至NAT模式) 一、渗透测试 1.IP地址查询 …

什么是服务的雪崩、熔断、降级的解释以及Hystrix和Sentinel服务熔断器的解释、比较

1.什么是服务雪崩? 定义:在微服务中,假如一个或者多个服务出现故障,如果这时候,依赖的服务还在不断发起请求,或者重试,那么这些请求的压力会不断在下游堆积,导致下游服务的负载急剧…

解决IDEA报错:java 找不到符号

问题:IIDEA编译项目一直报 例如 java: 找不到符号 符号: 方法 getUserId()异常 的错误 解决方法: 1、刷新maven 2、clean package

基于SpringBoot的医院药房管理系统【源码+答辩PPT++项目部署】高质量论文1-1.5W字

作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

Ubuntu22.04通过Docker部署Jeecgboot

程序发布环境包括docker、mysql、redis、maven、nodejs、npm等。 一、安装docker 1、用如下命令卸载旧Docker: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done 2、安装APT环境依赖包…

基于Ubuntu+vLLM+NVIDIA T4高效部署DeepSeek大模型实战指南

一、 前言:拥抱vLLM与T4显卡的强强联合 在探索人工智能的道路上,如何高效地部署和运行大型语言模型(LLMs)一直是一个核心挑战。尤其是当我们面对资源有限的环境时,这个问题变得更加突出。原始的DeepSeek-R1-32B模型虽…

力扣 66.加一 (Java实现)

题目分析 给定一个数组,可以组成一个数字,将数字加一后,返回新数组 思路分析 首先跟着题目思路走,将数组按位*10可以得到数字,再加一,加一后按位%10,可以得到新的数组。但是此处数字会过大&…

Deep seek学习日记1

Deepseek最强大的就是它的深度思考,并且展现了它的思考过程。 五种可使用Deep seek的方式(应该不限于这五种,后续嵌入deepseek的应该更多,多了解一点因为官网容易崩~~): 1.deep seek官网 2.硅基流动silicon…

github用户名密码登陆失效了

问题: git push突然推代码需要登陆,但是用户名和密码正确输入后,却提示403 git push# Username for https://github.com: **** #Password for https://gyp-programmergithub.com: #remote: Permission to gyp-programmer/my-app.git denie…

SpringCloud整合seata,XA、AT、TCC、SAGA模式

参考资料: SpringCloud-Alibaba搭建 SpringCloud-nacos整合 Seata部署 参考demo(及学习资料) seata官网 参考视频​​​​​c(AT模式的UNDO_LOG讲的可能有点问题,但是很通俗易懂) 参考视频2&#xff…

案例-06.部门管理-根据ID查询

一.根据ID查询-接口文档 二.根据ID查询-Controller层 package com.gjw.controller;/*** 部门管理Controller*/import com.gjw.anno.Log; import com.gjw.pojo.Dept; import com.gjw.pojo.Result; import com.gjw.service.DeptService; import com.gjw.service.impl.DeptServi…