mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-14 13:51:21 +00:00
fix evidence
This commit is contained in:
@ -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 {
|
||||||
|
@ -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}
|
||||||
|
@ -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))
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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)
|
||||||
|
Reference in New Issue
Block a user