package example import ( "sync" . "github.com/tendermint/go-common" "github.com/tendermint/go-merkle" "github.com/tendermint/go-wire" "github.com/tendermint/tmsp/types" ) type DummyApplication struct { mtx sync.Mutex state merkle.Tree } func NewDummyApplication() *DummyApplication { state := merkle.NewIAVLTree( wire.BasicCodec, wire.BasicCodec, 0, nil, ) return &DummyApplication{state: state} } func (dapp *DummyApplication) Open() types.AppContext { dapp.mtx.Lock() defer dapp.mtx.Unlock() return &DummyAppContext{ app: dapp, state: dapp.state.Copy(), } } func (dapp *DummyApplication) commitState(state merkle.Tree) { dapp.mtx.Lock() defer dapp.mtx.Unlock() dapp.state = state.Copy() } func (dapp *DummyApplication) getState() merkle.Tree { dapp.mtx.Lock() defer dapp.mtx.Unlock() return dapp.state.Copy() } //-------------------------------------------------------------------------------- type DummyAppContext struct { app *DummyApplication state merkle.Tree } func (dac *DummyAppContext) Echo(message string) string { return message } func (dac *DummyAppContext) Info() []string { return []string{Fmt("size:%v", dac.state.Size())} } func (dac *DummyAppContext) SetOption(key string, value string) types.RetCode { return 0 } func (dac *DummyAppContext) AppendTx(tx []byte) ([]types.Event, types.RetCode) { dac.state.Set(tx, tx) return nil, 0 } func (dac *DummyAppContext) GetHash() ([]byte, types.RetCode) { hash := dac.state.Hash() return hash, 0 } func (dac *DummyAppContext) Commit() types.RetCode { dac.app.commitState(dac.state) return 0 } func (dac *DummyAppContext) Rollback() types.RetCode { dac.state = dac.app.getState() return 0 } func (dac *DummyAppContext) AddListener(key string) types.RetCode { return 0 } func (dac *DummyAppContext) RemListener(key string) types.RetCode { return 0 } func (dac *DummyAppContext) Close() error { return nil }