cosmos-sdk/types/plugin.go

71 lines
1.4 KiB
Go

package types
import (
tmsp "github.com/tendermint/tmsp/types"
)
type Plugin interface {
SetOption(store KVStore, key string, value string) (log string)
RunTx(store KVStore, ctx CallContext, txBytes []byte) (res tmsp.Result)
InitChain(store KVStore, vals []*tmsp.Validator)
BeginBlock(store KVStore, height uint64)
EndBlock(store KVStore, height uint64) []*tmsp.Validator
}
type NamedPlugin struct {
Byte byte
Name string
Plugin
}
//----------------------------------------
type CallContext struct {
Caller []byte
Coins Coins
}
func NewCallContext(caller []byte, coins Coins) CallContext {
return CallContext{
Caller: caller,
Coins: coins,
}
}
//----------------------------------------
type Plugins struct {
byByte map[byte]Plugin
byName map[string]Plugin
plist []NamedPlugin
}
func NewPlugins() *Plugins {
return &Plugins{
byByte: make(map[byte]Plugin),
byName: make(map[string]Plugin),
}
}
func (pgz *Plugins) RegisterPlugin(typeByte byte, name string, plugin Plugin) {
pgz.byByte[typeByte] = plugin
pgz.byName[name] = plugin
pgz.plist = append(pgz.plist, NamedPlugin{
Byte: typeByte,
Name: name,
Plugin: plugin,
})
}
func (pgz *Plugins) GetByByte(typeByte byte) Plugin {
return pgz.byByte[typeByte]
}
func (pgz *Plugins) GetByName(name string) Plugin {
return pgz.byName[name]
}
func (pgz *Plugins) GetList() []NamedPlugin {
return pgz.plist
}