代币合约流动性质押挖矿分红开发正式版丨代币合约流动性质押挖矿分红系统开发(详细方案及逻辑)

简介: consensus: # 共识类型(0-SOLO,1-TBFT,3-HOTSTUFF,4-RAFT,5-DPoS,10-POW) type: 4 nodes: - org_id: "wx-org1.chainmaker.org"

如何使用算法
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"                                                  

6.4. TBFT
6.4.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流程图

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

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

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

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

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

// Stop stops the consensus engine.
Stop() error
}
6.4.5. 数据结构
// TBFTMsgType defines different type message in tbft
enum TBFTMsgType {
propose = 0;
prevote = 1;
precommit = 2;
state = 3;
}

message TBFTMsg {
TBFTMsgType type = 1;
bytes msg = 2;
}

// Proposal defined a consesensus proposal which can
// be gossiped to other node and can be serilized
// for persistent store.
message Proposal {
string voter = 1;
int64 height = 2;
int32 round = 3;
int32 pol_round = 4;
Block block = 5;
EndorsementEntry endorsement = 6;
}

// VoteType represents the type of vote
enum VoteType {
VotePrevote = 0;
VotePrecommit = 1;
}

// Vote represents a tbft vote
message Vote {
VoteType type = 1;
string voter = 2;
int64 height = 3;
int32 round = 4;
bytes hash = 5;
EndorsementEntry endorsement = 6;
}

// Step represents the step in a round
enum Step {
NewHeight = 0;
NewRound = 1;
Propose = 2;
Prevote = 3;
PrevoteWait = 4;
Precommit = 5;
PrecommitWait = 6;
Commit = 7;
}
6.4.6. 配置参数
TBFT 可以通过在配置块中的ext_config字段配置相关参数:

“TBFT_propose_timeout”: 提案的超时时间,如10s, 1m;

“TBFT_propose_delta_timeout”: 每轮提案超时增加的时间,如10s, 1m;

“TBFT_blocks_per_proposer”: 每个节点连续出块数,如 "3"。

6.5. Maxbft
consensus-maxbft模块实现了hotstuff流水线共识,是一种优化后的三阶段BFT算法,当拜占庭节点数小于共识节点数的1/3时,可以保证系统的安全、高效运行、并提供状态的最终性保证;相较于其它BFT算法在如下方面进行了优化:

优化投票流程,使用星型网络减少网络通信量至O(n)

使用流水线模式简化三阶段共识消息类型:提案消息、投票消息

活性(liveness)规则与安全性(safetyRules)规则解耦

hotstuff是一种基于view的共识算法,每个view又称为level,每次进行view切换时,更新下一个view的proposer、触发新提案的生成,具有如下特性;

共识算法运转过程中,存在两个全局累加的变量:区块高度、共识view,指定的区块高度可能经历多轮共识才达成一致,当节点生成有效区块或当前共识view超时未达成一致,共识view递增但区块高度不变

hotstuff流水线共识算法中,当前共识view提案的投票发送下一个共识view的proposer节点,由下一个view的proposer收集投票信息组成QC,包含在下一个view生成的提案中

hotstuff共识算法为三阶段协议:prepareQC、precommitQC、commitQC

由于每一阶段都是对特定类型的消息收集投票,因此在流水线模式实现中,对投票流程和消息类型进行了优化

prepareQC:当共识节点接收视图为view的提案验证通过后,对view提案进行投票并发送给view+1的Leader,共识view+1的Leader基于view生成新提案时,将视图view投票聚合的QC包含在view+1的提案中,广播给其它共识节点,当其它共识节点收到view+1提案消息验证通过后,则表示网络中(n-f)个共识节点对视图view的提案达成第一轮共识(prepareQC)

precommitQC/lockedQC:视图view提案的precommitQC是由视图view+1提案的prepareQC间接确认的,即view+2的Leader将验证者集合对view+1提案的共识投票作为QC包含在view+2的提案中,其它共识节点收到view+2提案并验证通过时,表示对视图view+1提案的prepareQC阶段达成,对视图view提案的precommitQC阶段达成

commitQC:与precommitQC阶段达成类似,视图view提案的commitQC是通过对视图view+2提案的prepareQC间接达成的;共识节点收到视图view+2的提案、验证通过后进行投票,视图view+3的Leader接收投票聚合为QC、将其包含在view+3生成的提案中,广播给其它共识节点。当其它共识节点收到view+3的提案并验证通过时,表示链上验证集合对视图view提案的commitQC达成,此时会将view的提案提交上链、达成状态最终性

因此在上述三阶段中,网络中的共识消息类型被简化为2种:提案消息ProposalData,投票消息VoteData;且将precommitQC、commitQC阶段通过下一个视图的prepareQC阶段间接达成,减少了共识的交互流程

因此hotstuff流水线共识中,节点最少会缓存三个视图(view、view+1、view+2)的待提交提案信息,直至接受视图view+3提案时,将view的提案进行提交、并标识视图view+3的提案为待提交.

Maxbft 当前仅支持共识节点数 >= 4的场景,1)当创世节点数小于4时,节点无法成功启动;2)当链上共识节点数量动态减少时,导致链上节点数小于4的交易,执行失败

相关文章
|
算法 区块链
Defi+NFT质押流动性挖矿系统开发/LP质押挖矿功能开发解析
Defi+NFT质押流动性挖矿系统开发/LP质押挖矿功能开发解析
|
JavaScript 前端开发 区块链
DAPP代币合约流动性质押分红挖矿系统开发丨技术分析
DAPP代币合约流动性质押分红挖矿系统开发丨技术分析
|
区块链
defi/lp/nft/dapp代币预售合约流动性质押挖矿开发正式版,defi/lp/nft/dapp代币预售合约流动性质押挖矿系统开发(方案及详细)
 智能合约(Smart contract)是依托计算机在网络空间运行的合约,它以信息化方式传播、验证或执行合同,由计算机读取、执行,具备自助的特点。而区块链的去中心化,数据的防篡改,决定了智能合约更加适合于在区块链上来实现
|
存储 缓存 算法
流动性质押挖矿分红开发源码版,流动性质押挖矿分红系统开发技术详细及分析
共识模块主要由几个组件组成,世代epoch、提案消息缓存服务msgcache、共识消息处理引擎engine、共识消息验证器verifier、提案消息存储服务forest、投票处理器voter、共识活性服务pacemaker、wal存储wal、节点间共识信息同步服务compensator、各模块相互配合实现maxbft流水线共识算法
|
5G 区块链 vr&ar
DAPP智能合约流动性质押挖矿分红开发案例版丨DAPP智能合约流动性质押挖矿分红系统开发(开发案例及源码)
The metauniverse is an immersive digital world created by the combination of virtual reality,augmented reality and the Internet.The connotation and key technologies of the metauniverse require further breaking the space-time limit(5G and the Internet of Things),real immersion(VR),and value transmi
|
区块链
代币合约dapp开发丨代币合约dapp流动性质押挖矿分红系统开发实现技术案例及源码
 因为整个区块链系统是点对点的对等网络,没有统一的中心机构协调各个节点的行为,所以在生成区块时,各个节点的行为都是相互独立的,很有可能同时由多个矿工在同一区块高度生成出2个以上的区块来。这些区块打包的交易很可能是不一样的,同时满足条件的数字n不是唯一的,多个矿工之间生成的数字n是不一样的,但是同样是满足不等式的。在这种情况下,网络中的其他节点很可能同步到不同的区块数据,并且这些数据在数学上都是合法的、有效的。当不同的节点中的不同的区块作为当前最新区块时,就会存在分叉的情况,即不同的矿机对同一高度的区块生产了内存不一样的新区快,并且这些矿工都找到了满足不等式的数字n。
流动性质押挖矿矿池系统开发(开发案例)丨流动性质押挖矿矿池系统开发(详细及源码)
? (amountSpecified - state.amountSpecifiedRemaining, state.amountCalculated) (state.amountCalculated, amountSpecified - state.amountSpecifiedRemaining);
NFT流动性质押挖矿开发功能丨NFT流动性质押挖矿系统开发(开发详细)丨NFT流动性质押挖矿系统源码部署
  Liquidity mining is an incentive mechanism to promote the use of DeFi and a new decentralized token distribution mechanism.Most DeFi applications require users to lock tokens into the contract.The larger the amount of lock-in the contract has,the better financial services can be obtained.Liquidity
|
人工智能
defi流动性质押挖矿系统丨defi流动性质押挖矿系统开发(dapp开发)丨defi流动性质押挖矿源码版
 Liquidity mining,in short,is a token incentive plan designed to attract liquidity providers(LPs)to provide liquidity for specific transaction pairs/pools on AMM.
|
开发工具
defi/nft流动性质押挖矿分红开发正式版,defi/nft流动性质押挖矿分红系统开发(成熟案例及源码)
Liquidity mining usually requires pledge of loan vouchers or LP vouchers. That is to say, instead of pledging the original token to get the reward of liquidity mining, users need to pledge the original token in DeFi first, and then pledge the voucher to the specified contract to get the reward of li