@@ -156,21 +156,22 @@ func (s *swapClientServer) LoopOut(ctx context.Context,
156156 return nil , err
157157 }
158158
159+ // Infer if the publication deadline is set in milliseconds.
160+ publicationDeadline := getPublicationDeadline (in .SwapPublicationDeadline )
161+
159162 req := & loop.OutRequest {
160- Amount : btcutil .Amount (in .Amt ),
161- DestAddr : sweepAddr ,
162- MaxMinerFee : btcutil .Amount (in .MaxMinerFee ),
163- MaxPrepayAmount : btcutil .Amount (in .MaxPrepayAmt ),
164- MaxPrepayRoutingFee : btcutil .Amount (in .MaxPrepayRoutingFee ),
165- MaxSwapRoutingFee : btcutil .Amount (in .MaxSwapRoutingFee ),
166- MaxSwapFee : btcutil .Amount (in .MaxSwapFee ),
167- SweepConfTarget : sweepConfTarget ,
168- HtlcConfirmations : in .HtlcConfirmations ,
169- SwapPublicationDeadline : time .Unix (
170- int64 (in .SwapPublicationDeadline ), 0 ,
171- ),
172- Label : in .Label ,
173- Initiator : in .Initiator ,
163+ Amount : btcutil .Amount (in .Amt ),
164+ DestAddr : sweepAddr ,
165+ MaxMinerFee : btcutil .Amount (in .MaxMinerFee ),
166+ MaxPrepayAmount : btcutil .Amount (in .MaxPrepayAmt ),
167+ MaxPrepayRoutingFee : btcutil .Amount (in .MaxPrepayRoutingFee ),
168+ MaxSwapRoutingFee : btcutil .Amount (in .MaxSwapRoutingFee ),
169+ MaxSwapFee : btcutil .Amount (in .MaxSwapFee ),
170+ SweepConfTarget : sweepConfTarget ,
171+ HtlcConfirmations : in .HtlcConfirmations ,
172+ SwapPublicationDeadline : publicationDeadline ,
173+ Label : in .Label ,
174+ Initiator : in .Initiator ,
174175 }
175176
176177 switch {
@@ -538,13 +539,14 @@ func (s *swapClientServer) LoopOutQuote(ctx context.Context,
538539 if err != nil {
539540 return nil , err
540541 }
542+
543+ publicactionDeadline := getPublicationDeadline (req .SwapPublicationDeadline )
544+
541545 quote , err := s .impl .LoopOutQuote (ctx , & loop.LoopOutQuoteRequest {
542- Amount : btcutil .Amount (req .Amt ),
543- SweepConfTarget : confTarget ,
544- SwapPublicationDeadline : time .Unix (
545- int64 (req .SwapPublicationDeadline ), 0 ,
546- ),
547- Initiator : defaultLoopdInitiator ,
546+ Amount : btcutil .Amount (req .Amt ),
547+ SweepConfTarget : confTarget ,
548+ SwapPublicationDeadline : publicactionDeadline ,
549+ Initiator : defaultLoopdInitiator ,
548550 })
549551 if err != nil {
550552 return nil , err
@@ -1249,3 +1251,19 @@ func hasBandwidth(channels []lndclient.ChannelInfo, amt btcutil.Amount,
12491251
12501252 return false , 0
12511253}
1254+
1255+ // getPublicationDeadline returns the publication deadline for a swap given the
1256+ // unix timestamp. If the timestamp is believed to be in milliseconds, then it
1257+ // is converted to seconds.
1258+ func getPublicationDeadline (unixTimestamp uint64 ) time.Time {
1259+ length := len (fmt .Sprintf ("%d" , unixTimestamp ))
1260+ if length >= 13 {
1261+ // Likely a millisecond timestamp
1262+ secs := unixTimestamp / 1000
1263+ nsecs := (unixTimestamp % 1000 ) * 1e6
1264+ return time .Unix (int64 (secs ), int64 (nsecs ))
1265+ } else {
1266+ // Likely a second timestamp
1267+ return time .Unix (int64 (unixTimestamp ), 0 )
1268+ }
1269+ }
0 commit comments