Skip to content

Commit 356b673

Browse files
sputn1ckhieblmi
authored andcommitted
staticaddr/loopin: allow for more fee versions
This commit changes the loopin sweepless sweep handling, by changing the hardcoded fee messages to a map of fee versions.
1 parent 44092a7 commit 356b673

File tree

3 files changed

+174
-339
lines changed

3 files changed

+174
-339
lines changed

staticaddr/loopin/actions.go

Lines changed: 49 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"github.com/btcsuite/btcd/btcec/v2/schnorr/musig2"
1313
"github.com/btcsuite/btcd/btcutil"
1414
"github.com/btcsuite/btcd/txscript"
15+
"github.com/btcsuite/btcd/wire"
1516
"github.com/btcsuite/btcwallet/chain"
1617
"github.com/lightninglabs/lndclient"
1718
"github.com/lightninglabs/loop"
@@ -804,152 +805,65 @@ func (f *FSM) FetchSignPushSweeplessSweepTxAction(ctx context.Context,
804805
f.Warnf("unable to decode sweep address: %v", err)
805806
}
806807

807-
// Standard fee.
808-
feeRate := chainfee.SatPerKWeight(fetchResp.StandardFeeInfo.FeeRate)
809-
serverNonces, err := toNonces(fetchResp.StandardFeeInfo.Nonces)
810-
if err != nil {
811-
err = fmt.Errorf("unable to convert server nonces: %w", err)
812-
813-
return f.HandleError(err)
814-
}
815-
816-
// High fee.
817-
highFeeRate := chainfee.SatPerKWeight(fetchResp.HighFeeInfo.FeeRate)
818-
serverHighFeeNonces, err := toNonces(fetchResp.HighFeeInfo.Nonces)
819-
if err != nil {
820-
err = fmt.Errorf("unable to convert high fee server "+
821-
"nonces: %w", err)
822-
823-
return f.HandleError(err)
824-
}
825-
826-
// Extremely high fee.
827-
extremeFeeRate := chainfee.SatPerKWeight(
828-
fetchResp.ExtremeFeeInfo.FeeRate,
829-
)
830-
serverExtremeNonces, err := toNonces(
831-
fetchResp.ExtremeFeeInfo.Nonces,
832-
)
833-
if err != nil {
834-
err = fmt.Errorf("unable to convert extremely high fee "+
835-
"server nonces: %w", err)
836-
837-
return f.HandleError(err)
838-
}
839-
840-
// Standard sessions.
841-
sessions, nonces, err := f.loopIn.createMusig2Sessions(
842-
ctx, f.cfg.Signer,
843-
)
844-
if err != nil {
845-
return f.HandleError(err)
846-
}
847-
clientNonces, err := toNonces(nonces)
848-
if err != nil {
849-
return f.HandleError(err)
850-
}
851-
852-
// High fee sessions.
853-
highFeeSessions, highFeeClientNonces, err :=
854-
f.loopIn.createMusig2Sessions(ctx, f.cfg.Signer)
855-
856-
if err != nil {
857-
return f.HandleError(err)
858-
}
859-
highClientNonces, err := toNonces(highFeeClientNonces)
860-
if err != nil {
861-
return f.HandleError(err)
862-
}
863-
864-
// Extremely high sessions.
865-
extremeSessions, extremeClientNonces, err :=
866-
f.loopIn.createMusig2Sessions(ctx, f.cfg.Signer)
867-
868-
if err != nil {
869-
return f.HandleError(err)
870-
}
871-
extremelyHighClientNonces, err := toNonces(extremeClientNonces)
872-
if err != nil {
873-
return f.HandleError(err)
874-
}
808+
clientResponse := make(map[uint64]*looprpc.ClientSweeplessSigningInfo)
875809

876-
// Create standard fee.
877-
sweepTx, err := f.loopIn.createSweeplessSweepTx(address, feeRate)
878-
if err != nil {
879-
err = fmt.Errorf("unable to create sweepless sweep tx: %w", err)
880-
return f.HandleError(err)
881-
}
882-
883-
// Create high fee.
884-
highFeeSweepTx, err := f.loopIn.createSweeplessSweepTx(
885-
address, highFeeRate,
810+
var (
811+
nonces [][]byte
812+
clientNonces [][musig2.PubNonceSize]byte
813+
serverNonces [][musig2.PubNonceSize]byte
814+
sessions []*input.MuSig2SessionInfo
815+
sweepTx *wire.MsgTx
816+
sweeplessClientSigs [][]byte
886817
)
887-
if err != nil {
888-
err = fmt.Errorf("unable to create high fee sweepless sweep "+
889-
"tx: %w", err)
890-
891-
return f.HandleError(err)
892-
}
893-
894-
// Create extremely high fee.
895-
extremelyHighFeeSweepTx, err := f.loopIn.createSweeplessSweepTx(
896-
address, extremeFeeRate,
897-
)
898-
if err != nil {
899-
err = fmt.Errorf("unable to create extremely high fee "+
900-
"sweepless sweep tx: %w", err)
901-
902-
return f.HandleError(err)
903-
}
818+
for feeRate, serverInfo := range fetchResp.FeeRateToNonces {
819+
satPerKW := chainfee.SatPerKWeight(feeRate)
820+
serverNonces, err = toNonces(serverInfo.Nonces)
821+
if err != nil {
822+
err = fmt.Errorf("unable to convert server nonces: %w",
823+
err)
824+
return f.HandleError(err)
825+
}
904826

905-
// Sign standard.
906-
sweeplessClientSigs, err := f.loopIn.signMusig2Tx(
907-
ctx, sweepTx, f.cfg.Signer, sessions, serverNonces,
908-
)
909-
if err != nil {
910-
err = fmt.Errorf("unable to sign sweepless sweep tx: %w", err)
911-
return f.HandleError(err)
912-
}
827+
sessions, nonces, err = f.loopIn.createMusig2Sessions(
828+
ctx, f.cfg.Signer,
829+
)
830+
if err != nil {
831+
return f.HandleError(err)
832+
}
913833

914-
// Sign high fee.
915-
highFeeSigs, err := f.loopIn.signMusig2Tx(
916-
ctx, highFeeSweepTx, f.cfg.Signer, highFeeSessions,
917-
serverHighFeeNonces,
918-
)
919-
if err != nil {
920-
err = fmt.Errorf("unable to sign high fee sweepless sweep "+
921-
"tx: %w", err)
834+
clientNonces, err = toNonces(nonces)
835+
if err != nil {
836+
return f.HandleError(err)
837+
}
922838

923-
return f.HandleError(err)
924-
}
839+
sweepTx, err = f.loopIn.createSweeplessSweepTx(
840+
address, satPerKW,
841+
)
842+
if err != nil {
843+
err = fmt.Errorf("unable to create sweepless sweep "+
844+
"tx: %w", err)
845+
return f.HandleError(err)
846+
}
925847

926-
// Sign extremely high fee.
927-
extremelyHighSigs, err := f.loopIn.signMusig2Tx(
928-
ctx, extremelyHighFeeSweepTx, f.cfg.Signer, extremeSessions,
929-
serverExtremeNonces,
930-
)
931-
if err != nil {
932-
err = fmt.Errorf("unable to sign extremely high fee "+
933-
"sweepless sweep tx: %w", err)
848+
sweeplessClientSigs, err = f.loopIn.signMusig2Tx(
849+
ctx, sweepTx, f.cfg.Signer, sessions, serverNonces,
850+
)
851+
if err != nil {
852+
err = fmt.Errorf("unable to sign sweepless sweep tx: "+
853+
"%w", err)
854+
return f.HandleError(err)
855+
}
934856

935-
return f.HandleError(err)
857+
clientResponse[feeRate] = &looprpc.ClientSweeplessSigningInfo{
858+
Nonces: fromNonces(clientNonces),
859+
Sigs: sweeplessClientSigs,
860+
}
936861
}
937862

938863
// Push sweepless sigs to the server.
939864
req := &looprpc.PushStaticAddressSweeplessSigsRequest{
940-
SwapHash: f.loopIn.SwapHash[:],
941-
StandardSigningInfo: &looprpc.ClientSweeplessSigningInfo{
942-
Nonces: fromNonces(clientNonces),
943-
Sigs: sweeplessClientSigs,
944-
},
945-
HighFeeSigningInfo: &looprpc.ClientSweeplessSigningInfo{
946-
Nonces: fromNonces(highClientNonces),
947-
Sigs: highFeeSigs,
948-
},
949-
ExtremeFeeSigningInfo: &looprpc.ClientSweeplessSigningInfo{
950-
Nonces: fromNonces(extremelyHighClientNonces),
951-
Sigs: extremelyHighSigs,
952-
},
865+
SwapHash: f.loopIn.SwapHash[:],
866+
SigningInfo: clientResponse,
953867
}
954868
_, err = f.cfg.Server.PushStaticAddressSweeplessSigs(ctx, req)
955869
if err != nil {

0 commit comments

Comments
 (0)