基于tendermint开发区块链

Tendermint共识算法 Tendermint共识算法是一种基于拜占庭容错(Byzantine Fault Tolerance,BFT)的共识机制,广泛应用于区块链技术中。它结合了PoS(权益证明)和PBFT(Practical Byzantine Fault Tolerance)算法的优点,旨在提供高效、安全且去中心化的共识解决方案。 阅读详情
  • Tendermint介绍

Tendermint包括两大组件,tendermint core和ABCI两大组件,开发者只要实现ABCI的接口即可定制开发自己的区块链逻辑。

  • 开发自己的代码

安装tendermint core

go get github.com/tendermint/tendermint/cmd/tendermint
go install ./cmd/...
go get github.com/Masterminds/glide
cd $GOPATH/src/github.com/tendermint/tendermint
glide install
go install ./cmd/...

编写ABCI代码

新增ezapp.go,实现CheckTx方法,对放入mempool的交易进行校验

package ezapp

import (
	"bytes"
	"encoding/binary"
	"github.com/tendermint/tendermint/abci/types"
)

var _ types.Application = (*Application)(nil)

type Application struct {
	types.BaseApplication
}

func NewApplication() *Application {
	return &Application{}
}
func (app *Application) CheckTx(req types.RequestCheckTx) types.ResponseCheckTx {
	bin_buf := bytes.NewBuffer(req.Tx)
	var x int32
	binary.Read(bin_buf, binary.BigEndian, &x)
	if  x < 0x04 {
		return types.ResponseCheckTx{}
	}
	return types.ResponseCheckTx{Code:1,Log:"bad tx rejected"}
}

修改abci-cli.go,见代码中注释ezapp处。

var RootCmd = &cobra.Command{
	Use:   "abci-cli",
	Short: "the ABCI CLI tool wraps an ABCI client",
	Long:  "the ABCI CLI tool wraps an ABCI client and is used for testing ABCI servers",
	PersistentPreRunE: func(cmd *cobra.Command, args []string) error {

		switch cmd.Use {
		//ezapp,增加一个ezapp,否则启动后一直会报错
		case "counter", "kvstore","ezapp": // for the examples apps, don't pre-run
			return nil
		case "version": // skip running for version command
			return nil
		}

		if logger == nil {
			allowLevel, err := log.AllowLevel(flagLogLevel)
			if err != nil {
				return err
			}
			logger = log.NewFilter(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), allowLevel)
		}
		if client == nil {
			var err error
			client, err = abcicli.NewClient(flagAddress, flagAbci, false)
			if err != nil {
				return err
			}
			client.SetLogger(logger.With("module", "abci-client"))
			if err := client.Start(); err != nil {
				return err
			}
		}
		return nil
	},
}
//增加addezappFlags方法
func addezappFlags() {
	ezappCmd.PersistentFlags().StringVarP(&flagPersist, "persist", "", "", "directory to use for a database")
}
func addCommands() {
	RootCmd.AddCommand(batchCmd)
	RootCmd.AddCommand(consoleCmd)
	RootCmd.AddCommand(echoCmd)
	RootCmd.AddCommand(infoCmd)
	RootCmd.AddCommand(setOptionCmd)
	RootCmd.AddCommand(deliverTxCmd)
	RootCmd.AddCommand(checkTxCmd)
	RootCmd.AddCommand(commitCmd)
	RootCmd.AddCommand(versionCmd)
	RootCmd.AddCommand(testCmd)
	addQueryFlags()
	RootCmd.AddCommand(queryCmd)
	// examples
	addCounterFlags()
	RootCmd.AddCommand(counterCmd)
	addKVStoreFlags()
	RootCmd.AddCommand(kvstoreCmd)

	//ezapp增加这两行代码
	addezappFlags()
	RootCmd.AddCommand(ezappCmd)
}

//ezapp,新增ezappCmd
var ezappCmd = &cobra.Command{
	Use:   "ezapp",
	Short: "ezapp demo example",
	Long:  "ezapp demo example",
	Args:  cobra.ExactArgs(0),
	RunE:  cmdEzapp,
}
func cmdEzapp(cmd *cobra.Command, args []string) error {
	var app types.Application
	app = ezapp.NewApplication()
	logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout))

	// Start the listener
	srv, err := server.NewServer(flagAddress, flagAbci, app)
	if err != nil {
		return err
	}
	srv.SetLogger(logger.With("module", "abci-server"))
	if err := srv.Start(); err != nil {
		return err
	}
	// Stop upon receiving SIGTERM or CTRL-C.
	tmos.TrapSignal(logger, func() {
		// Cleanup
		srv.Stop()
	})
	// Run forever.
	select {}
}
编译运行abci-cli
cd %GOPATH/src/github.com/tendermint/abci/cmd/abci-cli
go build
abci-cli ezapp
启动tendermint core
tendermint init
tendermint node
  • 调试区块链接口
curl -l http://localhost:26657/broadcast_tx_commit?tx=2

{
  "jsonrpc": "2.0",
  "id": -1,
  "result": {
    "check_tx": {
      "code": 0,
      "data": null,
      "log": "",
      "info": "",
      "gasWanted": "0",
      "gasUsed": "0",
      "events": [],
      "codespace": ""
    },
    "deliver_tx": {
      "code": 0,
      "data": null,
      "log": "",
      "info": "",
      "gasWanted": "0",
      "gasUsed": "0",
      "events": [],
      "codespace": ""
    },
    "hash": "D4735E3A265E16EEE03F59718B9B5D03019C07D8B6C51F90DA3A666EEC13AB35",
    "height": "7"
  }
}

 

Tendermint共识之Validator Tendermint本身是BFT+POS共识,CMT使用的时候改成了DPOS,但是无妨,Tendermint本身的ABCI接口已经定义好,至于具体实现成POS还是DPOS app层定义逻辑就好了 这里有两个概念区分一下: validator:所有参与共识验证的节点 proposer:出块节点,validator中选出来的出块节点 初始Validator 是设置在genesis.json文... 阅读详情

相关推荐

走进Cosmos之Tendermint

Cosmos是由Tendermint团队构建的开源社区项目,它的共识算法是基于POS(权益证明)和BFT(拜占庭容错)的共识协议。 Cosmos通过SDK的形式将共识算法和网络模块封装起来,形成一套开箱即用的区块链开发脚手架(Tendermint),本期将为大家带来Cosmos系列文章中Tendermint共识算法的介绍。

Hyperchain的博客 735

区块链时代的拜占庭容错:Tendermint(二)

原文题目:《Tendermint: Byzantine Fault Tolerance in the Age of Blockchains》原文作者:Ethan Buchman翻译:饶云坤校对:傅晓波本文为节选正文本章阐述Tendermint共识算法和用于原子广播( atomic broadcast)的相关区块链。拜占庭容错共识问题将被详细讨论,并且Tendermint共识的一个正式说明将以π-c...

weixin_34061482的博客 666

基于tendermint构建自己的区块链

从0到1,教你构建基于tendermint的区块链,包括P2P通讯,共识机制,代码分析安装

拜占庭共识Tendermint介绍及简单入门

Tendermint是什么 Tenermint 是一个软件,用于在多台机器安全一致地复制一个应用。所谓安全,指的是即使有多达 1/3 的机器出现任意故障的情况下, Tendermint 仍然能够正常工作。所谓一致,指的是每一个正常工作的机器都会有着同样的交易日志,计算相同的状态。安全一致的复制是分布式系统中一个至关重要的问题:从货币到选举,到基础设施规划,它在广泛应用的容错中承担了一个极其重要的...

niyuelin1990的博客 1万+

tendermint, 在Go中,Tendermint内核( BFT一致性).zip

tendermint, 在Go中,Tendermint内核( BFT一致性) Tendermint拜占庭容错 状态机复制系统。 或者链 。 分支测试覆盖母版 开发 注意:这里是alpha软件。 如果你想在生产中运行,请与我们联系。 Tende

IntelliJ IDEA 中git使用说明书

IntelliJ IDEA 中git使用说明书

junyang2012的博客 5389

区块链 PoS 共识——Tendermint

导言欢迎查阅 Tendermint 指南!本指南是新手学习 Tendermint 最好的材料什么是 Tendermint?Tendermint 是一种能够为多台机器安全和保证数据一致性复制应用程序的软件。从安全性层面看,分布式系统中即使 1/3 的随机节点即使宕机了,Tendermint 依然能够保证分布式系统正常运行。另外在数据一致性方面,故障的节点能够看到相同的事务日志并计算出相同的状态。安全...

omnispace的博客 3577

EDA的未来:当AI与Cadence Virtuoso相遇

本文探讨了AI技术与Cadence Virtuoso在EDA领域的融合,展示了如何通过生成式AI提升芯片设计效率。文章详细分析了Virtuoso设计环境的智能化演进、AI驱动的设计辅助功能实现路径,以及SKILL语言的进化方向,为工程师提供了未来EDA工具的发展趋势和实用案例。

weixin_28312391的博客 650

Tendermint 应用开发 - 全流程指南

softwareTendermint是用于在许多机器上安全、一致地 复制应用程序的软件。安全性多达1/3的机器以任意方式出现故障,Tendermint也能正常工作。一致性每台无故障的机器都会看到相同的事务日志并计算相同的状态。Tendermint是一种易于理解的、大部分是异步的拜占庭容错(BFT)共识协议。该协议遵循一个简单的状态机模型,如下所示:**共识逻辑: **在该协议中,参与者被称为验证者;他们轮流提出交易块并对其进行投票。每个高度上都有一个区块链中的区块被确认。

npu_nazi的博客 888

哨兵2植被参数反演避坑指南:SNAP中10m/20m分辨率选择与缺失波段处理

本文深入解析了使用SNAP软件进行哨兵2号植被参数反演时的关键操作与决策。核心在于理解SNAP生物物理处理器NNET10m与NNET20m的架构差异,根据是否需要反演冠层叶绿素含量(Cab)等参数,明智选择10米或20米分辨率工作流。文章详细指导了大气校正、波段重采样及处理L2A数据中B01波段“缺失”等常见问题的解决方案,为生态监测与精准农业应用提供清晰的避坑指南和完整实战流程。

wdx01234567的博客 262

LabVIEW实战:基于DAQmx的实时正弦波生成、采集与波形图动态显示

本文详细介绍了如何使用LabVIEW和DAQmx驱动实现实时正弦波的生成、采集与动态显示。通过USB-6008数据采集卡,结合队列缓冲机制和动态波形图显示技术,构建了一个完整的信号处理系统。文章包含硬件连接、软件配置、任务设置及常见问题排查,适合LabVIEW初学者和硬件控制开发者参考。

weixin_30872337的博客 124

详解Tendermint共识算法

Tendermint算法核心流程是什么?Tendermint隐含了什么锁机制? Tendermint 是 Tendermint公司开源的的一个项目,是一个pBFT算法的变体,Tendermint和pBFT的关系类似于Raft和Paxos的关系,Tendermint是pBFT的简化版。 算法核心流程 Tendermint 核心算法流程如下图所示: Tendermint算法先随机选出一些节点作为Validators(怎么选择验证节点?见后面的“如何选择验证节点”),然后选择其中一个valid..

跨链技术践行者 2077

Matlab 曲面平滑与点云处理

曲面平滑是一种常见的数学和计算机图形学技术,可以用来消除噪声、填补数据间隙,以及改善曲面的外观。在点云处理中,曲面平滑也被广泛应用于重建、拟合和可视化等领域。本文将介绍如何使用 Matlab 进行曲面平滑和点云处理,并提供相应的源代码。通过以上步骤,我们可以使用 Matlab 进行曲面平滑和点云处理。你可以根据具体需求调整参数和算法,以获得理想的曲面平滑效果。接下来,我们可以使用平滑算法对三角化的网格进行曲面平滑。以上代码将绘制原始点云和重建后的点云,并在图形中显示坐标轴和图例。表示平滑的迭代次数。

QfcaLinux的博客 752

深入Tendermint --- 出块节点选择

Tendermint本身是BFT+POS共识,在BFT之前需要先通过POS方法选出一个proposer来进行提案,proposer是从Validator节点中选出的,Validator是在创世区块(genesis.json)中配置的。 这里有两个概念区分一下: validator:所有参与共识验证的节点 proposer:出块节点,validator中选出来的出块节点 Proposer选择规则 validator可以配置一个或多个,但只会有一个Validator被选中作为proposer出块,那么如

跨链技术践行者 750

Matlab基于PSO-MVMD粒子群算法优化多元变分模态分解

Matlab基于PSO-MVMD粒子群算法优化多元变分模态分解

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 517

Python-自动化绘制股票价格通道线

创建更强大、更可靠的价格通道检测算法。

探索人工智能领域 948

区块链 --- Cosmos和Tendermint

Cosmos是Tendermint团队推出的一个支持跨链交互的异构网络,它最终的目标是创建一个区块链互联网,允许大量自主且易开发的区块链互相扩展和交互。基于Tendermint开发,采用的Tendermint共识算法,是一个类似实用拜占庭容错共识引擎,具有高性能、一致性、具备拜占庭容错等特点

谬也的博客 2126

第五节_PySide6基本窗口控件_主窗口和标签

本文介绍了PySide6中主窗口和标签控件的使用。主要内容包括: 窗口控件分类: QWidget是基础窗口部件,可作为独立窗口或子部件 QMainWindow提供标准应用程序框架,包含菜单栏、工具栏等 QDialog用于对话框,支持模态交互 主窗口创建: 演示了如何创建QMainWindow子类 实现了窗口居中、设置图标、状态栏等功能 提供了窗口几何信息的获取方法 QLabel标签控件: 继承自QFrame类 用于显示文本或图像 文章通过代码示例详细说明了主窗口的创建和使用方法,包括位置控制、图标设置等常见

su桥木的博客 1022

burrow, tendermint

burrow, tendermintTendermint ConfigTendermint config in BurrowMapping from Burrow config to Tendermint configSome Points Burrow is using Tendermint Core consensus engine for blockchain and P2P underly...

Kingwel Blog 214

Camera2Demo

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【区块链】Tendermint ——介绍及实战分析

本文转载至PPIO_Storage公众号。 我们将从理论解析和实战操作两个层面为大家介绍 Tendermint,可不要小瞧了这短短两行的目录,接下来的内容可是干货满满,精彩不断。 提到区块链,大家想必已然不陌生了,不过更多人想到的可能会是众所周知的 Bitcoin 和 Ethereum。的确,两者分别是区块链技术的起源和发展的代表,也是大家广泛传播和深入研究的对象。但是随着 B...

夏洛的克 2285

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Tendermint-1-基础概念

学习材料: https://mp.weixin.qq.com/s?__biz=Mzg3OTAwMjE1MA==&mid=2247484015&idx=1&sn=88edd9855a7acfbca72b03af1652b347&scene=21#wechat_redirect https://zhuanlan.zhihu.com/p/87370262 https://zhuanlan.zhihu.com/p/84962067 官网: https://tendermint.co.

文杰的博客 679

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

dsh-purge 红队评测插件:3 条安装路径走完 DeepSeek Harness 提示词补丁并验证生效

dsh-purge 装进本机官方 DeepSeek Harness 并点完「应用」后,你可以新开一轮会话,看清哪些拦截来自宿主策略而不是模型本身,也可以直接在聊天里发 `/purge status` 验活。本文只讲三件事:把插件装进 web、桌面或手动环境、确认补丁生效、常见卡点怎么处理。前提是 Node.js ≥18 和你确实在用官方宿主。 ## 自检区:先对号入座再动手 | 你的情况 |

gitblog_00230的博客 330

Tendermint Core 事件订阅指南:通过 WebSocket 订阅链上事件与交易

Tendermint Core 在区块提交、交易执行、验证人集合变化等关键节点会发布一系列事件,外部应用可以通过 WebSocket 实时订阅这些事件,用于链上数据监控、状态分析、共识可视化等场景。本文基于 [docs/tendermint-core/subscription.md](https://link.gitcode.com/i/ceef85032c6d10a63d895bc31f3623

gitblog_00399的博客 215

Tendermint: 共识概览

Tendermint 是一个易于理解,大部分操作为异步的 BFT 共识协议。下图是一个简单的状态机,它展示了协议遵循的规则:协议中的参与者叫着 “验证人”(validator)。他们轮流对交易区块进行提议,并对这些区块进行投票。区块会被提交到链上,每一个块占据一个“高度”(height)。提交块可能会失败,如果失败,协议就会开始下一轮的提交,并且一个新的验证人会继续提交那个高度的区块。要想成功提交一

Liu-Cheng Xu 9249

tendermint共识算法

tendermint共识算法 图中的Round/Height为直观意思,step指图中的每一状态(Proposal、PreVote…) 状态转换周期: NewHeight -> (Propose -> Prevote -> Precommit)+ -> Commit -> NewHeight ->... 每一个pre-commit(预提交)都必须由同一轮的波尔卡(polka)来证明。 验证者永远不会在同一高度提交冲突的区块,引入了一些locking(锁定)规则 每轮的

Quilan的博客 1351
上一篇: 产业区块链,技术赋能产业
下一篇: spring cloud 架构调优
ChainCode
ChainCode 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄11年 115粉丝 51原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值