跨链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插件的主要内容,如果未能解决你的问题,请参考以下文章

跨链Cosmos普通交易流程

跨链跨链双雄Cosmos“系统框架”

跨链Cosmos(11) 消息结构

跨链Cosmos 网络拓扑

跨链Cosmos(10) IBC接口

跨链Cosmos之“跨链交互协议IBC”