|
|
@ -0,0 +1,102 @@ |
|
|
|
package consensus |
|
|
|
|
|
|
|
import ( |
|
|
|
abci "github.com/tendermint/tendermint/abci/types" |
|
|
|
"github.com/tendermint/tendermint/libs/clist" |
|
|
|
mempl "github.com/tendermint/tendermint/mempool" |
|
|
|
"github.com/tendermint/tendermint/proxy" |
|
|
|
sm "github.com/tendermint/tendermint/state" |
|
|
|
"github.com/tendermint/tendermint/types" |
|
|
|
) |
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
type emptyMempool struct{} |
|
|
|
|
|
|
|
var _ mempl.Mempool = emptyMempool{} |
|
|
|
|
|
|
|
func (emptyMempool) Lock() {} |
|
|
|
func (emptyMempool) Unlock() {} |
|
|
|
func (emptyMempool) Size() int { return 0 } |
|
|
|
func (emptyMempool) CheckTx(_ types.Tx, _ func(*abci.Response), _ mempl.TxInfo) error { |
|
|
|
return nil |
|
|
|
} |
|
|
|
func (emptyMempool) ReapMaxBytesMaxGas(_, _ int64) types.Txs { return types.Txs{} } |
|
|
|
func (emptyMempool) ReapMaxTxs(n int) types.Txs { return types.Txs{} } |
|
|
|
func (emptyMempool) Update( |
|
|
|
_ int64, |
|
|
|
_ types.Txs, |
|
|
|
_ []*abci.ResponseDeliverTx, |
|
|
|
_ mempl.PreCheckFunc, |
|
|
|
_ mempl.PostCheckFunc, |
|
|
|
) error { |
|
|
|
return nil |
|
|
|
} |
|
|
|
func (emptyMempool) Flush() {} |
|
|
|
func (emptyMempool) FlushAppConn() error { return nil } |
|
|
|
func (emptyMempool) TxsAvailable() <-chan struct{} { return make(chan struct{}) } |
|
|
|
func (emptyMempool) EnableTxsAvailable() {} |
|
|
|
func (emptyMempool) TxsBytes() int64 { return 0 } |
|
|
|
|
|
|
|
func (emptyMempool) TxsFront() *clist.CElement { return nil } |
|
|
|
func (emptyMempool) TxsWaitChan() <-chan struct{} { return nil } |
|
|
|
|
|
|
|
func (emptyMempool) InitWAL() {} |
|
|
|
func (emptyMempool) CloseWAL() {} |
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
type emptyEvidencePool struct{} |
|
|
|
|
|
|
|
var _ sm.EvidencePool = emptyEvidencePool{} |
|
|
|
|
|
|
|
func (emptyEvidencePool) PendingEvidence(int64) []types.Evidence { return nil } |
|
|
|
func (emptyEvidencePool) AddEvidence(types.Evidence) error { return nil } |
|
|
|
func (emptyEvidencePool) Update(*types.Block, sm.State) {} |
|
|
|
func (emptyEvidencePool) IsCommitted(types.Evidence) bool { return false } |
|
|
|
func (emptyEvidencePool) IsPending(types.Evidence) bool { return false } |
|
|
|
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// mockProxyApp uses ABCIResponses to give the right results.
|
|
|
|
//
|
|
|
|
// Useful because we don't want to call Commit() twice for the same block on
|
|
|
|
// the real app.
|
|
|
|
|
|
|
|
func newMockProxyApp(appHash []byte, abciResponses *sm.ABCIResponses) proxy.AppConnConsensus { |
|
|
|
clientCreator := proxy.NewLocalClientCreator(&mockProxyApp{ |
|
|
|
appHash: appHash, |
|
|
|
abciResponses: abciResponses, |
|
|
|
}) |
|
|
|
cli, _ := clientCreator.NewABCIClient() |
|
|
|
err := cli.Start() |
|
|
|
if err != nil { |
|
|
|
panic(err) |
|
|
|
} |
|
|
|
return proxy.NewAppConnConsensus(cli) |
|
|
|
} |
|
|
|
|
|
|
|
type mockProxyApp struct { |
|
|
|
abci.BaseApplication |
|
|
|
|
|
|
|
appHash []byte |
|
|
|
txCount int |
|
|
|
abciResponses *sm.ABCIResponses |
|
|
|
} |
|
|
|
|
|
|
|
func (mock *mockProxyApp) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx { |
|
|
|
r := mock.abciResponses.DeliverTxs[mock.txCount] |
|
|
|
mock.txCount++ |
|
|
|
if r == nil { //it could be nil because of amino unMarshall, it will cause an empty ResponseDeliverTx to become nil
|
|
|
|
return abci.ResponseDeliverTx{} |
|
|
|
} |
|
|
|
return *r |
|
|
|
} |
|
|
|
|
|
|
|
func (mock *mockProxyApp) EndBlock(req abci.RequestEndBlock) abci.ResponseEndBlock { |
|
|
|
mock.txCount = 0 |
|
|
|
return *mock.abciResponses.EndBlock |
|
|
|
} |
|
|
|
|
|
|
|
func (mock *mockProxyApp) Commit() abci.ResponseCommit { |
|
|
|
return abci.ResponseCommit{Data: mock.appHash} |
|
|
|
} |