PBFT算法_持续更新

DNBFT共识——一种可动态调节网络节点数的PBFT优化方案 摘要 区块链类比于一种分布式存储系统,这种存储系统有可持续增长,不可篡改的特点。 区块链中的共识是多个节点对某一个状态达成一致的过程。本文研究BFT共识中的安全问题。 国内外对BFT共识的研究 [1]张迪.另一种BFT共识算法在区块链中的应用[J].传播力研究,2019,3(28):272. [2]戴鹏. 基于实用拜占庭共识算法(PBFT)的区块链模型的评估与改进[D].北京邮电大学,2019. ... 阅读详情

 

1、PBFT解决问题

BFT是区块链共识算法中,需要解决的一个核心问题。

以比特币和以太访为代表的POW,EOS为代表的DPOS,以及今后以太访逐渐替换的共识算法POS,这些都是公链算法,解决的是共识节点众多情况下的BFT;而PBFT是在联盟链共识节点较少的情况下BFT的一种解决方案。

 

PBFT算法由于每个副本节点都需要和其他节点进行P2P的共识同步,因此随着节点的增多,性能会下降的很快,但是在较少节点的情况下可以有不错的性能,并且分叉的几率很低。PBFT主要用于联盟链,但是如果能够结合类似DPOS这样的节点代表选举规则的话也可以应用于公链,并且可以在一个不可信的网络里解决拜占庭容错问题,TPS应该是远大于POW的。



作者:ether029
链接:https://www.jianshu.com/p/78e2b3d3af62
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。



作者:ether029
链接:https://www.jianshu.com/p/78e2b3d3af62
来源:简书
 

2、过程


首先了解一下几个基本概念:(从区块链的视角)

  • replica:即区块链节点,提供“副本复制”服务
  • client:向primary发起请求的客户端节点,在区块链中往往跟primary合二为一
  • primary:区块发起者,在收到请求后生成新区块并广播
  • backup:区块验证者,在收到区块后进行验证,然后广播验证结果进行共识
  • view:一个primary和多个backup形成一个view,在该view上对某个区块进行共识
  • sequence number(n):由primary指定的一个数字,可以理解为区块高度
  • checkpoint:如果某个sequence number对应的区块收到了超过2/3的确认,则称为一个checkpoint

另外,primary是所有节点轮流做的,每个view上都会选出一个新的primary。
 

三阶段协议是PBFT的核心,参见下图:

è¿éåå¾çæè¿°

从发起请求到最终收到reply,中间的共识过程需要经过3个阶段:

  1. pre-prepare:primary(主节点)收到请求,生成新区块并广播;
  2. prepare:所有replica(副节点)收到区块后,广播区块验证结果,同时等待接收超过2/3的节点的广播;
  3. commit:收到2/3的节点广播或者超时后,再次发送广播,同时再次等待接收超过2/3的节点的广播;

大致逻辑

第一次等待超过2/3的节点广播,是为了确认“已经有超过2/3的节点收到区块了”。但是这只是你自己知道,别人并不知道啊,因此需要再发送一次广播,告诉别的节点“我已经确认有超过2/3的节点收到区块啦”;而第二次等待超过2/3的节点广播,则是为了确认“已经有超过2/3的节点确认(有超过2/3的节点收到区块啦)”,此时说明已经达成共识,可以把该区块写到链上了。
 

详细步骤

https://blog.youkuaiyun.com/kojhliang/article/details/71515199

里面有高低水位、checkpoint的解释

Agentic-SecPBFT:多智能体强化学习增强PBFT共识,应对移动自组织网络挑战 分布式共识协议是区块链和分布式系统的核心基础,它确保多个独立节点在不可靠网络中对状态达成一致。实用拜占庭容错协议是解决此类问题的经典算法,但其设计通常假设网络拓扑相对稳定。在移动自组织网络等动态环境中,节点移动和网络分区导致链路质量剧烈波动,传统PBFT协议的三阶段通信流程面临严峻挑战,共识效率下降且易受恶意节点攻击。为提升协议在恶劣环境下的鲁棒性,多智能体系统与深度强化学习技术被引入,通过协作感知与动态决策来主动防御。Agentic-SecPBFT框架正是这一思路的工程实践,它构建了网络态势感知、节点信誉 阅读详情

相关推荐

区块链技术分享导读目录(持续更新)

还记得第一次接触到以太坊源码时,就被它作为“世界计算机”的宏伟构想深深吸引。实际上,可以认为以太坊是在试图屏蔽底层硬件的差异,制定统一的虚拟指令集,并利用去中心化维护整个系统的稳定性。此外,还可以把以太坊看成一个去中心化的App Store,任何人都可以自由发布自己的app而不用担心各种监管和下架,而且最重要的是,永不宕机。 随着在区块链行业研究的深入,越来越感觉到知识的纷繁庞杂,于是决定把这些学...

飞久 1671

PBFT算法

m0_46127787的博客 284

拜占庭容错协议(BFT, Byzantine Fault Tolerance)详解

拜占庭容错协议(BFT)在分布式系统中发挥着至关重要的作用,能够在存在故障或恶意行为的情况下保持一致性和可靠性。尽管BFT协议相对复杂,且在性能和实现上可能存在挑战,但其在关键应用领域的强一致性需求使其成为重要的技术选择。随着分布式系统的不断发展,BFT的应用和改进也在持续进行,为更广泛的场景提供了解决方案。

yymagicer的博客 3941

从传统服务端开发的角度来理解区块链共识算法. 为什么 pbft 是三分之二+1即2/3+1,paxos 是二分之一+1即1/2+1

  传统服务端开发人员对 paxos,zab,raft 可能更熟悉. zab 和 raft 本质上是两次选举.实际上这是拜占庭问题的简化版本,没有叛徒.但是通信通道可能被破坏.   公开环境中拜占庭错误容忍(bft b fault tolerance)会有破坏分子,例如加密货币中的 double pay 问题.   一言以蔽之,共识最好的设计是模块化,例如Notary,共识算法的选择与应用场景高度...

fei33423的专栏 2314

SpringBoot项目整合达梦数据库(MYSQL 转换 达梦数据库)

注意:当迁移过程中出现下面问题时,如有触发器或者外键,需要先关掉触发器和外键,然后进行迁移,不然会导致迁移失败。(2)dm.ini修改【#compatibility】的【COMPATIBLE_MODE】=4。3、添加用户:如果导入的DM数据库需要和MYSQL的用户一样,添加ROOT用户。方法一:服务器配置:设置系统兼容性(DM控制台工具),兼容MySQL。服务器配置又该有两种方式:①DM控制台工具修改;MYSQL的数据表转换成DM的数据表时,点击转换按钮。在这里操作:MYSQL数据库迁移至DM数据库。

m0_74824635的博客 2013

零外围电路!用CH340X实现ESP32一键下载的完整教程

本文详细介绍了如何利用CH340X系列USB转串口芯片实现ESP32的一键自动下载功能,无需任何外围逻辑控制电路。通过解析CH340X的增强型DTR/RTS功能,提供核心电路设计、电压匹配方案,并指导在Arduino IDE和PlatformIO中进行软件配置,帮助开发者构建简洁、可靠且低成本的ESP32下载方案。

gpu4optimizer的博客 775

PBFT算法简介

一、顾名思义 PBFT(Practical Byzantine Fault Tolerance)算法,是一个能够容忍拜占庭错误的分布式系统共识算法。 首先这里需要解释上面几个名词: 拜占庭错误: 所谓拜占庭错误,通俗来讲,可以理解成人为的故意作恶导致的错误,相对于普通的宕机错误,拜占庭错误是一种有目的的作恶行为。之所以叫拜占庭错误,是因为这类共识一开始是要解决Leslie Lamport提...

ganzr的博客 9496

Seurat 单细胞转录组测序数据分析教程(三)——python(scanpy)

文章参考至,做了一个更详细的解读。本教程探讨了 scanpy 的可视化可能性,分为三个部分:嵌入的散点图(例如 UMAP、t-SNE)使用已知标记基因鉴定簇差异表达基因的可视化在本教程中,我们将使用来自 10x 的数据集,其中包含来自PBMC的 68k 个细胞。Scanpy 在其分布中包括该数据集的简化样本,该数据集仅包含 700 个细胞和 765 个高度可变的基因。该数据集已经过预处理和 UMAP 计算。在本教程中,我们还将使用以下文献标记:B细胞:CD79A、MS4A1。

coffeeii的博客 5828

共识算法-PBFT

简介 PBFT简介 BFT(Byzantine Fault Tolerance)是区块链共识算法中需要解决的一个核心问题。例如,公有链网络中,比特币和以太访中用的是POW,EOS用的是DPOS。PBFT一般用于联盟链场景中,它是共识节点较少的情况下BFT的一种解决方案。 PBFT(Practical Byzantine Fault Tolerance)即:实用拜占庭容错算法。该算法是Mig...

wuzhengfei1112的博客 1万+

保姆级教程:在Jetson Nano上从零移植OV5647 CSI摄像头驱动(附完整调试记录)

本文提供了一份详细的Jetson Nano OV5647 CSI摄像头驱动移植教程,涵盖硬件准备、驱动框架分析、设备树配置、驱动移植核心修改点及调试技巧。通过V4L2框架和Tegra平台适配,开发者可快速实现摄像头驱动的移植与优化,适用于边缘计算和嵌入式视觉应用。

weixin_27869497的博客 518

提升仿真效率:Synopsys VCS高级编译选项优化技巧(2023最新版)

本文深入探讨了Synopsys VCS 2023版本中的高级编译选项优化技巧,帮助工程师提升仿真效率。通过并行编译、智能代码分析、精准覆盖率采样等策略,结合真实案例展示如何显著缩短仿真周期并优化资源使用,适用于数字芯片验证和大型SoC设计。

weixin_30338481的博客 114

对PBFT算法的理解

PBFT论文断断续续读了几遍,每次读或多或少都会有新的理解,结合最近的项目代码,对于共识的原理有了更清晰的认识。虽然之前写过一篇整理PBFT论文的博客,但是当时只是知道了怎么做,却不理解为什么。现在整理下思路,写一篇关于PBFT的理解。 1. 前提假定 1.1 同步模型 在分布式系统中谈论共识,首先需要明确系统同步模型是synchrony,asynchrony还是partial synchrony? synchrony: 节点所发出的消息,在一个确定的时间内,肯定会到达目标节点; asynchro

跨链技术践行者 1065

Embarcadero Dev-C++ 6.3安装教程【保姆级】

Embarcadero Dev-C++ 6.3安装教程,保姆级教程~

Thebest_jack的博客 1万+

(转)对PBFT算法的理解

转自: https://www.cnblogs.com/gexin/p/10242161.html PBFT论文断断续续读了几遍,每次读或多或少都会有新的理解,结合最近的项目代码,对于共识的原理有了更清晰的认识。虽然之前写过一篇整理PBFT论文的博客,但是当时只是知道了怎么做,却不理解为什么。现在整理下思路,写一篇关于PBFT的理解。 1. 前提假定 1.1 同步模型 在分布式系统中谈论共...

carltraveler的专栏 998

逆向分析顶象5代各类验证码类型的图片还原方法(附源码)

6.刷新滑块验证码图片,会进入之前的for循环断点,分析此处的代码会发现,该循环循环了处理了n字符串的值,取出n字符中的值并使用charCodeAt生成Unicode 编码,然后又调用了a函数,如果a函数返回true就会把之前生成的Unicode编码+1,a函数参数分别是c数组和Unicode取余32后的值,然后再把Unicode取余32后的值push进c数组,这里的n值为滑块碎片背景图的name。2.搜索"ranges":,会找到ranges赋值的地方,在此处代码断点,并点击跳过断点,结束此次调试。

老衲爱洗头的博客 1196

安装Office程序时无法安装的解决方案

本文主要介绍了安装Office程序时无法安装的解决方案,希望能对安装Office的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 前置步骤 2.2 方法一 2.3 方法二

weixin_43178406的博客 15万+

PBFT共识

本文转载自https://www.cnblogs.com/gexin/p/10242161.html PBFT论文断断续续读了几遍,每次读或多或少都会有新的理解,结合最近的项目代码,对于共识的原理有了更清晰的认识。虽然之前写过一篇整理PBFT论文的博客,但是当时只是知道了怎么做,却不理解为什么。现在整理下思路,写一篇关于PBFT的理解。 前提假定 1.1 同步模型 在分布式系统中谈论共识,首先需要明确系统同步模型是synchrony,asynchrony还是partial synchrony? sync

qq_36445477的博客 878

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

理解分布式一致性:拜占庭容错与PBFT

理解分布式一致性:拜占庭容错与PBFT拜占庭问题拜占庭容错BFTPBFT(Practical Byzantine Fault Tolerance)why 3f+1 ?PBFT 的优点PBFT 的缺点 之前的几篇文章我们讲了分布式协议里面的Paxos协议和Raft协议。这两个协议主要适用于可信节点的情况,所谓可信节点就是节点只会出现因为系统或者网络问题的宕机情况,不会有恶意节点。 那么如果有恶意节点...

程序那些事 7828

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Fabric 学习资料总结 持续更新

Fabric 学习资料总结 持续更新

TrueTechLabs 官方博客 550

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

智能体驱动的主动安全PBFT:为移动自组网构建自适应共识框架

拜占庭容错(PBFT)是分布式系统中确保一致性的核心共识算法,其原理是通过多阶段通信使诚实节点在存在恶意节点时仍能达成一致。在移动自组网等动态环境中,传统PBFT面临节点频繁变动与恶意行为难以实时应对的挑战。为解决此问题,将人工智能(AI)智能体深度融入共识流程,构建主动感知与防御能力,成为提升协议韧性的关键技术方向。通过引入多智能体深度强化学习(MADRL),设计行为审计、信誉管理等专用智能体,可实现从网络状态监控到共识策略动态调整的闭环。这种AI赋能的主动安全框架,尤其适用于对实时性与可靠性要求极高的应

weixin_30667649的博客 470

Byzantine setting 拜占庭环境

PBFT(Practical Byzantine Fault Tolerance)是一种拜占庭容错算法,它允许分布式系统在部分节点可能表现出任意(包括恶意)行为的情况下仍能达成一致。在联邦学习和分布式计算中,“Byzantine setting”(拜占庭环境)是指一个分布式系统中的部分参与者可能表现出不可预测或者恶意的行为。这个概念来源于分布式计算领域中的“拜占庭将军问题”,这是一个经典的容错问题,描述了一组将军需要通过信使在敌人围困的城堡之间达成共识来协调攻击时间的问题。

Python领域优质萌新学习笔记 1099

tendermint 源码阅读(初识tendermint)

这是tendermint的部分的第一个文章,我们先说一下tendermint的基本原理,以及阅读源码我们所要掌握的一些基本内容。 tendermint共识算法为PBFT,实用拜占庭容错算法,其内部的实现过程我们在以后阅读源码时会说。使用tendermint我们需要自己实现一个app,用来处理具体交易的逻辑程序。tendermint不会对任何交易做处理,也就是说,假如有一笔转账的交易,temderm...

weixin_42522985的博客 621
上一篇: 44_剑指offer_java_数字序列中某一位的数字
下一篇: 45_剑指offer_java_把数组排成最小的数
Longtermevolution
博客等级 码龄9年 113粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值