ELASTICO-A Secure Sharding Protocol For Open Blockchains

INTRO

在中本聪共识中,通过POW机制来公平的选举leader,不仅非常消耗power,并且拓展性也不好。现在比特币中是7 TPS,和其他的支付系统相比效率相差甚远。

当前的许多拜占庭共识协议,并不支持在一个开放的环境中使用,比如加密货币,主要有两方面的原因:

  1. 许多的算法都加上参与共识的节点都已经建立了身份认证,但是这个在一个开放系统中,比如比特币中是不存在的。所以比特币使用pow来竞争出块权。
  2. 拜占庭共识,比如PBFT需要二次方规模的消息传输规模,在有限的网络带宽下,限制了拓展性。因此最多支持几百个节点。

我们希望能够有随着节点规模增加,吞吐量线性增长的区块链协议

本文提出了 ELASTICO 分片协议,在一个有拜占庭节点的非许可链上进行拓展。将POW和拜占庭共识进行一个结合。
key idea: 将整个网络划分成更小的委员会,每个委员会处理不相交的交易集合。
我们要保证每个委员会的大小合理,以能够运行拜占庭共识协议。各个委员会并行共识多个交易集合。

本文是第一篇在非许可链上进行拜占庭容错,并执行分片的论文。

  • 能容忍拜占庭节点的比例 f = 1/4
  • 拓展能力和计算能力几乎程线性比例。委员会的数量和计算能力几乎成线性的拓展。
  • 消息的复杂度是 O ( n c 3 ) O(nc^3) O(nc3)

PROBLEM & CHALLENGES

本文的算法并不能直接保证双花问题,而要对他进行额外的检查。

应对女巫攻击

在非许可链中,每个恶意节点都可以虚拟出许多节点,并进行女巫攻击。因此要限制能够建立合法身份的节点数。
在中本聪共识中,为了应对女巫攻击,采用pow来获取记账权。

均匀分配委员会

要保证委员会是均匀分配的,不会使得过多的恶意节点备份到同一个委员会中从而支配该委员会的共识结果。
我们要有极高的概率保证(当然不是100%)在每个委员会中,诚实节点占大多数。

容忍每个成员认为的委员会成员不一致

在每个委员会成员严重,委员会的成员可能都不一致,也就是view不同。这可能是因为网络延迟或者拜占庭节点作恶导致的。但是我们必须要容忍这种情况。

solution overview

将整个网络划分成许多的委员会,每个委员会并行共识一个交易的集合。
final committee 将所有交易的集合进行聚合,并广播给所有的节点。final committe进行聚合时,只需要将各个交易集合的摘要进行聚合就可以了。
最后 final commitee 会生成一组随机字符串,用于下一个epoch的生成身份部分。
final committee 可以有指定 id的普通committee来担任。

流程

每个epoch都需要进行下面的五步:

  1. 建立合法身份和形成委员会。

    身份证明由 公钥、IP地址、POW的解构成。如果要建立身份,就需要提供pow的解,因此就会将网络中拥有身份的恶意节点数限制比例在f。
    为了防止每一轮中恶意节点提前解出POW, 我们在pow中设立了随机数 epochRandomness。并且要求在上一轮结束的时候这个随机数才会被公布出来。
    解POW问题就是解下面的问题:

请添加图片描述

将结果O取后 s 位得到的值 id,就表明了此节点被分配到那个åcommittee中了。

既然这个分配过程是随机的,那么该如何保证分到每committee中的作恶节点不超过 1/3呢?

我们假设 n’个 节点获得了身份,其中诚实节点比例小于 2/3的概率为:

请添加图片描述

给定一个安全性参数 λ \lambda λ , 我们可以计算一个 n 0 n_0 n0 , P r [ X ≤ 2 n ′ / 3 ] ≤ 2 − λ , ∀ n ′ ≥ n 0 Pr[X\leq2n'/3] \leq 2^{-\lambda}, \forall n'\geq n_0 Pr[X2n/3]2λ,nn0

  1. 得知委员会中其他成员。

    如果一个节点获得了合法身份,也知道他在那个委员会中了,该如何得知委员会中其他成员呢?
    最朴素的方法就是将自己的身份和委员会信息进行广播。但是这样消息的复杂度又达到了 O ( n 2 ) O(n^2) O(n2) .
    我们首先建立一个最初的委员会作为目录。
    在步骤1中,如果一个节点取得了身份,但是目前网络中获取身份的节点还不足 c个,就将自己的身份广播,并加入目录。
    当有目录已经建成了,新的建立身份的节点就将自己的身份发送给目录。
    由于每个节点都会将自己最先看到的c个节点当场目录,因此每个节点收到的委员会成员可能会有差异。
    但是,我们可以证明在同一个委员会中:

    1. 所有的诚实节点都是互相可见的
    2. 委员会中总的节点数不会超过 3/2c,存在差异的成员不会超过 c/2 个

如果一个目录节点,即将知道一个委员会的c个成员时,这时网络中的算力至多产生 c/2 个恶意节点身份。目录节点将这 c/2个恶意节点的身份分发给这个委员会的成员,造成每个委员会成员所取得的成员不一致。

但是这时,整个普通委员会中的作恶节点数量依旧不会超过 1/3,可以运行

这种方式通信复杂度只有 O ( n 2 ) O(n^2) O(n2)

请添加图片描述

  1. 委员会内部进行共识

在委员会内部进行共识,可以运行普通的BFT协议。将少有 c / 2 + 1 c/2+1 c/2+1 个节点签名的分片结果提交给 final committee
这保证了至少有一个诚实节点承认了交易集合。
提交给final comittee 的内容可能只是交易集合的 默克尔根

  1. final committee 广播

final committee中的节点将所有committee的结果聚合一个最终的结果,并进行共识。接着将共识的结果广播给所有的节点。

final committee 聚合和共识的内容,可能只是一个委员会共识结果的摘要,这样就将共识和数据传输过程分离。

这里的f=1/4是为了保证每个committee的规模不太大,理论上f只要小于 1/3就能满足PBFT的运行条件。但是这样就会导致每个committee的规模太大,丧失并行性。

  1. final committee 计算一组随机字符串

    第一阶段: final committee的各个节点生成一组随机字符串,并将 哈希发送到comittee中进行共识,从而 committee 对一组随机字符串的一组hash S \mathbb{S} S达成共识,并随着上一阶段进行广播。
    第二阶段:每个final committee 中的成员将自己的随机字符串进行广播。

每个节点收到至多 3c/2 个随机字符串,至少 2c/3 个随机字符串。节点会自动忽略和 S \mathbb{S} S 中不相符的随机字符串。

因为每个节点收到的一组字符串都不相同,每个节点都取其中的 c/2+1 个随机字符串进行或运算,作为自己计算 pow的nonce。 c/2+1 就可以保证,至少一个随机字符串来自诚实节点,这就可以保证 nonce的随机性。

如何避免双花

因为每个交易都有 input 和 output,只要保证相同 input的交易在一个分片中达成共识,就可以对双花进行检查。

因此可以让每个 committee 专门负责一部分范围的 input。

因为要对交易进行检查,每个节点需要维护一个 UTXO的数据库,因此需要将其他节点的共识结果下载下来,更新本地的UTXO 数据库。

如果不需要其他节点的数据,则不需要将本地共识的数据进行广播,在这种应用中 ELASTICO 会更有优势。

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

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

相关文章

C语言实现输入一个字符串,递归将其逆序输出

完整代码&#xff1a; // 输入一个字符串&#xff0c;递归将其逆序输出。如输入 LIGHT&#xff0c;则输出 THGIL #include<stdio.h> #include<stdlib.h> //字符串的最大长度 #define N 20//逆序输出字符串 void func(char *str){if (*str\0){//结尾时直接退出递归…

Java SE 学习笔记(十七)—— 单元测试、反射

目录 1 单元测试1.1 单元测试概述1.2 单元测试快速入门1.3 JUnit 常用注解 2 反射2.1 反射概述2.2 获取类对象2.3 获取构造器对象2.4 获取成员变量对象2.5 获取常用方法对象2.6 反射的作用2.6.1 绕过编译阶段为集合添加数据2.6.2 通用框架的底层原理 1 单元测试 1.1 单元测试概…

基于单片机的太阳跟踪系统的设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、设计的主要内容二、硬件电路设计2.1跟踪控制方案的选择2.1.1跟踪系统坐标系的选择2.2系统总体设计及相关硬件介绍…

服务熔断保护实践--Hystrix

概述 微服务有很多互相调用的服务&#xff0c;构成一系列的调用链路&#xff0c;如果调用链路中某个服务失效或者网络堵塞等问题&#xff0c;而有较多请求都需要调用有问题的服务时&#xff0c;这是就会造成多个服务的大面积失效&#xff0c;造成服务“雪崩”效应。 服务“雪…

十九、类型信息(2)

本章概要 Class 对象 类字面常量泛化的 Class 引用cast() 方法 Class 对象 要理解 RTTI 在 Java 中的工作原理&#xff0c;首先必须知道类型信息在运行时是如何表示的。这项工作是由称为 **Class**对象 的特殊对象完成的&#xff0c;它包含了与类有关的信息。实际上&#x…

JVM第二十三讲:Java动态调试技术原理

Java动态调试技术原理 本文是JVM第二十三讲&#xff0c;Java动态调试技术原理。转载自 美团技术团队胡健的Java 动态调试技术原理及实践&#xff0c;通过学习java agent方式进行动态调试&#xff0c;了解目前很多大厂开源的一些基于此的调试工具 (例如来自阿里开源的Arthas)。 …

微信小程序设计之主体文件app-wxss/less

一、新建一个项目 首先&#xff0c;下载微信小程序开发工具&#xff0c;具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后&#xff0c;注册小程序账号&#xff0c;具体注册方法&#xff0c;可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…

elementUI 特定分辨率(如1920*1080)下el-row未超出一行却换行

在1920*1080分辨率下&#xff0c; el-col 内容未超出 el-col 宽度&#xff0c;el-col 不足以占据一行&#xff0c;el-row 却自动换行了&#xff08;其他分辨率没有这个问题&#xff09;。 截图&#xff1a; 排查&#xff1a; el-col 内容没有溢出&#xff1b;没有多余的 pad…

拜耳阵列(Bayer Pattern)和解马赛克简介

拜尔阵列 典型的图像传感器&#xff08;例如我们在数码相机中使用的图像传感器&#xff0c;主要有CCD, CMOS&#xff09;由许多单独的光电传感器组成&#xff0c;所有这些传感器都会捕获光线。这些光电传感器本身能够捕获光的强度&#xff0c;但不能捕获其波长&#xff08;颜色…

CTF-Web(3)文件上传漏洞

笔记目录 CTF-Web(2)SQL注入CTF-Web(3)文件上传漏洞 1.WebShell介绍 (1)一句话木马定义 一种网页后门&#xff0c;以asp、php、jsp等网页文件形式存在的一种命令执行环境&#xff0c;而 一句话木马往往只有一行WebShell代码。 作用&#xff1a; 攻击获得网站控制权限 查看、修改…

如何防范AI等技术带来的诈骗风险?从技术、法律、教育等多方面入手

文章目录 前言什么是AI诈骗案例案例一案例二 AI诈骗的特点如何预防和应对AI诈骗建议后记 前言 互联网是一把双刃剑&#xff0c;这是我们常说的一个问题。 随着人工智能技术的快速发展&#xff0c;AI诈骗成为当今社会面临的新兴威胁。不法分子利用人工智能技术&#xff0c;以更…

Qt之实现支持多选的QCombobox

一.效果 1.点击下拉列表的复选框区域 2.点击下拉列表的非复选框区域 二.实现 QHCustomComboBox.h #ifndef QHCUSTOMCOMBOBOX_H #define QHCUSTOMCOMBOBOX_H#include <QLineEdit> #include <QListWidget> #include <QCheckBox> #include <QComboBox>…

面试算法43:在完全二叉树中添加节点

题目 在完全二叉树中&#xff0c;除最后一层之外其他层的节点都是满的&#xff08;第n层有2n-1个节点&#xff09;。最后一层的节点可能不满&#xff0c;该层所有的节点尽可能向左边靠拢。例如&#xff0c;图7.3中的4棵二叉树均为完全二叉树。实现数据结构CBTInserter有如下3种…

Vue 3 响应式对象:ref 和 reactive 的使用和区别

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是尘缘&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f449;点击这里&#xff0c;就可以查看我的主页啦&#xff01;&#x1f447;&#x…

Flink CDC 2.0 主要是借鉴 DBLog 算法

DBLog 算法原理 DBLog 这个算法的原理分成两个部分&#xff0c;第一部分是分 chunk&#xff0c;第二部分是读 chunk。分 chunk 就是把一张表分为多个 chunk&#xff08;桶/片&#xff09;。我可以把这些 chunk 分发给不同的并发的 task 去做。例如&#xff1a;有 reader1 和 re…

二叉树的最近公共祖先

题目&#xff1a; 样例&#xff1a; 输入 6 1 4 2 5 -1 -1 1 4 -1 -1 -1 -1 -1 3 输出 2 思路&#xff1a; 由题意&#xff0c;最近公共祖先就是&#xff0c;找出给出的两个结点的父结点 是谁。 这里有两种情况 1、给定的两个结点都是孩子结点 2、给定的两个结点&#xff…

【送书福利-第二十二期】《Vue.js 3企业级项目开发实战(微课视频版)》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

Table-GPT:让大语言模型理解表格数据

llm对文本指令非常有用&#xff0c;但是如果我们尝试向模型提供某种文本格式的表格数据和该表格上的问题&#xff0c;LLM更有可能产生不准确的响应。 在这篇文章中&#xff0c;我们将介绍微软发表的一篇研究论文&#xff0c;“Table-GPT: Table- tuning GPT for Diverse Table…

用示例和应用程序了解必要的Golang库

Golang&#xff0c;也被称为Go&#xff0c;因其简单性、性能和并发性支持而在开发人员中迅速流行起来。导致Go成功的关键因素之一是其丰富的库生态系统&#xff0c;可以简化开发并提供解决常见问题的解决方案。在本文中&#xff0c;我们将更仔细地查看一些必要的Golang库&#…

心血管疾病药物不良反应不容忽视,华大基因基因检测辅助降低风险!

随着医疗技术的不断进步&#xff0c;个体化用药已经成为药物治疗的新趋势。在此趋势下&#xff0c;华大基因基因检测基于药物基因组学的药物选择和个性化用药方案&#xff0c;为心血管疾病患者的临床治疗提供了新机会&#xff0c;同时可以更好地帮助患者控制心血管疾病&#xf…