数字货币交易所开发源码丨数字货币交易所系统开发(详细及逻辑)

简介: Raft算法是目前使用最广泛的非拜占庭容错类共识算法。 Raft算法主要依靠投票机制和日志复制机制来实现节点间的共识。节点通过投票选出一个leader,由leader负责处理所有请求,再将请求以日志的方式复制到其他节点。

Solo

  1. 算法简介

SOLO是单节点无共识投票过程的“共识算法”。

  1. 算法用途

快速部署单节点运行,降低试用门槛;

供开发人员进行除网络和共识模块的全流程测试。

  1. 如何使用算法

部署一个长安链节点,将链配置的共识算法进行如下修改,清除数据启动即可:

共识配置

consensus:
# 共识类型(0-SOLO,1-TBFT,3-Maxbft,4-RAFT,10-POW)
type: 0
Raft
4 算法简介
Raft算法是目前使用最广泛的非拜占庭容错类共识算法。 Raft算法主要依靠投票机制和日志复制机制来实现节点间的共识。节点通过投票选出一个leader,由leader负责处理所有请求,再将请求以日志的方式复制到其他节点。

  1. 算法用途

不考虑恶意节点的多节点环境;

需要支持高TPS的环境。

  1. 共识接口说明

Raft 实现了长安链的ConsensusEngine接口。 Start 方法用来初始化Raft内部状态及启动Raft实例。 Stop 方法用来停止Raft实例。

type ConsensusEngine interface {
// Init starts the consensus engine.
Start() error

// Stop stops the consensus engine.
Stop() error
}

  1. Raft共识与核心引擎交互图

流程图如下:
Raft共识与核心引擎交互图

  1. 如何使用算法

Raft共识建议配置节点数为2n+1(n>=0),将链配置(参见配置模块,链配置章节)的共识算法进行如下修改,清除数据启动即可:

共识配置

consensus:
# 共识类型(0-SOLO,1-TBFT,3-HOTSTUFF,4-RAFT,5-DPoS,10-POW)
type: 4
nodes:

- org_id: "wx-org1.chainmaker.org"                                                                                                   
  node_id:                                                                                                                           
    - "QmcQHCuAXaFkbcsPUj7e37hXXfZ9DdN7bozseo5oX4qiC4"                                                  
- org_id: "wx-org2.chainmaker.org"                                                                                                   
  node_id:                                                                                                                           
    - "QmeyNRs2DwWjcHTpcVHoUSaDAAif4VQZ2wQDQAUNDP33gH"                                                  
- org_id: "wx-org3.chainmaker.org"                                                                                                   
  node_id:                                                                                                                           
    - "QmXf6mnQDBR9aHauRmViKzSuZgpumkn7x6rNxw1oqqRr45"                                                  

TBFT

  1. 算法简述

TBFT 是一种拜占庭容错的共识算法,可以在拜占庭节点数小于总数1/3的情况下,保证系统的安全运行。 TBFT 的每轮共识可以分为5个步骤:

NewRound: 共识投票的准备阶段,会初始化共识相关状态;

Proposal: 提案阶段,leader节点会打包区块,并广播给follwer节点;

Prevote: 预投票阶段,follower节点在收到proposal并验证proposal合法后,广播自己的prevote投票到其他节点;

Precommit: 预提交阶段,节点收到 >2/3 针对proposal的prevote投票后,广播自己的precommit投票到其他节点;

Commit: 提交阶段,节点收到 >2/3 针对proposal的precommit投票后,提交proposal中的区块到账本。

其中共识投票是指其中的Proposal,Prevote,Precommit三个阶段。 阶段图示如下:
共识算法-tbft算法阶段图

流程图如下:
共识算法-tbft流程图

  1. 与PBFT的区别

TBFT基于Tendermint算法,与PBFT的最大区别在于:PBFT有一个固定的leader节点打包交易,当leader节点故障的时候会 使用view-change子协议更换leader;而在TBFT中,leader是轮换的,每提交n个块(可以配置)leader会轮换成下一个节点。 因此,TBFT比PBFT有更好的公平性。

TBFT实现了随机性交易的剔除,当一个交易具有随机性执行结果的时候(该交易在不同节点执行结果不一致,比如说该交易调用合约时获取一个时间戳或者产生一个随机值),TBFT可以通过共识对该交易进行剔除,从而保证链的稳定性和正确性。从节点在收到提案进行验证的时候对这种随机性的交易的读写集进行判断,如果读写集不一致,则会在发起prevote投票的时候,加上对该交易进行剔除的投票。当收集到f+1个对该交易的剔除投票,则会调用核心引擎对该交易进行剔除。

  1. 与msgbus交互流程

Raft共识与核心引擎交互图
ProposaState: TBFT发送给核心引擎本节点在当前高度是否是leader节点,核心引擎判断是否需要打包区块
Proposal: 核心引擎打包区块并发送给TBFT
Verify: 当本节点收到主节点发来的区块后,向核心引擎验证区块读写集等信息
VerifyResult: 核心引擎返回给TBFT Verify的结果,当区块合法时,本节点将会投票给区块
Commit: TBFT完成共识后,向核心引擎发送提交区块的信号,核心引擎提交区块到账本
BlockInfo: 核心引擎告知TBFT已提交区块的高度等信息,TBFT进入下一个高度

相关文章
|
分布式计算 Java 大数据
大数据常用调度平台
大数据常用调度平台
533 0
汇编语言之常见的汇编指令
汇编语言之常见的汇编指令
1938 0
汇编语言之常见的汇编指令
成功解决百度网盘下载文件时遇到 下载总进度一直处于99.9%,显示一直下载不下来的问题
成功解决百度网盘下载文件时遇到 下载总进度一直处于99.9%,显示一直下载不下来的问题
成功解决百度网盘下载文件时遇到 下载总进度一直处于99.9%,显示一直下载不下来的问题
|
9月前
|
供应链 监控 数据可视化
探索 Leangoo 在电商新品运营中的创新应用与价值
Leangoo 提供了一套全面高效的电商新品运营解决方案,涵盖项目规划、营销推广、供应链管理及数据分析等方面,通过任务卡、甘特图等工具实现跨部门协作与进度追踪,助力电商企业在竞争中脱颖而出。
探索 Leangoo 在电商新品运营中的创新应用与价值
基于若依ruoyi-nbcio支持flowable流程分类里增加流程应用类型
基于若依ruoyi-nbcio支持flowable流程分类里增加流程应用类型
299 1
基于若依ruoyi-nbcio支持flowable流程角色,同时修改流转用户为username,流程启动做大调整(一)
基于若依ruoyi-nbcio支持flowable流程角色,同时修改流转用户为username,流程启动做大调整(一)
537 1
|
11月前
|
C++
C++番外篇——日期类的实现
C++番外篇——日期类的实现
331 1
|
编译器 C# Android开发
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
Uno Platform 是一个用于构建跨平台应用程序的强大框架,它允许开发者使用 C# 和 XAML 来创建适用于多个平台的应用
676 8
|
人工智能 缓存 安全
Golang 搭建 WebSocket 应用(七) - 性能、可用性
Golang 搭建 WebSocket 应用(七) - 性能、可用性
137 1
|
消息中间件 传感器 监控
AMQP 与物联网 (IoT) 应用的结合
【8月更文第28天】高级消息队列协议 (AMQP) 是一种开放标准的应用层协议,特别适合于物联网 (IoT) 场景中的消息传递。AMQP 提供了可靠的、可扩展的消息传输机制,能够处理来自大量设备的数据流。本文将探讨 AMQP 在 IoT 应用中的优势,并提供使用不同编程语言构建 AMQP 客户端的具体示例。
385 0

热门文章

最新文章