lnd/contractcourt/taproot_briefcase_test.go
Olaoluwa Osuntokun a1788fe4a2
contractcourt: add new taproot briefcase to store ctrl block and tap tweaks
In this commit, we add a new taproot specific briefcase to store the
control block and tap tweaks for all taproot outputs. We chose this
route as many of the existing fields are serialized in line, so we
aren't able to serialize this new taproot specific information in the
existing briefcase.
2023-08-22 16:33:27 -07:00

88 lines
1.9 KiB
Go

package contractcourt
import (
"bytes"
"math/rand"
"testing"
"github.com/stretchr/testify/require"
)
func randResolverCtrlBlocks(t *testing.T) resolverCtrlBlocks {
numBlocks := rand.Int() % 256
blocks := make(resolverCtrlBlocks, numBlocks)
for i := 0; i < numBlocks; i++ {
var id resolverID
_, err := rand.Read(id[:])
require.NoError(t, err)
var block [200]byte
_, err = rand.Read(block[:])
require.NoError(t, err)
blocks[id] = block[:]
}
return blocks
}
func randHtlcTweaks(t *testing.T) htlcTapTweaks {
numTweaks := rand.Int() % 256
tweaks := make(htlcTapTweaks, numTweaks)
for i := 0; i < numTweaks; i++ {
var id resolverID
_, err := rand.Read(id[:])
require.NoError(t, err)
var tweak [32]byte
_, err = rand.Read(tweak[:])
require.NoError(t, err)
tweaks[id] = tweak
}
return tweaks
}
// TestTaprootBriefcase tests the encode/decode methods of the taproot
// briefcase extension.
func TestTaprootBriefcase(t *testing.T) {
t.Parallel()
var sweepCtrlBlock [200]byte
_, err := rand.Read(sweepCtrlBlock[:])
require.NoError(t, err)
var revokeCtrlBlock [200]byte
_, err = rand.Read(revokeCtrlBlock[:])
require.NoError(t, err)
var anchorTweak [32]byte
_, err = rand.Read(anchorTweak[:])
require.NoError(t, err)
testCase := &taprootBriefcase{
CtrlBlocks: &ctrlBlocks{
CommitSweepCtrlBlock: sweepCtrlBlock[:],
RevokeSweepCtrlBlock: revokeCtrlBlock[:],
OutgoingHtlcCtrlBlocks: randResolverCtrlBlocks(t),
IncomingHtlcCtrlBlocks: randResolverCtrlBlocks(t),
SecondLevelCtrlBlocks: randResolverCtrlBlocks(t),
},
TapTweaks: &tapTweaks{
AnchorTweak: anchorTweak[:],
BreachedHtlcTweaks: randHtlcTweaks(t),
BreachedSecondLevelHltcTweaks: randHtlcTweaks(t),
},
}
var b bytes.Buffer
require.NoError(t, testCase.Encode(&b))
var decodedCase taprootBriefcase
require.NoError(t, decodedCase.Decode(&b))
require.Equal(t, testCase, &decodedCase)
}