FlyClient SPV client轻量化

这篇文章主要是为了构建一种轻客户端的算法。 如果使用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就能验证,因此主要比较的就是验证需要的数据量的多少。

请添加图片描述

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

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

相关文章

【刷题】双指针入门

双指针入门 双指针283.移动零1089. 复写零202. 快乐数11. 盛最多水的容器Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff01;&#xff01;&#xff01; 双指针 双指针是非常经典的算法&#xff0c;包括但…

【python】对角线遍历

python系列文章目录 【python】基于cv2提取图片上的文本内容 【python】简单作图 【python】数组字符串等实用 【python】sort与sorted排序使用 【python】对角线遍历 python系列文章目录说明1.分析2.注意事项2.1 遍历2.2 区间2.3 顺序 3.代码实现 说明 给你一个大小为 m x n…

kerberos学习系列一:原理

1、简介 Kerberos 一词来源于古希腊神话中的 Cerberus —— 守护地狱之门的三头犬。 Kerberos 是一种基于加密 Ticket 的身份认证协议。Kerberos 主要由三个部分组成&#xff1a;Key Distribution Center (即KDC)、Client 和 Service。 优势&#xff1a; 密码无需进行网络传…

网站建设:承诺网站打开速度,这个要求合理吗?

很多甲方都要求网站的打开速度&#xff0c;这个要求合理吗&#xff1f;其实说合理也合理&#xff0c;说不合理也不合理。 承诺打开速度的合理性的一面 要求网站打开速度是一个合理的要求。网站的打开速度对于用户体验和网站的成功至关重要。以下是一些原因说明为什么网站打开速…

Python实现选择排序算法

Python实现选择排序算法 以下是使用Python实现选择排序算法的示例代码&#xff1a; def selection_sort(arr):n len(arr)for i in range(n):min_index i# 找到未排序部分的最小元素的索引for j in range(i 1, n):if arr[j] < arr[min_index]:min_index j# 将最小元素与…

【Python】新手入门(7):变量的数据类型转换

【Python】新手入门&#xff08;7&#xff09;&#xff1a;变量的数据类型转换 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1…

Locust中wait_time中匿名函数使用方法浅析

前言 翻出之前做个压测项&#xff0c;看到locust中对等待时间的实现方式感到好奇&#xff0c;于是总结下来。 源代码实现 def between(min_wait, max_wait):"""Returns a function that will return a random number between min_wait and max_wait.Example:…

【Linux网络】再谈 “协议“

目录 再谈 "协议" 结构化数据的传输 序列化和反序列化 网络版计算器 封装套接字操作 服务端代码 服务进程执行例程 启动网络版服务端 协议定制 客户端代码 代码测试 使用JSON进行序列化与反序列化 我们程序员写的一个个解决我们实际问题&#xff0c;满…

最强照片AI无损放大工具

使用人工智能的能力来放大图像&#xff0c;同时为惊人的结果添加自然的细节。 使用深度学习技术&#xff0c;A.I.GigaPixEL可以放大图像并填满其他调整大小的产品所遗漏的细节。 下载地址&#xff1a;最强照片AI无损放大工具.zip

LeetCode-第201题-数字范围按位与

1.题目描述 给你两个整数 left 和 right &#xff0c;表示区间 [left, right] &#xff0c;返回此区间内所有数字 按位与 的结果&#xff08;包含 left 、right 端点&#xff09;。 2.样例描述 3.思路描述 方法一&#xff1a;按位与&#xff0c;求两端数字二进制的公共前缀&…

数据库系列之:什么是 SAP HANA?

数据库系列之&#xff1a;什么是 SAP HANA&#xff1f; 一、什么是 SAP HANA&#xff1f;二、什么是内存数据库&#xff1f;三、SAP HANA 有多快&#xff1f;四、SAP HANA 的十大优势五、SAP HANA 架构六、数据库设计七、数据库管理八、应用开发九、高级分析十、数据虚拟化 一、…

18.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据分析工具数据与消息配置的实现

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 上一个内容&#xff1a;17.数据分析工具配置功能的实现 码云地址&#xff08;master 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/titan…

中医舌苔笔记

舌诊时按照舌尖-舌中-舌根-舌侧的顺序进行观察。 先看舌体再看舌苔&#xff0c;30秒左右。 如果一次望舌判断不清&#xff0c;可令病人休息3~5分钟后&#xff0c;重新观察一次 舌诊脏腑部位分属图 舌体 胖嫩而边有齿痕为气虚、阳虚。 薄白而润为风寒&#xff1b; 薄白而燥…

CVE-2020-27194:eBPF verifier 整数截断导致的越界读写

前言 影响版本&#xff1a;5.8.x 内核分支&#xff0c;v5.8.15 以及更低的版本 编译选项&#xff1a;CONFIG_BPF_SYSCALL&#xff0c;config 所有带 BPF 字样的编译选项 漏洞概述&#xff1a;eBPF 验证程序中进行 or 操作时&#xff0c;scalar32_min_max_or 函数将 64 位的值赋…

Android开发社招面试总结,Android程序员面试必备的知识点

导语 学历永远是横在我们进人大厂的一道门槛&#xff0c;好像无论怎么努力&#xff0c;总能被那些985,211 按在地上摩擦&#xff01; 不仅要被“他们”看不起&#xff0c;在HR挑选简历&#xff0c;学历这块就直接被刷下去了&#xff0c;连证明自己的机会也没有&#xff0c;学…

社区分享|中华保险基于MeterSphere开展接口自动化测试

中华联合保险集团股份有限公司&#xff08;以下简称为“中华保险”&#xff09;始创于1986年&#xff0c;是全国唯一一家以“中华”冠名的国有控股保险公司。截至2022年12月底&#xff0c;中华保险总资产为1006.06亿元&#xff0c;在全国拥有超过2900个营业网点&#xff0c;员工…

2024 年广西职业院校技能大赛高职组《云计算应用》赛项赛题第 3 套

#需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; #需要资源或有问题的&#xff0c;可私博主&#xff01;&#xff01;&#xff01; 某企业根据自身业务需求&…

模仿Gitee实现站外链接跳转时进行确认

概述 如Gitee等网站&#xff0c;在有外部链接的时候如果不是同域则会出现一个确认页面。本文就带你看看这个功能应该如何实现。 效果 实现 1. 实现思路 将打开链接作为参数传递给一个中间页面&#xff0c;在页面加载的时候判断链接的域名和当前网站是否同域&#xff0c;同域…

web学习笔记(二十六)

目录 1.JS执行队列 1.1JS是单线程 1.2Web Worker 1.3同步和异步 1.4JS执行机制 2.location对象 2.1什么是location对象 2.2url包含的信息 2.3location对象属性 2.4location对象的方法 3.navigator对象和history对象 3.1navigator对象 3.2history对象 1.JS执行队…

基于深度学习的苹果叶片病害检测系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 可以任意更换主干结构&#xff0c;支持几百种网络主干。 数据集&#xff1a;     网上下载的数据集&#x…