Skip to content

Commit 5adf6a8

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 5adf6a8

File tree

3 files changed

+175
-339
lines changed

3 files changed

+175
-339
lines changed

staticaddr/loopin/actions.go

Lines changed: 50 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"crypto/rand"
66
"errors"
77
"fmt"
8+
"github.com/btcsuite/btcd/wire"
89
"strings"
910
"time"
1011

@@ -804,152 +805,66 @@ 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-
}
875-
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,
886-
)
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-
}
808+
clientResponse := make(map[uint64]*looprpc.ClientSweeplessSigningInfo)
893809

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)
810+
for feeRate, serverInfo := range fetchResp.FeeRateToNonces {
811+
var (
812+
satPerKW = chainfee.SatPerKWeight(feeRate)
813+
nonces [][]byte
814+
clientNonces [][musig2.PubNonceSize]byte
815+
serverNonces [][musig2.PubNonceSize]byte
816+
sessions []*input.MuSig2SessionInfo
817+
sweepTx *wire.MsgTx
818+
sweeplessClientSigs [][]byte
819+
)
901820

902-
return f.HandleError(err)
903-
}
821+
serverNonces, err = toNonces(serverInfo.Nonces)
822+
if err != nil {
823+
err = fmt.Errorf("unable to convert server nonces: %w",
824+
err)
825+
return f.HandleError(err)
826+
}
904827

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-
}
828+
sessions, nonces, err = f.loopIn.createMusig2Sessions(
829+
ctx, f.cfg.Signer,
830+
)
831+
if err != nil {
832+
return f.HandleError(err)
833+
}
913834

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)
835+
clientNonces, err = toNonces(nonces)
836+
if err != nil {
837+
return f.HandleError(err)
838+
}
922839

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

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)
849+
sweeplessClientSigs, err = f.loopIn.signMusig2Tx(
850+
ctx, sweepTx, f.cfg.Signer, sessions, serverNonces,
851+
)
852+
if err != nil {
853+
err = fmt.Errorf("unable to sign sweepless sweep tx: "+
854+
"%w", err)
855+
return f.HandleError(err)
856+
}
934857

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

938864
// Push sweepless sigs to the server.
939865
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-
},
866+
SwapHash: f.loopIn.SwapHash[:],
867+
SigningInfo: clientResponse,
953868
}
954869
_, err = f.cfg.Server.PushStaticAddressSweeplessSigs(ctx, req)
955870
if err != nil {

0 commit comments

Comments
 (0)