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就能验证,因此主要比较的就是验证需要的数据量的多少。

请添加图片描述

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

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

相关文章

华为机试 字符串最后一个单词的长度

本题中&#xff0c;我们是要从键盘输入一个字符串&#xff0c;然后返回这个字符串最后一个单词的长度。所以我们需要scancer类。我们需要注意的是&#xff0c;hasnext()和hasnextline()这两个函数的区别。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 pack…

力扣hot---岛屿数量

思路dfs&#xff1a; 首先通过两层for循环遍历每一个点&#xff0c;如果这个点为0或者2&#xff08;这个2是什么呢&#xff1f;是在遍历该点以及该点连成的这一片区域中&#xff0c;因为通过深度优先搜索&#xff0c;遍历该点就等于遍历这一片区域&#xff0c;遍历这篇区域中的…

玩家至上:竞技游戏设计如何满足现代玩家的需求?

文章目录 一、现代玩家需求分析二、以玩家体验为核心的游戏设计三、个性化与定制化服务四、强化社交互动与社区建设五、持续更新与优化《游戏力&#xff1a;竞技游戏设计实战教程》亮点编辑推荐内容简介目录获取方式 随着科技的飞速发展和游戏产业的不断壮大&#xff0c;现代玩…

通讯协议----USB2.0协议

USB2.0协议 USB总线的信号常见信号数据编解码和位填充 USB设备的检测USB设备的挂起USB传输PacketPacket包种类Data PID作用 TransactionTransfer控制传输(Control Transfers):中断传输(Interrupt Transfers)同步传输(Isochronous Transfers)大容量数据传输(Bulk Transfers)控制…

安装QT时,安装进程(qt.tools.perl)运行期间出现错误

安装QT时&#xff0c;安装进程(qt.tools.perl)运行期间出现错误 解决方法

【MySQL】数据库的操作(1)

【MySQL】数据库的操作&#xff08;1&#xff09; 目录 【MySQL】数据库的操作&#xff08;1&#xff09;创建数据库数据库的编码集和校验集查看系统默认字符集以及校验规则查看数据库支持的字符集查看数据库支持的字符集校验规则校验规则对数据库的影响数据库的删除 数据库的备…

06 - 镜像管理之:基础知识

1 了解镜像 Docker镜像是一个特殊的文件系统&#xff0c;除了提供容器运行时所需的程序、库、资源、配置等文件外&#xff0c;还包含了一些为运行时准备的一些配置参数&#xff08;如匿名卷、环境变量、用户等&#xff09;。 但注意&#xff0c; 镜像不包含任何动态数据&#…

信呼OA普通用户权限getshell方法

0x01 前言 信呼OA是一款开源的OA系统&#xff0c;面向社会免费提供学习研究使用&#xff0c;采用PHP语言编写&#xff0c;搭建简单方便&#xff0c;在中小企业中具有较大的客户使用量。从公开的资产治理平台中匹配到目前互联中有超过1W的客户使用案例。 信呼OA目前最新的版本是…

SpringSecurity接口权控(权限控制)

最近项目需要做“接口权限”控制&#xff0c;但不需要做RBAC (Role Based Access Control)这种大的业务。于是有下面的方案。 一、项目pom文件 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artif…

【HTML】HTML基础7.1(无序列表)

目录 标签 属性 效果 注意 标签 <ul> <li>列表里要装的东西</li> <li>列表里要装的东西</li> <li>列表里要装的东西</li> </ul> 属性 type&#xff1a; circle空心圆disc实心圆square方框 效果 circle空心圆效果…

operator-sdk入门(mac)

1. 安装operator-sdk brew install operator-sdk 2. 安装kubebuilder brew install kubebuilder 3.初始化一个operator脚手架 3.1 新建一个文件夹 redis-operator 3.2 执行初始化 operator-sdk init --domain lyl.com --repo github.com 参数介绍 可以通过operator-sdk --…

STM32CubeMX学习笔记11 ---RTC实时时钟

1、RTC实时时钟简介 STM32的实时时钟RTC是一个独立的定时器&#xff0c;RTC模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能&#xff0c;修改计数器的值可以重新设置系统当前的时间和日期 RTC模块和时钟配置系统&#xff08;RCC_B…

android开发教程百度网盘,成功入职网易月薪35K

前情 首先介绍一下自己的情况吧&#xff0c;由于当年高中年少轻狂&#xff0c;不努力&#xff0c;差二本线16分。我自己也没有意识到学历的区别&#xff0c;最终听了家里的安排上了一个专科&#xff0c;电气专业。 现在想想都很后悔&#xff0c;当年为什么没有自己的主见&…

Golang各版本的GC详解

go v1.3的标记清除法 清除的第一步&#xff1a;stw将可达对象标记删除未被标记对象 go v1.5三色标记法 从根节点出发&#xff0c;将下一个节点遍历为灰色&#xff0c;放入灰色集合中遍历灰色节点集合&#xff0c;把灰色能到达的节点标记为灰色&#xff0c;把自身标记为黑色&a…

【C语言】还有柔性数组?

前言 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。C99中&#xff0c;结构中的最后⼀个元素允许是未知⼤⼩的数组&#xff0c;这就叫做『柔性数组』成员。 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xf…

C if...else 语句

一个 if 语句 后可跟一个可选的 else 语句&#xff0c;else 语句在布尔表达式为 false 时执行。 语法 C 语言中 if…else 语句的语法&#xff1a; if(boolean_expression) {/* 如果布尔表达式为真将执行的语句 */ } else {/* 如果布尔表达式为假将执行的语句 */ }如果布尔表…

记录第一次使用QT

今晚和舍友准备搞一个QT网盘的项目&#xff0c;我之前也没有用过QT。在舍友的指导下&#xff0c;我安装了QT creator&#xff0c;然后完成了第一次的QT的编译运行&#xff0c;记录一下这激动的感觉&#xff08;2024-03-07)。 使用qmake进行的编译。qDebug进行输出调试hello qt…

掌握Nodejs高级图片压缩技巧提升web优化

掌握Nodejs高级图片压缩技巧提升web优化 在当今的数字时代,图像在网络开发中发挥着至关重要的作用。它们增强视觉吸引力、传达信息并吸引用户。然而,高质量的图像通常有一个显着的缺点——较大的文件大小会减慢网页加载时间。为了应对这一挑战并确保快速加载网站,掌握 Node…

经典算法----折半查找

二、经典算法之折半查找 很多同学对于二分法就是&#xff1a;一看就会&#xff0c;一写就废&#xff01;&#xff01;&#xff01;&#xff01; 易错点1&#xff1a;以下循环方式写哪一个&#xff1f; 方案一&#xff1a;while(left<right) 方案二&#xff1a;while(left…

【MATLAB】兔子机器人总系统_动力学模型解读(及simulink中的simscape的各模块介绍)

1、动力学模型 Rectangular Joint 控制平面上&#xff08;x&#xff0c;y轴&#xff09;的移动&#xff0c;去掉以后&#xff0c;机器人在原地翻滚不移动 Rigid Transform 坐标转换&#xff0c;B站视频已收藏 去掉&#xff0c;机体与地面贴合 此处的作用是设定机体的初…