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