From 9fee656d70e5fbcf6cc439644d0eb5cffe966923 Mon Sep 17 00:00:00 2001 From: yyforyongyu Date: Fri, 19 Jul 2024 14:05:28 +0800 Subject: [PATCH 1/2] chainntnfs+lntest: fix `TestInterfaces` This commit upgrades the test to always use a segwit v0 witness program when creating testing txns. --- chainntnfs/test_utils.go | 29 ++++++++++++++++++++--------- lntest/unittest/backend.go | 6 ++++++ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/chainntnfs/test_utils.go b/chainntnfs/test_utils.go index b14218dd7..17e379e12 100644 --- a/chainntnfs/test_utils.go +++ b/chainntnfs/test_utils.go @@ -16,6 +16,7 @@ import ( "github.com/btcsuite/btcd/integration/rpctest" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" + "github.com/lightningnetwork/lnd/input" "github.com/lightningnetwork/lnd/lntest/unittest" "github.com/stretchr/testify/require" ) @@ -36,7 +37,7 @@ func randPubKeyHashScript() ([]byte, *btcec.PrivateKey, error) { } pubKeyHash := btcutil.Hash160(privKey.PubKey().SerializeCompressed()) - addrScript, err := btcutil.NewAddressPubKeyHash( + addrScript, err := btcutil.NewAddressWitnessPubKeyHash( pubKeyHash, unittest.NetParams, ) if err != nil { @@ -139,16 +140,26 @@ func CreateSpendTx(t *testing.T, prevOutPoint *wire.OutPoint, t.Helper() - spendingTx := wire.NewMsgTx(1) - spendingTx.AddTxIn(&wire.TxIn{PreviousOutPoint: *prevOutPoint}) - spendingTx.AddTxOut(&wire.TxOut{Value: 1e8, PkScript: prevOutput.PkScript}) + // Create a new output. + outputAmt := int64(1e8) + witnessProgram, _, err := randPubKeyHashScript() + require.NoError(t, err, "unable to generate pkScript") + output := wire.NewTxOut(outputAmt, witnessProgram) - sigScript, err := txscript.SignatureScript( - spendingTx, 0, prevOutput.PkScript, txscript.SigHashAll, - privKey, true, + // Create a new tx. + tx := wire.NewMsgTx(2) + tx.AddTxIn(wire.NewTxIn(prevOutPoint, nil, nil)) + tx.AddTxOut(output) + + // Generate the witness. + sigHashes := input.NewTxSigHashesV0Only(tx) + witnessScript, err := txscript.WitnessSignature( + tx, sigHashes, 0, prevOutput.Value, prevOutput.PkScript, + txscript.SigHashAll, privKey, true, ) require.NoError(t, err, "unable to sign tx") - spendingTx.TxIn[0].SignatureScript = sigScript - return spendingTx + tx.TxIn[0].Witness = witnessScript + + return tx } diff --git a/lntest/unittest/backend.go b/lntest/unittest/backend.go index 2f9c12363..be09b395c 100644 --- a/lntest/unittest/backend.go +++ b/lntest/unittest/backend.go @@ -59,6 +59,12 @@ func NewMiner(t *testing.T, netParams *chaincfg.Params, extraArgs []string, t.Fatalf("unable to set up backend node: %v", err) } + // Next mine enough blocks in order for segwit and the CSV package + // soft-fork to activate. + numBlocks := netParams.MinerConfirmationWindow*2 + 17 + _, err = node.Client.Generate(numBlocks) + require.NoError(t, err, "failed to generate blocks") + return node } From 48a0efe40cf28bc3d944c27ca80fc6ac11dc8bb8 Mon Sep 17 00:00:00 2001 From: yyforyongyu Date: Wed, 24 Jul 2024 18:05:06 +0800 Subject: [PATCH 2/2] bitcoindnotify: add debug logs in unit test --- chainntnfs/bitcoindnotify/bitcoind_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/chainntnfs/bitcoindnotify/bitcoind_test.go b/chainntnfs/bitcoindnotify/bitcoind_test.go index 34b93068a..be336ef6c 100644 --- a/chainntnfs/bitcoindnotify/bitcoind_test.go +++ b/chainntnfs/bitcoindnotify/bitcoind_test.go @@ -93,6 +93,9 @@ func syncNotifierWithMiner(t *testing.T, notifier *BitcoindNotifier, "height: %v", err) } + t.Logf("miner height=%v, bitcoind height=%v", minerHeight, + bitcoindHeight) + if bitcoindHeight == minerHeight { return uint32(bitcoindHeight) }