@atomiqlabs/chain-starknet 8.1.11 → 8.2.2

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 (63) hide show
  1. package/README.md +74 -0
  2. package/dist/index.d.ts +1 -2
  3. package/dist/index.js +72 -3
  4. package/dist/node/index.d.ts +10 -0
  5. package/dist/node/index.js +15 -0
  6. package/dist/starknet/StarknetInitializer.d.ts +39 -6
  7. package/dist/starknet/StarknetInitializer.js +3 -3
  8. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +7 -6
  9. package/dist/starknet/btcrelay/StarknetBtcRelay.js +8 -8
  10. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +2 -0
  11. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +2 -0
  12. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +3 -1
  13. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +3 -1
  14. package/dist/starknet/chain/StarknetAction.js +1 -1
  15. package/dist/starknet/chain/StarknetChainInterface.d.ts +25 -0
  16. package/dist/starknet/chain/StarknetChainInterface.js +7 -0
  17. package/dist/starknet/chain/modules/StarknetFees.d.ts +15 -19
  18. package/dist/starknet/chain/modules/StarknetFees.js +23 -29
  19. package/dist/starknet/chain/modules/StarknetTransactions.d.ts +32 -6
  20. package/dist/starknet/chain/modules/StarknetTransactions.js +47 -17
  21. package/dist/starknet/contract/StarknetContractBase.d.ts +12 -3
  22. package/dist/starknet/contract/StarknetContractBase.js +2 -2
  23. package/dist/starknet/contract/modules/StarknetContractEvents.js +1 -1
  24. package/dist/starknet/events/StarknetChainEvents.d.ts +3 -0
  25. package/dist/starknet/events/StarknetChainEvents.js +3 -0
  26. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +45 -7
  27. package/dist/starknet/events/StarknetChainEventsBrowser.js +20 -9
  28. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +4 -4
  29. package/dist/starknet/swaps/StarknetSwapContract.js +5 -5
  30. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +1 -1
  31. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +2 -2
  32. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +1 -1
  33. package/dist/starknet/wallet/StarknetBrowserSigner.d.ts +9 -1
  34. package/dist/starknet/wallet/StarknetBrowserSigner.js +31 -1
  35. package/dist/starknet/wallet/StarknetSigner.d.ts +44 -3
  36. package/dist/starknet/wallet/StarknetSigner.js +52 -2
  37. package/dist/utils/Utils.d.ts +1 -1
  38. package/dist/utils/Utils.js +2 -2
  39. package/node/index.d.ts +1 -0
  40. package/node/index.js +3 -0
  41. package/package.json +5 -4
  42. package/src/index.ts +76 -2
  43. package/src/node/index.ts +10 -0
  44. package/src/starknet/StarknetInitializer.ts +40 -1
  45. package/src/starknet/btcrelay/StarknetBtcRelay.ts +19 -16
  46. package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +2 -0
  47. package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +3 -1
  48. package/src/starknet/chain/StarknetAction.ts +2 -2
  49. package/src/starknet/chain/StarknetChainInterface.ts +29 -1
  50. package/src/starknet/chain/modules/StarknetFees.ts +23 -27
  51. package/src/starknet/chain/modules/StarknetTransactions.ts +59 -18
  52. package/src/starknet/contract/StarknetContractBase.ts +14 -5
  53. package/src/starknet/contract/modules/StarknetContractEvents.ts +1 -1
  54. package/src/starknet/events/StarknetChainEvents.ts +3 -0
  55. package/src/starknet/events/StarknetChainEventsBrowser.ts +51 -10
  56. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +4 -4
  57. package/src/starknet/swaps/StarknetSwapContract.ts +5 -5
  58. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +1 -1
  59. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +3 -3
  60. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +2 -2
  61. package/src/starknet/wallet/StarknetBrowserSigner.ts +39 -2
  62. package/src/starknet/wallet/StarknetSigner.ts +62 -3
  63. package/src/utils/Utils.ts +3 -3
@@ -1,49 +1,43 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StarknetFees = exports.starknetGasAdd = exports.starknetGasMul = void 0;
3
+ exports.StarknetFees = void 0;
4
4
  const Utils_1 = require("../../../utils/Utils");
5
5
  const MAX_FEE_AGE = 5000;
6
- /**
7
- * Multiplies all the gas parameters by a specific scalar
8
- *
9
- * @param gas
10
- * @param scalar
11
- *
12
- * @category Chain Interface
13
- */
14
- function starknetGasMul(gas, scalar) {
15
- return { l1Gas: gas.l1Gas * scalar, l2Gas: gas.l2Gas * scalar, l1DataGas: gas.l1DataGas * scalar };
16
- }
17
- exports.starknetGasMul = starknetGasMul;
18
- /**
19
- * Sums up all the gas parameters
20
- *
21
- * @param a
22
- * @param b
23
- *
24
- * @category Chain Interface
25
- */
26
- function starknetGasAdd(a, b) {
27
- if (b == null)
28
- return a;
29
- return { l1Gas: a.l1Gas + b.l1Gas, l2Gas: a.l2Gas + b.l2Gas, l1DataGas: a.l1DataGas + b.l1DataGas };
30
- }
31
- exports.starknetGasAdd = starknetGasAdd;
32
6
  /**
33
7
  * A module for starknet fee estimation
34
8
  *
35
9
  * @category Chain Interface
36
10
  */
37
11
  class StarknetFees {
12
+ /**
13
+ * Multiplies all the gas parameters by a specific scalar
14
+ *
15
+ * @param gas
16
+ * @param scalar
17
+ */
18
+ static starknetGasMul(gas, scalar) {
19
+ return { l1Gas: gas.l1Gas * scalar, l2Gas: gas.l2Gas * scalar, l1DataGas: gas.l1DataGas * scalar };
20
+ }
21
+ /**
22
+ * Sums up all the gas parameters
23
+ *
24
+ * @param a
25
+ * @param b
26
+ */
27
+ static starknetGasAdd(a, b) {
28
+ if (b == null)
29
+ return a;
30
+ return { l1Gas: a.l1Gas + b.l1Gas, l2Gas: a.l2Gas + b.l2Gas, l1DataGas: a.l1DataGas + b.l1DataGas };
31
+ }
38
32
  /**
39
33
  * Constructs a new Starknet fee module
40
34
  *
41
35
  * @param provider A starknet.js provider to use for fee estimation
42
- * @param maxFeeRate Fee rate limits in base units
36
+ * @param maxFeeRate Fee rate limits in base units, defaults to L1: 20 PFri, L2: 4 PFri, L1 data: 10 PFri
43
37
  * @param feeMultiplier A multiplier to use for the returned fee rates
44
38
  * @param da Data-availability mode - currently just L1
45
39
  */
46
- constructor(provider, maxFeeRate = { l1GasCost: 20000000000000000n, l2GasCost: 4000000000000000n, l1DataGasCost: 10000000000000000n }, feeMultiplier = 1.25, da) {
40
+ constructor(provider, maxFeeRate = { l1GasCost: 20000000000000000n, l2GasCost: 4000000000000000n, l1DataGasCost: 10000000000000000n }, feeMultiplier = 1.25, da = { fee: "L1", nonce: "L1" }) {
47
41
  this.logger = (0, Utils_1.getLogger)("StarknetFees: ");
48
42
  this.provider = provider;
49
43
  this.maxFeeRate = maxFeeRate;
@@ -7,28 +7,52 @@ export type StarknetTxBase = {
7
7
  };
8
8
  txId?: string;
9
9
  };
10
+ /**
11
+ * "INVOKE" type of transaction, used to call smart contracts on Starknet
12
+ *
13
+ * @category Chain Interface
14
+ */
10
15
  export type StarknetTxInvoke = StarknetTxBase & {
11
16
  type: "INVOKE";
12
17
  tx: Array<Call>;
13
18
  signed?: Invocation;
14
19
  };
20
+ /**
21
+ * Type-guard for the "INVOKE" type of transaction, used to call smart contracts on Starknet
22
+ *
23
+ * @category Chain Interface
24
+ */
15
25
  export declare function isStarknetTxInvoke(obj: any): obj is StarknetTxInvoke;
26
+ /**
27
+ * "DEPLOY_ACCOUNT" type of transaction, used as a first transaction that the account does to deploy its smart
28
+ * account contract on the Starknet
29
+ *
30
+ * @category Chain Interface
31
+ */
16
32
  export type StarknetTxDeployAccount = StarknetTxBase & {
17
33
  type: "DEPLOY_ACCOUNT";
18
34
  tx: DeployAccountContractPayload;
19
35
  signed?: DeployAccountContractTransaction;
20
36
  };
37
+ /**
38
+ * Type-guard for the "DEPLOY_ACCOUNT" type of transaction, used as a first transaction that the account does
39
+ * to deploy its smart account contract on the Starknet
40
+ *
41
+ * @category Chain Interface
42
+ */
21
43
  export declare function isStarknetTxDeployAccount(obj: any): obj is StarknetTxDeployAccount;
22
44
  /**
23
- * Unsigned starknet transaction, either an invoke transaction calling contracts or account deploy transaction
45
+ * Represents a Starknet transactions, which can either be an "INVOKE" or "DEPLOY_ACCOUNT" type, use the
46
+ * {@link isStarknetTxInvoke} & {@link isStarknetTxDeployAccount} to narrow down the type.
24
47
  *
25
48
  * @category Chain Interface
26
49
  */
27
50
  export type StarknetTx = StarknetTxInvoke | StarknetTxDeployAccount;
28
51
  /**
29
- * Signed starknet transaction, either an invoke transaction calling contracts or account deploy transaction.
52
+ * Represents a signed Starknet transactions, which can either be an "INVOKE" or "DEPLOY_ACCOUNT" type, use the
53
+ * {@link isStarknetTxInvoke} & {@link isStarknetTxDeployAccount} to narrow down the type.
30
54
  *
31
- * @remarks Uses the same type as the unsinged tx for Starknet!
55
+ * @remark For Starknet this is just an alias for {@link StarknetTx}
32
56
  *
33
57
  * @category Chain Interface
34
58
  */
@@ -66,13 +90,15 @@ export declare class StarknetTransactions extends StarknetModule {
66
90
  */
67
91
  private confirmTransaction;
68
92
  /**
69
- * Prepares starknet transactions, checks if the account is deployed, assigns nonces if needed & calls beforeTxSigned callback
93
+ * Prepares starknet transactions, checks if the account is deployed, assigns nonces if needed
94
+ * & calls beforeTxSigned callback (only if signer is passed!)
70
95
  *
71
96
  * @param signer
72
97
  * @param txs
73
- * @private
74
98
  */
75
- private prepareTransactions;
99
+ prepareTransactions(txs: (StarknetTx & {
100
+ addedInPrepare?: boolean;
101
+ })[], signer?: StarknetSigner): Promise<void>;
76
102
  /**
77
103
  * Sends out a signed transaction to the RPC
78
104
  *
@@ -5,6 +5,11 @@ const StarknetModule_1 = require("../StarknetModule");
5
5
  const starknet_1 = require("starknet");
6
6
  const Utils_1 = require("../../../utils/Utils");
7
7
  const base_1 = require("@atomiqlabs/base");
8
+ /**
9
+ * Type-guard for the "INVOKE" type of transaction, used to call smart contracts on Starknet
10
+ *
11
+ * @category Chain Interface
12
+ */
8
13
  function isStarknetTxInvoke(obj) {
9
14
  return typeof (obj) === "object" &&
10
15
  typeof (obj.details) === "object" &&
@@ -14,6 +19,12 @@ function isStarknetTxInvoke(obj) {
14
19
  (obj.signed == null || typeof (obj.signed) === "object");
15
20
  }
16
21
  exports.isStarknetTxInvoke = isStarknetTxInvoke;
22
+ /**
23
+ * Type-guard for the "DEPLOY_ACCOUNT" type of transaction, used as a first transaction that the account does
24
+ * to deploy its smart account contract on the Starknet
25
+ *
26
+ * @category Chain Interface
27
+ */
17
28
  function isStarknetTxDeployAccount(obj) {
18
29
  return typeof (obj) === "object" &&
19
30
  typeof (obj.details) === "object" &&
@@ -203,29 +214,45 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
203
214
  return result.txId;
204
215
  }
205
216
  /**
206
- * Prepares starknet transactions, checks if the account is deployed, assigns nonces if needed & calls beforeTxSigned callback
217
+ * Prepares starknet transactions, checks if the account is deployed, assigns nonces if needed
218
+ * & calls beforeTxSigned callback (only if signer is passed!)
207
219
  *
208
220
  * @param signer
209
221
  * @param txs
210
- * @private
211
222
  */
212
- async prepareTransactions(signer, txs) {
213
- let nonce = await this.getNonce(signer.getAddress());
214
- const latestPendingNonce = this.latestPendingNonces[(0, Utils_1.toHex)(signer.getAddress())];
223
+ async prepareTransactions(txs, signer) {
224
+ if (txs.length === 0)
225
+ return;
226
+ const signerAddress = signer?.getAddress() ?? txs[0].details.walletAddress;
227
+ if (signerAddress == null)
228
+ throw new Error("Cannot get tx sender address!");
229
+ let nonce = await this.getNonce(signerAddress);
230
+ const latestPendingNonce = this.latestPendingNonces[(0, Utils_1.toHex)(signerAddress)];
215
231
  if (latestPendingNonce != null && latestPendingNonce > nonce) {
216
232
  this.logger.debug("prepareTransactions(): Using 'pending' nonce from local cache!");
217
233
  nonce = latestPendingNonce;
218
234
  }
219
235
  //Add deploy account tx
220
236
  if (nonce === 0n) {
221
- const deployPayload = await signer.getDeployPayload();
222
- if (deployPayload != null) {
223
- const tx = await this.root.Accounts.getAccountDeployTransaction(deployPayload);
237
+ if (signer != null) {
238
+ const deployPayload = await signer.getDeployPayload();
239
+ if (deployPayload != null) {
240
+ const tx = await this.root.Accounts.getAccountDeployTransaction(deployPayload);
241
+ tx.addedInPrepare = true;
242
+ txs.unshift(tx);
243
+ }
244
+ }
245
+ else {
246
+ // Use a 0x0 class hash to indicate that deployment is needed by external signer
247
+ const tx = await this.root.Accounts.getAccountDeployTransaction({
248
+ classHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
249
+ contractAddress: signerAddress
250
+ });
224
251
  tx.addedInPrepare = true;
225
252
  txs.unshift(tx);
226
253
  }
227
254
  }
228
- if (!signer.isManagingNoncesInternally) {
255
+ if (signer == null || !signer.isManagingNoncesInternally) {
229
256
  if (nonce === 0n) {
230
257
  //Just increment the nonce by one and hope the wallet is smart enough to deploy account first
231
258
  nonce = 1n;
@@ -235,18 +262,19 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
235
262
  if (tx.details.nonce != null)
236
263
  nonce = BigInt(tx.details.nonce); //Take the nonce from last tx
237
264
  if (nonce == null)
238
- nonce = BigInt(await this.root.provider.getNonceForAddress(signer.getAddress())); //Fetch the nonce
265
+ nonce = BigInt(await this.root.provider.getNonceForAddress(signerAddress)); //Fetch the nonce
239
266
  if (tx.details.nonce == null)
240
267
  tx.details.nonce = nonce;
241
268
  this.logger.debug("prepareTransactions(): transaction prepared (" + (i + 1) + "/" + txs.length + "), nonce: " + tx.details.nonce);
242
269
  nonce += BigInt(1);
243
270
  }
244
271
  }
245
- for (let tx of txs) {
246
- for (let callback of this.cbksBeforeTxSigned) {
247
- await callback(tx);
272
+ if (signer != null)
273
+ for (let tx of txs) {
274
+ for (let callback of this.cbksBeforeTxSigned) {
275
+ await callback(tx);
276
+ }
248
277
  }
249
- }
250
278
  }
251
279
  /**
252
280
  * Sends out a signed transaction to the RPC
@@ -282,13 +310,14 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
282
310
  */
283
311
  async sendAndConfirm(signer, _txs, waitForConfirmation, abortSignal, parallel, onBeforePublish) {
284
312
  const txs = _txs;
285
- await this.prepareTransactions(signer, txs);
313
+ await this.prepareTransactions(txs, signer);
286
314
  const signedTxs = [];
287
315
  //Don't separate the signing process from the sending when using browser-based wallet
288
316
  if (signer.signTransaction != null)
289
317
  for (let i = 0; i < txs.length; i++) {
290
318
  const tx = txs[i];
291
319
  const signedTx = await signer.signTransaction(tx);
320
+ (0, Utils_1.calculateHash)(signedTx);
292
321
  signedTx.addedInPrepare = tx.addedInPrepare;
293
322
  signedTxs.push(signedTx);
294
323
  this.logger.debug("sendAndConfirm(): transaction signed (" + (i + 1) + "/" + txs.length + "): " + signedTx.txId);
@@ -373,9 +402,10 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
373
402
  return txIds;
374
403
  }
375
404
  async sendSignedAndConfirm(signedTxs, waitForConfirmation, abortSignal, parallel, onBeforePublish) {
376
- signedTxs.forEach(val => {
377
- if (val.signed == null)
405
+ signedTxs.forEach(tx => {
406
+ if (tx.signed == null)
378
407
  throw new Error("Transactions have to be signed!");
408
+ (0, Utils_1.calculateHash)(tx);
379
409
  });
380
410
  this.logger.debug("sendSignedAndConfirm(): sending transactions, count: " + signedTxs.length +
381
411
  " waitForConfirmation: " + waitForConfirmation + " parallel: " + parallel);
@@ -7,8 +7,17 @@ import { StarknetContractEvents } from "./modules/StarknetContractEvents";
7
7
  */
8
8
  export declare class StarknetContractBase<T extends Abi> {
9
9
  readonly contract: TypedContractV2<T>;
10
- readonly Events: StarknetContractEvents<T>;
11
- readonly Chain: StarknetChainInterface;
12
- readonly contractDeploymentHeight?: number;
10
+ /**
11
+ * @internal
12
+ */
13
+ readonly _Events: StarknetContractEvents<T>;
14
+ /**
15
+ * @internal
16
+ */
17
+ protected readonly Chain: StarknetChainInterface;
18
+ /**
19
+ * @internal
20
+ */
21
+ readonly _contractDeploymentHeight?: number;
13
22
  constructor(chainInterface: StarknetChainInterface, contractAddress: string, contractAbi: T, contractDeploymentHeight?: number);
14
23
  }
@@ -14,8 +14,8 @@ class StarknetContractBase {
14
14
  address: contractAddress,
15
15
  providerOrAccount: chainInterface.provider
16
16
  }).typedv2(contractAbi);
17
- this.Events = new StarknetContractEvents_1.StarknetContractEvents(chainInterface, this, contractAbi);
18
- this.contractDeploymentHeight = contractDeploymentHeight;
17
+ this._Events = new StarknetContractEvents_1.StarknetContractEvents(chainInterface, this, contractAbi);
18
+ this._contractDeploymentHeight = contractDeploymentHeight;
19
19
  }
20
20
  }
21
21
  exports.StarknetContractBase = StarknetContractBase;
@@ -105,7 +105,7 @@ class StarknetContractEvents extends StarknetEvents_1.StarknetEvents {
105
105
  return result;
106
106
  }
107
107
  return null;
108
- }, Math.max(startHeight ?? 0, this.contract.contractDeploymentHeight ?? 0), abortSignal);
108
+ }, Math.max(startHeight ?? 0, this.contract._contractDeploymentHeight ?? 0), abortSignal);
109
109
  }
110
110
  }
111
111
  exports.StarknetContractEvents = StarknetContractEvents;
@@ -17,5 +17,8 @@ export declare class StarknetChainEvents extends StarknetChainEventsBrowser {
17
17
  * @private
18
18
  */
19
19
  private saveLastEventData;
20
+ /**
21
+ * @inheritDoc
22
+ */
20
23
  init(noAutomaticPoll?: boolean): Promise<void>;
21
24
  }
@@ -48,6 +48,9 @@ class StarknetChainEvents extends StarknetChainEventsBrowser_1.StarknetChainEven
48
48
  saveLastEventData(newState) {
49
49
  return fs.writeFile(this.directory + BLOCKHEIGHT_FILENAME, newState.map(value => value.lastTxHash == null ? value.lastBlockNumber.toString(10) : value.lastBlockNumber.toString(10) + ";" + value.lastTxHash).join(","));
50
50
  }
51
+ /**
52
+ * @inheritDoc
53
+ */
51
54
  async init(noAutomaticPoll) {
52
55
  if (noAutomaticPoll)
53
56
  return;
@@ -11,7 +11,13 @@ import { StarknetChainInterface } from "../chain/StarknetChainInterface";
11
11
  * @category Events
12
12
  */
13
13
  export type StarknetEventListenerState = {
14
+ /**
15
+ * Block number of the last processed event
16
+ */
14
17
  lastBlockNumber: number;
18
+ /**
19
+ * Transaction hash of the last processed event
20
+ */
15
21
  lastTxHash?: string;
16
22
  };
17
23
  /**
@@ -24,16 +30,49 @@ export type StarknetEventListenerState = {
24
30
  export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetSwapData, StarknetEventListenerState[]> {
25
31
  private eventsProcessing;
26
32
  private processedEvents;
33
+ /**
34
+ * @internal
35
+ */
27
36
  protected readonly Chain: StarknetChainInterface;
37
+ /**
38
+ * @internal
39
+ */
28
40
  protected readonly listeners: EventListener<StarknetSwapData>[];
41
+ /**
42
+ * @internal
43
+ */
29
44
  protected readonly wsChannel?: WebSocketChannel;
45
+ /**
46
+ * @internal
47
+ */
30
48
  protected readonly provider: Provider;
49
+ /**
50
+ * @internal
51
+ */
31
52
  protected readonly starknetSwapContract: StarknetSwapContract;
53
+ /**
54
+ * @internal
55
+ */
32
56
  protected readonly starknetSpvVaultContract: StarknetSpvVaultContract;
57
+ /**
58
+ * @internal
59
+ */
33
60
  protected readonly logger: import("../../utils/Utils").LoggerType;
61
+ /**
62
+ * @internal
63
+ */
34
64
  protected escrowContractSubscription?: SubscriptionStarknetEventsEvent;
65
+ /**
66
+ * @internal
67
+ */
35
68
  protected spvVaultContractSubscription?: SubscriptionStarknetEventsEvent;
69
+ /**
70
+ * @internal
71
+ */
36
72
  protected stopped: boolean;
73
+ /**
74
+ * @internal
75
+ */
37
76
  protected pollIntervalSeconds: number;
38
77
  private timeout;
39
78
  constructor(chainInterface: StarknetChainInterface, starknetSwapContract: StarknetSwapContract, starknetSpvVaultContract: StarknetSpvVaultContract, pollIntervalSeconds?: number);
@@ -129,10 +168,7 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
129
168
  * @private
130
169
  */
131
170
  private checkEventsEcrowManager;
132
- protected checkEventsSpvVaults(currentBlock: {
133
- timestamp: number;
134
- block_number: number;
135
- }, lastTxHash?: string, lastBlockNumber?: number): Promise<StarknetEventListenerState>;
171
+ private checkEventsSpvVaults;
136
172
  /**
137
173
  * @inheritDoc
138
174
  */
@@ -140,9 +176,12 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
140
176
  /**
141
177
  * Sets up event handlers listening for swap events over websocket
142
178
  *
143
- * @protected
179
+ * @internal
144
180
  */
145
181
  protected setupPoll(lastState?: StarknetEventListenerState[], saveLatestProcessedBlockNumber?: (newState: StarknetEventListenerState[]) => Promise<void>): Promise<void>;
182
+ /**
183
+ * @internal
184
+ */
146
185
  protected wsStarted: boolean;
147
186
  /**
148
187
  *
@@ -155,8 +194,7 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
155
194
  */
156
195
  private subscribeWsSpvVaultEvents;
157
196
  /**
158
- *
159
- * @protected
197
+ * @internal
160
198
  */
161
199
  protected setupWebsocket(): Promise<void>;
162
200
  /**
@@ -19,9 +19,21 @@ class StarknetChainEventsBrowser {
19
19
  constructor(chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds = 5) {
20
20
  this.eventsProcessing = {};
21
21
  this.processedEvents = new Set();
22
+ /**
23
+ * @internal
24
+ */
22
25
  this.listeners = [];
26
+ /**
27
+ * @internal
28
+ */
23
29
  this.logger = (0, Utils_1.getLogger)("StarknetChainEventsBrowser: ");
30
+ /**
31
+ * @internal
32
+ */
24
33
  this.stopped = true;
34
+ /**
35
+ * @internal
36
+ */
25
37
  this.wsStarted = false;
26
38
  this.Chain = chainInterface;
27
39
  this.wsChannel = chainInterface.wsChannel;
@@ -302,7 +314,7 @@ class StarknetChainEventsBrowser {
302
314
  return { lastTxHash, lastBlockNumber };
303
315
  }
304
316
  // this.logger.debug("checkEvents(EscrowManager): Requesting logs: "+logStartHeight+"...pending");
305
- let events = await this.starknetSwapContract.Events.getContractBlockEvents(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [], lastBlockNumber, null);
317
+ let events = await this.starknetSwapContract._Events.getContractBlockEvents(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [], lastBlockNumber, null);
306
318
  if (lastTxHash != null) {
307
319
  const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
308
320
  if (latestProcessedEventIndex !== -1) {
@@ -335,7 +347,7 @@ class StarknetChainEventsBrowser {
335
347
  return { lastTxHash, lastBlockNumber };
336
348
  }
337
349
  // this.logger.debug("checkEvents(SpvVaults): Requesting logs: "+logStartHeight+"...pending");
338
- let events = await this.starknetSpvVaultContract.Events.getContractBlockEvents(["spv_swap_vault::events::Opened", "spv_swap_vault::events::Deposited", "spv_swap_vault::events::Closed", "spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed"], [], lastBlockNumber, null);
350
+ let events = await this.starknetSpvVaultContract._Events.getContractBlockEvents(["spv_swap_vault::events::Opened", "spv_swap_vault::events::Deposited", "spv_swap_vault::events::Closed", "spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed"], [], lastBlockNumber, null);
339
351
  if (lastTxHash != null) {
340
352
  const latestProcessedEventIndex = (0, Utils_1.findLastIndex)(events, val => val.txHash === lastTxHash);
341
353
  if (latestProcessedEventIndex !== -1) {
@@ -376,7 +388,7 @@ class StarknetChainEventsBrowser {
376
388
  /**
377
389
  * Sets up event handlers listening for swap events over websocket
378
390
  *
379
- * @protected
391
+ * @internal
380
392
  */
381
393
  async setupPoll(lastState, saveLatestProcessedBlockNumber) {
382
394
  let func;
@@ -404,7 +416,7 @@ class StarknetChainEventsBrowser {
404
416
  try {
405
417
  subscription = await this.wsChannel.subscribeEvents({
406
418
  fromAddress: this.starknetSwapContract.contract.address,
407
- keys: this.starknetSwapContract.Events.toFilter(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], []),
419
+ keys: this.starknetSwapContract._Events.toFilter(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], []),
408
420
  finalityStatus: starknet_1.TransactionFinalityStatus.ACCEPTED_ON_L2
409
421
  });
410
422
  }
@@ -414,7 +426,7 @@ class StarknetChainEventsBrowser {
414
426
  }
415
427
  } while (subscription == null);
416
428
  subscription.on((event) => {
417
- const parsedEvents = this.starknetSwapContract.Events.toStarknetAbiEvents([event]);
429
+ const parsedEvents = this.starknetSwapContract._Events.toStarknetAbiEvents([event]);
418
430
  this.processEvents(parsedEvents, event.block_number).catch(e => {
419
431
  console.error(`WS: EscrowContract: Failed to process event ${parsedEvents[0].txHash}:${parsedEvents[0].name}: `, e);
420
432
  });
@@ -432,7 +444,7 @@ class StarknetChainEventsBrowser {
432
444
  try {
433
445
  subscription = await this.wsChannel.subscribeEvents({
434
446
  fromAddress: this.starknetSpvVaultContract.contract.address,
435
- keys: this.starknetSpvVaultContract.Events.toFilter(["spv_swap_vault::events::Opened", "spv_swap_vault::events::Deposited", "spv_swap_vault::events::Closed", "spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed"], []),
447
+ keys: this.starknetSpvVaultContract._Events.toFilter(["spv_swap_vault::events::Opened", "spv_swap_vault::events::Deposited", "spv_swap_vault::events::Closed", "spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed"], []),
436
448
  finalityStatus: starknet_1.TransactionFinalityStatus.ACCEPTED_ON_L2
437
449
  });
438
450
  }
@@ -442,7 +454,7 @@ class StarknetChainEventsBrowser {
442
454
  }
443
455
  } while (subscription == null);
444
456
  subscription.on((event) => {
445
- const parsedEvents = this.starknetSpvVaultContract.Events.toStarknetAbiEvents([event]);
457
+ const parsedEvents = this.starknetSpvVaultContract._Events.toStarknetAbiEvents([event]);
446
458
  this.processEvents(parsedEvents, event.block_number).catch(e => {
447
459
  console.error(`WS: SpvVaultContract: Failed to process event ${parsedEvents[0].txHash}:${parsedEvents[0].name}: `, e);
448
460
  });
@@ -451,8 +463,7 @@ class StarknetChainEventsBrowser {
451
463
  this.logger.debug("subscribeWsSpvVaultEvents(): Successfully subscribed to spv vault contract WS events");
452
464
  }
453
465
  /**
454
- *
455
- * @protected
466
+ * @internal
456
467
  */
457
468
  async setupWebsocket() {
458
469
  if (this.wsChannel == null)
@@ -213,7 +213,7 @@ class StarknetSpvVaultContract extends StarknetContractBase_1.StarknetContractBa
213
213
  */
214
214
  async getAllVaults(owner) {
215
215
  const openedVaults = new Set();
216
- await this.Events.findInContractEventsForward(["spv_swap_vault::events::Opened", "spv_swap_vault::events::Closed"], owner == null ? null : [null, null, owner], (event) => {
216
+ await this._Events.findInContractEventsForward(["spv_swap_vault::events::Opened", "spv_swap_vault::events::Closed"], owner == null ? null : [null, null, owner], (event) => {
217
217
  const owner = (0, Utils_1.toHex)(event.params.owner);
218
218
  const vaultId = (0, Utils_1.toBigInt)(event.params.vault_id);
219
219
  const vaultIdentifier = owner + ":" + vaultId.toString(10);
@@ -350,7 +350,7 @@ class StarknetSpvVaultContract extends StarknetContractBase_1.StarknetContractBa
350
350
  }
351
351
  }
352
352
  });
353
- await this.Events.findInContractEventsForward(events, [lows, highs], async (event) => {
353
+ await this._Events.findInContractEventsForward(events, [lows, highs], async (event) => {
354
354
  const txId = (0, Utils_1.bigNumberishToBuffer)(event.params.btc_tx_hash, 32).reverse().toString("hex");
355
355
  if (result[txId] == null) {
356
356
  this.logger.warn(`getWithdrawalStates(): findInContractEvents-callback: loaded event for ${txId}, but transaction not found in input params!`);
@@ -374,7 +374,7 @@ class StarknetSpvVaultContract extends StarknetContractBase_1.StarknetContractBa
374
374
  };
375
375
  const events = ["spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed", "spv_swap_vault::events::Closed"];
376
376
  const keys = [(0, Utils_1.toHex)(txHashU256.low), (0, Utils_1.toHex)(txHashU256.high)];
377
- await this.Events.findInContractEventsForward(events, keys, async (event) => {
377
+ await this._Events.findInContractEventsForward(events, keys, async (event) => {
378
378
  const eventResult = this.parseWithdrawalEvent(event);
379
379
  if (eventResult != null)
380
380
  result = eventResult;
@@ -385,7 +385,7 @@ class StarknetSpvVaultContract extends StarknetContractBase_1.StarknetContractBa
385
385
  const { height: latestBlockheight } = await this.Chain.getFinalizedBlock();
386
386
  const withdrawals = {};
387
387
  const eventTypes = ["spv_swap_vault::events::Fronted", "spv_swap_vault::events::Claimed"];
388
- await this.Events.findInContractEventsForward(eventTypes, [null, null, null, null, recipient], async (_event) => {
388
+ await this._Events.findInContractEventsForward(eventTypes, [null, null, null, null, recipient], async (_event) => {
389
389
  const eventResult = this.parseWithdrawalEvent(_event);
390
390
  if (eventResult == null || eventResult.type === base_1.SpvWithdrawalStateType.CLOSED)
391
391
  return null;
@@ -315,13 +315,13 @@ class StarknetSwapContract extends StarknetContractBase_1.StarknetContractBase {
315
315
  };
316
316
  },
317
317
  getClaimTxId: async () => {
318
- const events = await this.Events.getContractBlockEvents(["escrow_manager::events::Claim"], [null, null, null, "0x" + escrowHash], blockHeight, blockHeight);
318
+ const events = await this._Events.getContractBlockEvents(["escrow_manager::events::Claim"], [null, null, null, "0x" + escrowHash], blockHeight, blockHeight);
319
319
  if (events.length === 0)
320
320
  throw new Error("Claim event not found!");
321
321
  return events[0].txHash;
322
322
  },
323
323
  getClaimResult: async () => {
324
- const events = await this.Events.getContractBlockEvents(["escrow_manager::events::Claim"], [null, null, null, "0x" + escrowHash], blockHeight, blockHeight);
324
+ const events = await this._Events.getContractBlockEvents(["escrow_manager::events::Claim"], [null, null, null, "0x" + escrowHash], blockHeight, blockHeight);
325
325
  if (events.length === 0)
326
326
  throw new Error("Claim event not found!");
327
327
  const event = events[0];
@@ -343,7 +343,7 @@ class StarknetSwapContract extends StarknetContractBase_1.StarknetContractBase {
343
343
  };
344
344
  },
345
345
  getRefundTxId: async () => {
346
- const events = await this.Events.getContractBlockEvents(["escrow_manager::events::Refund"], [null, null, null, "0x" + escrowHash], blockHeight, blockHeight);
346
+ const events = await this._Events.getContractBlockEvents(["escrow_manager::events::Refund"], [null, null, null, "0x" + escrowHash], blockHeight, blockHeight);
347
347
  if (events.length === 0)
348
348
  throw new Error("Refund event not found!");
349
349
  return events[0].txHash;
@@ -475,8 +475,8 @@ class StarknetSwapContract extends StarknetContractBase_1.StarknetContractBase {
475
475
  }
476
476
  };
477
477
  //We have to fetch separately the different directions
478
- await this.Events.findInContractEventsForward(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [signer, null], processor, startBlockheight);
479
- await this.Events.findInContractEventsForward(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [null, signer], processor, startBlockheight);
478
+ await this._Events.findInContractEventsForward(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [signer, null], processor, startBlockheight);
479
+ await this._Events.findInContractEventsForward(["escrow_manager::events::Initialize", "escrow_manager::events::Claim", "escrow_manager::events::Refund"], [null, signer], processor, startBlockheight);
480
480
  for (let escrowHash in swapsOpened) {
481
481
  const foundSwapData = swapsOpened[escrowHash];
482
482
  const data = await foundSwapData.data;
@@ -27,7 +27,7 @@ class IBitcoinClaimHandler {
27
27
  const commitmentHash = starknet_1.hash.computePoseidonHashOnElements(serializedData);
28
28
  if (!swapData.isClaimData(commitmentHash))
29
29
  throw new Error("Invalid commit data");
30
- const merkleProof = await btcRelay.bitcoinRpc.getMerkleProof(tx.txid, tx.blockhash);
30
+ const merkleProof = await btcRelay._bitcoinRpc.getMerkleProof(tx.txid, tx.blockhash);
31
31
  if (merkleProof == null)
32
32
  throw new Error(`Failed to generate merkle proof for tx: ${tx.txid}!`);
33
33
  logger.debug("getWitness(): merkle proof computed: ", merkleProof);
@@ -17,7 +17,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
17
17
  * @private
18
18
  */
19
19
  Claim(signer, swapData, witness, claimHandlerGas) {
20
- return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.claim(swapData.toEscrowStruct(), witness), (0, StarknetFees_1.starknetGasAdd)(swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM, claimHandlerGas));
20
+ return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.claim(swapData.toEscrowStruct(), witness), StarknetFees_1.StarknetFees.starknetGasAdd(swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM, claimHandlerGas));
21
21
  }
22
22
  /**
23
23
  * Creates transactions claiming the swap using a secret (for HTLC swaps)
@@ -88,7 +88,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
88
88
  let gasRequired = swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM;
89
89
  const claimHandler = this.contract.claimHandlersByAddress[(0, Utils_1.toHex)(swapData.claimHandler)];
90
90
  if (claimHandler != null)
91
- gasRequired = (0, StarknetFees_1.starknetGasAdd)(gasRequired, claimHandler.getGas(swapData));
91
+ gasRequired = StarknetFees_1.StarknetFees.starknetGasAdd(gasRequired, claimHandler.getGas(swapData));
92
92
  return StarknetFees_1.StarknetFees.getGasFee(gasRequired, feeRate);
93
93
  }
94
94
  }
@@ -21,7 +21,7 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
21
21
  * @private
22
22
  */
23
23
  Refund(signer, swapData, witness, handlerGas) {
24
- return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.refund(swapData.toEscrowStruct(), witness), (0, StarknetFees_1.starknetGasAdd)(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, handlerGas));
24
+ return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.refund(swapData.toEscrowStruct(), witness), StarknetFees_1.StarknetFees.starknetGasAdd(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, handlerGas));
25
25
  }
26
26
  /**
27
27
  * Action for cooperative refunding with signature