|
package consensus
|
|
|
|
import (
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
"github.com/tendermint/tendermint/libs/clist"
|
|
mempl "github.com/tendermint/tendermint/mempool"
|
|
tmstate "github.com/tendermint/tendermint/proto/tendermint/state"
|
|
"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() error { return nil }
|
|
func (emptyMempool) CloseWAL() {}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
type emptyEvidencePool struct{}
|
|
|
|
var _ sm.EvidencePool = emptyEvidencePool{}
|
|
|
|
func (emptyEvidencePool) PendingEvidence(uint32) []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 }
|
|
func (emptyEvidencePool) AddPOLC(types.ProofOfLockChange) error { return nil }
|
|
func (emptyEvidencePool) Header(int64) *types.Header { return nil }
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// 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 *tmstate.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 *tmstate.ABCIResponses
|
|
}
|
|
|
|
func (mock *mockProxyApp) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx {
|
|
r := mock.abciResponses.DeliverTxs[mock.txCount]
|
|
mock.txCount++
|
|
if r == 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}
|
|
}
|