From 78d523d697552045581a12411284343b327e7849 Mon Sep 17 00:00:00 2001 From: Jeromy Date: Mon, 4 May 2020 12:55:08 -0700 Subject: [PATCH] finish addressing feedback from @anorth --- actors/builtin/market/market_actor.go | 31 +++++++++++++++------------ actors/builtin/market/market_state.go | 1 + actors/builtin/market/market_test.go | 1 + 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/actors/builtin/market/market_actor.go b/actors/builtin/market/market_actor.go index 35ade4901b..fa587c200b 100644 --- a/actors/builtin/market/market_actor.go +++ b/actors/builtin/market/market_actor.go @@ -284,10 +284,13 @@ func (a Actor) VerifyDealsOnSectorProveCommit(rt Runtime, params *VerifyDealsOnS } for _, dealID := range params.DealIDs { - deal, _, err := states.Get(dealID) + deal, found, err := states.Get(dealID) if err != nil { rt.Abortf(exitcode.ErrIllegalState, "get deal %v", err) } + if !found { + rt.Abortf(exitcode.ErrIllegalArgument, "failed to find deal given in params: %d", dealID) + } proposal, err := proposals.Get(dealID) if err != nil { rt.Abortf(exitcode.ErrIllegalState, "get deal %v", err) @@ -385,10 +388,13 @@ func (a Actor) OnMinerSectorsTerminate(rt Runtime, params *OnMinerSectorsTermina } Assert(deal.Provider == minerAddr) - state, _, err := states.Get(dealID) + state, found, err := states.Get(dealID) if err != nil { rt.Abortf(exitcode.ErrIllegalState, "get deal: %v", err) } + if !found { + rt.Abortf(exitcode.ErrIllegalState, "no state found for deal in sector being terminated") + } // Note: we do not perform the balance transfers here, but rather simply record the flag // to indicate that processDealSlashed should be called when the deferred state computation @@ -455,19 +461,16 @@ func (a Actor) CronTick(rt Runtime, params *adt.EmptyValue) *adt.EmptyValue { if state.SectorStartEpoch == epochUndefined { // Not yet appeared in proven sector; check for timeout. - if rt.CurrEpoch() > deal.StartEpoch { - slashed := st.processDealInitTimedOut(rt, et, lt, dealID, deal, state) - if !slashed.IsZero() { - amountSlashed = big.Add(amountSlashed, slashed) - } - if deal.VerifiedDeal { - timedOutVerifiedDeals = append(timedOutVerifiedDeals, deal) - } - return nil - } + AssertMsg(rt.CurrEpoch() >= deal.StartEpoch, "if sector start is not set, we must be in a timed out state") - // This should not be able to happen - rt.Abortf(exitcode.ErrIllegalState, "invalid deal state, unstarted, not timed out") + slashed := st.processDealInitTimedOut(rt, et, lt, dealID, deal, state) + if !slashed.IsZero() { + amountSlashed = big.Add(amountSlashed, slashed) + } + if deal.VerifiedDeal { + timedOutVerifiedDeals = append(timedOutVerifiedDeals, deal) + } + return nil } slashAmount, nextEpoch := st.updatePendingDealState(rt, state, deal, dealID, et, lt, rt.CurrEpoch()) diff --git a/actors/builtin/market/market_state.go b/actors/builtin/market/market_state.go index 7f9be51de6..48d8578fbd 100644 --- a/actors/builtin/market/market_state.go +++ b/actors/builtin/market/market_state.go @@ -49,6 +49,7 @@ func ConstructState(emptyArrayCid, emptyMapCid, emptyMSetCid cid.Cid) *State { LockedTable: emptyMapCid, NextID: abi.DealID(0), DealOpsByEpoch: emptyMSetCid, + LastCron: abi.ChainEpoch(-1), } } diff --git a/actors/builtin/market/market_test.go b/actors/builtin/market/market_test.go index 3cbcb5b72a..b6c768d388 100644 --- a/actors/builtin/market/market_test.go +++ b/actors/builtin/market/market_test.go @@ -80,6 +80,7 @@ func TestMarketActor(t *testing.T) { assert.Equal(t, emptyMap, state.LockedTable) assert.Equal(t, abi.DealID(0), state.NextID) assert.Equal(t, emptyMultiMap, state.DealOpsByEpoch) + assert.Equal(t, abi.ChainEpoch(-1), state.LastCron) }) t.Run("AddBalance", func(t *testing.T) {