ln-service 53.7.0 → 53.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +5 -1
  2. package/README.md +38 -2
  3. package/index.js +4 -2
  4. package/package.json +9 -6
  5. package/test/integration/test_add_peer.js +4 -2
  6. package/test/integration/test_delete_pending_channel.js +5 -2
  7. package/test/integration/test_get_closed_channels.js +0 -2
  8. package/test/integration/test_get_invoice.js +0 -1
  9. package/test/integration/test_get_node.js +13 -1
  10. package/test/integration/test_get_peers.js +32 -21
  11. package/test/integration/test_get_pending_force.js +1 -1
  12. package/test/integration/test_get_wallet_info.js +32 -26
  13. package/test/integration/test_open_channels.js +22 -15
  14. package/test/integration/test_pay.js +0 -1
  15. package/test/integration/test_pay_private_invoice.js +0 -1
  16. package/test/integration/test_propose_channel.js +438 -421
  17. package/test/integration/test_remove_peer.js +13 -9
  18. package/test/integration/test_send_message_to_peer.js +39 -28
  19. package/test/integration/test_send_to_chain_address.js +4 -0
  20. package/test/integration/test_subscribe_to_channels.js +0 -1
  21. package/test/integration/test_subscribe_to_invoices.js +80 -78
  22. package/test/integration/test_subscribe_to_peer_messages.js +6 -4
  23. package/test/integration/test_subscribe_to_peers.js +23 -19
  24. package/test/invoicesrpc-integration/test_get_sweep_transactions.js +0 -2
  25. package/test/invoicesrpc-integration/test_subscribe_cancel_invoice.js +0 -1
  26. package/test/macros/wait_for_channel.js +1 -1
  27. package/test/routerrpc-integration/test_delete_forwarding_reputations.js +61 -27
  28. package/test/routerrpc-integration/test_get_forwarding_reputations.js +42 -14
  29. package/test/routerrpc-integration/test_get_route_through_hops.js +33 -22
  30. package/test/routerrpc-integration/test_multipath_payment.js +0 -1
  31. package/test/routerrpc-integration/test_pay_via_payment_details.js +118 -111
  32. package/test/routerrpc-integration/test_pay_via_payment_request.js +92 -80
  33. package/test/routerrpc-integration/test_probe_for_route.js +78 -74
  34. package/test/routerrpc-integration/test_subscribe_to_forward_requests.js +0 -1
  35. package/test/routerrpc-integration/test_subscribe_to_forwards.js +518 -505
  36. package/test/routerrpc-integration/test_subscribe_to_past_payments.js +0 -3
  37. package/test/tower_clientrpc-integration/test_get_connected_watchtowers.js +0 -3
  38. package/test/walletrpc-integration/test_fund_psbt.js +113 -1
  39. package/test/walletrpc-integration/test_get_master_public_keys.js +79 -0
  40. package/test/walletrpc-integration/test_partially_sign_psbt.js +17 -5
  41. package/test/walletrpc-integration/test_sign_psbt.js +4 -1
@@ -17,7 +17,7 @@ const {subscribeToForwards} = require('./../../');
17
17
  const anchorsFeatureBit = 23;
18
18
  const interval = 10;
19
19
  const size = 3;
20
- const times = 100;
20
+ const times = 1000;
21
21
  const tokens = 100;
22
22
 
23
23
  // Subscribing to forwards should show forwarding events
@@ -26,526 +26,539 @@ test('Subscribe to forwards', async ({end, equal, rejects, strictSame}) => {
26
26
 
27
27
  const [{generate, lnd}, target, remote] = nodes;
28
28
 
29
- const {features} = await getWalletInfo({lnd});
30
- const testSub = subscribeToForwards({lnd});
31
-
32
- const isAnchors = !!features.find(n => n.bit === anchorsFeatureBit);
33
-
34
- const controlChannel = await setupChannel({generate, lnd, to: target});
35
-
36
- const targetChannel = await setupChannel({
37
- generate: target.generate,
38
- give: 5e5,
39
- lnd: target.lnd,
40
- to: remote,
41
- });
42
-
43
- await addPeer({lnd, public_key: remote.id, socket: remote.socket});
44
-
45
- await delay(3000);
46
-
47
- const controlErrors = [];
48
- const controlForwards = [];
49
- const controlSub = subscribeToForwards({lnd});
50
- const targetErrors = [];
51
- const targetForwards = [];
52
- const targetSub = subscribeToForwards({lnd: target.lnd});
53
- const remoteErrors = [];
54
- const remoteForwards = [];
55
- const remoteSub = subscribeToForwards({lnd: remote.lnd});
56
-
57
- controlSub.on('error', err => controlErrors.push(err));
58
- controlSub.on('forward', forward => controlForwards.push(forward));
59
- targetSub.on('error', err => targetErrors.push(err));
60
- targetSub.on('forward', forward => targetForwards.push(forward));
61
- remoteSub.on('error', err => remoteErrors.push(err));
62
- remoteSub.on('forward', forward => remoteForwards.push(forward));
63
-
64
- await asyncRetry({interval, times}, async () => {
65
- // Pay the remote through the target
66
- await payViaPaymentRequest({
67
- lnd,
68
- request: (await createInvoice({lnd: remote.lnd, tokens})).request,
29
+ try {
30
+ const {features} = await getWalletInfo({lnd});
31
+ const testSub = subscribeToForwards({lnd});
32
+
33
+ const isAnchors = !!features.find(n => n.bit === anchorsFeatureBit);
34
+
35
+ const controlChannel = await setupChannel({generate, lnd, to: target});
36
+
37
+ const targetChannel = await setupChannel({
38
+ generate: target.generate,
39
+ give: 5e5,
40
+ lnd: target.lnd,
41
+ to: remote,
69
42
  });
70
- });
71
43
 
72
- const [channel] = (await getChannels({lnd: remote.lnd})).channels;
44
+ await asyncRetry({interval, times}, async () => {
45
+ await addPeer({
46
+ lnd,
47
+ public_key: remote.id,
48
+ retry_count: 1,
49
+ retry_delay: 1,
50
+ socket: remote.socket,
51
+ timeout: 1000,
52
+ });
53
+ });
73
54
 
74
- const tooMuchInvoice = await createInvoice({
75
- lnd: remote.lnd,
76
- tokens: channel.remote_balance,
77
- });
55
+ await delay(3000);
56
+
57
+ const controlErrors = [];
58
+ const controlForwards = [];
59
+ const controlSub = subscribeToForwards({lnd});
60
+ const targetErrors = [];
61
+ const targetForwards = [];
62
+ const targetSub = subscribeToForwards({lnd: target.lnd});
63
+ const remoteErrors = [];
64
+ const remoteForwards = [];
65
+ const remoteSub = subscribeToForwards({lnd: remote.lnd});
66
+
67
+ controlSub.on('error', err => controlErrors.push(err));
68
+ controlSub.on('forward', forward => controlForwards.push(forward));
69
+ targetSub.on('error', err => targetErrors.push(err));
70
+ targetSub.on('forward', forward => targetForwards.push(forward));
71
+ remoteSub.on('error', err => remoteErrors.push(err));
72
+ remoteSub.on('forward', forward => remoteForwards.push(forward));
73
+
74
+ await asyncRetry({interval, times}, async () => {
75
+ // Pay the remote through the target
76
+ await payViaPaymentRequest({
77
+ lnd,
78
+ request: (await createInvoice({lnd: remote.lnd, tokens})).request,
79
+ });
80
+ });
78
81
 
82
+ const [channel] = (await getChannels({lnd: remote.lnd})).channels;
79
83
 
80
- await rejects(
81
- payViaPaymentRequest({lnd, request: tooMuchInvoice.request}),
82
- [503, 'PaymentPathfindingFailedToFindPossibleRoute'],
83
- 'TempChan fail'
84
- );
84
+ const tooMuchInvoice = await createInvoice({
85
+ lnd: remote.lnd,
86
+ tokens: channel.remote_balance,
87
+ });
85
88
 
86
- const deadInvoice = await createInvoice({tokens, lnd: target.lnd});
87
89
 
88
- await cancelHodlInvoice({id: deadInvoice.id, lnd: target.lnd});
90
+ await rejects(
91
+ payViaPaymentRequest({lnd, request: tooMuchInvoice.request}),
92
+ [503, 'PaymentPathfindingFailedToFindPossibleRoute'],
93
+ 'TempChan fail'
94
+ );
89
95
 
90
- await rejects(
91
- payViaPaymentRequest({lnd, request: deadInvoice.request}),
92
- [503, 'PaymentRejectedByDestination'],
93
- 'Rejection fail'
94
- );
96
+ const deadInvoice = await createInvoice({tokens, lnd: target.lnd});
95
97
 
96
- const [err] = controlErrors;
98
+ await cancelHodlInvoice({id: deadInvoice.id, lnd: target.lnd});
97
99
 
98
- if (!!err && err.details === 'unknown service routerrpc.Router') {
99
- await kill({});
100
+ await rejects(
101
+ payViaPaymentRequest({lnd, request: deadInvoice.request}),
102
+ [503, 'PaymentRejectedByDestination'],
103
+ 'Rejection fail'
104
+ );
100
105
 
101
- return end();
102
- }
106
+ const [err] = controlErrors;
107
+
108
+ if (!!err && err.details === 'unknown service routerrpc.Router') {
109
+ await kill({});
103
110
 
104
- await asyncRetry({interval: 1000, times: 30}, async () => {
105
- if (controlForwards.length !== 6) {
106
- throw new Error('ExpectedFullListOfControlForwards');
111
+ return end();
107
112
  }
108
113
 
109
- return;
110
- });
111
-
112
- [controlSub, remoteSub, targetSub].forEach(n => n.removeAllListeners());
113
-
114
- // LND 0.13.0 and below do not support secret
115
- [controlForwards, targetForwards, remoteForwards].forEach(forwards => {
116
- return forwards.forEach(n => delete n.at && delete n.secret);
117
- });
118
-
119
- const height = (await getHeight({lnd})).current_block_height;
120
-
121
- // LND 0.11.1 and before do not use anchor channels
122
- if (!isAnchors) {
123
- strictSame(controlForwards, [
124
- {
125
- cltv_delta: undefined,
126
- external_failure: undefined,
127
- fee: undefined,
128
- fee_mtokens: undefined,
129
- in_channel: undefined,
130
- in_payment: undefined,
131
- internal_failure: undefined,
132
- is_confirmed: false,
133
- is_failed: false,
134
- is_receive: false,
135
- is_send: true,
136
- mtokens: '101000',
137
- out_channel: controlChannel.id,
138
- out_payment: 0,
139
- timeout: height + 40 + 43,
140
- tokens: 101,
141
- },
142
- {
143
- cltv_delta: undefined,
144
- external_failure: undefined,
145
- fee: undefined,
146
- fee_mtokens: undefined,
147
- in_channel: undefined,
148
- in_payment: undefined,
149
- internal_failure: undefined,
150
- is_confirmed: true,
151
- is_failed: false,
152
- is_receive: false,
153
- is_send: true,
154
- mtokens: undefined,
155
- out_channel: controlChannel.id,
156
- out_payment: 0,
157
- timeout: undefined,
158
- tokens: undefined,
159
- },
160
- {
161
- cltv_delta: undefined,
162
- external_failure: undefined,
163
- fee: undefined,
164
- fee_mtokens: undefined,
165
- in_channel: undefined,
166
- in_payment: undefined,
167
- internal_failure: undefined,
168
- is_confirmed: false,
169
- is_failed: false,
170
- is_receive: false,
171
- is_send: true,
172
- mtokens: '490851490',
173
- out_channel: controlChannel.id,
174
- out_payment: 1,
175
- timeout: height + 40 + 43,
176
- tokens: 490851,
177
- },
178
- {
179
- cltv_delta: undefined,
180
- external_failure: undefined,
181
- fee: undefined,
182
- fee_mtokens: undefined,
183
- in_channel: undefined,
184
- in_payment: undefined,
185
- internal_failure: undefined,
186
- is_confirmed: false,
187
- is_failed: true,
188
- is_receive: false,
189
- is_send: true,
190
- mtokens: undefined,
191
- out_channel: controlChannel.id,
192
- out_payment: 1,
193
- timeout: undefined,
194
- tokens: undefined,
195
- },
196
- {
197
- cltv_delta: undefined,
198
- external_failure: undefined,
199
- fee: undefined,
200
- fee_mtokens: undefined,
201
- in_channel: undefined,
202
- in_payment: undefined,
203
- internal_failure: undefined,
204
- is_confirmed: false,
205
- is_failed: false,
206
- is_receive: false,
207
- is_send: true,
208
- mtokens: '100000',
209
- out_channel: controlChannel.id,
210
- out_payment: 2,
211
- timeout: height + 43,
212
- tokens: 100,
213
- },
214
- {
215
- cltv_delta: undefined,
216
- external_failure: undefined,
217
- fee: undefined,
218
- fee_mtokens: undefined,
219
- in_channel: undefined,
220
- in_payment: undefined,
221
- internal_failure: undefined,
222
- is_confirmed: false,
223
- is_failed: true,
224
- is_receive: false,
225
- is_send: true,
226
- mtokens: undefined,
227
- out_channel: controlChannel.id,
228
- out_payment: 2,
229
- timeout: undefined,
230
- tokens: undefined,
231
- },
232
- ],
233
- 'Got control forward events');
234
-
235
- strictSame(targetForwards, [
236
- {
237
- cltv_delta: 40,
238
- external_failure: undefined,
239
- fee: 1,
240
- fee_mtokens: '1000',
241
- in_channel: controlChannel.id,
242
- in_payment: 0,
243
- internal_failure: undefined,
244
- is_confirmed: false,
245
- is_failed: false,
246
- is_receive: false,
247
- is_send: false,
248
- mtokens: '100000',
249
- out_channel: targetChannel.id,
250
- out_payment: 0,
251
- timeout: 497,
252
- tokens: 100,
253
- },
254
- {
255
- cltv_delta: undefined,
256
- external_failure: undefined,
257
- fee: undefined,
258
- fee_mtokens: undefined,
259
- in_channel: controlChannel.id,
260
- in_payment: 0,
261
- internal_failure: undefined,
262
- is_confirmed: true,
263
- is_failed: false,
264
- is_receive: false,
265
- is_send: false,
266
- mtokens: undefined,
267
- out_channel: targetChannel.id,
268
- out_payment: 0,
269
- timeout: undefined,
270
- tokens: undefined,
271
- },
272
- {
273
- cltv_delta: 40,
274
- external_failure: 'TEMPORARY_CHANNEL_FAILURE',
275
- fee: 1,
276
- fee_mtokens: '1490',
277
- in_channel: controlChannel.id,
278
- in_payment: 1,
279
- internal_failure: 'INSUFFICIENT_BALANCE',
280
- is_confirmed: false,
281
- is_failed: true,
282
- is_receive: false,
283
- is_send: false,
284
- mtokens: '490850000',
285
- out_channel: targetChannel.id,
286
- out_payment: 0,
287
- timeout: 497,
288
- tokens: 490850,
289
- },
290
- {
291
- cltv_delta: undefined,
292
- external_failure: 'INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS',
293
- fee: undefined,
294
- fee_mtokens: undefined,
295
- in_channel: controlChannel.id,
296
- in_payment: 2,
297
- internal_failure: 'INVOICE_NOT_OPEN',
298
- is_confirmed: false,
299
- is_failed: true,
300
- is_receive: true,
301
- is_send: false,
302
- mtokens: undefined,
303
- out_channel: undefined,
304
- out_payment: undefined,
305
- timeout: undefined,
306
- tokens: undefined,
307
- },
308
- ],
309
- 'Got target forward events');
310
-
311
- strictSame(remoteForwards, [
312
- {
313
- cltv_delta: undefined,
314
- external_failure: undefined,
315
- fee: undefined,
316
- fee_mtokens: undefined,
317
- in_channel: targetChannel.id,
318
- in_payment: 0,
319
- internal_failure: undefined,
320
- is_confirmed: true,
321
- is_failed: false,
322
- is_receive: true,
323
- is_send: false,
324
- mtokens: undefined,
325
- out_channel: undefined,
326
- out_payment: undefined,
327
- timeout: undefined,
328
- tokens: undefined,
329
- },
330
- ],
331
- 'Got remote forward events');
332
- } else {
333
- strictSame(controlForwards, [
334
- {
335
- cltv_delta: undefined,
336
- external_failure: undefined,
337
- fee: undefined,
338
- fee_mtokens: undefined,
339
- in_channel: undefined,
340
- in_payment: undefined,
341
- internal_failure: undefined,
342
- is_confirmed: false,
343
- is_failed: false,
344
- is_receive: false,
345
- is_send: true,
346
- mtokens: '101000',
347
- out_channel: controlChannel.id,
348
- out_payment: 0,
349
- timeout: height + 40 + 43,
350
- tokens: 101,
351
- },
352
- {
353
- cltv_delta: undefined,
354
- external_failure: undefined,
355
- fee: undefined,
356
- fee_mtokens: undefined,
357
- in_channel: undefined,
358
- in_payment: undefined,
359
- internal_failure: undefined,
360
- is_confirmed: true,
361
- is_failed: false,
362
- is_receive: false,
363
- is_send: true,
364
- mtokens: undefined,
365
- out_channel: controlChannel.id,
366
- out_payment: 0,
367
- timeout: undefined,
368
- tokens: undefined,
369
- },
370
- {
371
- cltv_delta: undefined,
372
- external_failure: undefined,
373
- fee: undefined,
374
- fee_mtokens: undefined,
375
- in_channel: undefined,
376
- in_payment: undefined,
377
- internal_failure: undefined,
378
- is_confirmed: false,
379
- is_failed: false,
380
- is_receive: false,
381
- is_send: true,
382
- mtokens: '496431496',
383
- out_channel: controlChannel.id,
384
- out_payment: 1,
385
- timeout: height + 40 + 43,
386
- tokens: 496431,
387
- },
388
- {
389
- cltv_delta: undefined,
390
- external_failure: undefined,
391
- fee: undefined,
392
- fee_mtokens: undefined,
393
- in_channel: undefined,
394
- in_payment: undefined,
395
- internal_failure: undefined,
396
- is_confirmed: false,
397
- is_failed: true,
398
- is_receive: false,
399
- is_send: true,
400
- mtokens: undefined,
401
- out_channel: controlChannel.id,
402
- out_payment: 1,
403
- timeout: undefined,
404
- tokens: undefined,
405
- },
406
- {
407
- cltv_delta: undefined,
408
- external_failure: undefined,
409
- fee: undefined,
410
- fee_mtokens: undefined,
411
- in_channel: undefined,
412
- in_payment: undefined,
413
- internal_failure: undefined,
414
- is_confirmed: false,
415
- is_failed: false,
416
- is_receive: false,
417
- is_send: true,
418
- mtokens: '100000',
419
- out_channel: controlChannel.id,
420
- out_payment: 2,
421
- timeout: height + 43,
422
- tokens: 100,
423
- },
424
- {
425
- cltv_delta: undefined,
426
- external_failure: undefined,
427
- fee: undefined,
428
- fee_mtokens: undefined,
429
- in_channel: undefined,
430
- in_payment: undefined,
431
- internal_failure: undefined,
432
- is_confirmed: false,
433
- is_failed: true,
434
- is_receive: false,
435
- is_send: true,
436
- mtokens: undefined,
437
- out_channel: controlChannel.id,
438
- out_payment: 2,
439
- timeout: undefined,
440
- tokens: undefined,
441
- },
442
- ],
443
- 'Got control forward events');
444
-
445
- strictSame(targetForwards, [
446
- {
447
- cltv_delta: 40,
448
- external_failure: undefined,
449
- fee: 1,
450
- fee_mtokens: '1000',
451
- in_channel: controlChannel.id,
452
- in_payment: 0,
453
- internal_failure: undefined,
454
- is_confirmed: false,
455
- is_failed: false,
456
- is_receive: false,
457
- is_send: false,
458
- mtokens: '100000',
459
- out_channel: targetChannel.id,
460
- out_payment: 0,
461
- timeout: height + 43,
462
- tokens: 100,
463
- },
464
- {
465
- cltv_delta: undefined,
466
- external_failure: undefined,
467
- fee: undefined,
468
- fee_mtokens: undefined,
469
- in_channel: controlChannel.id,
470
- in_payment: 0,
471
- internal_failure: undefined,
472
- is_confirmed: true,
473
- is_failed: false,
474
- is_receive: false,
475
- is_send: false,
476
- mtokens: undefined,
477
- out_channel: targetChannel.id,
478
- out_payment: 0,
479
- timeout: undefined,
480
- tokens: undefined,
481
- },
482
- {
483
- cltv_delta: 40,
484
- external_failure: 'TEMPORARY_CHANNEL_FAILURE',
485
- fee: 1,
486
- fee_mtokens: '1496',
487
- in_channel: controlChannel.id,
488
- in_payment: 1,
489
- internal_failure: 'INSUFFICIENT_BALANCE',
490
- is_confirmed: false,
491
- is_failed: true,
492
- is_receive: false,
493
- is_send: false,
494
- mtokens: '496430000',
495
- out_channel: targetChannel.id,
496
- out_payment: 0,
497
- timeout: height + 43,
498
- tokens: 496430,
499
- },
500
- {
501
- cltv_delta: undefined,
502
- external_failure: 'INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS',
503
- fee: undefined,
504
- fee_mtokens: undefined,
505
- in_channel: controlChannel.id,
506
- in_payment: 2,
507
- internal_failure: 'INVOICE_NOT_OPEN',
508
- is_confirmed: false,
509
- is_failed: true,
510
- is_receive: true,
511
- is_send: false,
512
- mtokens: undefined,
513
- out_channel: undefined,
514
- out_payment: undefined,
515
- timeout: undefined,
516
- tokens: undefined,
517
- },
518
- ],
519
- 'Got target forward events');
520
-
521
- strictSame(remoteForwards, [
522
- {
523
- cltv_delta: undefined,
524
- external_failure: undefined,
525
- fee: undefined,
526
- fee_mtokens: undefined,
527
- in_channel: targetChannel.id,
528
- in_payment: 0,
529
- internal_failure: undefined,
530
- is_confirmed: true,
531
- is_failed: false,
532
- is_receive: true,
533
- is_send: false,
534
- mtokens: undefined,
535
- out_channel: undefined,
536
- out_payment: undefined,
537
- timeout: undefined,
538
- tokens: undefined,
539
- },
540
- ],
541
- 'Got remote forward events');
542
- }
114
+ await asyncRetry({interval: 1000, times: 30}, async () => {
115
+ if (controlForwards.length !== 6) {
116
+ throw new Error('ExpectedFullListOfControlForwards');
117
+ }
118
+
119
+ return;
120
+ });
543
121
 
544
- strictSame(controlErrors, [], 'No control errors');
545
- strictSame(targetErrors, [], 'No target errors');
546
- strictSame(remoteErrors, [], 'No remote errors');
122
+ [controlSub, remoteSub, targetSub].forEach(n => n.removeAllListeners());
123
+
124
+ // LND 0.13.0 and below do not support secret
125
+ [controlForwards, targetForwards, remoteForwards].forEach(forwards => {
126
+ return forwards.forEach(n => delete n.at && delete n.secret);
127
+ });
547
128
 
548
- await kill({});
129
+ const height = (await getHeight({lnd})).current_block_height;
130
+
131
+ // LND 0.11.1 and before do not use anchor channels
132
+ if (!isAnchors) {
133
+ strictSame(controlForwards, [
134
+ {
135
+ cltv_delta: undefined,
136
+ external_failure: undefined,
137
+ fee: undefined,
138
+ fee_mtokens: undefined,
139
+ in_channel: undefined,
140
+ in_payment: undefined,
141
+ internal_failure: undefined,
142
+ is_confirmed: false,
143
+ is_failed: false,
144
+ is_receive: false,
145
+ is_send: true,
146
+ mtokens: '101000',
147
+ out_channel: controlChannel.id,
148
+ out_payment: 0,
149
+ timeout: height + 40 + 43,
150
+ tokens: 101,
151
+ },
152
+ {
153
+ cltv_delta: undefined,
154
+ external_failure: undefined,
155
+ fee: undefined,
156
+ fee_mtokens: undefined,
157
+ in_channel: undefined,
158
+ in_payment: undefined,
159
+ internal_failure: undefined,
160
+ is_confirmed: true,
161
+ is_failed: false,
162
+ is_receive: false,
163
+ is_send: true,
164
+ mtokens: undefined,
165
+ out_channel: controlChannel.id,
166
+ out_payment: 0,
167
+ timeout: undefined,
168
+ tokens: undefined,
169
+ },
170
+ {
171
+ cltv_delta: undefined,
172
+ external_failure: undefined,
173
+ fee: undefined,
174
+ fee_mtokens: undefined,
175
+ in_channel: undefined,
176
+ in_payment: undefined,
177
+ internal_failure: undefined,
178
+ is_confirmed: false,
179
+ is_failed: false,
180
+ is_receive: false,
181
+ is_send: true,
182
+ mtokens: '490851490',
183
+ out_channel: controlChannel.id,
184
+ out_payment: 1,
185
+ timeout: height + 40 + 43,
186
+ tokens: 490851,
187
+ },
188
+ {
189
+ cltv_delta: undefined,
190
+ external_failure: undefined,
191
+ fee: undefined,
192
+ fee_mtokens: undefined,
193
+ in_channel: undefined,
194
+ in_payment: undefined,
195
+ internal_failure: undefined,
196
+ is_confirmed: false,
197
+ is_failed: true,
198
+ is_receive: false,
199
+ is_send: true,
200
+ mtokens: undefined,
201
+ out_channel: controlChannel.id,
202
+ out_payment: 1,
203
+ timeout: undefined,
204
+ tokens: undefined,
205
+ },
206
+ {
207
+ cltv_delta: undefined,
208
+ external_failure: undefined,
209
+ fee: undefined,
210
+ fee_mtokens: undefined,
211
+ in_channel: undefined,
212
+ in_payment: undefined,
213
+ internal_failure: undefined,
214
+ is_confirmed: false,
215
+ is_failed: false,
216
+ is_receive: false,
217
+ is_send: true,
218
+ mtokens: '100000',
219
+ out_channel: controlChannel.id,
220
+ out_payment: 2,
221
+ timeout: height + 43,
222
+ tokens: 100,
223
+ },
224
+ {
225
+ cltv_delta: undefined,
226
+ external_failure: undefined,
227
+ fee: undefined,
228
+ fee_mtokens: undefined,
229
+ in_channel: undefined,
230
+ in_payment: undefined,
231
+ internal_failure: undefined,
232
+ is_confirmed: false,
233
+ is_failed: true,
234
+ is_receive: false,
235
+ is_send: true,
236
+ mtokens: undefined,
237
+ out_channel: controlChannel.id,
238
+ out_payment: 2,
239
+ timeout: undefined,
240
+ tokens: undefined,
241
+ },
242
+ ],
243
+ 'Got control forward events');
244
+
245
+ strictSame(targetForwards, [
246
+ {
247
+ cltv_delta: 40,
248
+ external_failure: undefined,
249
+ fee: 1,
250
+ fee_mtokens: '1000',
251
+ in_channel: controlChannel.id,
252
+ in_payment: 0,
253
+ internal_failure: undefined,
254
+ is_confirmed: false,
255
+ is_failed: false,
256
+ is_receive: false,
257
+ is_send: false,
258
+ mtokens: '100000',
259
+ out_channel: targetChannel.id,
260
+ out_payment: 0,
261
+ timeout: 497,
262
+ tokens: 100,
263
+ },
264
+ {
265
+ cltv_delta: undefined,
266
+ external_failure: undefined,
267
+ fee: undefined,
268
+ fee_mtokens: undefined,
269
+ in_channel: controlChannel.id,
270
+ in_payment: 0,
271
+ internal_failure: undefined,
272
+ is_confirmed: true,
273
+ is_failed: false,
274
+ is_receive: false,
275
+ is_send: false,
276
+ mtokens: undefined,
277
+ out_channel: targetChannel.id,
278
+ out_payment: 0,
279
+ timeout: undefined,
280
+ tokens: undefined,
281
+ },
282
+ {
283
+ cltv_delta: 40,
284
+ external_failure: 'TEMPORARY_CHANNEL_FAILURE',
285
+ fee: 1,
286
+ fee_mtokens: '1490',
287
+ in_channel: controlChannel.id,
288
+ in_payment: 1,
289
+ internal_failure: 'INSUFFICIENT_BALANCE',
290
+ is_confirmed: false,
291
+ is_failed: true,
292
+ is_receive: false,
293
+ is_send: false,
294
+ mtokens: '490850000',
295
+ out_channel: targetChannel.id,
296
+ out_payment: 0,
297
+ timeout: 497,
298
+ tokens: 490850,
299
+ },
300
+ {
301
+ cltv_delta: undefined,
302
+ external_failure: 'INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS',
303
+ fee: undefined,
304
+ fee_mtokens: undefined,
305
+ in_channel: controlChannel.id,
306
+ in_payment: 2,
307
+ internal_failure: 'INVOICE_NOT_OPEN',
308
+ is_confirmed: false,
309
+ is_failed: true,
310
+ is_receive: true,
311
+ is_send: false,
312
+ mtokens: undefined,
313
+ out_channel: undefined,
314
+ out_payment: undefined,
315
+ timeout: undefined,
316
+ tokens: undefined,
317
+ },
318
+ ],
319
+ 'Got target forward events');
320
+
321
+ strictSame(remoteForwards, [
322
+ {
323
+ cltv_delta: undefined,
324
+ external_failure: undefined,
325
+ fee: undefined,
326
+ fee_mtokens: undefined,
327
+ in_channel: targetChannel.id,
328
+ in_payment: 0,
329
+ internal_failure: undefined,
330
+ is_confirmed: true,
331
+ is_failed: false,
332
+ is_receive: true,
333
+ is_send: false,
334
+ mtokens: undefined,
335
+ out_channel: undefined,
336
+ out_payment: undefined,
337
+ timeout: undefined,
338
+ tokens: undefined,
339
+ },
340
+ ],
341
+ 'Got remote forward events');
342
+ } else {
343
+ strictSame(controlForwards, [
344
+ {
345
+ cltv_delta: undefined,
346
+ external_failure: undefined,
347
+ fee: undefined,
348
+ fee_mtokens: undefined,
349
+ in_channel: undefined,
350
+ in_payment: undefined,
351
+ internal_failure: undefined,
352
+ is_confirmed: false,
353
+ is_failed: false,
354
+ is_receive: false,
355
+ is_send: true,
356
+ mtokens: '101000',
357
+ out_channel: controlChannel.id,
358
+ out_payment: 0,
359
+ timeout: height + 40 + 43,
360
+ tokens: 101,
361
+ },
362
+ {
363
+ cltv_delta: undefined,
364
+ external_failure: undefined,
365
+ fee: undefined,
366
+ fee_mtokens: undefined,
367
+ in_channel: undefined,
368
+ in_payment: undefined,
369
+ internal_failure: undefined,
370
+ is_confirmed: true,
371
+ is_failed: false,
372
+ is_receive: false,
373
+ is_send: true,
374
+ mtokens: undefined,
375
+ out_channel: controlChannel.id,
376
+ out_payment: 0,
377
+ timeout: undefined,
378
+ tokens: undefined,
379
+ },
380
+ {
381
+ cltv_delta: undefined,
382
+ external_failure: undefined,
383
+ fee: undefined,
384
+ fee_mtokens: undefined,
385
+ in_channel: undefined,
386
+ in_payment: undefined,
387
+ internal_failure: undefined,
388
+ is_confirmed: false,
389
+ is_failed: false,
390
+ is_receive: false,
391
+ is_send: true,
392
+ mtokens: '496431496',
393
+ out_channel: controlChannel.id,
394
+ out_payment: 1,
395
+ timeout: height + 40 + 43,
396
+ tokens: 496431,
397
+ },
398
+ {
399
+ cltv_delta: undefined,
400
+ external_failure: undefined,
401
+ fee: undefined,
402
+ fee_mtokens: undefined,
403
+ in_channel: undefined,
404
+ in_payment: undefined,
405
+ internal_failure: undefined,
406
+ is_confirmed: false,
407
+ is_failed: true,
408
+ is_receive: false,
409
+ is_send: true,
410
+ mtokens: undefined,
411
+ out_channel: controlChannel.id,
412
+ out_payment: 1,
413
+ timeout: undefined,
414
+ tokens: undefined,
415
+ },
416
+ {
417
+ cltv_delta: undefined,
418
+ external_failure: undefined,
419
+ fee: undefined,
420
+ fee_mtokens: undefined,
421
+ in_channel: undefined,
422
+ in_payment: undefined,
423
+ internal_failure: undefined,
424
+ is_confirmed: false,
425
+ is_failed: false,
426
+ is_receive: false,
427
+ is_send: true,
428
+ mtokens: '100000',
429
+ out_channel: controlChannel.id,
430
+ out_payment: 2,
431
+ timeout: height + 43,
432
+ tokens: 100,
433
+ },
434
+ {
435
+ cltv_delta: undefined,
436
+ external_failure: undefined,
437
+ fee: undefined,
438
+ fee_mtokens: undefined,
439
+ in_channel: undefined,
440
+ in_payment: undefined,
441
+ internal_failure: undefined,
442
+ is_confirmed: false,
443
+ is_failed: true,
444
+ is_receive: false,
445
+ is_send: true,
446
+ mtokens: undefined,
447
+ out_channel: controlChannel.id,
448
+ out_payment: 2,
449
+ timeout: undefined,
450
+ tokens: undefined,
451
+ },
452
+ ],
453
+ 'Got control forward events');
454
+
455
+ strictSame(targetForwards, [
456
+ {
457
+ cltv_delta: 40,
458
+ external_failure: undefined,
459
+ fee: 1,
460
+ fee_mtokens: '1000',
461
+ in_channel: controlChannel.id,
462
+ in_payment: 0,
463
+ internal_failure: undefined,
464
+ is_confirmed: false,
465
+ is_failed: false,
466
+ is_receive: false,
467
+ is_send: false,
468
+ mtokens: '100000',
469
+ out_channel: targetChannel.id,
470
+ out_payment: 0,
471
+ timeout: height + 43,
472
+ tokens: 100,
473
+ },
474
+ {
475
+ cltv_delta: undefined,
476
+ external_failure: undefined,
477
+ fee: undefined,
478
+ fee_mtokens: undefined,
479
+ in_channel: controlChannel.id,
480
+ in_payment: 0,
481
+ internal_failure: undefined,
482
+ is_confirmed: true,
483
+ is_failed: false,
484
+ is_receive: false,
485
+ is_send: false,
486
+ mtokens: undefined,
487
+ out_channel: targetChannel.id,
488
+ out_payment: 0,
489
+ timeout: undefined,
490
+ tokens: undefined,
491
+ },
492
+ {
493
+ cltv_delta: 40,
494
+ external_failure: 'TEMPORARY_CHANNEL_FAILURE',
495
+ fee: 1,
496
+ fee_mtokens: '1496',
497
+ in_channel: controlChannel.id,
498
+ in_payment: 1,
499
+ internal_failure: 'INSUFFICIENT_BALANCE',
500
+ is_confirmed: false,
501
+ is_failed: true,
502
+ is_receive: false,
503
+ is_send: false,
504
+ mtokens: '496430000',
505
+ out_channel: targetChannel.id,
506
+ out_payment: 0,
507
+ timeout: height + 43,
508
+ tokens: 496430,
509
+ },
510
+ {
511
+ cltv_delta: undefined,
512
+ external_failure: 'INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS',
513
+ fee: undefined,
514
+ fee_mtokens: undefined,
515
+ in_channel: controlChannel.id,
516
+ in_payment: 2,
517
+ internal_failure: 'INVOICE_NOT_OPEN',
518
+ is_confirmed: false,
519
+ is_failed: true,
520
+ is_receive: true,
521
+ is_send: false,
522
+ mtokens: undefined,
523
+ out_channel: undefined,
524
+ out_payment: undefined,
525
+ timeout: undefined,
526
+ tokens: undefined,
527
+ },
528
+ ],
529
+ 'Got target forward events');
530
+
531
+ strictSame(remoteForwards, [
532
+ {
533
+ cltv_delta: undefined,
534
+ external_failure: undefined,
535
+ fee: undefined,
536
+ fee_mtokens: undefined,
537
+ in_channel: targetChannel.id,
538
+ in_payment: 0,
539
+ internal_failure: undefined,
540
+ is_confirmed: true,
541
+ is_failed: false,
542
+ is_receive: true,
543
+ is_send: false,
544
+ mtokens: undefined,
545
+ out_channel: undefined,
546
+ out_payment: undefined,
547
+ timeout: undefined,
548
+ tokens: undefined,
549
+ },
550
+ ],
551
+ 'Got remote forward events');
552
+ }
553
+
554
+ strictSame(controlErrors, [], 'No control errors');
555
+ strictSame(targetErrors, [], 'No target errors');
556
+ strictSame(remoteErrors, [], 'No remote errors');
557
+ } catch (err) {
558
+ strictSame(err, null, 'Expected no error');
559
+ } finally {
560
+ await kill({});
561
+ }
549
562
 
550
563
  return end();
551
564
  });