Merge pull request #2529 from filecoin-project/fix/dont-ignore-sync-errors
properly return sync errors
This commit is contained in:
commit
d8c3cf11f6
@ -361,6 +361,10 @@ func (cg *ChainGen) NextTipSet() (*MinedTipSet, error) {
|
|||||||
return mts, nil
|
return mts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (cg *ChainGen) SetWinningPoStProver(m address.Address, wpp WinningPoStProver) {
|
||||||
|
cg.eppProvs[m] = wpp
|
||||||
|
}
|
||||||
|
|
||||||
func (cg *ChainGen) NextTipSetFromMiners(base *types.TipSet, miners []address.Address) (*MinedTipSet, error) {
|
func (cg *ChainGen) NextTipSetFromMiners(base *types.TipSet, miners []address.Address) (*MinedTipSet, error) {
|
||||||
var blks []*types.FullBlock
|
var blks []*types.FullBlock
|
||||||
|
|
||||||
|
@ -851,6 +851,7 @@ func (syncer *Syncer) ValidateBlock(ctx context.Context, b *types.FullBlock) (er
|
|||||||
"%d errors occurred:\n\t%s\n\n",
|
"%d errors occurred:\n\t%s\n\n",
|
||||||
len(es), strings.Join(points, "\n\t"))
|
len(es), strings.Join(points, "\n\t"))
|
||||||
}
|
}
|
||||||
|
return mulErr
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := syncer.store.MarkBlockAsValidated(ctx, b.Cid()); err != nil {
|
if err := syncer.store.MarkBlockAsValidated(ctx, b.Cid()); err != nil {
|
||||||
@ -908,7 +909,7 @@ func (syncer *Syncer) VerifyWinningPoStProof(ctx context.Context, h *types.Block
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !ok {
|
if !ok {
|
||||||
log.Errorf("invalid winning post (%x; %v)", rand, sectors)
|
log.Errorf("invalid winning post (block: %s, %x; %v)", h.Cid(), rand, sectors)
|
||||||
return xerrors.Errorf("winning post was invalid")
|
return xerrors.Errorf("winning post was invalid")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1056,6 +1057,10 @@ func (syncer *Syncer) verifyBlsAggregate(ctx context.Context, sig *crypto.Signat
|
|||||||
trace.Int64Attribute("msgCount", int64(len(msgs))),
|
trace.Int64Attribute("msgCount", int64(len(msgs))),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if len(msgs) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
bmsgs := make([]bls.Message, len(msgs))
|
bmsgs := make([]bls.Message, len(msgs))
|
||||||
for i, m := range msgs {
|
for i, m := range msgs {
|
||||||
bmsgs[i] = m.Bytes()
|
bmsgs[i] = m.Bytes()
|
||||||
|
@ -433,6 +433,41 @@ func TestSyncBadTimestamp(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type badWpp struct{}
|
||||||
|
|
||||||
|
func (wpp badWpp) GenerateCandidates(context.Context, abi.PoStRandomness, uint64) ([]uint64, error) {
|
||||||
|
return []uint64{1}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (wpp badWpp) ComputeProof(context.Context, []abi.SectorInfo, abi.PoStRandomness) ([]abi.PoStProof, error) {
|
||||||
|
return []abi.PoStProof{
|
||||||
|
abi.PoStProof{
|
||||||
|
PoStProof: abi.RegisteredPoStProof_StackedDrgWinning2KiBV1,
|
||||||
|
ProofBytes: []byte("evil"),
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSyncBadWinningPoSt(t *testing.T) {
|
||||||
|
H := 15
|
||||||
|
tu := prepSyncTest(t, H)
|
||||||
|
|
||||||
|
client := tu.addClientNode()
|
||||||
|
|
||||||
|
require.NoError(t, tu.mn.LinkAll())
|
||||||
|
tu.connect(client, 0)
|
||||||
|
tu.waitUntilSync(0, client)
|
||||||
|
|
||||||
|
base := tu.g.CurTipset
|
||||||
|
|
||||||
|
// both miners now produce invalid winning posts
|
||||||
|
tu.g.SetWinningPoStProver(tu.g.Miners[0], &badWpp{})
|
||||||
|
tu.g.SetWinningPoStProver(tu.g.Miners[1], &badWpp{})
|
||||||
|
|
||||||
|
// now ensure that new blocks are not accepted
|
||||||
|
tu.mineOnBlock(base, 0, nil, false, true)
|
||||||
|
}
|
||||||
|
|
||||||
func (tu *syncTestUtil) loadChainToNode(to int) {
|
func (tu *syncTestUtil) loadChainToNode(to int) {
|
||||||
// utility to simulate incoming blocks without miner process
|
// utility to simulate incoming blocks without miner process
|
||||||
// TODO: should call syncer directly, this won't work correctly in all cases
|
// TODO: should call syncer directly, this won't work correctly in all cases
|
||||||
|
Loading…
Reference in New Issue
Block a user