石墨烯区块链(2)核心功能

2024-03-28 08:58
文章标签 功能 区块 核心 石墨

本文主要是介绍石墨烯区块链(2)核心功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 区块结构

链式区块的基本数据结构都是一棵树(考虑有分叉的情况),石墨烯的区块链也不例外,一个区块中包含上一个区块的id,每个区块的id为区块内容的MAC。
在这里插入图片描述

block由block header和transaction list构成。
1.1 block header

  • previous:前一个块的id
  • block_num
  • digest:块id
  • witness:出块者
  • transaction_merkle_root

1.2 transaction list
为本块打包的交易集合,transaction list的结构与其他区块链不一样。石墨烯的transaction list中的每个transaction并不只是一个交易的操作,而是支持多个operation的集合。
一个operation是一个基本操作的定义,如转账、投票等。
一个transaction里可以包含多个operation。但是这些在一个transaction里的operations依然保持事务的特性,也就是在同一个transaction里的operation要么都执行,要么都不执行。

石墨烯区块链没有独立的虚拟机,不支持智能合约。所有操作都由operation来定义,如gas计算、撮单等。如果需要扩展operation,只需要实现相应的接口即可。

2. 存储

石墨烯中的存储使用的是文件存储。

  • 所有数据都以文件的形式进行组织和管理,并没有使用数据库。
  • 存储框架需要实现数据的管理功能,石墨烯框架在启动和运行时,需要将大部分数据加载到内存,因此对内存的要求非常之高。

2.1 对象模型和索引模型

所有的对象实例都有一个全局唯一的id编号。
在这里插入图片描述

2.2 一个对象编号包括三部分内容

  • space_id:标识是否协议对象,正常都为1
  • type_id:表示对象类型
  • id为此类型是第几个创建的实例。

space id 占最高 8 位, type id 占中间 8 位, 最低 48 位是 id。
eg. id为1.2.12376。

石墨烯的对象索引实现其实使用的是vector和map,由于所有的索引数据都会加载到内存,所以B+树无法发挥减少IO的优势。

3. 共识

石墨烯的共识算法使用的是Dpos,系统中最重要的角色是witness和committee。

  • witness:通过投票产生的,系统有个witness维护时间周期,没到周期进行一次witness、committee等的更新。
  • Committee由得票最多的11个人组成,Committee的职责是修改系统参数,无法左右出块。
  • Witness负责出块。其中投票统计和洗牌过程决定了出块的witness。

在收到一个new block时,如果new block前一个block不是当前块,并且块高高于当前块高会进行分叉判断和处理:
step1. 找到两个叉的LCA。
step2. 回滚到LCA。
step3. 沿最长链,依次push_block()。
石墨烯通过记录每一步的undo日志,实现了操作的回滚。每出现切换分支时,先找到最近公共祖先进行回滚操作,然后执行新的block的操作。
在这里插入图片描述

这篇关于石墨烯区块链(2)核心功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/855114

相关文章

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J