diff --git a/paychmgr/paych.go b/paychmgr/paych.go index a02630ac7..a715107e8 100644 --- a/paychmgr/paych.go +++ b/paychmgr/paych.go @@ -4,7 +4,6 @@ import ( "bytes" "context" "fmt" - "math" "github.com/filecoin-project/lotus/api" @@ -82,14 +81,18 @@ func newManager(sm StateManagerApi, pchstore *Store) *Manager { } } -func maxLaneFromState(st *paych.State) (uint64, error) { - maxLane := uint64(math.MaxInt64) +func nextLaneFromState(st *paych.State) uint64 { + if len(st.LaneStates) == 0 { + return 0 + } + + maxLane := st.LaneStates[0].ID for _, state := range st.LaneStates { - if (state.ID)+1 > maxLane+1 { + if state.ID > maxLane { maxLane = state.ID } } - return maxLane, nil + return maxLane + 1 } func (pm *Manager) TrackInboundChannel(ctx context.Context, ch address.Address) error { @@ -110,18 +113,13 @@ func (pm *Manager) TrackInboundChannel(ctx context.Context, ch address.Address) } to := account.Address - maxLane, err := maxLaneFromState(st) - if err != nil { - return err - } - return pm.store.TrackChannel(&ChannelInfo{ Channel: ch, Control: to, Target: from, Direction: DirInbound, - NextLane: maxLane + 1, + NextLane: nextLaneFromState(st), }) } @@ -131,11 +129,6 @@ func (pm *Manager) loadOutboundChannelInfo(ctx context.Context, ch address.Addre return nil, err } - maxLane, err := maxLaneFromState(st) - if err != nil { - return nil, err - } - var account account.State _, err = pm.sm.LoadActorState(ctx, st.From, &account, nil) if err != nil { @@ -154,7 +147,7 @@ func (pm *Manager) loadOutboundChannelInfo(ctx context.Context, ch address.Addre Target: to, Direction: DirOutbound, - NextLane: maxLane + 1, + NextLane: nextLaneFromState(st), }, nil } @@ -365,7 +358,7 @@ func (pm *Manager) AddVoucher(ctx context.Context, ch address.Address, sv *paych Proof: proof, }) - if ci.NextLane <= (sv.Lane) { + if ci.NextLane <= sv.Lane { ci.NextLane = sv.Lane + 1 } diff --git a/paychmgr/paych_test.go b/paychmgr/paych_test.go index 50e3503f5..b735a22b1 100644 --- a/paychmgr/paych_test.go +++ b/paychmgr/paych_test.go @@ -366,7 +366,7 @@ func TestAddVoucherNextLane(t *testing.T) { minDelta := big.NewInt(0) voucherAmount := big.NewInt(2) - // Add a voucher in lane: 2 + // Add a voucher in lane 2 nonce := uint64(1) voucherLane := uint64(2) sv := testCreateVoucher(t, voucherLane, nonce, voucherAmount, fromKeyPrivate) @@ -377,8 +377,7 @@ func TestAddVoucherNextLane(t *testing.T) { require.NoError(t, err) require.EqualValues(t, ci.NextLane, 3) - // Add a voucher in lane: 1 - nonce++ + // Add a voucher in lane 1 voucherLane = uint64(1) sv = testCreateVoucher(t, voucherLane, nonce, voucherAmount, fromKeyPrivate) _, err = mgr.AddVoucher(ctx, ch, sv, nil, minDelta) @@ -388,9 +387,8 @@ func TestAddVoucherNextLane(t *testing.T) { require.NoError(t, err) require.EqualValues(t, ci.NextLane, 3) - // Add a voucher in lane: 5 - nonce++ - voucherLane = uint64(1) + // Add a voucher in lane 5 + voucherLane = uint64(5) sv = testCreateVoucher(t, voucherLane, nonce, voucherAmount, fromKeyPrivate) _, err = mgr.AddVoucher(ctx, ch, sv, nil, minDelta) require.NoError(t, err) @@ -453,13 +451,15 @@ func TestAllocateLane(t *testing.T) { // Set up a manager with a single payment channel mgr, ch, _ := testSetupMgrWithChannel(t, ctx) + // First lane should be 0 lane, err := mgr.AllocateLane(ch) require.NoError(t, err) - require.EqualValues(t, lane, 1) + require.EqualValues(t, lane, 0) + // Next lane should be 1 lane, err = mgr.AllocateLane(ch) require.NoError(t, err) - require.EqualValues(t, lane, 2) + require.EqualValues(t, lane, 1) } func TestNextNonceForLane(t *testing.T) {