使用Tendermint开发一条独立的区块链(0)

本文介绍了如何使用Tendermint开发一条独立的区块链。Tendermint是一个具有拜占庭容错机制的可定制协议区块链,它通过ABCI接口允许用户自定义协议。只需实现ABCI接口并定义状态结构,开发者就可以快速启动一条多服务器部署的区块链。此外,官方库支持创建RPC服务器,简化了区块链逻辑集成。
摘要由CSDN通过智能技术生成

根据下面的内容安装Tendermint:
https://github.com/tendermint/tendermint/blob/master/docs/introduction/install.md

Tendermint

什么是Tendermint?

Tendermint是具有拜占庭容错机制的可定制协议区块链。

Tendermint暴露了自身的abci(Application BlockChain Interface)接口,允许用户定制属于他们自己的协议。

两个Tendermint终端互相承认,如果他们的协议是一致的.这将使得开发者很容易完成一条可以在多台服务器上部署的符合实验需求的区块链.

Minimum Functional

获取一个能够启动的区块链,只需要实现一个接口abci, 自定义一个application,让它内联types.BaseApplication,任意重载自己想重载的函数,就能启动。

State

先定义存储到database中的状态结构

type NSBState struct {
   
	db              dbm.DB
	ActionRoot      trie.MerkleHash `json:"action_root"`
	MerkleProofRoot trie.MerkleHash `json:"merkle_proof_root"`
	ActiveISCRoot   trie.MerkleHash `json:"active_isc_root"`
	Height          int64           `json:"height"`
	AppHash         []byte          `json:"app_hash"`
}

func loadState(db dbm.DB) NSBState {
   
	stateBytes := db.Get(stateKey)
	var state NSBState
	if len(stateBytes) != 0 {
   
		err := json.Unmarshal(stateBytes, &state)
		if err != nil {
   
			panic(err)
		}
	}
	state.db = db
	return state
}

func saveState(state NSBState) {
   
	stateBytes, err := json.Marshal(state)
	if err != nil {
   
		panic(err)
	}
	state.db.Set(stateKey, stateBytes)
}

然后自定义application.

type NSBApplication struct {
   
	types.BaseApplication
	state NSBState
	
	ValUpdates []types.ValidatorUpdate
	logger log.Logger
}

func NewNSBApplication(dbDir string) (*NSBApplication, error) {
   
	name := "nsb"
	db, err := dbm.NewGoLevelDB(name, dbDir)
	if err != nil {
   
		return nil, err
	}

	state := loadState(db)

	return &NSBApplication{
   
		state: state,
		logger: log.NewNopLogger(),
	}, nil
}

实现abci接口,这里直接复制kvstore的内容,以后有需要可以再改。

func (nsb *NSBApplication) Info(req types
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值