跨链Cosmos(12) Cosmos插件
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨链Cosmos(12) Cosmos插件相关的知识,希望对你有一定的参考价值。
Tendermint 有一个插件模块,我们可以实现 plugin 中接口,在 ibc 插件中执行跨链交易。
1. plugin 接口的定义
//与 abci 接口很类似
type Plugin interface {
// Name of this plugin, should be short.
Name() string
// Run a transaction from ABCI DeliverTx
RunTx(store KVStore, ctx CallContext, txBytes []byte) (res abci.Result)
// Other ABCI message handlers
SetOption(store KVStore, key, value string) (log string)
InitChain(store KVStore, vals []*abci.Validator)
BeginBlock(store KVStore, hash []byte, header *abci.Header)
EndBlock(store KVStore, height uint64) abci.ResponseEndBlock
}
2. deliverTx 时将 ibc 交易交给 plugin
// ABCI::DeliverTx
func (app *BaseApp) DeliverTx(txBytes []byte) (res abci.Result) {
// Exec tx
switch tx := tx.(type) {
case *types.SendTx:
// 执行正常交交易
case *types.AppTx:
// 执行plugin中的交易
plugin := pgz.GetByName(tx.Name)
res = plugin.RunTx(cache, ctx, tx.Data)
return res
default:
return abci.ErrBaseEncodingError.SetLog("Unknown tx type")
}
return res
}
以上是关于跨链Cosmos(12) Cosmos插件的主要内容,如果未能解决你的问题,请参考以下文章