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.
This commit is contained in:
Oliver Gugger 2022-04-27 22:20:35 +02:00
parent f7275c7fc4
commit e31aab5af6
No known key found for this signature in database
GPG Key ID: 8E4256593F177720
3 changed files with 6 additions and 4 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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)