fix evidence

This commit is contained in:
Ethan Buchman
2017-12-27 22:39:58 -05:00
parent 537b0dfa1a
commit 397251b0f4
5 changed files with 32 additions and 25 deletions

View File

@ -3,6 +3,7 @@ package evidence
import ( import (
"github.com/tendermint/tmlibs/log" "github.com/tendermint/tmlibs/log"
sm "github.com/tendermint/tendermint/state"
"github.com/tendermint/tendermint/types" "github.com/tendermint/tendermint/types"
) )
@ -13,16 +14,16 @@ type EvidencePool struct {
evidenceStore *EvidenceStore evidenceStore *EvidenceStore
chainID string state sm.State
lastBlockHeight int64 params types.EvidenceParams
params types.EvidenceParams
// never close // never close
evidenceChan chan types.Evidence 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{ evpool := &EvidencePool{
state: state,
params: params, params: params,
logger: log.NewNopLogger(), logger: log.NewNopLogger(),
evidenceStore: evidenceStore, evidenceStore: evidenceStore,
@ -58,15 +59,25 @@ func (evpool *EvidencePool) AddEvidence(evidence types.Evidence) (err error) {
// TODO: check if we already have evidence for this // TODO: check if we already have evidence for this
// validator at this height so we dont get spammed // validator at this height so we dont get spammed
// TODO if err := sm.VerifyEvidence(evpool.state, evidence); err != nil {
return err
}
var priority int64 var priority int64
/* /* // Needs a db ...
priority, err := sm.VerifyEvidence(evpool.state, evidence) // TODO: if err is just that we cant find it cuz we pruned, ignore.
if err != nil { // TODO: if its actually bad evidence, punish peer
// 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())
return err 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) added := evpool.evidenceStore.AddNewEvidence(evidence, priority)
if !added { if !added {

View File

@ -6,24 +6,19 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
sm "github.com/tendermint/tendermint/state"
"github.com/tendermint/tendermint/types" "github.com/tendermint/tendermint/types"
dbm "github.com/tendermint/tmlibs/db" dbm "github.com/tendermint/tmlibs/db"
) )
type mockState struct{} var mockState = sm.State{}
func (m mockState) VerifyEvidence(ev types.Evidence) (int64, error) {
err := ev.Verify("")
return 10, err
}
func TestEvidencePool(t *testing.T) { func TestEvidencePool(t *testing.T) {
assert := assert.New(t) assert := assert.New(t)
params := types.EvidenceParams{} params := types.EvidenceParams{}
store := NewEvidenceStore(dbm.NewMemDB()) store := NewEvidenceStore(dbm.NewMemDB())
state := mockState{} pool := NewEvidencePool(params, store, mockState)
pool := NewEvidencePool(params, store, state)
goodEvidence := newMockGoodEvidence(5, 1, []byte("val1")) goodEvidence := newMockGoodEvidence(5, 1, []byte("val1"))
badEvidence := MockBadEvidence{goodEvidence} badEvidence := MockBadEvidence{goodEvidence}

View File

@ -39,8 +39,7 @@ func makeAndConnectEvidenceReactors(config *cfg.Config, N int) []*EvidenceReacto
params := types.EvidenceParams{} params := types.EvidenceParams{}
store := NewEvidenceStore(dbm.NewMemDB()) store := NewEvidenceStore(dbm.NewMemDB())
state := mockState{} pool := NewEvidencePool(params, store, mockState)
pool := NewEvidencePool(params, store, state)
reactors[i] = NewEvidenceReactor(pool) reactors[i] = NewEvidenceReactor(pool)
reactors[i].SetLogger(logger.With("validator", i)) reactors[i].SetLogger(logger.With("validator", i))
} }

View File

@ -113,12 +113,14 @@ func TestStorePriority(t *testing.T) {
//------------------------------------------- //-------------------------------------------
const ( const (
evidenceTypeMock = byte(0x01) evidenceTypeMockGood = byte(0x01)
evidenceTypeMockBad = byte(0x02)
) )
var _ = wire.RegisterInterface( var _ = wire.RegisterInterface(
struct{ types.Evidence }{}, struct{ types.Evidence }{},
wire.ConcreteType{MockGoodEvidence{}, evidenceTypeMock}, wire.ConcreteType{MockGoodEvidence{}, evidenceTypeMockGood},
wire.ConcreteType{MockBadEvidence{}, evidenceTypeMockBad},
) )
type MockGoodEvidence struct { type MockGoodEvidence struct {

View File

@ -211,7 +211,7 @@ func NewNode(config *cfg.Config,
} }
evidenceLogger := logger.With("module", "evidence") evidenceLogger := logger.With("module", "evidence")
evidenceStore := evidence.NewEvidenceStore(evidenceDB) 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) evidencePool.SetLogger(evidenceLogger)
evidenceReactor := evidence.NewEvidenceReactor(evidencePool) evidenceReactor := evidence.NewEvidenceReactor(evidencePool)
evidenceReactor.SetLogger(evidenceLogger) evidenceReactor.SetLogger(evidenceLogger)