From 550e2743d727f5322ccfc7261d42c7509a2b185d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Magiera?= Date: Thu, 6 Jan 2022 19:51:26 +0100 Subject: [PATCH] paych: Don't return settling/collected chennals from OutboundActiveByFromTo --- build/openrpc/full.json.gz | Bin 26594 -> 26976 bytes documentation/en/default-lotus-config.toml | 8 ++ paychmgr/paych.go | 2 +- paychmgr/paych_test.go | 12 +-- paychmgr/paychget_test.go | 108 ++++++++++++++++++++- paychmgr/simple.go | 2 +- paychmgr/store.go | 20 +++- 7 files changed, 140 insertions(+), 12 deletions(-) diff --git a/build/openrpc/full.json.gz b/build/openrpc/full.json.gz index ae8f0b86655688ef335478f8abf47bf58d1ca299..55e96a3aa48e38cb9febb44d3c03b0c3bbc5f34b 100644 GIT binary patch literal 26976 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 GVE+e$XyMKP diff --git a/documentation/en/default-lotus-config.toml b/documentation/en/default-lotus-config.toml index 3cb8977b290..016e1290cb9 100644 --- a/documentation/en/default-lotus-config.toml +++ b/documentation/en/default-lotus-config.toml @@ -121,6 +121,14 @@ # env var: LOTUS_CLIENT_SIMULTANEOUSTRANSFERSFORRETRIEVAL #SimultaneousTransfersForRetrieval = 20 + # Require that retrievals perform no on-chain retrievals. Paid retrievals + # without existing payment channels with available funds will fail instead + # of automatically performing on-chain operations. + # + # type: bool + # env var: LOTUS_CLIENT_OFFCHAINRETRIEVAL + #OffChainRetrieval = false + [Wallet] # type: string diff --git a/paychmgr/paych.go b/paychmgr/paych.go index 16c6604c6ca..5fdb4d8842e 100644 --- a/paychmgr/paych.go +++ b/paychmgr/paych.go @@ -106,7 +106,7 @@ func (ca *channelAccessor) outboundActiveByFromTo(ctx context.Context, from, to ca.lk.Lock() defer ca.lk.Unlock() - return ca.store.OutboundActiveByFromTo(ctx, from, to) + return ca.store.OutboundActiveByFromTo(ctx, ca.api, from, to) } // createVoucher creates a voucher with the given specification, setting its diff --git a/paychmgr/paych_test.go b/paychmgr/paych_test.go index 165c945b8cb..24214d1b585 100644 --- a/paychmgr/paych_test.go +++ b/paychmgr/paych_test.go @@ -465,18 +465,18 @@ func TestAddVoucherInboundWalletKey(t *testing.T) { toAcct := tutils.NewActorAddr(t, "toAct") // Create an actor for the channel in state - act := &types.Actor{ - Code: builtin.AccountActorCodeID, - Head: cid.Cid{}, - Nonce: 0, - Balance: types.NewInt(20), - } mock := newMockManagerAPI() mock.setAccountAddress(fromAcct, from) mock.setAccountAddress(toAcct, to) + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } mock.setPaychState(ch, act, paychmock.NewMockPayChState(fromAcct, toAcct, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) // Create a manager diff --git a/paychmgr/paychget_test.go b/paychmgr/paychget_test.go index f16b146f627..c53a85d86a0 100644 --- a/paychmgr/paychget_test.go +++ b/paychmgr/paychget_test.go @@ -132,6 +132,14 @@ func TestPaychGetCreateChannelThenAddFunds(t *testing.T) { mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -219,6 +227,14 @@ func TestPaychGetCreatePrefundedChannelThenAddFunds(t *testing.T) { mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -406,6 +422,14 @@ func TestPaychGetRecoverAfterAddFundsError(t *testing.T) { mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -502,6 +526,14 @@ func TestPaychGetRestartAfterCreateChannelMsg(t *testing.T) { mock2 := newMockManagerAPI() defer mock2.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock2.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr2, err := newManager(store, mock2) require.NoError(t, err) @@ -566,6 +598,14 @@ func TestPaychGetRestartAfterAddFundsMsg(t *testing.T) { mock := newMockManagerAPI() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -590,6 +630,8 @@ func TestPaychGetRestartAfterAddFundsMsg(t *testing.T) { mock2 := newMockManagerAPI() defer mock2.close() + mock2.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr2, err := newManager(store, mock2) require.NoError(t, err) @@ -625,10 +667,19 @@ func TestPaychGetWait(t *testing.T) { from := tutils.NewIDAddr(t, 101) to := tutils.NewIDAddr(t, 102) + expch := tutils.NewIDAddr(t, 100) mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(expch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -637,7 +688,6 @@ func TestPaychGetWait(t *testing.T) { _, createMsgCid, err := mgr.GetPaych(ctx, from, to, amt, onChainReserve) require.NoError(t, err) - expch := tutils.NewIDAddr(t, 100) go func() { // 3. Send response response := testChannelResponse(t, expch) @@ -763,6 +813,14 @@ func TestPaychGetMergeAddFunds(t *testing.T) { mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -859,6 +917,14 @@ func TestPaychGetMergePrefundAndReserve(t *testing.T) { mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -955,6 +1021,14 @@ func TestPaychGetMergePrefundAndReservePrefunded(t *testing.T) { mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -1052,6 +1126,14 @@ func TestPaychGetMergePrefundAndReservePrefundedOneOffchain(t *testing.T) { mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -1130,6 +1212,14 @@ func TestPaychGetMergePrefundAndReservePrefundedBothOffchainOneFail(t *testing.T mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -1208,6 +1298,14 @@ func TestPaychGetMergePrefundAndReserveOneOffchainOneFail(t *testing.T) { mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) @@ -1295,6 +1393,14 @@ func TestPaychGetMergeAddFundsCtxCancelOne(t *testing.T) { mock := newMockManagerAPI() defer mock.close() + act := &types.Actor{ + Code: builtin.AccountActorCodeID, + Head: cid.Cid{}, + Nonce: 0, + Balance: types.NewInt(20), + } + mock.setPaychState(ch, act, paychmock.NewMockPayChState(from, to, abi.ChainEpoch(0), make(map[uint64]paych.LaneState))) + mgr, err := newManager(store, mock) require.NoError(t, err) diff --git a/paychmgr/simple.go b/paychmgr/simple.go index ef0f81b8748..56bea0d27f8 100644 --- a/paychmgr/simple.go +++ b/paychmgr/simple.go @@ -436,7 +436,7 @@ func (ca *channelAccessor) processTask(merged *mergedFundsReq, amt, avail types. // Get the payment channel for the from/to addresses. // Note: It's ok if we get ErrChannelNotTracked. It just means we need to // create a channel. - channelInfo, err := ca.store.OutboundActiveByFromTo(ctx, ca.from, ca.to) + channelInfo, err := ca.store.OutboundActiveByFromTo(ctx, ca.api, ca.from, ca.to) if err != nil && err != ErrChannelNotTracked { return &paychFundsRes{err: err} } diff --git a/paychmgr/store.go b/paychmgr/store.go index d5c8e198049..7d6ee32be67 100644 --- a/paychmgr/store.go +++ b/paychmgr/store.go @@ -6,9 +6,8 @@ import ( "errors" "fmt" - "golang.org/x/xerrors" - "github.com/google/uuid" + "golang.org/x/xerrors" "github.com/filecoin-project/lotus/chain/types" @@ -380,7 +379,7 @@ func (ps *Store) GetMessage(ctx context.Context, mcid cid.Cid) (*MsgInfo, error) // OutboundActiveByFromTo looks for outbound channels that have not been // settled, with the given from / to addresses -func (ps *Store) OutboundActiveByFromTo(ctx context.Context, from address.Address, to address.Address) (*ChannelInfo, error) { +func (ps *Store) OutboundActiveByFromTo(ctx context.Context, sma stateManagerAPI, from address.Address, to address.Address) (*ChannelInfo, error) { return ps.findChan(ctx, func(ci *ChannelInfo) bool { if ci.Direction != DirOutbound { return false @@ -388,6 +387,21 @@ func (ps *Store) OutboundActiveByFromTo(ctx context.Context, from address.Addres if ci.Settling { return false } + + if ci.Channel != nil { + _, st, err := sma.GetPaychState(ctx, *ci.Channel, nil) + if err != nil { + return false + } + sat, err := st.SettlingAt() + if err != nil { + return false + } + if sat != 0 { + return false + } + } + return ci.Control == from && ci.Target == to }) }