@atomiqlabs/chain-starknet 1.0.9 → 2.0.0-beta.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 (121) hide show
  1. package/dist/index.d.ts +13 -9
  2. package/dist/index.js +13 -9
  3. package/dist/starknet/StarknetChainType.d.ts +6 -2
  4. package/dist/starknet/StarknetInitializer.d.ts +3 -2
  5. package/dist/starknet/StarknetInitializer.js +17 -6
  6. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +28 -7
  7. package/dist/starknet/btcrelay/StarknetBtcRelay.js +75 -20
  8. package/dist/starknet/{base → chain}/StarknetAction.d.ts +2 -2
  9. package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -0
  10. package/dist/starknet/chain/StarknetChainInterface.js +91 -0
  11. package/dist/starknet/{base → chain}/StarknetModule.d.ts +3 -3
  12. package/dist/starknet/{base → chain}/modules/StarknetAddresses.d.ts +1 -1
  13. package/dist/starknet/{base → chain}/modules/StarknetAddresses.js +1 -1
  14. package/dist/starknet/{base → chain}/modules/StarknetSignatures.d.ts +2 -2
  15. package/dist/starknet/{base → chain}/modules/StarknetTokens.js +2 -1
  16. package/dist/starknet/{base → chain}/modules/StarknetTransactions.d.ts +7 -1
  17. package/dist/starknet/{base → chain}/modules/StarknetTransactions.js +45 -16
  18. package/dist/starknet/contract/StarknetContractBase.d.ts +5 -5
  19. package/dist/starknet/contract/StarknetContractBase.js +5 -7
  20. package/dist/starknet/contract/StarknetContractModule.d.ts +8 -0
  21. package/dist/starknet/contract/StarknetContractModule.js +11 -0
  22. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +15 -4
  23. package/dist/starknet/contract/modules/StarknetContractEvents.js +26 -6
  24. package/dist/starknet/events/StarknetChainEvents.d.ts +3 -1
  25. package/dist/starknet/events/StarknetChainEvents.js +9 -9
  26. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +23 -6
  27. package/dist/starknet/events/StarknetChainEventsBrowser.js +106 -13
  28. package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -0
  29. package/dist/starknet/provider/RpcProviderWithRetries.js +32 -0
  30. package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -0
  31. package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -0
  32. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +65 -0
  33. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +372 -0
  34. package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -0
  35. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +144 -0
  36. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +24 -0
  37. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +61 -0
  38. package/dist/starknet/swaps/StarknetSwapContract.d.ts +4 -22
  39. package/dist/starknet/swaps/StarknetSwapContract.js +23 -80
  40. package/dist/starknet/swaps/StarknetSwapModule.d.ts +6 -5
  41. package/dist/starknet/swaps/StarknetSwapModule.js +5 -6
  42. package/dist/starknet/swaps/handlers/IHandler.d.ts +2 -2
  43. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +1 -1
  44. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +2 -2
  45. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +2 -2
  46. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +2 -2
  47. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +2 -2
  48. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +2 -21
  49. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +7 -41
  50. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +2 -2
  51. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +1 -1
  52. package/dist/starknet/swaps/modules/StarknetLpVault.js +9 -9
  53. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +1 -1
  54. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +8 -8
  55. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +1 -1
  56. package/dist/starknet/swaps/modules/StarknetSwapInit.js +9 -9
  57. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +1 -3
  58. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +8 -11
  59. package/dist/starknet/wallet/StarknetSigner.js +1 -1
  60. package/dist/utils/Utils.d.ts +2 -2
  61. package/dist/utils/Utils.js +3 -1
  62. package/package.json +2 -2
  63. package/src/index.ts +15 -9
  64. package/src/starknet/StarknetChainType.ts +10 -2
  65. package/src/starknet/StarknetInitializer.ts +23 -7
  66. package/src/starknet/btcrelay/StarknetBtcRelay.ts +104 -30
  67. package/src/starknet/{base → chain}/StarknetAction.ts +3 -3
  68. package/src/starknet/chain/StarknetChainInterface.ts +149 -0
  69. package/src/starknet/{base → chain}/StarknetModule.ts +3 -3
  70. package/src/starknet/{base → chain}/modules/StarknetAddresses.ts +1 -1
  71. package/src/starknet/{base → chain}/modules/StarknetSignatures.ts +2 -2
  72. package/src/starknet/{base → chain}/modules/StarknetTokens.ts +2 -1
  73. package/src/starknet/{base → chain}/modules/StarknetTransactions.ts +43 -18
  74. package/src/starknet/contract/StarknetContractBase.ts +9 -12
  75. package/src/starknet/contract/StarknetContractModule.ts +16 -0
  76. package/src/starknet/contract/modules/StarknetContractEvents.ts +33 -7
  77. package/src/starknet/events/StarknetChainEvents.ts +15 -11
  78. package/src/starknet/events/StarknetChainEventsBrowser.ts +159 -26
  79. package/src/starknet/provider/RpcProviderWithRetries.ts +43 -0
  80. package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -0
  81. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +475 -0
  82. package/src/starknet/spv_swap/StarknetSpvVaultData.ts +194 -0
  83. package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +68 -0
  84. package/src/starknet/swaps/StarknetSwapContract.ts +28 -116
  85. package/src/starknet/swaps/StarknetSwapModule.ts +8 -8
  86. package/src/starknet/swaps/handlers/IHandler.ts +2 -2
  87. package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +1 -1
  88. package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +2 -2
  89. package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +2 -2
  90. package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +2 -2
  91. package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +2 -2
  92. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +12 -61
  93. package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +2 -2
  94. package/src/starknet/swaps/modules/StarknetLpVault.ts +10 -10
  95. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +9 -9
  96. package/src/starknet/swaps/modules/StarknetSwapInit.ts +10 -10
  97. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +9 -13
  98. package/src/starknet/wallet/StarknetSigner.ts +1 -1
  99. package/src/utils/Utils.ts +4 -3
  100. package/dist/starknet/base/StarknetBase.d.ts +0 -34
  101. package/dist/starknet/base/StarknetBase.js +0 -29
  102. package/src/starknet/base/StarknetBase.ts +0 -56
  103. /package/dist/starknet/{base → chain}/StarknetAction.js +0 -0
  104. /package/dist/starknet/{base → chain}/StarknetModule.js +0 -0
  105. /package/dist/starknet/{base → chain}/modules/ERC20Abi.d.ts +0 -0
  106. /package/dist/starknet/{base → chain}/modules/ERC20Abi.js +0 -0
  107. /package/dist/starknet/{base → chain}/modules/StarknetAccounts.d.ts +0 -0
  108. /package/dist/starknet/{base → chain}/modules/StarknetAccounts.js +0 -0
  109. /package/dist/starknet/{base → chain}/modules/StarknetBlocks.d.ts +0 -0
  110. /package/dist/starknet/{base → chain}/modules/StarknetBlocks.js +0 -0
  111. /package/dist/starknet/{base → chain}/modules/StarknetEvents.d.ts +0 -0
  112. /package/dist/starknet/{base → chain}/modules/StarknetEvents.js +0 -0
  113. /package/dist/starknet/{base → chain}/modules/StarknetFees.d.ts +0 -0
  114. /package/dist/starknet/{base → chain}/modules/StarknetFees.js +0 -0
  115. /package/dist/starknet/{base → chain}/modules/StarknetSignatures.js +0 -0
  116. /package/dist/starknet/{base → chain}/modules/StarknetTokens.d.ts +0 -0
  117. /package/src/starknet/{base → chain}/modules/ERC20Abi.ts +0 -0
  118. /package/src/starknet/{base → chain}/modules/StarknetAccounts.ts +0 -0
  119. /package/src/starknet/{base → chain}/modules/StarknetBlocks.ts +0 -0
  120. /package/src/starknet/{base → chain}/modules/StarknetEvents.ts +0 -0
  121. /package/src/starknet/{base → chain}/modules/StarknetFees.ts +0 -0
@@ -6,6 +6,7 @@ const StarknetAction_1 = require("../StarknetAction");
6
6
  const ERC20Abi_1 = require("./ERC20Abi");
7
7
  const starknet_1 = require("starknet");
8
8
  const Utils_1 = require("../../../utils/Utils");
9
+ const StarknetAddresses_1 = require("./StarknetAddresses");
9
10
  class StarknetTokens extends StarknetModule_1.StarknetModule {
10
11
  getContract(address) {
11
12
  return new starknet_1.Contract(ERC20Abi_1.ERC20Abi, address, this.root.provider).typedv2(ERC20Abi_1.ERC20Abi);
@@ -46,7 +47,7 @@ class StarknetTokens extends StarknetModule_1.StarknetModule {
46
47
  * @param token
47
48
  */
48
49
  isValidToken(token) {
49
- return this.root.Addresses.isValidAddress(token);
50
+ return StarknetAddresses_1.StarknetAddresses.isValidAddress(token);
50
51
  }
51
52
  /**
52
53
  * Returns the token balance of the address
@@ -16,6 +16,7 @@ export type StarknetTx = ({
16
16
  txId?: string;
17
17
  };
18
18
  export declare class StarknetTransactions extends StarknetModule {
19
+ private readonly latestConfirmedNonces;
19
20
  private cbkBeforeTxSigned;
20
21
  /**
21
22
  * Waits for transaction confirmation using WS subscription and occasional HTTP polling, also re-sends
@@ -40,7 +41,6 @@ export declare class StarknetTransactions extends StarknetModule {
40
41
  * @param tx Starknet tx to send
41
42
  * @param onBeforePublish a callback called before every transaction is published
42
43
  * @param signer
43
- * @param retryOnSubmissionFailure
44
44
  * @private
45
45
  */
46
46
  private sendSignedTransaction;
@@ -76,6 +76,12 @@ export declare class StarknetTransactions extends StarknetModule {
76
76
  * @param tx
77
77
  */
78
78
  getTxStatus(tx: string): Promise<"pending" | "success" | "not_found" | "reverted">;
79
+ /**
80
+ * Gets the status of the starknet transaction with a specific txId
81
+ *
82
+ * @param txId
83
+ */
84
+ _getTxIdStatus(txId: string): Promise<"pending" | "success" | "not_found" | "reverted" | "rejected">;
79
85
  /**
80
86
  * Gets the status of the starknet transaction with a specific txId
81
87
  *
@@ -4,6 +4,10 @@ exports.StarknetTransactions = void 0;
4
4
  const StarknetModule_1 = require("../StarknetModule");
5
5
  const Utils_1 = require("../../../utils/Utils");
6
6
  class StarknetTransactions extends StarknetModule_1.StarknetModule {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.latestConfirmedNonces = {};
10
+ }
7
11
  /**
8
12
  * Waits for transaction confirmation using WS subscription and occasional HTTP polling, also re-sends
9
13
  * the transaction at regular interval
@@ -16,14 +20,21 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
16
20
  let state = "pending";
17
21
  while (state === "pending" || state === "not_found") {
18
22
  await (0, Utils_1.timeoutPromise)(3000, abortSignal);
19
- state = await this.getTxIdStatus(tx.txId);
23
+ state = await this._getTxIdStatus(tx.txId);
20
24
  if (state === "not_found" && tx.signed != null)
21
- await this.sendSignedTransaction(tx, undefined, undefined, false).catch(e => {
25
+ await this.sendSignedTransaction(tx).catch(e => {
22
26
  if (e.baseError?.code === 59)
23
27
  return; //Transaction already in the mempool
24
28
  console.error("Error on transaction re-send: ", e);
25
29
  });
26
30
  }
31
+ if (state !== "rejected") {
32
+ const nextAccountNonce = (0, Utils_1.toBigInt)(tx.details.nonce) + 1n;
33
+ const currentNonce = this.latestConfirmedNonces[tx.details.walletAddress];
34
+ if (currentNonce == null || nextAccountNonce > currentNonce) {
35
+ this.latestConfirmedNonces[tx.details.walletAddress] = nextAccountNonce;
36
+ }
37
+ }
27
38
  if (state === "reverted")
28
39
  throw new Error("Transaction reverted!");
29
40
  }
@@ -36,6 +47,11 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
36
47
  */
37
48
  async prepareTransactions(signer, txs) {
38
49
  let nonce = await signer.getNonce();
50
+ const latestConfirmedNonce = this.latestConfirmedNonces[signer.getAddress()];
51
+ if (latestConfirmedNonce != null && latestConfirmedNonce > nonce) {
52
+ console.debug("StarknetTransactions: prepareTransactions(): Using nonce from local cache!");
53
+ nonce = latestConfirmedNonce;
54
+ }
39
55
  if (nonce === BigInt(0) && signer.isWalletAccount()) {
40
56
  //Just increment the nonce by one and hope the wallet is smart enough to deploy account first
41
57
  nonce = BigInt(1);
@@ -64,10 +80,9 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
64
80
  * @param tx Starknet tx to send
65
81
  * @param onBeforePublish a callback called before every transaction is published
66
82
  * @param signer
67
- * @param retryOnSubmissionFailure
68
83
  * @private
69
84
  */
70
- async sendSignedTransaction(tx, onBeforePublish, signer, retryOnSubmissionFailure = true) {
85
+ async sendSignedTransaction(tx, onBeforePublish, signer) {
71
86
  if (onBeforePublish != null)
72
87
  await onBeforePublish(tx.txId, await this.serializeTx(tx));
73
88
  this.logger.debug("sendSignedTransaction(): sending transaction: ", tx);
@@ -86,16 +101,17 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
86
101
  tx.txId = txHash;
87
102
  return txHash;
88
103
  }
89
- const txResult = await (0, Utils_1.tryWithRetries)(() => {
90
- switch (tx.type) {
91
- case "INVOKE":
92
- return this.provider.channel.invoke(tx.signed, tx.details).then(res => res.transaction_hash);
93
- case "DEPLOY_ACCOUNT":
94
- return this.provider.channel.deployAccount(tx.signed, tx.details).then((res) => res.transaction_hash);
95
- default:
96
- throw new Error("Unsupported tx type!");
97
- }
98
- }, retryOnSubmissionFailure ? this.retryPolicy : { maxRetries: 1 });
104
+ let txResult;
105
+ switch (tx.type) {
106
+ case "INVOKE":
107
+ txResult = await this.provider.channel.invoke(tx.signed, tx.details).then(res => res.transaction_hash);
108
+ break;
109
+ case "DEPLOY_ACCOUNT":
110
+ txResult = await this.provider.channel.deployAccount(tx.signed, tx.details).then((res) => res.transaction_hash);
111
+ break;
112
+ default:
113
+ throw new Error("Unsupported tx type!");
114
+ }
99
115
  if (tx.txId !== txResult)
100
116
  this.logger.warn("sendSignedTransaction(): sent tx hash not matching the precomputed hash!");
101
117
  this.logger.info("sendSignedTransaction(): tx sent, expected txHash: " + tx.txId + ", txHash: " + txResult);
@@ -200,7 +216,7 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
200
216
  *
201
217
  * @param txId
202
218
  */
203
- async getTxIdStatus(txId) {
219
+ async _getTxIdStatus(txId) {
204
220
  const status = await this.provider.getTransactionStatus(txId).catch(e => {
205
221
  if (e.message != null && e.message.includes("29: Transaction hash not found"))
206
222
  return null;
@@ -210,11 +226,24 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
210
226
  return "not_found";
211
227
  if (status.finality_status === "RECEIVED")
212
228
  return "pending";
213
- if (status.finality_status !== "REJECTED" && status.execution_status === "SUCCEEDED") {
229
+ if (status.finality_status === "REJECTED")
230
+ return "rejected";
231
+ if (status.execution_status === "SUCCEEDED") {
214
232
  return "success";
215
233
  }
216
234
  return "reverted";
217
235
  }
236
+ /**
237
+ * Gets the status of the starknet transaction with a specific txId
238
+ *
239
+ * @param txId
240
+ */
241
+ async getTxIdStatus(txId) {
242
+ const status = await this._getTxIdStatus(txId);
243
+ if (status === "rejected")
244
+ return "reverted";
245
+ return status;
246
+ }
218
247
  onBeforeTxSigned(callback) {
219
248
  this.cbkBeforeTxSigned = callback;
220
249
  }
@@ -1,13 +1,13 @@
1
- import { StarknetBase, StarknetRetryPolicy } from "../base/StarknetBase";
2
- import { constants, Provider, TypedContractV2 } from "starknet";
3
- import { StarknetFees } from "../base/modules/StarknetFees";
1
+ import { StarknetChainInterface } from "../chain/StarknetChainInterface";
2
+ import { TypedContractV2 } from "starknet";
4
3
  import { Abi } from "abi-wan-kanabi";
5
4
  import { StarknetContractEvents } from "./modules/StarknetContractEvents";
6
5
  /**
7
6
  * Base class providing program specific utilities
8
7
  */
9
- export declare class StarknetContractBase<T extends Abi> extends StarknetBase {
8
+ export declare class StarknetContractBase<T extends Abi> {
10
9
  contract: TypedContractV2<T>;
11
10
  readonly Events: StarknetContractEvents<T>;
12
- constructor(chainId: constants.StarknetChainId, provider: Provider, contractAddress: string, contractAbi: T, retryPolicy?: StarknetRetryPolicy, solanaFeeEstimator?: StarknetFees);
11
+ readonly Chain: StarknetChainInterface;
12
+ constructor(chainInterface: StarknetChainInterface, contractAddress: string, contractAbi: T);
13
13
  }
@@ -1,18 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StarknetContractBase = void 0;
4
- const StarknetBase_1 = require("../base/StarknetBase");
5
4
  const starknet_1 = require("starknet");
6
- const StarknetFees_1 = require("../base/modules/StarknetFees");
7
5
  const StarknetContractEvents_1 = require("./modules/StarknetContractEvents");
8
6
  /**
9
7
  * Base class providing program specific utilities
10
8
  */
11
- class StarknetContractBase extends StarknetBase_1.StarknetBase {
12
- constructor(chainId, provider, contractAddress, contractAbi, retryPolicy, solanaFeeEstimator = new StarknetFees_1.StarknetFees(provider)) {
13
- super(chainId, provider, retryPolicy, solanaFeeEstimator);
14
- this.contract = new starknet_1.Contract(contractAbi, contractAddress, provider).typedv2(contractAbi);
15
- this.Events = new StarknetContractEvents_1.StarknetContractEvents(this, contractAbi);
9
+ class StarknetContractBase {
10
+ constructor(chainInterface, contractAddress, contractAbi) {
11
+ this.Chain = chainInterface;
12
+ this.contract = new starknet_1.Contract(contractAbi, contractAddress, chainInterface.provider).typedv2(contractAbi);
13
+ this.Events = new StarknetContractEvents_1.StarknetContractEvents(chainInterface, this, contractAbi);
16
14
  }
17
15
  }
18
16
  exports.StarknetContractBase = StarknetContractBase;
@@ -0,0 +1,8 @@
1
+ import { Abi } from "abi-wan-kanabi";
2
+ import { StarknetContractBase } from "./StarknetContractBase";
3
+ import { StarknetChainInterface } from "../chain/StarknetChainInterface";
4
+ import { StarknetModule } from "../chain/StarknetModule";
5
+ export declare class StarknetContractModule<TAbi extends Abi> extends StarknetModule {
6
+ readonly contract: StarknetContractBase<TAbi>;
7
+ constructor(chainInterface: StarknetChainInterface, contract: StarknetContractBase<TAbi>);
8
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StarknetContractModule = void 0;
4
+ const StarknetModule_1 = require("../chain/StarknetModule");
5
+ class StarknetContractModule extends StarknetModule_1.StarknetModule {
6
+ constructor(chainInterface, contract) {
7
+ super(chainInterface);
8
+ this.contract = contract;
9
+ }
10
+ }
11
+ exports.StarknetContractModule = StarknetContractModule;
@@ -1,7 +1,8 @@
1
1
  import { Abi } from "abi-wan-kanabi";
2
2
  import { EventToPrimitiveType, ExtractAbiEventNames } from "abi-wan-kanabi/dist/kanabi";
3
- import { StarknetEvents } from "../../base/modules/StarknetEvents";
3
+ import { StarknetEvents } from "../../chain/modules/StarknetEvents";
4
4
  import { StarknetContractBase } from "../StarknetContractBase";
5
+ import { StarknetChainInterface } from "../../chain/StarknetChainInterface";
5
6
  export type StarknetAbiEvent<TAbi extends Abi, TEventName extends ExtractAbiEventNames<TAbi>> = {
6
7
  name: TEventName;
7
8
  params: EventToPrimitiveType<TAbi, TEventName>;
@@ -12,9 +13,9 @@ export type StarknetAbiEvent<TAbi extends Abi, TEventName extends ExtractAbiEven
12
13
  data: string[];
13
14
  };
14
15
  export declare class StarknetContractEvents<TAbi extends Abi> extends StarknetEvents {
15
- readonly root: StarknetContractBase<TAbi>;
16
+ readonly contract: StarknetContractBase<TAbi>;
16
17
  readonly abi: TAbi;
17
- constructor(root: StarknetContractBase<TAbi>, abi: TAbi);
18
+ constructor(chainInterface: StarknetChainInterface, contract: StarknetContractBase<TAbi>, abi: TAbi);
18
19
  private toStarknetAbiEvents;
19
20
  private toFilter;
20
21
  /**
@@ -28,7 +29,7 @@ export declare class StarknetContractEvents<TAbi extends Abi> extends StarknetEv
28
29
  */
29
30
  getContractBlockEvents<T extends ExtractAbiEventNames<TAbi>>(events: T[], keys: string[], startBlockHeight?: number, endBlockHeight?: number): Promise<StarknetAbiEvent<TAbi, T>[]>;
30
31
  /**
31
- * Runs a search forawrds in time, processing the events for a specific topic public key
32
+ * Runs a search backwards in time, processing the events for a specific topic public key
32
33
  *
33
34
  * @param events
34
35
  * @param keys
@@ -37,4 +38,14 @@ export declare class StarknetContractEvents<TAbi extends Abi> extends StarknetEv
37
38
  * @param abortSignal
38
39
  */
39
40
  findInContractEvents<T, TEvent extends ExtractAbiEventNames<TAbi>>(events: TEvent[], keys: string[], processor: (event: StarknetAbiEvent<TAbi, TEvent>) => Promise<T>, abortSignal?: AbortSignal): Promise<T>;
41
+ /**
42
+ * Runs a search forwards in time, processing the events for a specific topic public key
43
+ *
44
+ * @param events
45
+ * @param keys
46
+ * @param processor called for every event, should return a value if the correct event was found, or null
47
+ * if the search should continue
48
+ * @param abortSignal
49
+ */
50
+ findInContractEventsForward<T, TEvent extends ExtractAbiEventNames<TAbi>>(events: TEvent[], keys: string[], processor: (event: StarknetAbiEvent<TAbi, TEvent>) => Promise<T>, abortSignal?: AbortSignal): Promise<T>;
40
51
  }
@@ -1,12 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StarknetContractEvents = void 0;
4
- const StarknetEvents_1 = require("../../base/modules/StarknetEvents");
4
+ const StarknetEvents_1 = require("../../chain/modules/StarknetEvents");
5
5
  const starknet_1 = require("starknet");
6
6
  const Utils_1 = require("../../../utils/Utils");
7
7
  class StarknetContractEvents extends StarknetEvents_1.StarknetEvents {
8
- constructor(root, abi) {
9
- super(root);
8
+ constructor(chainInterface, contract, abi) {
9
+ super(chainInterface);
10
+ this.contract = contract;
10
11
  this.abi = abi;
11
12
  }
12
13
  toStarknetAbiEvents(blockEvents) {
@@ -51,11 +52,11 @@ class StarknetContractEvents extends StarknetEvents_1.StarknetEvents {
51
52
  * @param endBlockHeight
52
53
  */
53
54
  async getContractBlockEvents(events, keys, startBlockHeight, endBlockHeight = startBlockHeight) {
54
- const blockEvents = await super.getBlockEvents(this.root.contract.address, this.toFilter(events, keys), startBlockHeight, endBlockHeight);
55
+ const blockEvents = await super.getBlockEvents(this.contract.contract.address, this.toFilter(events, keys), startBlockHeight, endBlockHeight);
55
56
  return this.toStarknetAbiEvents(blockEvents);
56
57
  }
57
58
  /**
58
- * Runs a search forawrds in time, processing the events for a specific topic public key
59
+ * Runs a search backwards in time, processing the events for a specific topic public key
59
60
  *
60
61
  * @param events
61
62
  * @param keys
@@ -64,7 +65,26 @@ class StarknetContractEvents extends StarknetEvents_1.StarknetEvents {
64
65
  * @param abortSignal
65
66
  */
66
67
  async findInContractEvents(events, keys, processor, abortSignal) {
67
- return this.findInEvents(this.root.contract.address, this.toFilter(events, keys), async (events) => {
68
+ return this.findInEvents(this.contract.contract.address, this.toFilter(events, keys), async (events) => {
69
+ const parsedEvents = this.toStarknetAbiEvents(events);
70
+ for (let event of parsedEvents) {
71
+ const result = await processor(event);
72
+ if (result != null)
73
+ return result;
74
+ }
75
+ }, abortSignal);
76
+ }
77
+ /**
78
+ * Runs a search forwards in time, processing the events for a specific topic public key
79
+ *
80
+ * @param events
81
+ * @param keys
82
+ * @param processor called for every event, should return a value if the correct event was found, or null
83
+ * if the search should continue
84
+ * @param abortSignal
85
+ */
86
+ async findInContractEventsForward(events, keys, processor, abortSignal) {
87
+ return this.findInEventsForward(this.contract.contract.address, this.toFilter(events, keys), async (events) => {
68
88
  const parsedEvents = this.toStarknetAbiEvents(events);
69
89
  for (let event of parsedEvents) {
70
90
  const result = await processor(event);
@@ -1,8 +1,10 @@
1
1
  import { StarknetChainEventsBrowser } from "./StarknetChainEventsBrowser";
2
2
  import { StarknetSwapContract } from "../swaps/StarknetSwapContract";
3
+ import { StarknetChainInterface } from "../chain/StarknetChainInterface";
4
+ import { StarknetSpvVaultContract } from "../spv_swap/StarknetSpvVaultContract";
3
5
  export declare class StarknetChainEvents extends StarknetChainEventsBrowser {
4
6
  private readonly directory;
5
- constructor(directory: string, starknetSwapContract: StarknetSwapContract, pollIntervalSeconds?: number);
7
+ constructor(directory: string, chainInterface: StarknetChainInterface, starknetSwapContract: StarknetSwapContract, starknetSpvVaultContract: StarknetSpvVaultContract, pollIntervalSeconds?: number);
6
8
  /**
7
9
  * Retrieves last signature & slot from filesystem
8
10
  *
@@ -6,8 +6,8 @@ const StarknetChainEventsBrowser_1 = require("./StarknetChainEventsBrowser");
6
6
  const fs = require("fs/promises");
7
7
  const BLOCKHEIGHT_FILENAME = "/strk-blockheight.txt";
8
8
  class StarknetChainEvents extends StarknetChainEventsBrowser_1.StarknetChainEventsBrowser {
9
- constructor(directory, starknetSwapContract, pollIntervalSeconds) {
10
- super(starknetSwapContract, pollIntervalSeconds);
9
+ constructor(directory, chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds) {
10
+ super(chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds);
11
11
  this.directory = directory;
12
12
  }
13
13
  /**
@@ -22,17 +22,17 @@ class StarknetChainEvents extends StarknetChainEventsBrowser_1.StarknetChainEven
22
22
  if (arr.length < 2)
23
23
  return {
24
24
  blockNumber: parseInt(arr[0]),
25
- txHash: null
25
+ txHashes: null
26
26
  };
27
27
  return {
28
28
  blockNumber: parseInt(arr[0]),
29
- txHash: arr[1]
29
+ txHashes: arr.slice(1)
30
30
  };
31
31
  }
32
32
  catch (e) {
33
33
  return {
34
34
  blockNumber: null,
35
- txHash: null
35
+ txHashes: null
36
36
  };
37
37
  }
38
38
  }
@@ -41,12 +41,12 @@ class StarknetChainEvents extends StarknetChainEventsBrowser_1.StarknetChainEven
41
41
  *
42
42
  * @private
43
43
  */
44
- saveLastEventData(blockNumber, txHash) {
45
- return fs.writeFile(this.directory + BLOCKHEIGHT_FILENAME, blockNumber.toString() + ";" + txHash);
44
+ saveLastEventData(blockNumber, txHashes) {
45
+ return fs.writeFile(this.directory + BLOCKHEIGHT_FILENAME, blockNumber.toString() + ";" + txHashes.join(";"));
46
46
  }
47
47
  async init() {
48
- const { blockNumber, txHash } = await this.getLastEventData();
49
- await this.setupPoll(blockNumber, txHash, (blockNumber, txHash) => this.saveLastEventData(blockNumber, txHash));
48
+ const { blockNumber, txHashes } = await this.getLastEventData();
49
+ await this.setupPoll(blockNumber, txHashes, (blockNumber, txHashes) => this.saveLastEventData(blockNumber, txHashes));
50
50
  }
51
51
  }
52
52
  exports.StarknetChainEvents = StarknetChainEvents;
@@ -1,4 +1,4 @@
1
- import { ChainEvents, ClaimEvent, EventListener, InitializeEvent, RefundEvent } from "@atomiqlabs/base";
1
+ import { ChainEvents, ClaimEvent, EventListener, InitializeEvent, RefundEvent, SpvVaultClaimEvent, SpvVaultCloseEvent, SpvVaultDepositEvent, SpvVaultFrontEvent, SpvVaultOpenEvent } from "@atomiqlabs/base";
2
2
  import { StarknetSwapData } from "../swaps/StarknetSwapData";
3
3
  import { StarknetSwapContract } from "../swaps/StarknetSwapContract";
4
4
  import { BigNumberish, Provider } from "starknet";
@@ -6,6 +6,9 @@ import { StarknetAbiEvent } from "../contract/modules/StarknetContractEvents";
6
6
  import { EscrowManagerAbiType } from "../swaps/EscrowManagerAbi";
7
7
  import { ExtractAbiFunctionNames } from "abi-wan-kanabi/dist/kanabi";
8
8
  import { IClaimHandler } from "../swaps/handlers/claim/ClaimHandlers";
9
+ import { StarknetSpvVaultContract } from "../spv_swap/StarknetSpvVaultContract";
10
+ import { StarknetChainInterface } from "../chain/StarknetChainInterface";
11
+ import { SpvVaultContractAbiType } from "../spv_swap/SpvVaultContractAbi";
9
12
  export type StarknetTraceCall = {
10
13
  calldata: string[];
11
14
  contract_address: string;
@@ -21,6 +24,7 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
21
24
  protected readonly listeners: EventListener<StarknetSwapData>[];
22
25
  protected readonly provider: Provider;
23
26
  protected readonly starknetSwapContract: StarknetSwapContract;
27
+ protected readonly starknetSpvVaultContract: StarknetSpvVaultContract;
24
28
  protected eventListeners: number[];
25
29
  protected readonly logger: {
26
30
  debug: (msg: any, ...args: any[]) => void;
@@ -33,7 +37,7 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
33
37
  protected stopped: boolean;
34
38
  protected pollIntervalSeconds: number;
35
39
  private timeout;
36
- constructor(starknetSwapContract: StarknetSwapContract, pollIntervalSeconds?: number);
40
+ constructor(chainInterface: StarknetChainInterface, starknetSwapContract: StarknetSwapContract, starknetSpvVaultContract: StarknetSpvVaultContract, pollIntervalSeconds?: number);
37
41
  findInitSwapData(call: StarknetTraceCall, escrowHash: BigNumberish, claimHandler: IClaimHandler<any, any>): StarknetSwapData;
38
42
  /**
39
43
  * Returns async getter for fetching on-demand initialize event swap data
@@ -47,6 +51,11 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
47
51
  protected parseInitializeEvent(event: StarknetAbiEvent<EscrowManagerAbiType, "escrow_manager::events::Initialize">): InitializeEvent<StarknetSwapData>;
48
52
  protected parseRefundEvent(event: StarknetAbiEvent<EscrowManagerAbiType, "escrow_manager::events::Refund">): RefundEvent<StarknetSwapData>;
49
53
  protected parseClaimEvent(event: StarknetAbiEvent<EscrowManagerAbiType, "escrow_manager::events::Claim">): ClaimEvent<StarknetSwapData>;
54
+ protected parseSpvOpenEvent(event: StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Opened">): SpvVaultOpenEvent;
55
+ protected parseSpvDepositEvent(event: StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Deposited">): SpvVaultDepositEvent;
56
+ protected parseSpvFrontEvent(event: StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Fronted">): SpvVaultFrontEvent;
57
+ protected parseSpvClaimEvent(event: StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Claimed">): SpvVaultClaimEvent;
58
+ protected parseSpvCloseEvent(event: StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Closed">): SpvVaultCloseEvent;
50
59
  /**
51
60
  * Processes event as received from the chain, parses it & calls event listeners
52
61
  *
@@ -56,9 +65,17 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
56
65
  * @param pendingEventTime
57
66
  * @protected
58
67
  */
59
- protected processEvents(events: StarknetAbiEvent<EscrowManagerAbiType, "escrow_manager::events::Initialize" | "escrow_manager::events::Refund" | "escrow_manager::events::Claim">[], currentBlockNumber: number, currentBlockTimestamp: number, pendingEventTime: number): Promise<void>;
60
- protected checkEvents(lastBlockNumber: number, lastTxHash: string): Promise<{
61
- txHash: string;
68
+ protected processEvents(events: (StarknetAbiEvent<EscrowManagerAbiType, "escrow_manager::events::Initialize" | "escrow_manager::events::Refund" | "escrow_manager::events::Claim"> | StarknetAbiEvent<SpvVaultContractAbiType, "spv_swap_vault::events::Opened" | "spv_swap_vault::events::Deposited" | "spv_swap_vault::events::Fronted" | "spv_swap_vault::events::Claimed" | "spv_swap_vault::events::Closed">)[], currentBlockNumber: number, currentBlockTimestamp: number, pendingEventTime: number): Promise<void>;
69
+ protected checkEventsEcrowManager(lastTxHash: string, lastBlockNumber?: number, currentBlock?: {
70
+ timestamp: number;
71
+ block_number: number;
72
+ }): Promise<string>;
73
+ protected checkEventsSpvVaults(lastTxHash: string, lastBlockNumber?: number, currentBlock?: {
74
+ timestamp: number;
75
+ block_number: number;
76
+ }): Promise<string>;
77
+ protected checkEvents(lastBlockNumber: number, lastTxHashes: string[]): Promise<{
78
+ txHashes: string[];
62
79
  blockNumber: number;
63
80
  }>;
64
81
  /**
@@ -66,7 +83,7 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
66
83
  *
67
84
  * @protected
68
85
  */
69
- protected setupPoll(lastBlockNumber?: number, lastTxHash?: string, saveLatestProcessedBlockNumber?: (blockNumber: number, lastTxHash: string) => Promise<void>): Promise<void>;
86
+ protected setupPoll(lastBlockNumber?: number, lastTxHashes?: string[], saveLatestProcessedBlockNumber?: (blockNumber: number, lastTxHashes: string[]) => Promise<void>): Promise<void>;
70
87
  init(): Promise<void>;
71
88
  stop(): Promise<void>;
72
89
  registerListener(cbk: EventListener<StarknetSwapData>): void;