diff --git a/itest/list_on_test.go b/itest/list_on_test.go index bdf7a3855..d5664d3df 100644 --- a/itest/list_on_test.go +++ b/itest/list_on_test.go @@ -462,6 +462,10 @@ var allTestCases = []*lntest.TestCase{ Name: "taproot", TestFunc: testTaproot, }, + { + Name: "simple taproot channel activation", + TestFunc: testSimpleTaprootChannelActivation, + }, { Name: "wallet import account", TestFunc: testWalletImportAccount, diff --git a/itest/lnd_open_channel_test.go b/itest/lnd_open_channel_test.go index 674d9a62b..d8cf66485 100644 --- a/itest/lnd_open_channel_test.go +++ b/itest/lnd_open_channel_test.go @@ -768,3 +768,57 @@ func testFundingExpiryBlocksOnPending(ht *lntest.HarnessTest) { chanPoint := lntest.ChanPointFromPendingUpdate(update) ht.CloseChannel(alice, chanPoint) } + +// testSimpleTaprootChannelActivation ensures that a simple taproot channel is +// active if the initiator disconnects and reconnects in between channel opening +// and channel confirmation. +func testSimpleTaprootChannelActivation(ht *lntest.HarnessTest) { + simpleTaprootChanArgs := lntest.NodeArgsForCommitType( + lnrpc.CommitmentType_SIMPLE_TAPROOT, + ) + + // Make the new set of participants. + alice := ht.NewNode("alice", simpleTaprootChanArgs) + defer ht.Shutdown(alice) + bob := ht.NewNode("bob", simpleTaprootChanArgs) + defer ht.Shutdown(bob) + + ht.FundCoins(btcutil.SatoshiPerBitcoin, alice) + + // Make sure Alice and Bob are connected. + ht.EnsureConnected(alice, bob) + + // Create simple taproot channel opening parameters. + params := lntest.OpenChannelParams{ + FundMax: true, + CommitmentType: lnrpc.CommitmentType_SIMPLE_TAPROOT, + Private: true, + } + + // Alice opens the channel to Bob. + pendingChan := ht.OpenChannelAssertPending(alice, bob, params) + + // We'll create the channel point to be able to close the channel once + // our test is done. + chanPoint := &lnrpc.ChannelPoint{ + FundingTxid: &lnrpc.ChannelPoint_FundingTxidBytes{ + FundingTxidBytes: pendingChan.Txid, + }, + OutputIndex: pendingChan.OutputIndex, + } + + // We disconnect and reconnect Alice and Bob before the channel is + // confirmed. Our expectation is that the channel is active once the + // channel is confirmed. + ht.DisconnectNodes(alice, bob) + ht.EnsureConnected(alice, bob) + + // Mine six blocks to confirm the channel funding transaction. + ht.MineBlocksAndAssertNumTxes(6, 1) + + // Verify that Alice sees an active channel to Bob. + ht.AssertChannelActive(alice, chanPoint) + + // Our test is done and Alice closes her channel to Bob. + ht.CloseChannel(alice, chanPoint) +}