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.
This commit is contained in:
2 files changed
+778
No files matched your search
@@ -0,0 +1,88 @@
|
||||
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)
|
||||
}
|
||||
Reference in new issue
Block a user