FlyClient SPV client轻量化

news2025/1/24 17:59:13

这篇文章主要是为了构建一种轻客户端的算法。 如果使用SPV 的方式验证交易,每个client上面需要存储非常多的header。使用 proofs of proof-of-work 的方式,使得请客户端仅仅下载少量的区块头就能验证这一条链的安全性,然后再对包含交易的区块进行merkle proof 验证。

这篇工作主要对比的方式就是 NIPoPoW ,之后也会读一下这篇文章。

这篇文章还有一个贡献是,可以应对难度系数可变的情况。特别是在btc中,挖矿的难度稀释时刻在改变,这会导致一个攻击difficulty raising attack 难度提升攻击,但是这个攻击我之前没有听说过。并且网上的资料也不是很全,他主要是出现在一个文章中(L. Bahack, “Theoretical bitcoin attacks with less than half of the computational power (draft),” arXiv preprint arXiv:1312.7013, 2013.),之后读一下。

NIPoPoW 的方法中使用了超级块,虽然他也是只需要对数个区块头,但是区块头非常的大,还是会导致存储比较大的问题。

这篇文章中的方法也是选择使用 O(log n)数量的块头,来验证一条链的合法性。

文章中假设恶意节点无法发动51%攻击,恶意节点的数量与诚实节点的数量比值为 c。c < 1
当对手节点(恶意节点)控制诚实链的 c 比例的有效工作量时,可以创建分叉,但是如果分叉链和诚实的链一样长是做不到的,因为恶意节点的算力更少。因此恶意节点会将一些不合法的块塞到链中,用于伪造区块长度。

client 做verifier, 全节点做 prover。

OVERVIEW

verifier 会连接到许多的prover,但是至少有一个prover是诚实的,我们在这里并不考虑日蚀攻击的情况。

第一步,每个prover将自己的 last header 或者 block 发送给verifier,verifier 会首先选择最长的链进行验证。

概率采样协议

我们给出了一个概率密度函数 g(x) 用于表明在高度为x位置的块被采样的概率。

应对难度可变的情况
在难度可变的情况下,工作量并不在用链的长度来证明,而是根据链的累计难度来确定。
我们使用相同的概率密度函数 g(x),只不过此时x不在表明区块的高度,而是表明区块的相对总难度的累计难度。

MMR

比如,我们要查询高度为x的块,但是我们并没有保存整体的块头,恶意节点可能返回任意位置的有效区块来冒充x高度的区块,因此我们需要一个机制来进行保证。

同样的,我们要查询累计难度为 x 的区块,恶意全节点也可以进行造假。

为了确保区块的位置没有篡改,使用Merkle Mountain Range (MMR) 来覆盖所有的区块。保证区块的位置没有发生篡改。

为了准确记录区块的相对难度,也要对MMR 进行改造,以便于对难度进行记录。

Non-Interactive and Transferable FlyClient

在提到非交互性的时候,这篇文章在反复提到 (Fiat-Shamir heuristic) ,这篇文章也看一下。

让证明过程称为非交互的,使用的随机数通过hash 头推导出。
非交互性使 FlyClient 更为实用,因为:
(1) 全节点可以向许多轻客户端发送相同的证明,而无需重新计算;
(2) 客户端可以将证明转发给其他新的轻客户端,后者可以安全地验证证明的正确性。这就减少了证明者和验证者的计算量和带宽开销。

用于确定采样区块的随机性是通过应用于链头的安全散列函数(如 SHA-3)得出的。验证者不仅要检查查询本身,还要检查随机性是否正确。

Attacks Using Variable Difficulty

文章中提到了难度可变的情况下,容易发动难度可变攻击。但实际上,这个难度可变攻击并不是这里的主要解决的问题。在我的理解下,是说系统所认可的并不是链的长度,更是区块的难度。因此在考虑区块抽样的时候,要将衡量的尺度从区块的长度转移的相对难度。

对手模型

对手会从诚实的链上进行分叉,但是对手节点的算力只有诚实节点的c比例。算力不高,恶意节点可以创建和诚实链一样长的分叉,但是只有 c 比例的块是有效的,其他都是编造出来的。

但是对于比较短的分叉,这种分叉也有可能是合法的。

在 PoW 加密货币中,有效链是累计工作量证明最高的链,即最难创建的链。

区块采样策略

对于难度可变 和 不可变 主要的区别就是采样规则的问题,更准确是说采样空间的问题

最重链原则(也称为最大累积工作量原则)是一种在区块链网络中决定最有效、最可信链的方法,特别是在使用工作量证明(Proof of Work, PoW)机制的系统中。与最长链原则不同,最重链原则不仅考虑区块链的长度,也考虑了生成链上每个区块所需的工作量。这意味着,一条链如果拥有最大的累积工作量,即使它的区块数量不是最多的,也被视为主链。

而我们最主要的目标就是最小化采样的规模。

如果我们能够知道,链是从哪里分叉的,那么我们就可以在分叉之后充分的查询,才会有比较高的成功率。但是我们并不知道分叉点在哪里。

我们采用的采样概率密度函数,是一个递增的函数。这样也有道理,概率密度递增,使得更多的查询能够落在每两段的后半段,查询落在分叉之后的链上的概率更大,这样是有更好的效果的。原文中给出了证明,不得不说,原文中的证明非常扎实,但是我没怎么看懂。

因为我们主要在链的末尾进行采样,因此对手主要将生成的合法区块放在末尾。将不合法的区块往前方,这样被采样到假区块的概率才最小。

请添加图片描述

因此,如果我们进行一次查询,就能查询到虚假区块的概率为

请添加图片描述

我们要选择一个好的函数,使得p最大。

我们需要一种采样分布,它能让对手对使用哪个点作为分叉漠不关心。否则,查询就会浪费在一个最佳对手无论如何也不会使之无效的区块上。
请添加图片描述

这样一个概率密度函数使得,对手在初始位置和任一位置进行分叉时,我们捕获他们的概率相同

那么可以推导得到
请添加图片描述

将函数归一化,并且由于积分到1是无穷,因此只积分到 1 − δ 1-\delta 1δ ,最后 δ \delta δ 比例的区块,我们直接采样。

请添加图片描述

p = log ⁡ δ ( c ) p = \log_\delta(c) p=logδ(c)
经过计算,如果要满足安全,需要查询的区块的数量仅仅需要 log n 级

同样,当面对难度可变的情况时,还是使用相同的概率函数,但是x 从区块长度的概念转换到了区块难度的概念。

能够记录每个区块的相对难度,还要对MMR进行改造

每个节点都有 h , w , t , D s t a r t , D n e x t , n , d a t a h, w, t, D_{start}, D_{next}, n, data h,w,t,Dstart,Dnext,n,data

  • w是总难度
  • h 是哈希
  • t 时间戳
  • D 是难度目标,D_start 是当前块的难度, D_dest 是根据函数计算得到的下一区块的难度
  • n 是子树大小
  • data 可以填充任意字符串

请添加图片描述

实验

由于对于区块头的验证速度非常快,都是不需要1s就能验证,因此主要比较的就是验证需要的数据量的多少。

请添加图片描述

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

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

相关文章

【详识JAVA语言】String类2

常用方法 字符串的不可变性 String是一种不可变对象. 字符串中的内容是不可改变。字符串不可被修改&#xff0c;是因为&#xff1a; 1. String类在设计时就是不可改变的&#xff0c;String类实现描述中已经说明了 以下来自JDK1.8中String类的部分实现&#xff1a; String类…

2D/3D相机手眼标定总结

1. 九点标定 九点标定法的本质&#xff1a; 无需进行相机内参标定&#xff0c;只能识别x&#xff0c;y坐标&#xff0c;属于2D平面标定&#xff0c;在标定过程中z是未知的。 该算法的核心是仿射变换&#xff0c;即图像坐标系到机器人坐标系的2D仿射变换&#xff08;注意这里并不…

【python--比对两个列表获取列表中出现频率最高的词及频率】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Python &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; python练习题 完整代码 完整代码 from collections import Counter from data_keywords import extract_…

【Linux】文件传输工具lrzsz的安装与使用

目录 一、关于lrzsz 二、安装lrzsz 三、lrzsz的说明及使用 1、上传命令rz 2、下载命令sz 一、关于lrzsz 在开发的过程中&#xff0c;经常遇到 需要在 Linux 和 Windows 之间上传下载文件的情况 这时&#xff0c;一般都是使用 FTP 或者 WinSCP 工具进行上传下载, 虽然也能…

SRIO—IP讲解及说明

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、SRIO IP 概述1.1 逻辑层1.1.1 I/O 端口(I/O Port)1.1.2 消息端口(Messaing Port)1.1.3 用户自定义端口(User-Defined Port)1.1.4 维护端口(Maintenance Port)1.2 缓冲层1.3 物理层…

python+django+vue房屋租赁系统 8gwmf

房屋租赁系统在设计与实施时&#xff0c;采取了模块性的设计理念&#xff0c;把相似的系统的功能整合到一个模组中&#xff0c;以增强内部的功能&#xff0c;减少各组件之间的联系&#xff0c;从而达到减少相互影响的目的。如房源信息、预约信息、求租信息模块等[12]。 管理员后…

java工程师面试简历模板,2024谈一下当下最合适的Java架构

前言 这些算法&#xff0c;都是小编一点一点看的大佬们的方法&#xff0c;自己积累的. 如果有什么描述的不对的地方还望大佬赐教 多交流才能进步&#xff0c;加油&#xff0c;冲冲冲&#xff01;&#xff01;&#xff01; 目录 一、冒泡排序 二、选择排序 三、插入排序 四、快速…

Redis中的RDB和AOF持久化机制(一)

Redis持久化 RDB快照(snapshot). 在默认情况下&#xff0c;Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中.Redis可以进行设置,让它在"N秒内数据集至少有M个改动"这一条件被满足时&#xff0c;自动保存一次数据集。比如说&#xff0c;以下设置会让Redis…

软件测试需求分析如何编写?为什么要进行测试需求分析?

在软件开发的过程中&#xff0c;软件测试需求分析是至关重要的一个环节。测试需求分析是指对待测软件的需求进行全面细致的分析&#xff0c;明确软件测试的目标和范围&#xff0c;为测试活动的进行提供指导。通过对软件需求的详细分析&#xff0c;可以确保测试人员清楚了解软件…

配置与管理防火墙

配置与管理防火墙 1&#xff0c;概念&#xff1a;设置在不同网络或网络安全域之间的一系列部件的组合。 2&#xff0c;功能&#xff1a;保护内网中易手攻击的服务&#xff1b;控制内外网之间网络系统的访问&#xff1b;隐藏内网的IP地址及结构的细节&#xff0c;提高网络保护…

3月每日一题笔记

感谢我的好朋友的鼓励 3月4日 两种等价方式&#xff1f;都是错误的 ->加减中不能使用等价无穷小&#xff1f; ->不全面。 两项无穷小相减, 那么两项无穷小比值的极限不等于 1 时, 或者两项无穷小相加时, 其比值极限不等于 −1 时, 代数和差各项可以用等价无穷小替换 等…

基于springboot的海滨体育馆管理系统的设计与实现论文

摘 要 本基于Spring Boot的海滨体育馆管理系统设计目标是实现海滨体育馆的信息化管理&#xff0c;提高管理效率&#xff0c;使得海滨体育馆管理工作规范化、高效化。 本文重点阐述了海滨体育馆管理系统的开发过程&#xff0c;以实际运用为开发背景&#xff0c;基于Spring Boot…

LLM 系列——BERT——论文解读

一、概述 1、是什么 是单模态“小”语言模型&#xff0c;是一个“Bidirectional Encoder Representations fromTransformers”的缩写&#xff0c;是一个语言预训练模型&#xff0c;通过随机掩盖一些词&#xff0c;然后预测这些被遮盖的词来训练双向语言模型&#xff08;编码器…

7.使用os.Args或flag解析命令行参数

文章目录 一、os.Args二、flag包基本使用 Go语言内置的flag包实现了命令行参数的解析&#xff0c;flag包使得开发命令行工具更为简单。 一、os.Args 如果你只是简单的想要获取命令行参数&#xff0c;可以像下面的代码示例一样使用os.Args来获取命令行参数。 package mainimp…

彻底解析:企业为何必须采用CRM系统以及其五大作用

相关数据显示&#xff0c;CRM系统在欧美发达国家的普及程度高&#xff0c;超出80%的企业部署了CRM管理系统。然而在国内这个比例依然很小只有10几%&#xff0c;为什么企业需要CRM系统&#xff1f;因为CRM可以为公司实现线索管理、绩效管理、销售流程管理、市场营销管理以及数据…

【python开发】网络编程(下)

这里写目录标题 一、OSI7二、TCP和UDP协议&#xff08;一&#xff09;UDP和TCP示例代码1、UDP2、TCP &#xff08;二&#xff09;TCP三次握手和四次挥手 三、粘包1、实际案例12、实际案例23、实际案例3 四、阻塞和非阻塞五、IO多路复用 一、OSI7 在电脑和电脑之间进行数据传输…

Three.js--》探寻Cannon.js构建震撼的3D物理交互体验(二)

我们用three.js可以绘制出各种酷炫的画面&#xff0c;但是当我们想要一个更加真实的物理效果的话&#xff0c;这个时候我们就需要一个物理的库&#xff0c;接下来我们就讲解一下今天要学习的canon&#xff0c;它可以给我们提供一个更加真实的物理效果&#xff0c;像物体的张力、…

【center-loss 中心损失函数】 原理及程序解释(完)

文章目录 前言问题引出open-set问题抛出 解决方法softmax函数、softmax-loss函数解决代码&#xff08;center_loss.py&#xff09;原理程序解释 代码运用 如何梯度更新首先了解一下基本的梯度下降算法然后代码解释见下面train() 补充&#xff1a;外围知识&#xff08;models.py…

同步通信和异步通信(RabbitMq学习前篇)

MQ学习前篇 文章目录 MQ学习前篇1、同步和异步通讯1.1、同步通讯和异步通讯1.2、同步调用存在的问题1.3、异步调用方案1.4、异步通信的缺点 1、同步和异步通讯 学习mq之前&#xff0c;就要先知道同步通讯和异步通讯的区别。 1.1、同步通讯和异步通讯 同步通讯就像是打电话&am…

部署LVS集群之DR模式

直接路由模式----DR模式 理念&#xff1a; 直接路由&#xff08;是lvs的默认模式&#xff09; DR模式和隧道模式唯一的区别&#xff1a;dr模式这四台服务器在同一网段&#xff0c;隧道模式 &#xff1a;这四台服务器不在同一网段 客户端 ------->代理服务器------->真实…