mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-03-04 17:55:36 +01:00
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.
88 lines
1.9 KiB
Go
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)
|
|
}
|