@@ -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,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