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
+20
-4
@@ -2191,10 +2191,20 @@ func (l *channelLink) handleUpstreamMsg(msg lnwire.Message) {
|
||||
// We just received a new updates to our local commitment
|
||||
// chain, validate this new commitment, closing the link if
|
||||
// invalid.
|
||||
auxSigBlob, err := msg.CustomRecords.Serialize()
|
||||
if err != nil {
|
||||
l.failf(
|
||||
LinkFailureError{code: ErrInvalidCommitment},
|
||||
"unable to serialize custom records: %v", err,
|
||||
)
|
||||
|
||||
return
|
||||
}
|
||||
err = l.channel.ReceiveNewCommitment(&lnwallet.CommitSigs{
|
||||
CommitSig: msg.CommitSig,
|
||||
HtlcSigs: msg.HtlcSigs,
|
||||
PartialSig: msg.PartialSig,
|
||||
AuxSigBlob: auxSigBlob,
|
||||
})
|
||||
if err != nil {
|
||||
// If we were unable to reconstruct their proposed
|
||||
@@ -2621,11 +2631,17 @@ func (l *channelLink) updateCommitTx() error {
|
||||
default:
|
||||
}
|
||||
|
||||
auxBlobRecords, err := lnwire.ParseCustomRecords(newCommit.AuxSigBlob)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error parsing aux sigs: %w", err)
|
||||
}
|
||||
|
||||
commitSig := &lnwire.CommitSig{
|
||||
ChanID: l.ChanID(),
|
||||
CommitSig: newCommit.CommitSig,
|
||||
HtlcSigs: newCommit.HtlcSigs,
|
||||
PartialSig: newCommit.PartialSig,
|
||||
ChanID: l.ChanID(),
|
||||
CommitSig: newCommit.CommitSig,
|
||||
HtlcSigs: newCommit.HtlcSigs,
|
||||
PartialSig: newCommit.PartialSig,
|
||||
CustomRecords: auxBlobRecords,
|
||||
}
|
||||
l.cfg.Peer.SendMessage(false, commitSig)
|
||||
|
||||
|
||||
@@ -268,9 +268,12 @@ func TestChannelLinkRevThenSig(t *testing.T) {
|
||||
|
||||
// Restart Bob as well by calling NewLightningChannel.
|
||||
bobSigner := harness.bobChannel.Signer
|
||||
signerMock := lnwallet.NewDefaultAuxSignerMock(t)
|
||||
bobPool := lnwallet.NewSigPool(runtime.NumCPU(), bobSigner)
|
||||
bobChannel, err := lnwallet.NewLightningChannel(
|
||||
bobSigner, harness.bobChannel.State(), bobPool,
|
||||
lnwallet.WithLeafStore(&lnwallet.MockAuxLeafStore{}),
|
||||
lnwallet.WithAuxSigner(signerMock),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
err = bobPool.Start()
|
||||
@@ -403,9 +406,12 @@ func TestChannelLinkSigThenRev(t *testing.T) {
|
||||
|
||||
// Restart Bob as well by calling NewLightningChannel.
|
||||
bobSigner := harness.bobChannel.Signer
|
||||
signerMock := lnwallet.NewDefaultAuxSignerMock(t)
|
||||
bobPool := lnwallet.NewSigPool(runtime.NumCPU(), bobSigner)
|
||||
bobChannel, err := lnwallet.NewLightningChannel(
|
||||
bobSigner, harness.bobChannel.State(), bobPool,
|
||||
lnwallet.WithLeafStore(&lnwallet.MockAuxLeafStore{}),
|
||||
lnwallet.WithAuxSigner(signerMock),
|
||||
)
|
||||
require.NoError(t, err)
|
||||
err = bobPool.Start()
|
||||
|
||||
@@ -351,8 +351,11 @@ func createTestChannel(t *testing.T, alicePrivKey, bobPrivKey []byte,
|
||||
)
|
||||
|
||||
alicePool := lnwallet.NewSigPool(runtime.NumCPU(), aliceSigner)
|
||||
signerMock := lnwallet.NewDefaultAuxSignerMock(t)
|
||||
channelAlice, err := lnwallet.NewLightningChannel(
|
||||
aliceSigner, aliceChannelState, alicePool,
|
||||
lnwallet.WithLeafStore(&lnwallet.MockAuxLeafStore{}),
|
||||
lnwallet.WithAuxSigner(signerMock),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@@ -362,6 +365,8 @@ func createTestChannel(t *testing.T, alicePrivKey, bobPrivKey []byte,
|
||||
bobPool := lnwallet.NewSigPool(runtime.NumCPU(), bobSigner)
|
||||
channelBob, err := lnwallet.NewLightningChannel(
|
||||
bobSigner, bobChannelState, bobPool,
|
||||
lnwallet.WithLeafStore(&lnwallet.MockAuxLeafStore{}),
|
||||
lnwallet.WithAuxSigner(signerMock),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
@@ -423,6 +428,8 @@ func createTestChannel(t *testing.T, alicePrivKey, bobPrivKey []byte,
|
||||
|
||||
newAliceChannel, err := lnwallet.NewLightningChannel(
|
||||
aliceSigner, aliceStoredChannel, alicePool,
|
||||
lnwallet.WithLeafStore(&lnwallet.MockAuxLeafStore{}),
|
||||
lnwallet.WithAuxSigner(signerMock),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Errorf("unable to create new channel: %v",
|
||||
@@ -469,6 +476,8 @@ func createTestChannel(t *testing.T, alicePrivKey, bobPrivKey []byte,
|
||||
|
||||
newBobChannel, err := lnwallet.NewLightningChannel(
|
||||
bobSigner, bobStoredChannel, bobPool,
|
||||
lnwallet.WithLeafStore(&lnwallet.MockAuxLeafStore{}),
|
||||
lnwallet.WithAuxSigner(signerMock),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, errors.Errorf("unable to create new channel: %v",
|
||||
|
||||
Reference in new issue
Block a user