diff --git a/evidence/pool.go b/evidence/pool.go index 2e7cd4704..cdc01398c 100644 --- a/evidence/pool.go +++ b/evidence/pool.go @@ -3,6 +3,7 @@ package evidence import ( "github.com/tendermint/tmlibs/log" + sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/types" ) @@ -13,16 +14,16 @@ type EvidencePool struct { evidenceStore *EvidenceStore - chainID string - lastBlockHeight int64 - params types.EvidenceParams + state sm.State + params types.EvidenceParams // never close evidenceChan chan types.Evidence } -func NewEvidencePool(params types.EvidenceParams, evidenceStore *EvidenceStore) *EvidencePool { +func NewEvidencePool(params types.EvidenceParams, evidenceStore *EvidenceStore, state sm.State) *EvidencePool { evpool := &EvidencePool{ + state: state, params: params, logger: log.NewNopLogger(), evidenceStore: evidenceStore, @@ -58,15 +59,25 @@ func (evpool *EvidencePool) AddEvidence(evidence types.Evidence) (err error) { // TODO: check if we already have evidence for this // validator at this height so we dont get spammed - // TODO + if err := sm.VerifyEvidence(evpool.state, evidence); err != nil { + return err + } + var priority int64 - /* - priority, err := sm.VerifyEvidence(evpool.state, evidence) - if err != nil { - // TODO: if err is just that we cant find it cuz we pruned, ignore. - // TODO: if its actually bad evidence, punish peer - return err - }*/ + /* // Needs a db ... + // TODO: if err is just that we cant find it cuz we pruned, ignore. + // TODO: if its actually bad evidence, punish peer + + valset, err := LoadValidators(s.db, ev.Height()) + if err != nil { + // XXX/TODO: what do we do if we can't load the valset? + // eg. if we have pruned the state or height is too high? + return err + } + if err := VerifyEvidenceValidator(valSet, ev); err != nil { + return types.NewEvidenceInvalidErr(ev, err) + } + */ added := evpool.evidenceStore.AddNewEvidence(evidence, priority) if !added { diff --git a/evidence/pool_test.go b/evidence/pool_test.go index 0997505ca..d7b94e88a 100644 --- a/evidence/pool_test.go +++ b/evidence/pool_test.go @@ -6,24 +6,19 @@ import ( "github.com/stretchr/testify/assert" + sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/types" dbm "github.com/tendermint/tmlibs/db" ) -type mockState struct{} - -func (m mockState) VerifyEvidence(ev types.Evidence) (int64, error) { - err := ev.Verify("") - return 10, err -} +var mockState = sm.State{} func TestEvidencePool(t *testing.T) { assert := assert.New(t) params := types.EvidenceParams{} store := NewEvidenceStore(dbm.NewMemDB()) - state := mockState{} - pool := NewEvidencePool(params, store, state) + pool := NewEvidencePool(params, store, mockState) goodEvidence := newMockGoodEvidence(5, 1, []byte("val1")) badEvidence := MockBadEvidence{goodEvidence} diff --git a/evidence/reactor_test.go b/evidence/reactor_test.go index fb83667ce..fc4ea571f 100644 --- a/evidence/reactor_test.go +++ b/evidence/reactor_test.go @@ -39,8 +39,7 @@ func makeAndConnectEvidenceReactors(config *cfg.Config, N int) []*EvidenceReacto params := types.EvidenceParams{} store := NewEvidenceStore(dbm.NewMemDB()) - state := mockState{} - pool := NewEvidencePool(params, store, state) + pool := NewEvidencePool(params, store, mockState) reactors[i] = NewEvidenceReactor(pool) reactors[i].SetLogger(logger.With("validator", i)) } diff --git a/evidence/store_test.go b/evidence/store_test.go index 7828d37b9..192aabc2f 100644 --- a/evidence/store_test.go +++ b/evidence/store_test.go @@ -113,12 +113,14 @@ func TestStorePriority(t *testing.T) { //------------------------------------------- const ( - evidenceTypeMock = byte(0x01) + evidenceTypeMockGood = byte(0x01) + evidenceTypeMockBad = byte(0x02) ) var _ = wire.RegisterInterface( struct{ types.Evidence }{}, - wire.ConcreteType{MockGoodEvidence{}, evidenceTypeMock}, + wire.ConcreteType{MockGoodEvidence{}, evidenceTypeMockGood}, + wire.ConcreteType{MockBadEvidence{}, evidenceTypeMockBad}, ) type MockGoodEvidence struct { diff --git a/node/node.go b/node/node.go index 603fafec0..cd1e63206 100644 --- a/node/node.go +++ b/node/node.go @@ -211,7 +211,7 @@ func NewNode(config *cfg.Config, } evidenceLogger := logger.With("module", "evidence") evidenceStore := evidence.NewEvidenceStore(evidenceDB) - evidencePool := evidence.NewEvidencePool(state.ConsensusParams.EvidenceParams, evidenceStore) // , state.Copy()) + evidencePool := evidence.NewEvidencePool(state.ConsensusParams.EvidenceParams, evidenceStore, state.Copy()) evidencePool.SetLogger(evidenceLogger) evidenceReactor := evidence.NewEvidenceReactor(evidencePool) evidenceReactor.SetLogger(evidenceLogger)