区块链的可拓展性研究【04】分片

分片属于layer1扩容

区块链分片是一种技术实现,可以将区块链网络分成多个片段,每个片段负责处理一部分的交易数据。这种方法可以提高区块链网络的处理速度和吞吐量,降低交易确认时间和费用,同时也可以减轻节点运行负担。

在传统的区块链网络中,所有的交易都需要被所有节点共同验证和记录,这会造成网络拥堵和交易速度缓慢等问题。而区块链分片则将整个网络拆分成若干个小的片段,每个片段独立处理和验证其所包含的交易数据,从而大幅提高了网络的处理性能。

分片技术将整个区块链网络分成不同的分片,由各分片的节点负责处理所在分片的事务以及存储分片的状态,通过并行验证事务,整个区块链的吞吐量近似线性地提升;同时,随着节点数目的增加,整个网络的分片数量也随之增多,全网处理事务的能力将进一步提高。分片技术一般需要定义分片配置、片内和跨片共识协议、重配置方案等阶段,从而构成一个完整的分片区块链系统。

对于任何一种分片方式来说,需要解决如下两个主要问题:
内部共识的安全性
跨片操作的原子性

分类
网络分片 network sharding
网络分片是通过一定的组织方式将整个网络分成不同的分片,各个分片并行处理整个区块链中的部分交易,各部分的交易完全不相同,从而同时完成多笔交易的验证。
为了避免恶意节点过分填充一个分片、从而控制网络,通过可验证随机函数VRF,每隔一段时间随机抽取节点形成分片。
交易分片 transaction sharding
交易分片使得各个网络分片对交易具有更强的处理能力,将客户端的跨片交易分成若干个相关的子交易,不同分片的跨片易可以并行处理。
但是在基于UTXO的账本系统,一笔交易可能由多个输入和多个输出构成,因此一般通过交易的hash值分片。为了防止双花交易,必须要在所有分片间建立通讯。但是这种相互之间的通信开销可能会破坏交易分片的扩容效果。 ​ 在基于帐户的系统,每个交易都将具有发件人的地址,通过发件人地址分片,造成双花的两笔交易会在同一个分片中得到验证,因此不需要在不同的分片中建立通讯,避免额外的通讯开销。
状态分片 state sharding
状态分片是将各部分完全不同的账本分别存储在各个分片(分片内的节点往往存储同一版本的账本),整个分片网络组成一个完整的账本,可以减少各个节点存储账本的压力。
状态分片的关键是将整个存储区分开,让不同的分片存储不同的部分,每个节点只负责托管自己的分片数据,而不是存储完整的区块链状态。可以减少状态的冗余存储,使得整个区块链网络具有存储的可扩展性。 ​ 但是状态分片有以下几个问题需要解决,1)会导致频繁的跨片通讯;2)由于系统状态没有在所有分片中复制,因此网络一旦有交易的输入是来自脱机的分片,那么这笔交易将无法得到验证;3)而且由于每个分片只保留了状态的一部分,所以在每次重新调整网络的过程中,必须要考虑防止调整过大而导致在同步完成前可能会出现的整个系统失效的问题;

总体上来说,分片技术虽然在一定程度上有效地解决了区块链可扩展性问题,但还存在很多方面的不足需要改进。一方面,整个分片机制运行过程中有大量的时间用于处理交易以外的事情,组织分片、分片重配置需要花费大量的时间和开销。另一方面,状态分片是分片方式中极为难实现的一环,在状态分片的情境下,跨片交易的验证过程就变得极为困难,不同分片节点由于其存储账本不同而需要通过一定的方式进行交易转移或账本状态交流。

步骤

分片配置
对于整个网络来说,首先要实现网络分片,基于安全性和效率考虑,通常使用随机函数进行分片。
例如,可以让加入的节点去计算PoW,通过计算结果的hash分片;或者通过账号地址,等参数分片,其地址本身也是hash值,因此也相当于随机分片。分片重配置
为了保证各个分片的安全性以及防止节点之间作恶的行为发生,在一个分片纪元过后,一部分节点从原有分片中取出与其他分片中的节点进行交换。
虽然二次全随机分片能够尽量保证分片后区块链网络的安全性,但是在重配置的过程中整个网络对于交易的验证停滞,全网都要在重配置前后进行新旧账本的交接,无论在开销上还是时间上都大幅度降低整个区块链的性能。因此还有部分重分配和自由选择重分配的方式减少再次分片中的开销,但这都是以安全性为代价的。片内共识
在完成分片配置后,区块链需要进行交易共识,共识分为片内共识和跨片共识。片内共识要求同一分片内各个节点按照所在分片的协议进行共识和广播,最终得出整个分片的共识结果。片内共识协议主要分为基于PoW的片内共识协议和基于BFT的片内共识协议。跨片共识
跨片共识不同于片内共识,片内共识时片内各个节点经过彼此间广播可直接进行交流,由于所存储信息不相交,跨片共识时不同分片之间各节点在交易验证过程中需要交流账本状态,因此跨片交流的基本单位是各个分片,不同分片执行共同的跨片协议实现共识。跨片共识的主要方式有交易原子化、交易集中化和采用类路由协议。

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

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

相关文章

【出现模块node_modules里面包找不到】

#pic_center R 1 R_1 R1​ R 2 R^2 R2 目录 一、出现的问题二、解决办法三、其它可供参考 一、出现的问题 在本地运行 npm run docs:dev之后,出现 Error [ERR_MODULE_NOT_FOUND]: Cannot find package Z:\Blog\docs\node_modules\htmlparser2\ imported from Z:\Blo…

微信小程序base64与十六进制相互转换(使用btoa、atob方法报undefined)

前言:搜到很多方法都用到了btoa()、atob(),这两个属于Window 对象,在浏览器端可以直接使用,但是在小程序里面使用会报undefined。看到uniapp和微信小程序官方文档都提供了下面两个api,就想着经过ArrayBuffer 对象转换一…

入门Redis学习总结

记录之前刚学习Redis 的笔记, 主要包括Redis的基本数据结构、Redis 发布订阅机制、Redis 事务、Redis 服务器相关及采用Spring Boot 集成Redis 实现增删改查基本功能 一:常用命令及数据结构 1.Redis 键(key) # 设置key和value 127.0.0.1:6379> set …

解释AI决策,这10个强大的 Python 库记得收藏!

本文整理了10个常用于可解释AI的Python库,方便我们更好的理解AI模型的决策。 什么是XAI? XAI(Explainable AI)的目标是为模型的行为和决策提供合理的解释,这有助于增加信任、提供问责制和模型决策的透明度。XAI 不仅…

《深入浅出进阶篇》洛谷P3197 越狱——集合

洛谷P3197 越狱 题目大意: 监狱有 n 个房间,每个房间关押一个犯人,有 m 种宗教,每个犯人会信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。 答案对100,003 取模。…

Temu卖家如何获取流量?Temu新手卖家流量来源哪里?——站斧浏览器

流量对于每个平台来说都是很重要的,那么Temu卖家如何获取流量?流量来源哪里? Temu卖家如何获取流量? 1、优化产品标题和描述:在Temu平台上,买家通常通过搜索关键词来寻找他们感兴趣的产品。因此&#xff…

【数电笔记】58-同步D触发器

目录 说明: 1. 电路组成 2. 逻辑功能 3. 特性表、特性方程 4. 状态转移图 例题 5. 同步D触发器的特点 6. 集成同步D触发器:74LS375 74LS375内部原理 说明: 笔记配套视频来源:B站本系列笔记并未记录所有章节,…

服务器部署网易开源TTS | EmotiVoice部署教程

一、环境 ubuntu 20.04 python 3.8 cuda 11.8二、部署 1、docker方式部署 1.1、安装docker 如何安装docker,可以参考这篇文章 1.2、拉取镜像 docker run -dp 127.0.0.1:8501:8501 syq163/emoti-voice:latest2、完整安装 安装python依赖 conda create -n Emo…

Web 开发的 20 个实用网站

Web 开发的 20 个实用网站 作为一名前端开发工程师,我们一定使用过很多工具来提高自己的工作效率。它们可以是网站、文档或 JavaScript 库。 本文将分享30个有趣的网站。 JavaScript正则表达式可视化工具 https://jex.im/regulex/#!flags&re%5E(a%7Cb)*%3F%…

Centos7及Ubuntu系统安装指定版本dockerdocker-compose安装

Centos7系统 docker指定版本安装【官方文档步骤】 官方文档地址:https://docs.docker.com/engine/install/centos/ # 1.安装yum工具及设置docker-ce镜像库 sudo yum install -y yum-utils# 国外的镜像下载太慢了改成阿里云镜像库 sudo yum-config-manager --add-rep…

★102. 二叉树的层序遍历

102. 二叉树的层序遍历 很巧妙的,又学习了一种层次遍历的方法,就是说根据当前的队列的长度去遍历,遍历的当前队列的长度就是该层次的节点个数。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* Tr…

AIGC专题报告:AIGC助力大规模对象存储服务OSS的能效提升

今天分享的AIGC系列深度研究报告:《AIGC专题报告:AIGC助力大规模对象存储服务OSS的能效提升》。 (报告出品方:全球软件开发大会) 报告共计:18页 结合AI的智能运维助力能效提升 场景1:通过 AI…

SpringMVC-Servlet

依赖 <dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version> </dependency>web.xml 4.0版本 <?xml version"1.0" encoding"UTF-8"?> <…

Python 网络爬虫(三):XPath 基础知识

《Python入门核心技术》专栏总目录・点这里 文章目录 1. XPath简介2. XPath语法2.1 选择节点2.2 路径分隔符2.3 谓语2.4 节点关系2.5 运算符3. 节点3.1 元素节点(Element Node)3.2 属性节点(Attribute Node)

前端vue3——实现二次元人物拼图校验

文章目录 ⭐前言⭐vue3拖拽实现拼图&#x1f496; 思路分解&#x1f496; 布局结构&#x1f496; 拖拽函数&#x1f496; 校验函数&#x1f496; inscode整体代码 ⭐运行效果&#x1f496; 随机顺序&#x1f496; 拖拽中&#x1f496; 校验失败&#x1f496; 校验通过 ⭐总结⭐…

IDEA中.java .class .jar的含义与联系

当使用IntelliJ IDEA这样的集成开发环境进行Java编程时&#xff0c;通常涉及.java源代码文件、.class编译后的字节码文件以及.jar可执行的Java存档文件。 1. .java 文件&#xff1a; 1.这些文件包含了Java源代码&#xff0c;以文本形式编写。它们通常位于项目中的源代码目录中…

苍穹外卖项目笔记(8)— 缓存商品、购物车功能

前言 代码链接&#xff1a; Echo0701/take-out⁤ (github.com) 1 缓存菜品 1.1 问题说明 【注】很多时候系统性能的瓶颈就在于数据库这端 1.2 实现思路 通过 Redis 来缓存数据&#xff0c;减少数据库查询操作 【注】Redis 基于内存来保存数据的&#xff0c;访问 Redis 数据…

LeetCode208.实现Trie(前缀树)

我一开始想题目叫前缀树&#xff0c;是要用树吗&#xff1f;但是不知道用树怎么写&#xff0c;然后我就花了10多分钟&#xff0c;用了HashMap解了。map的key是word&#xff0c;value是一个放了word的所有前缀的set&#xff0c;这样search方法就非常简单了&#xff0c;只要看has…

Leetcode—2048.下一个更大的数值平衡数【中等】

2023每日刷题&#xff08;五十四&#xff09; Leetcode—2048.下一个更大的数值平衡数 实现代码 class Solution { public:int nextBeautifulNumber(int n) {for(int x n 1; ; x) {vector<int> cnt(10, 0);for(int y x; y > 0; y / 10) {cnt[y%10];}bool ok tru…

C++ Div3、Sqrt 函数高性能实现(带汇编指令集)

均采用魔法数字&#xff08;Magic Number&#xff09;实现&#xff0c;一个是经典求平方根函数所使用的魔法数字&#xff1a;0x5f375a86、0x5f3759df。 float Sqrt(float x) noexcept { /* 0x5f3759df */float xhalf 0.5f * x;int32_t i *(int32_t*)&x;i 0x5f375a86 - …