multi: obtain+verify aux sigs for all second level HTLCs
In this commit, we start to use the new AuxSigner to obtain+verify aux sigs for all second level HTLCs. This is similar to the existing SigPool, but we'll only attempt to do this if the AuxSigner is present (won't be for most channels).
This commit is contained in:
1 parent
bd84fd256e
commit
83fdbda2fa
20 files changed
+597
-53
No files matched your search
@@ -1,6 +1,7 @@
|
||||
package lnwallet
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"encoding/binary"
|
||||
"encoding/hex"
|
||||
@@ -21,6 +22,8 @@ import (
|
||||
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
"github.com/lightningnetwork/lnd/shachain"
|
||||
"github.com/lightningnetwork/lnd/tlv"
|
||||
"github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
@@ -369,9 +372,13 @@ func CreateTestChannels(t *testing.T, chanType channeldb.ChannelType,
|
||||
|
||||
// TODO(roasbeef): make mock version of pre-image store
|
||||
|
||||
auxSigner := NewDefaultAuxSignerMock(t)
|
||||
|
||||
alicePool := NewSigPool(1, aliceSigner)
|
||||
channelAlice, err := NewLightningChannel(
|
||||
aliceSigner, aliceChannelState, alicePool,
|
||||
WithLeafStore(&MockAuxLeafStore{}),
|
||||
WithAuxSigner(auxSigner),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@@ -386,6 +393,8 @@ func CreateTestChannels(t *testing.T, chanType channeldb.ChannelType,
|
||||
bobPool := NewSigPool(1, bobSigner)
|
||||
channelBob, err := NewLightningChannel(
|
||||
bobSigner, bobChannelState, bobPool,
|
||||
WithLeafStore(&MockAuxLeafStore{}),
|
||||
WithAuxSigner(auxSigner),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@@ -586,3 +595,38 @@ func ForceStateTransition(chanA, chanB *LightningChannel) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func NewDefaultAuxSignerMock(t *testing.T) *MockAuxSigner {
|
||||
auxSigner := &MockAuxSigner{}
|
||||
|
||||
type testSigBlob struct {
|
||||
BlobInt tlv.RecordT[tlv.TlvType65634, uint16]
|
||||
}
|
||||
|
||||
var sigBlobBuf bytes.Buffer
|
||||
sigBlob := testSigBlob{
|
||||
BlobInt: tlv.NewPrimitiveRecord[tlv.TlvType65634, uint16](5),
|
||||
}
|
||||
tlvStream, err := tlv.NewStream(sigBlob.BlobInt.Record())
|
||||
require.NoError(t, err, "unable to create tlv stream")
|
||||
require.NoError(t, tlvStream.Encode(&sigBlobBuf))
|
||||
|
||||
auxSigner.On(
|
||||
"SubmitSecondLevelSigBatch", mock.Anything, mock.Anything,
|
||||
mock.Anything,
|
||||
).Return(nil)
|
||||
auxSigner.On(
|
||||
"PackSigs", mock.Anything,
|
||||
).Return(fn.Ok(fn.Some(sigBlobBuf.Bytes())))
|
||||
auxSigner.On(
|
||||
"UnpackSigs", mock.Anything,
|
||||
).Return(fn.Ok([]fn.Option[tlv.Blob]{
|
||||
fn.Some(sigBlobBuf.Bytes()),
|
||||
}))
|
||||
auxSigner.On(
|
||||
"VerifySecondLevelSigs", mock.Anything, mock.Anything,
|
||||
mock.Anything,
|
||||
).Return(nil)
|
||||
|
||||
return auxSigner
|
||||
}
|
||||
Reference in new issue
Block a user