github.com/filecoin-project/specs-actors/v4@v4.0.2/actors/builtin/paych/testing.go (about) 1 package paych 2 3 import ( 4 "github.com/filecoin-project/go-address" 5 "github.com/filecoin-project/go-state-types/abi" 6 "github.com/filecoin-project/go-state-types/big" 7 "github.com/filecoin-project/specs-actors/v4/actors/builtin" 8 "github.com/filecoin-project/specs-actors/v4/actors/util/adt" 9 ) 10 11 type StateSummary struct { 12 Redeemed abi.TokenAmount 13 } 14 15 // Checks internal invariants of paych state. 16 func CheckStateInvariants(st *State, store adt.Store, balance abi.TokenAmount) (*StateSummary, *builtin.MessageAccumulator) { 17 acc := &builtin.MessageAccumulator{} 18 paychSummary := &StateSummary{ 19 Redeemed: big.Zero(), 20 } 21 22 acc.Require(st.From.Protocol() == address.ID, "from address is not ID address %v", st.From) 23 acc.Require(st.To.Protocol() == address.ID, "to address is not ID address %v", st.To) 24 acc.Require(st.SettlingAt >= st.MinSettleHeight, 25 "channel is setting at epoch %d before min settle height %d", st.SettlingAt, st.MinSettleHeight) 26 27 if lanes, err := adt.AsArray(store, st.LaneStates, LaneStatesAmtBitwidth); err != nil { 28 acc.Addf("error loading lanes: %v", err) 29 } else { 30 var lane LaneState 31 err = lanes.ForEach(&lane, func(i int64) error { 32 acc.Require(lane.Redeemed.GreaterThan(big.Zero()), "land %d redeemed is not greater than zero %v", i, lane.Redeemed) 33 paychSummary.Redeemed = big.Add(paychSummary.Redeemed, lane.Redeemed) 34 return nil 35 }) 36 acc.RequireNoError(err, "error iterating lanes") 37 } 38 39 acc.Require(balance.GreaterThanEqual(st.ToSend), 40 "channel has insufficient funds to send (%v < %v)", balance, st.ToSend) 41 42 return paychSummary, acc 43 }