77 lines
1.5 KiB
Go
77 lines
1.5 KiB
Go
package types
|
|
|
|
import (
|
|
tmsp "github.com/tendermint/tmsp/types"
|
|
)
|
|
|
|
// Value is any floating value. It must be given to someone.
|
|
// Gas is a pointer to remainig gas. Decrement as you go,
|
|
// if any gas is left the user is
|
|
type Plugin interface {
|
|
SetOption(key string, value string) (log string)
|
|
RunTx(ctx CallContext, txBytes []byte) (res tmsp.Result)
|
|
Query(query []byte) (res tmsp.Result)
|
|
Commit() (res tmsp.Result)
|
|
}
|
|
|
|
type NamedPlugin struct {
|
|
Byte byte
|
|
Name string
|
|
Plugin
|
|
}
|
|
|
|
//----------------------------------------
|
|
|
|
type CallContext struct {
|
|
Cache AccountCacher
|
|
Caller *Account
|
|
Value int64
|
|
Gas *int64
|
|
}
|
|
|
|
func NewCallContext(cache AccountCacher, caller *Account, value int64, gas *int64) CallContext {
|
|
return CallContext{
|
|
Cache: cache,
|
|
Caller: caller,
|
|
Value: value,
|
|
Gas: gas,
|
|
}
|
|
}
|
|
|
|
//----------------------------------------
|
|
|
|
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
|
|
}
|