beignet 0.2.0 → 0.3.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 (195) hide show
  1. package/README.md +284 -1
  2. package/dist/cli/beignet-node.js +1019 -47
  3. package/dist/cli/beignet-node.js.map +1 -1
  4. package/dist/cli/cli.js +1201 -16
  5. package/dist/cli/cli.js.map +1 -1
  6. package/dist/cli/config.js +21 -1
  7. package/dist/cli/config.js.map +1 -1
  8. package/dist/cli/daemon.js +342 -16
  9. package/dist/cli/daemon.js.map +1 -1
  10. package/dist/cli/errors.js +2 -0
  11. package/dist/cli/errors.js.map +1 -1
  12. package/dist/cli/openapi.js +1207 -14
  13. package/dist/cli/openapi.js.map +1 -1
  14. package/dist/cli/restore.js +89 -0
  15. package/dist/cli/restore.js.map +1 -0
  16. package/dist/cli/wallet-storage.js +34 -0
  17. package/dist/cli/wallet-storage.js.map +1 -0
  18. package/dist/electrum/index.js +105 -10
  19. package/dist/electrum/index.js.map +1 -1
  20. package/dist/lightning/advisor/fee-tuner.js +42 -0
  21. package/dist/lightning/advisor/fee-tuner.js.map +1 -0
  22. package/dist/lightning/advisor/index.js +9 -1
  23. package/dist/lightning/advisor/index.js.map +1 -1
  24. package/dist/lightning/advisor/rebalance-planner.js +55 -0
  25. package/dist/lightning/advisor/rebalance-planner.js.map +1 -0
  26. package/dist/lightning/backup/index.js +18 -0
  27. package/dist/lightning/backup/index.js.map +1 -0
  28. package/dist/lightning/backup/scb.js +42 -0
  29. package/dist/lightning/backup/scb.js.map +1 -0
  30. package/dist/lightning/chain/chain-monitor.js +27 -0
  31. package/dist/lightning/chain/chain-monitor.js.map +1 -1
  32. package/dist/lightning/chain/output-resolver.js +55 -6
  33. package/dist/lightning/chain/output-resolver.js.map +1 -1
  34. package/dist/lightning/chain/types.js +1 -0
  35. package/dist/lightning/chain/types.js.map +1 -1
  36. package/dist/lightning/channel/channel-manager.js +64 -0
  37. package/dist/lightning/channel/channel-manager.js.map +1 -1
  38. package/dist/lightning/channel/channel-state.js.map +1 -1
  39. package/dist/lightning/channel/channel.js +124 -4
  40. package/dist/lightning/channel/channel.js.map +1 -1
  41. package/dist/lightning/channel/dual-funding.js +6 -5
  42. package/dist/lightning/channel/dual-funding.js.map +1 -1
  43. package/dist/lightning/channel/types.js +3 -1
  44. package/dist/lightning/channel/types.js.map +1 -1
  45. package/dist/lightning/channel/validation.js +3 -3
  46. package/dist/lightning/channel/validation.js.map +1 -1
  47. package/dist/lightning/crypto/index.js +1 -0
  48. package/dist/lightning/crypto/index.js.map +1 -1
  49. package/dist/lightning/crypto/message-signing.js +116 -0
  50. package/dist/lightning/crypto/message-signing.js.map +1 -0
  51. package/dist/lightning/crypto/xchacha20poly1305.js +77 -0
  52. package/dist/lightning/crypto/xchacha20poly1305.js.map +1 -0
  53. package/dist/lightning/features/flags.js +1 -0
  54. package/dist/lightning/features/flags.js.map +1 -1
  55. package/dist/lightning/gossip/messages.js +37 -1
  56. package/dist/lightning/gossip/messages.js.map +1 -1
  57. package/dist/lightning/index.js +2 -1
  58. package/dist/lightning/index.js.map +1 -1
  59. package/dist/lightning/keys/wallet-keys.js +1 -0
  60. package/dist/lightning/keys/wallet-keys.js.map +1 -1
  61. package/dist/lightning/message/index.js +1 -0
  62. package/dist/lightning/message/index.js.map +1 -1
  63. package/dist/lightning/message/peer-storage.js +43 -0
  64. package/dist/lightning/message/peer-storage.js.map +1 -0
  65. package/dist/lightning/message/types.js +2 -0
  66. package/dist/lightning/message/types.js.map +1 -1
  67. package/dist/lightning/node/lightning-node.js +1583 -235
  68. package/dist/lightning/node/lightning-node.js.map +1 -1
  69. package/dist/lightning/node/types.js +18 -1
  70. package/dist/lightning/node/types.js.map +1 -1
  71. package/dist/lightning/offer/offer-manager.js +2 -5
  72. package/dist/lightning/offer/offer-manager.js.map +1 -1
  73. package/dist/lightning/offer/tlv.js +3 -1
  74. package/dist/lightning/offer/tlv.js.map +1 -1
  75. package/dist/lightning/storage/encryption.js +67 -0
  76. package/dist/lightning/storage/encryption.js.map +1 -0
  77. package/dist/lightning/storage/index.js +1 -0
  78. package/dist/lightning/storage/index.js.map +1 -1
  79. package/dist/lightning/storage/serialization.js +6 -2
  80. package/dist/lightning/storage/serialization.js.map +1 -1
  81. package/dist/lightning/storage/sqlite-storage.js +387 -33
  82. package/dist/lightning/storage/sqlite-storage.js.map +1 -1
  83. package/dist/lightning/watchtower/blob.js +135 -0
  84. package/dist/lightning/watchtower/blob.js.map +1 -0
  85. package/dist/lightning/watchtower/index.js +55 -0
  86. package/dist/lightning/watchtower/index.js.map +1 -0
  87. package/dist/lightning/watchtower/justice.js +182 -0
  88. package/dist/lightning/watchtower/justice.js.map +1 -0
  89. package/dist/lightning/watchtower/tower-connection.js +208 -0
  90. package/dist/lightning/watchtower/tower-connection.js.map +1 -0
  91. package/dist/lightning/watchtower/types.js +3 -0
  92. package/dist/lightning/watchtower/types.js.map +1 -0
  93. package/dist/lightning/watchtower/watchtower-client.js +402 -0
  94. package/dist/lightning/watchtower/watchtower-client.js.map +1 -0
  95. package/dist/lightning/watchtower/wtwire.js +201 -0
  96. package/dist/lightning/watchtower/wtwire.js.map +1 -0
  97. package/dist/shapes/electrum.js +32 -1
  98. package/dist/shapes/electrum.js.map +1 -1
  99. package/dist/shapes/wallet.js +11 -1
  100. package/dist/shapes/wallet.js.map +1 -1
  101. package/dist/transaction/index.js +163 -15
  102. package/dist/transaction/index.js.map +1 -1
  103. package/dist/types/cli/beignet-node.d.ts +144 -3
  104. package/dist/types/cli/daemon.d.ts +2 -0
  105. package/dist/types/cli/errors.d.ts +2 -0
  106. package/dist/types/cli/restore.d.ts +10 -0
  107. package/dist/types/cli/types.d.ts +228 -1
  108. package/dist/types/cli/wallet-storage.d.ts +3 -0
  109. package/dist/types/electrum/index.d.ts +12 -0
  110. package/dist/types/electrum.js +1 -0
  111. package/dist/types/electrum.js.map +1 -1
  112. package/dist/types/lightning/advisor/fee-tuner.d.ts +20 -0
  113. package/dist/types/lightning/advisor/index.d.ts +4 -0
  114. package/dist/types/lightning/advisor/rebalance-planner.d.ts +12 -0
  115. package/dist/types/lightning/backup/index.d.ts +1 -0
  116. package/dist/types/lightning/backup/scb.d.ts +24 -0
  117. package/dist/types/lightning/chain/chain-monitor.d.ts +1 -0
  118. package/dist/types/lightning/chain/types.d.ts +1 -0
  119. package/dist/types/lightning/channel/channel-manager.d.ts +7 -0
  120. package/dist/types/lightning/channel/channel-state.d.ts +2 -0
  121. package/dist/types/lightning/channel/channel.d.ts +6 -0
  122. package/dist/types/lightning/channel/dual-funding.d.ts +2 -1
  123. package/dist/types/lightning/channel/types.d.ts +2 -0
  124. package/dist/types/lightning/channel/validation.d.ts +1 -1
  125. package/dist/types/lightning/crypto/index.d.ts +1 -0
  126. package/dist/types/lightning/crypto/message-signing.d.ts +9 -0
  127. package/dist/types/lightning/crypto/xchacha20poly1305.d.ts +3 -0
  128. package/dist/types/lightning/features/flags.d.ts +1 -0
  129. package/dist/types/lightning/gossip/messages.d.ts +4 -0
  130. package/dist/types/lightning/index.d.ts +1 -0
  131. package/dist/types/lightning/keys/wallet-keys.d.ts +2 -1
  132. package/dist/types/lightning/message/index.d.ts +1 -0
  133. package/dist/types/lightning/message/peer-storage.d.ts +9 -0
  134. package/dist/types/lightning/message/types.d.ts +2 -0
  135. package/dist/types/lightning/node/lightning-node.d.ts +116 -4
  136. package/dist/types/lightning/node/types.d.ts +62 -1
  137. package/dist/types/lightning/storage/encryption.d.ts +11 -0
  138. package/dist/types/lightning/storage/index.d.ts +1 -0
  139. package/dist/types/lightning/storage/serialization.d.ts +2 -0
  140. package/dist/types/lightning/storage/sqlite-storage.d.ts +43 -3
  141. package/dist/types/lightning/storage/types.d.ts +62 -0
  142. package/dist/types/lightning/watchtower/blob.d.ts +32 -0
  143. package/dist/types/lightning/watchtower/index.d.ts +9 -0
  144. package/dist/types/lightning/watchtower/justice.d.ts +29 -0
  145. package/dist/types/lightning/watchtower/tower-connection.d.ts +34 -0
  146. package/dist/types/lightning/watchtower/types.d.ts +44 -0
  147. package/dist/types/lightning/watchtower/watchtower-client.d.ts +67 -0
  148. package/dist/types/lightning/watchtower/wtwire.d.ts +90 -0
  149. package/dist/types/shapes/electrum.d.ts +3 -1
  150. package/dist/types/transaction/index.d.ts +6 -0
  151. package/dist/types/transaction.js.map +1 -1
  152. package/dist/types/types/electrum.d.ts +3 -2
  153. package/dist/types/types/transaction.d.ts +1 -1
  154. package/dist/types/types/wallet.d.ts +78 -4
  155. package/dist/types/utils/descriptors.d.ts +2 -0
  156. package/dist/types/utils/fees.d.ts +3 -0
  157. package/dist/types/utils/helpers.d.ts +3 -1
  158. package/dist/types/utils/index.d.ts +5 -0
  159. package/dist/types/utils/multisig.d.ts +29 -0
  160. package/dist/types/utils/transaction.d.ts +7 -0
  161. package/dist/types/utils/wallet-storage-encryption.d.ts +3 -0
  162. package/dist/types/utils/wallet.d.ts +1 -1
  163. package/dist/types/utils/watch-only.d.ts +12 -0
  164. package/dist/types/wallet/constants.d.ts +1 -0
  165. package/dist/types/wallet/index.d.ts +61 -4
  166. package/dist/types/wallet.js +3 -0
  167. package/dist/types/wallet.js.map +1 -1
  168. package/dist/utils/derivation-path.js +8 -7
  169. package/dist/utils/derivation-path.js.map +1 -1
  170. package/dist/utils/descriptors.js +56 -0
  171. package/dist/utils/descriptors.js.map +1 -0
  172. package/dist/utils/electrum.js +10 -2
  173. package/dist/utils/electrum.js.map +1 -1
  174. package/dist/utils/fees.js +19 -0
  175. package/dist/utils/fees.js.map +1 -0
  176. package/dist/utils/helpers.js +22 -5
  177. package/dist/utils/helpers.js.map +1 -1
  178. package/dist/utils/index.js +5 -0
  179. package/dist/utils/index.js.map +1 -1
  180. package/dist/utils/multisig.js +90 -0
  181. package/dist/utils/multisig.js.map +1 -0
  182. package/dist/utils/transaction.js +30 -3
  183. package/dist/utils/transaction.js.map +1 -1
  184. package/dist/utils/wallet-storage-encryption.js +45 -0
  185. package/dist/utils/wallet-storage-encryption.js.map +1 -0
  186. package/dist/utils/wallet.js +3 -1
  187. package/dist/utils/wallet.js.map +1 -1
  188. package/dist/utils/watch-only.js +102 -0
  189. package/dist/utils/watch-only.js.map +1 -0
  190. package/dist/wallet/constants.js +2 -1
  191. package/dist/wallet/constants.js.map +1 -1
  192. package/dist/wallet/index.js +787 -30
  193. package/dist/wallet/index.js.map +1 -1
  194. package/docs/ROADMAP.md +292 -0
  195. package/package.json +1 -1
@@ -13,6 +13,7 @@ const channel_commitment_1 = require("../message/channel-commitment");
13
13
  const channel_close_1 = require("../message/channel-close");
14
14
  const closing_1 = require("../chain/closing");
15
15
  const channel_reestablish_1 = require("../message/channel-reestablish");
16
+ const error_1 = require("../message/error");
16
17
  const channel_actions_1 = require("./channel-actions");
17
18
  const types_2 = require("./types");
18
19
  const channel_state_1 = require("./channel-state");
@@ -83,6 +84,7 @@ class Channel {
83
84
  this._spliceRemoteCommitmentSig = null;
84
85
  this._pendingBatch = null;
85
86
  this._lastSentBatch = null;
87
+ this._remoteCommitmentTxCache = new Map();
86
88
  this._forgottenSplice = false;
87
89
  this._spliceAbortPending = false;
88
90
  this._reestablishRetransmitted = false;
@@ -95,9 +97,13 @@ class Channel {
95
97
  this._taprootClosingCache = null;
96
98
  this._currentBlockHeight = 0;
97
99
  this._channelKeyIndex = null;
100
+ this._maxFundingSatoshis = types_2.MAX_FUNDING_SATOSHIS;
98
101
  this._state = state;
99
102
  this._signer = signer || null;
100
103
  }
104
+ setMaxFundingSatoshis(max) {
105
+ this._maxFundingSatoshis = max;
106
+ }
101
107
  get channelKeyIndex() {
102
108
  return this._channelKeyIndex;
103
109
  }
@@ -200,7 +206,7 @@ class Channel {
200
206
  ...this._state.localBasepoints,
201
207
  firstPerCommitmentPoint: firstPoint
202
208
  };
203
- const error = (0, validation_1.validateOpenChannelParams)(msg);
209
+ const error = (0, validation_1.validateOpenChannelParams)(msg, this._maxFundingSatoshis);
204
210
  if (error) {
205
211
  return [{ type: channel_actions_1.ChannelActionType.ERROR, message: error }];
206
212
  }
@@ -433,7 +439,7 @@ class Channel {
433
439
  { type: channel_actions_1.ChannelActionType.ERROR, message: 'Unexpected open_channel' }
434
440
  ];
435
441
  }
436
- const error = (0, validation_1.validateOpenChannelParams)(msg);
442
+ const error = (0, validation_1.validateOpenChannelParams)(msg, this._maxFundingSatoshis);
437
443
  if (error) {
438
444
  return [{ type: channel_actions_1.ChannelActionType.ERROR, message: error }];
439
445
  }
@@ -476,6 +482,15 @@ class Channel {
476
482
  }
477
483
  ];
478
484
  }
485
+ if (proposedFlags.hasFeature(flags_1.Feature.ZERO_CONF) &&
486
+ !(this._state.zeroConfEnabled && this._state.trustedPeer)) {
487
+ return [
488
+ {
489
+ type: channel_actions_1.ChannelActionType.ERROR,
490
+ message: 'Proposed zero_conf channel type requires a trusted peer'
491
+ }
492
+ ];
493
+ }
479
494
  this._state.channelType = msg.channelType;
480
495
  }
481
496
  else {
@@ -1063,6 +1078,36 @@ class Channel {
1063
1078
  }
1064
1079
  this._state.revokedHtlcSnapshots.set(commitmentNumber.toString(), entries);
1065
1080
  }
1081
+ _cacheRemoteCommitmentForWatchtower() {
1082
+ try {
1083
+ if ((0, types_3.isTaprootChannel)(this._state.channelType))
1084
+ return;
1085
+ if (!this._state.remoteBasepoints || !this._state.fundingTxid)
1086
+ return;
1087
+ const point = this._state.remoteNextPerCommitmentPoint ||
1088
+ this._state.remoteCurrentPerCommitmentPoint;
1089
+ if (!point)
1090
+ return;
1091
+ const built = (0, commitment_builder_1.buildRemoteCommitment)(this._state, point, this._state.remoteCommitmentNumber + 1n);
1092
+ this._remoteCommitmentTxCache.set(point.toString('hex'), built.result.tx.toBuffer().toString('hex'));
1093
+ while (this._remoteCommitmentTxCache.size > Channel.REVOKED_TX_CACHE_MAX) {
1094
+ const oldest = this._remoteCommitmentTxCache.keys().next().value;
1095
+ if (oldest === undefined)
1096
+ break;
1097
+ this._remoteCommitmentTxCache.delete(oldest);
1098
+ }
1099
+ }
1100
+ catch {
1101
+ }
1102
+ }
1103
+ takeRevokedCommitmentTx(perCommitmentSecret) {
1104
+ const pointHex = (0, derivation_1.perCommitmentPointFromSecret)(perCommitmentSecret).toString('hex');
1105
+ const txHex = this._remoteCommitmentTxCache.get(pointHex);
1106
+ if (!txHex)
1107
+ return null;
1108
+ this._remoteCommitmentTxCache.delete(pointHex);
1109
+ return Buffer.from(txHex, 'hex');
1110
+ }
1066
1111
  signCommitment(signature, htlcSignatures, partialSignatureWithNonce, spliceBatch) {
1067
1112
  if (this._state.state !== types_2.ChannelState.NORMAL &&
1068
1113
  this._state.state !== types_2.ChannelState.SHUTTING_DOWN &&
@@ -1108,6 +1153,7 @@ class Channel {
1108
1153
  : null;
1109
1154
  this._state.lastSentHtlcSignatures = htlcSignatures.map((s) => Buffer.from(s));
1110
1155
  this._snapshotRemoteCommitmentHtlcs(this._state.remoteCommitmentNumber);
1156
+ this._cacheRemoteCommitmentForWatchtower();
1111
1157
  this._state.remoteCommitmentNumber++;
1112
1158
  this._state.needsCommitment = false;
1113
1159
  this._state.pendingLocalUpdatesSignedCount =
@@ -1488,6 +1534,14 @@ class Channel {
1488
1534
  return true;
1489
1535
  }
1490
1536
  forceClose(signer) {
1537
+ if (this._state.dataLossDetected) {
1538
+ return [
1539
+ {
1540
+ type: channel_actions_1.ChannelActionType.ERROR,
1541
+ message: 'Refusing to broadcast stale commitment after data loss'
1542
+ }
1543
+ ];
1544
+ }
1491
1545
  if (this._state.state !== types_2.ChannelState.NORMAL &&
1492
1546
  this._state.state !== types_2.ChannelState.SHUTTING_DOWN &&
1493
1547
  this._state.state !== types_2.ChannelState.AWAITING_FUNDING_CONFIRMED &&
@@ -2465,6 +2519,25 @@ class Channel {
2465
2519
  ];
2466
2520
  }
2467
2521
  }
2522
+ if ((msg.nextCommitmentNumber > this._state.remoteCommitmentNumber + 1n ||
2523
+ msg.nextRevocationNumber > this._state.localCommitmentNumber + 1n) &&
2524
+ msg.nextRevocationNumber > this._state.localCommitmentNumber &&
2525
+ !msg.yourLastPerCommitmentSecret.equals(Buffer.alloc(32))) {
2526
+ this._state.dataLossDetected = true;
2527
+ this._state.dlpRemotePerCommitmentPoint = msg.myCurrentPerCommitmentPoint;
2528
+ this._state.state = types_2.ChannelState.ERRORED;
2529
+ return [
2530
+ { type: channel_actions_1.ChannelActionType.PERSIST_STATE },
2531
+ sendMsg(types_1.MessageType.ERROR, (0, error_1.encodeErrorMessage)({
2532
+ channelId: this._state.channelId,
2533
+ data: Buffer.from('peer proved our channel state is stale (data loss); awaiting your force close', 'ascii')
2534
+ })),
2535
+ {
2536
+ type: channel_actions_1.ChannelActionType.ERROR,
2537
+ message: 'Channel fell behind: peer proved our state is stale (data loss); refusing to broadcast, awaiting peer force close'
2538
+ }
2539
+ ];
2540
+ }
2468
2541
  if (msg.nextCommitmentNumber > this._state.remoteCommitmentNumber + 1n) {
2469
2542
  return [
2470
2543
  {
@@ -2671,6 +2744,15 @@ class Channel {
2671
2744
  }
2672
2745
  ];
2673
2746
  }
2747
+ if (relativeSatoshis > 0n &&
2748
+ this._state.fundingSatoshis + relativeSatoshis > this._maxFundingSatoshis) {
2749
+ return [
2750
+ {
2751
+ type: channel_actions_1.ChannelActionType.ERROR,
2752
+ message: `Cannot splice-in: post-splice capacity ${this._state.fundingSatoshis + relativeSatoshis} exceeds maximum ${this._maxFundingSatoshis}`
2753
+ }
2754
+ ];
2755
+ }
2674
2756
  if (relativeSatoshis < 0n) {
2675
2757
  const withdrawSats = -relativeSatoshis;
2676
2758
  const localBalanceSats = this._state.localBalanceMsat / 1000n;
@@ -2755,6 +2837,16 @@ class Channel {
2755
2837
  this._spliceSession = null;
2756
2838
  return [{ type: channel_actions_1.ChannelActionType.ERROR, message: result.error }];
2757
2839
  }
2840
+ const postSpliceCapacity = this._state.fundingSatoshis + this._spliceSession.getNetCapacityChange();
2841
+ if (postSpliceCapacity > this._maxFundingSatoshis) {
2842
+ this._spliceSession = null;
2843
+ return [
2844
+ {
2845
+ type: channel_actions_1.ChannelActionType.ERROR,
2846
+ message: `Cannot accept splice: post-splice capacity ${postSpliceCapacity} exceeds maximum ${this._maxFundingSatoshis}`
2847
+ }
2848
+ ];
2849
+ }
2758
2850
  this._state.preSpliceState = this._state.state;
2759
2851
  this._state.state = types_2.ChannelState.SPLICING;
2760
2852
  const ackMsg = result.message;
@@ -2781,6 +2873,21 @@ class Channel {
2781
2873
  if (!result.ok) {
2782
2874
  return [{ type: channel_actions_1.ChannelActionType.ERROR, message: result.error }];
2783
2875
  }
2876
+ const postSpliceCapacity = this._state.fundingSatoshis + this._spliceSession.getNetCapacityChange();
2877
+ if (postSpliceCapacity > this._maxFundingSatoshis) {
2878
+ const actions = [
2879
+ sendMsg(types_1.MessageType.TX_ABORT, (0, interactive_tx_1.encodeTxAbortMessage)({
2880
+ channelId: this._state.channelId,
2881
+ data: Buffer.from('post-splice capacity exceeds maximum', 'utf8')
2882
+ }))
2883
+ ];
2884
+ actions.push(...this.abortSplice(`post-splice capacity ${postSpliceCapacity} exceeds maximum ${this._maxFundingSatoshis}`));
2885
+ actions.push({
2886
+ type: channel_actions_1.ChannelActionType.ERROR,
2887
+ message: `splice aborted: post-splice capacity ${postSpliceCapacity} exceeds maximum ${this._maxFundingSatoshis}`
2888
+ });
2889
+ return actions;
2890
+ }
2784
2891
  if (this._spliceSession.getRequireConfirmedInputs() &&
2785
2892
  this._spliceInInputs?.inputs.some((i) => i.confirmed === false)) {
2786
2893
  const actions = [
@@ -3951,7 +4058,7 @@ class Channel {
3951
4058
  this._state.channelType = defaultType.toBuffer();
3952
4059
  }
3953
4060
  this._state.temporaryChannelId = (0, validation_1.deriveV2TemporaryChannelId)(params.localBasepoints.revocationBasepoint);
3954
- const session = new dual_funding_2.DualFundingSession(true, this._state.temporaryChannelId);
4061
+ const session = new dual_funding_2.DualFundingSession(true, this._state.temporaryChannelId, this._maxFundingSatoshis);
3955
4062
  const result = session.initiateOpen(params);
3956
4063
  if (!result.ok || !result.message) {
3957
4064
  return [
@@ -3976,6 +4083,18 @@ class Channel {
3976
4083
  this._state.fundingVersion = 2;
3977
4084
  this._state.commitmentFeeratePerkw = msg.commitmentFeeratePerkw;
3978
4085
  this._state.fundingLocktime = msg.locktime;
4086
+ if (msg.channelType) {
4087
+ const proposedFlags = flags_1.FeatureFlags.fromBuffer(msg.channelType);
4088
+ if (proposedFlags.hasFeature(flags_1.Feature.ZERO_CONF) &&
4089
+ !(this._state.zeroConfEnabled && this._state.trustedPeer)) {
4090
+ return [
4091
+ {
4092
+ type: channel_actions_1.ChannelActionType.ERROR,
4093
+ message: 'Proposed zero_conf channel type requires a trusted peer'
4094
+ }
4095
+ ];
4096
+ }
4097
+ }
3979
4098
  localParams = {
3980
4099
  ...localParams,
3981
4100
  localBasepoints: {
@@ -3983,7 +4102,7 @@ class Channel {
3983
4102
  firstPerCommitmentPoint: getPerCommitmentPoint(this._state.localPerCommitmentSeed, 0n)
3984
4103
  }
3985
4104
  };
3986
- const session = new dual_funding_2.DualFundingSession(false, this._state.temporaryChannelId);
4105
+ const session = new dual_funding_2.DualFundingSession(false, this._state.temporaryChannelId, this._maxFundingSatoshis);
3987
4106
  const result = session.handleOpenChannel2(msg, localParams);
3988
4107
  if (!result.ok || !result.message) {
3989
4108
  return [
@@ -4864,6 +4983,7 @@ class Channel {
4864
4983
  }
4865
4984
  }
4866
4985
  exports.Channel = Channel;
4986
+ Channel.REVOKED_TX_CACHE_MAX = 8;
4867
4987
  Channel.MAX_DUST_HTLC_EXPOSURE_MSAT = 5000000n;
4868
4988
  function createOpenerChannel(params) {
4869
4989
  const { DEFAULT_CHANNEL_CONFIG } = require('./types');