mirror of
https://github.com/lightninglabs/loop.git
synced 2026-08-13 12:33:03 +02:00
Deposited can now include mempool outputs for static loop-ins, but withdrawals and static channel opens still require confirmed funding inputs. Filter automatic channel-open selection to confirmed deposits and reject explicit unconfirmed selections, including withdraw-all requests that would otherwise silently include mempool deposits.
86 lines
2 KiB
Go
86 lines
2 KiB
Go
package loopd
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
|
"github.com/btcsuite/btcd/wire"
|
|
"github.com/lightninglabs/loop/staticaddr/deposit"
|
|
)
|
|
|
|
// TestDepositBlocksUntilExpiry checks blocks-until-expiry handling for
|
|
// confirmed and unconfirmed deposits.
|
|
func TestDepositBlocksUntilExpiry(t *testing.T) {
|
|
t.Run("unconfirmed", func(t *testing.T) {
|
|
if blocks := depositBlocksUntilExpiry(0, 144, 500); blocks != 144 {
|
|
t.Fatalf("expected 144 blocks for unconfirmed deposit, got %d",
|
|
blocks)
|
|
}
|
|
})
|
|
|
|
t.Run("confirmed", func(t *testing.T) {
|
|
if blocks := depositBlocksUntilExpiry(450, 144, 500); blocks != 94 {
|
|
t.Fatalf("expected 94 blocks until expiry, got %d",
|
|
blocks)
|
|
}
|
|
})
|
|
}
|
|
|
|
// TestWithdrawAllDepositOutpoints checks `all` withdrawal handling for
|
|
// confirmed and unconfirmed deposits.
|
|
func TestWithdrawAllDepositOutpoints(t *testing.T) {
|
|
t.Run("rejects unconfirmed", func(t *testing.T) {
|
|
deposits := []*deposit.Deposit{
|
|
{
|
|
OutPoint: wire.OutPoint{
|
|
Hash: chainhash.Hash{1},
|
|
Index: 1,
|
|
},
|
|
},
|
|
{
|
|
OutPoint: wire.OutPoint{
|
|
Hash: chainhash.Hash{2},
|
|
Index: 2,
|
|
},
|
|
ConfirmationHeight: 123,
|
|
},
|
|
}
|
|
|
|
_, err := withdrawAllDepositOutpoints(deposits)
|
|
if err == nil {
|
|
t.Fatal("expected unconfirmed deposit to fail all withdrawal")
|
|
}
|
|
})
|
|
|
|
t.Run("returns all confirmed", func(t *testing.T) {
|
|
first := wire.OutPoint{
|
|
Hash: chainhash.Hash{3},
|
|
Index: 3,
|
|
}
|
|
second := wire.OutPoint{
|
|
Hash: chainhash.Hash{4},
|
|
Index: 4,
|
|
}
|
|
deposits := []*deposit.Deposit{
|
|
{
|
|
OutPoint: first,
|
|
ConfirmationHeight: 123,
|
|
},
|
|
{
|
|
OutPoint: second,
|
|
ConfirmationHeight: 124,
|
|
},
|
|
}
|
|
|
|
outpoints, err := withdrawAllDepositOutpoints(deposits)
|
|
if err != nil {
|
|
t.Fatalf("expected confirmed deposits to succeed: %v", err)
|
|
}
|
|
if len(outpoints) != 2 {
|
|
t.Fatalf("expected 2 outpoints, got %d", len(outpoints))
|
|
}
|
|
if outpoints[0] != first || outpoints[1] != second {
|
|
t.Fatal("expected all confirmed outpoints to remain selected")
|
|
}
|
|
})
|
|
}
|