From e31aab5af65d54c5df32c4503fac51636e183148 Mon Sep 17 00:00:00 2001 From: Oliver Gugger Date: Wed, 27 Apr 2022 22:20:35 +0200 Subject: [PATCH] multi: fix inclusion proof size The inclusion proof field in the TapscriptPartialReveal function was incorrect. An inclusion proof can be zero or more elements of 32-byte slices. So an empty inclusion proof can be valid too for a tree that only consists of a single leaf. --- input/taproot.go | 4 ++-- lntest/itest/lnd_taproot_test.go | 3 ++- lnwallet/btcwallet/signer_test.go | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/input/taproot.go b/input/taproot.go index 56a2c1a83..255fba427 100644 --- a/input/taproot.go +++ b/input/taproot.go @@ -75,12 +75,12 @@ func TapscriptFullTree(internalKey *btcec.PublicKey, // key and revealed script. func TapscriptPartialReveal(internalKey *btcec.PublicKey, revealedLeaf txscript.TapLeaf, - inclusionProof [32]byte) *waddrmgr.Tapscript { + inclusionProof []byte) *waddrmgr.Tapscript { controlBlock := &txscript.ControlBlock{ InternalKey: internalKey, LeafVersion: txscript.BaseLeafVersion, - InclusionProof: inclusionProof[:], + InclusionProof: inclusionProof, } rootHash := controlBlock.RootHash(revealedLeaf.Script) tapKey := txscript.ComputeTaprootOutputKey(internalKey, rootHash) diff --git a/lntest/itest/lnd_taproot_test.go b/lntest/itest/lnd_taproot_test.go index 559305a34..59c17a1d1 100644 --- a/lntest/itest/lnd_taproot_test.go +++ b/lntest/itest/lnd_taproot_test.go @@ -131,8 +131,9 @@ func testTaprootSignOutputRawScriptSpend(ctxt context.Context, t *harnessTest, // Let's add a second script output as well to test the partial reveal. leaf2 := testScriptSchnorrSig(t.t, leafSigningKey) + inclusionProof := leaf1.TapHash() tapscript := input.TapscriptPartialReveal( - dummyInternalKey, leaf2, leaf1.TapHash(), + dummyInternalKey, leaf2, inclusionProof[:], ) taprootKey, err := tapscript.TaprootKey() require.NoError(t.t, err) diff --git a/lnwallet/btcwallet/signer_test.go b/lnwallet/btcwallet/signer_test.go index 949977c82..4b36accc7 100644 --- a/lnwallet/btcwallet/signer_test.go +++ b/lnwallet/btcwallet/signer_test.go @@ -273,8 +273,9 @@ func TestScriptImport(t *testing.T) { // Now, as a last test, make sure that when we try adding an address // with partial script reveal, we get an error that the address already // exists. + inclusionProof := leaf2.TapHash() tapscript2 := input.TapscriptPartialReveal( - testPubKey, leaf1, leaf2.TapHash(), + testPubKey, leaf1, inclusionProof[:], ) _, err = w.ImportTaprootScript(scope, tapscript2) require.Error(t, err)