@atomiqlabs/chain-starknet 1.0.8 → 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 +24 -6
  27. package/dist/starknet/events/StarknetChainEventsBrowser.js +116 -28
  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 +168 -41
  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
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StarknetLpVault = void 0;
4
4
  const Utils_1 = require("../../../utils/Utils");
5
5
  const StarknetSwapModule_1 = require("../StarknetSwapModule");
6
- const StarknetAction_1 = require("../../base/StarknetAction");
6
+ const StarknetAction_1 = require("../../chain/StarknetAction");
7
7
  const starknet_1 = require("starknet");
8
8
  class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
9
9
  /**
@@ -16,7 +16,7 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
16
16
  * @private
17
17
  */
18
18
  Withdraw(signer, token, amount) {
19
- return new StarknetAction_1.StarknetAction(signer, this.root, this.contract.populateTransaction.withdraw(token, starknet_1.cairo.uint256(amount), signer), StarknetLpVault.GasCosts.WITHDRAW);
19
+ return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.withdraw(token, starknet_1.cairo.uint256(amount), signer), StarknetLpVault.GasCosts.WITHDRAW);
20
20
  }
21
21
  /**
22
22
  * Action for depositing funds to the LP vault
@@ -28,7 +28,7 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
28
28
  * @private
29
29
  */
30
30
  Deposit(signer, token, amount) {
31
- return new StarknetAction_1.StarknetAction(signer, this.root, this.contract.populateTransaction.deposit(token, starknet_1.cairo.uint256(amount)), StarknetLpVault.GasCosts.WITHDRAW);
31
+ return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.deposit(token, starknet_1.cairo.uint256(amount)), StarknetLpVault.GasCosts.WITHDRAW);
32
32
  }
33
33
  /**
34
34
  * Returns intermediary's reputation & vault balance for a specific token
@@ -50,14 +50,14 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
50
50
  * @param token
51
51
  */
52
52
  async getIntermediaryReputation(address, token) {
53
- const filter = Object.keys(this.root.claimHandlersByAddress).map(claimHandler => starknet_1.cairo.tuple(address, token, claimHandler));
54
- const rawReputation = await this.provider.callContract(this.contract.populateTransaction.get_reputation(filter));
53
+ const filter = Object.keys(this.contract.claimHandlersByAddress).map(claimHandler => starknet_1.cairo.tuple(address, token, claimHandler));
54
+ const rawReputation = await this.provider.callContract(this.swapContract.populateTransaction.get_reputation(filter));
55
55
  const length = (0, Utils_1.toBigInt)(rawReputation.shift());
56
56
  if (Number(length) !== filter.length)
57
57
  throw new Error("getIntermediaryReputation(): Invalid response length");
58
58
  const result = {};
59
- Object.keys(this.root.claimHandlersByAddress).forEach((address) => {
60
- const handler = this.root.claimHandlersByAddress[address];
59
+ Object.keys(this.contract.claimHandlersByAddress).forEach((address) => {
60
+ const handler = this.contract.claimHandlersByAddress[address];
61
61
  result[handler.getType()] = {
62
62
  successVolume: (0, Utils_1.toBigInt)({ low: rawReputation.shift(), high: rawReputation.shift() }),
63
63
  successCount: (0, Utils_1.toBigInt)(rawReputation.shift()),
@@ -76,7 +76,7 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
76
76
  * @param token
77
77
  */
78
78
  async getIntermediaryBalance(address, token) {
79
- const balance = (0, Utils_1.toBigInt)((await this.contract.get_balance([starknet_1.cairo.tuple(address, token)]))[0]);
79
+ const balance = (0, Utils_1.toBigInt)((await this.swapContract.get_balance([starknet_1.cairo.tuple(address, token)]))[0]);
80
80
  this.logger.debug("getIntermediaryBalance(): token LP balance fetched, token: " + token.toString() +
81
81
  " address: " + address + " amount: " + (balance == null ? "null" : balance.toString()));
82
82
  return balance;
@@ -107,7 +107,7 @@ class StarknetLpVault extends StarknetSwapModule_1.StarknetSwapModule {
107
107
  */
108
108
  async txsDeposit(signer, token, amount, feeRate) {
109
109
  //Approve first
110
- const action = await this.root.Tokens.Approve(signer, this.contract.address, token, amount);
110
+ const action = await this.root.Tokens.Approve(signer, this.swapContract.address, token, amount);
111
111
  action.add(this.Deposit(signer, token, amount));
112
112
  feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
113
113
  this.logger.debug("txsDeposit(): deposit TX created, token: " + token.toString() +
@@ -1,7 +1,7 @@
1
1
  import { RelaySynchronizer } from "@atomiqlabs/base";
2
2
  import { StarknetSwapModule } from "../StarknetSwapModule";
3
3
  import { StarknetSwapData } from "../StarknetSwapData";
4
- import { StarknetTx } from "../../base/modules/StarknetTransactions";
4
+ import { StarknetTx } from "../../chain/modules/StarknetTransactions";
5
5
  import { StarknetBtcStoredHeader } from "../../btcrelay/headers/StarknetBtcStoredHeader";
6
6
  export declare class StarknetSwapClaim extends StarknetSwapModule {
7
7
  private static readonly GasCosts;
@@ -4,8 +4,8 @@ exports.StarknetSwapClaim = void 0;
4
4
  const base_1 = require("@atomiqlabs/base");
5
5
  const Utils_1 = require("../../../utils/Utils");
6
6
  const StarknetSwapModule_1 = require("../StarknetSwapModule");
7
- const StarknetAction_1 = require("../../base/StarknetAction");
8
- const StarknetFees_1 = require("../../base/modules/StarknetFees");
7
+ const StarknetAction_1 = require("../../chain/StarknetAction");
8
+ const StarknetFees_1 = require("../../chain/modules/StarknetFees");
9
9
  class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
10
10
  /**
11
11
  * Claim action which uses the provided witness for claiming the swap
@@ -18,7 +18,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
18
18
  * @private
19
19
  */
20
20
  Claim(signer, swapData, witness, claimHandlerGas) {
21
- return new StarknetAction_1.StarknetAction(signer, this.root, this.contract.populateTransaction.claim(swapData.toEscrowStruct(), witness), (0, StarknetAction_1.sumStarknetGas)(swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM, claimHandlerGas));
21
+ return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.claim(swapData.toEscrowStruct(), witness), (0, StarknetAction_1.sumStarknetGas)(swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM, claimHandlerGas));
22
22
  }
23
23
  /**
24
24
  * Creates transactions claiming the swap using a secret (for HTLC swaps)
@@ -33,10 +33,10 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
33
33
  async txsClaimWithSecret(signer, swapData, secret, checkExpiry, feeRate) {
34
34
  //We need to be sure that this transaction confirms in time, otherwise we reveal the secret to the counterparty
35
35
  // and won't claim the funds
36
- if (checkExpiry && await this.root.isExpired(swapData.claimer.toString(), swapData)) {
36
+ if (checkExpiry && await this.contract.isExpired(swapData.claimer.toString(), swapData)) {
37
37
  throw new base_1.SwapDataVerificationError("Not enough time to reliably pay the invoice");
38
38
  }
39
- const claimHandler = this.root.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
39
+ const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
40
40
  if (claimHandler == null)
41
41
  throw new base_1.SwapDataVerificationError("Unknown claim handler!");
42
42
  if (claimHandler.getType() !== base_1.ChainSwapType.HTLC)
@@ -61,7 +61,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
61
61
  * @param feeRate fee rate to be used for the transactions
62
62
  */
63
63
  async txsClaimWithTxData(signer, swapData, tx, requiredConfirmations, vout, commitedHeader, synchronizer, feeRate) {
64
- const claimHandler = this.root.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
64
+ const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
65
65
  if (claimHandler == null)
66
66
  throw new base_1.SwapDataVerificationError("Unknown claim handler!");
67
67
  if (claimHandler.getType() !== base_1.ChainSwapType.CHAIN_NONCED &&
@@ -74,7 +74,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
74
74
  vout,
75
75
  requiredConfirmations,
76
76
  commitedHeader,
77
- btcRelay: this.root.btcRelay,
77
+ btcRelay: this.contract.btcRelay,
78
78
  synchronizer,
79
79
  }, feeRate);
80
80
  const action = this.Claim(signer, swapData, witness, claimHandler.getGas(swapData));
@@ -87,7 +87,7 @@ class StarknetSwapClaim extends StarknetSwapModule_1.StarknetSwapModule {
87
87
  async getClaimFee(swapData, feeRate) {
88
88
  feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
89
89
  let gasRequired = swapData.payOut ? StarknetSwapClaim.GasCosts.CLAIM_PAY_OUT : StarknetSwapClaim.GasCosts.CLAIM;
90
- const claimHandler = this.root.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
90
+ const claimHandler = this.contract.claimHandlersByAddress[swapData.claimHandler.toLowerCase()];
91
91
  if (claimHandler != null)
92
92
  gasRequired = (0, StarknetAction_1.sumStarknetGas)(gasRequired, claimHandler.getGas(swapData));
93
93
  return StarknetFees_1.StarknetFees.getGasFee(gasRequired.l1, feeRate);
@@ -1,7 +1,7 @@
1
1
  import { StarknetSwapData } from "../StarknetSwapData";
2
2
  import { StarknetSwapModule } from "../StarknetSwapModule";
3
3
  import { StarknetSigner } from "../../wallet/StarknetSigner";
4
- import { StarknetTx } from "../../base/modules/StarknetTransactions";
4
+ import { StarknetTx } from "../../chain/modules/StarknetTransactions";
5
5
  export type StarknetPreFetchVerification = {
6
6
  pendingBlockTime?: number;
7
7
  };
@@ -4,9 +4,9 @@ exports.StarknetSwapInit = void 0;
4
4
  const base_1 = require("@atomiqlabs/base");
5
5
  const Utils_1 = require("../../../utils/Utils");
6
6
  const buffer_1 = require("buffer");
7
- const StarknetAction_1 = require("../../base/StarknetAction");
7
+ const StarknetAction_1 = require("../../chain/StarknetAction");
8
8
  const StarknetSwapModule_1 = require("../StarknetSwapModule");
9
- const StarknetFees_1 = require("../../base/modules/StarknetFees");
9
+ const StarknetFees_1 = require("../../chain/modules/StarknetFees");
10
10
  const Initialize = [
11
11
  { name: 'Swap hash', type: 'felt' },
12
12
  { name: 'Timeout', type: 'timestamp' }
@@ -21,7 +21,7 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
21
21
  * @private
22
22
  */
23
23
  Init(swapData, timeout, signature) {
24
- return new StarknetAction_1.StarknetAction(swapData.payIn ? swapData.offerer : swapData.claimer, this.root, this.contract.populateTransaction.initialize(swapData.toEscrowStruct(), signature, timeout, swapData.extraData == null || swapData.extraData === "" ? [] : (0, Utils_1.bufferToBytes31Span)(buffer_1.Buffer.from(swapData.extraData, "hex")).map(Utils_1.toHex)), swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT);
24
+ return new StarknetAction_1.StarknetAction(swapData.payIn ? swapData.offerer : swapData.claimer, this.root, this.swapContract.populateTransaction.initialize(swapData.toEscrowStruct(), signature, timeout, swapData.extraData == null || swapData.extraData === "" ? [] : (0, Utils_1.bufferToBytes31Span)(buffer_1.Buffer.from(swapData.extraData, "hex")).map(Utils_1.toHex)), swapData.payIn ? StarknetSwapInit.GasCosts.INIT_PAY_IN : StarknetSwapInit.GasCosts.INIT);
25
25
  }
26
26
  /**
27
27
  * Returns auth prefix to be used with a specific swap, payIn=true & payIn=false use different prefixes (these
@@ -72,14 +72,14 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
72
72
  async isSignatureValid(swapData, timeout, prefix, signature, preFetchData) {
73
73
  const sender = swapData.isPayIn() ? swapData.offerer : swapData.claimer;
74
74
  const signer = swapData.isPayIn() ? swapData.claimer : swapData.offerer;
75
- if (!swapData.isPayIn() && await this.root.isExpired(sender.toString(), swapData)) {
75
+ if (!swapData.isPayIn() && await this.contract.isExpired(sender.toString(), swapData)) {
76
76
  throw new base_1.SignatureVerificationError("Swap will expire too soon!");
77
77
  }
78
78
  if (prefix !== this.getAuthPrefix(swapData))
79
79
  throw new base_1.SignatureVerificationError("Invalid prefix");
80
80
  const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
81
81
  const timeoutBN = BigInt(timeout);
82
- const isExpired = (timeoutBN - currentTimestamp) < BigInt(this.root.authGracePeriod);
82
+ const isExpired = (timeoutBN - currentTimestamp) < BigInt(this.contract.authGracePeriod);
83
83
  if (isExpired)
84
84
  throw new base_1.SignatureVerificationError("Authorization expired!");
85
85
  if (await this.isSignatureExpired(timeout, preFetchData))
@@ -100,7 +100,7 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
100
100
  */
101
101
  async getSignatureExpiry(timeout) {
102
102
  const now = Date.now();
103
- const timeoutExpiryTime = (parseInt(timeout) - this.root.authGracePeriod) * 1000;
103
+ const timeoutExpiryTime = (parseInt(timeout) - this.contract.authGracePeriod) * 1000;
104
104
  if (timeoutExpiryTime < now)
105
105
  return 0;
106
106
  return timeoutExpiryTime;
@@ -133,7 +133,7 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
133
133
  if (!skipChecks) {
134
134
  const [_, payStatus] = await Promise.all([
135
135
  (0, Utils_1.tryWithRetries)(() => this.isSignatureValid(swapData, timeout, prefix, signature), this.retryPolicy, (e) => e instanceof base_1.SignatureVerificationError),
136
- (0, Utils_1.tryWithRetries)(() => this.root.getCommitStatus(sender, swapData), this.retryPolicy)
136
+ (0, Utils_1.tryWithRetries)(() => this.contract.getCommitStatus(sender, swapData), this.retryPolicy)
137
137
  ]);
138
138
  if (payStatus !== base_1.SwapCommitStatus.NOT_COMMITED)
139
139
  throw new base_1.SwapDataVerificationError("Invoice already being paid for or paid");
@@ -141,9 +141,9 @@ class StarknetSwapInit extends StarknetSwapModule_1.StarknetSwapModule {
141
141
  feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
142
142
  const initAction = this.Init(swapData, BigInt(timeout), JSON.parse(signature));
143
143
  if (swapData.payIn)
144
- initAction.addAction(this.root.Tokens.Approve(sender, this.contract.address, swapData.token, swapData.amount), 0); //Add erc20 approve
144
+ initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.token, swapData.amount), 0); //Add erc20 approve
145
145
  if (swapData.getTotalDeposit() !== 0n)
146
- initAction.addAction(this.root.Tokens.Approve(sender, this.contract.address, swapData.feeToken, swapData.getTotalDeposit()), 0); //Add deposit erc20 approve
146
+ initAction.addAction(this.root.Tokens.Approve(sender, this.swapContract.address, swapData.feeToken, swapData.getTotalDeposit()), 0); //Add deposit erc20 approve
147
147
  this.logger.debug("txsInitPayIn(): create swap init TX, swap: " + swapData.getClaimHash() +
148
148
  " feerate: " + feeRate);
149
149
  return [await initAction.tx(feeRate)];
@@ -1,7 +1,6 @@
1
1
  import { StarknetSwapModule } from "../StarknetSwapModule";
2
2
  import { StarknetSwapData } from "../StarknetSwapData";
3
- import { StarknetSwapContract } from "../StarknetSwapContract";
4
- import { StarknetTx } from "../../base/modules/StarknetTransactions";
3
+ import { StarknetTx } from "../../chain/modules/StarknetTransactions";
5
4
  import { StarknetSigner } from "../../wallet/StarknetSigner";
6
5
  export declare class StarknetSwapRefund extends StarknetSwapModule {
7
6
  private static readonly GasCosts;
@@ -27,7 +26,6 @@ export declare class StarknetSwapRefund extends StarknetSwapModule {
27
26
  * @private
28
27
  */
29
28
  private RefundWithSignature;
30
- constructor(root: StarknetSwapContract);
31
29
  signSwapRefund(signer: StarknetSigner, swapData: StarknetSwapData, authorizationTimeout: number): Promise<{
32
30
  prefix: string;
33
31
  timeout: string;
@@ -4,8 +4,8 @@ exports.StarknetSwapRefund = void 0;
4
4
  const base_1 = require("@atomiqlabs/base");
5
5
  const Utils_1 = require("../../../utils/Utils");
6
6
  const StarknetSwapModule_1 = require("../StarknetSwapModule");
7
- const StarknetAction_1 = require("../../base/StarknetAction");
8
- const StarknetFees_1 = require("../../base/modules/StarknetFees");
7
+ const StarknetAction_1 = require("../../chain/StarknetAction");
8
+ const StarknetFees_1 = require("../../chain/modules/StarknetFees");
9
9
  const Refund = [
10
10
  { name: 'Swap hash', type: 'felt' },
11
11
  { name: 'Timeout', type: 'timestamp' }
@@ -22,7 +22,7 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
22
22
  * @private
23
23
  */
24
24
  Refund(signer, swapData, witness, handlerGas) {
25
- return new StarknetAction_1.StarknetAction(signer, this.root, this.contract.populateTransaction.refund(swapData.toEscrowStruct(), witness), (0, StarknetAction_1.sumStarknetGas)(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, handlerGas));
25
+ return new StarknetAction_1.StarknetAction(signer, this.root, this.swapContract.populateTransaction.refund(swapData.toEscrowStruct(), witness), (0, StarknetAction_1.sumStarknetGas)(swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND, handlerGas));
26
26
  }
27
27
  /**
28
28
  * Action for cooperative refunding with signature
@@ -35,10 +35,7 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
35
35
  * @private
36
36
  */
37
37
  RefundWithSignature(sender, swapData, timeout, signature) {
38
- return new StarknetAction_1.StarknetAction(sender, this.root, this.contract.populateTransaction.cooperative_refund(swapData.toEscrowStruct(), signature, BigInt(timeout)), swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND);
39
- }
40
- constructor(root) {
41
- super(root);
38
+ return new StarknetAction_1.StarknetAction(sender, this.root, this.swapContract.populateTransaction.cooperative_refund(swapData.toEscrowStruct(), signature, BigInt(timeout)), swapData.payIn ? StarknetSwapRefund.GasCosts.REFUND_PAY_OUT : StarknetSwapRefund.GasCosts.REFUND);
42
39
  }
43
40
  async signSwapRefund(signer, swapData, authorizationTimeout) {
44
41
  const authPrefix = "refund";
@@ -58,7 +55,7 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
58
55
  throw new base_1.SignatureVerificationError("Invalid prefix");
59
56
  const expiryTimestamp = BigInt(timeout);
60
57
  const currentTimestamp = BigInt(Math.floor(Date.now() / 1000));
61
- const isExpired = (expiryTimestamp - currentTimestamp) < BigInt(this.root.authGracePeriod);
58
+ const isExpired = (expiryTimestamp - currentTimestamp) < BigInt(this.contract.authGracePeriod);
62
59
  if (isExpired)
63
60
  throw new base_1.SignatureVerificationError("Authorization expired!");
64
61
  const valid = await this.root.Signatures.isValidSignature(signature, swapData.claimer, Refund, "Refund", {
@@ -80,10 +77,10 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
80
77
  * @param witnessData
81
78
  */
82
79
  async txsRefund(signer, swapData, check, feeRate, witnessData) {
83
- const refundHandler = this.root.refundHandlersByAddress[swapData.refundHandler.toLowerCase()];
80
+ const refundHandler = this.contract.refundHandlersByAddress[swapData.refundHandler.toLowerCase()];
84
81
  if (refundHandler == null)
85
82
  throw new Error("Invalid refund handler");
86
- if (check && !await (0, Utils_1.tryWithRetries)(() => this.root.isRequestRefundable(swapData.offerer.toString(), swapData), this.retryPolicy)) {
83
+ if (check && !await (0, Utils_1.tryWithRetries)(() => this.contract.isRequestRefundable(swapData.offerer.toString(), swapData), this.retryPolicy)) {
87
84
  throw new base_1.SwapDataVerificationError("Not refundable yet!");
88
85
  }
89
86
  feeRate ?? (feeRate = await this.root.Fees.getFeeRate());
@@ -105,7 +102,7 @@ class StarknetSwapRefund extends StarknetSwapModule_1.StarknetSwapModule {
105
102
  * @param feeRate fee rate to be used for the transactions
106
103
  */
107
104
  async txsRefundWithAuthorization(signer, swapData, timeout, prefix, signature, check, feeRate) {
108
- if (check && !await (0, Utils_1.tryWithRetries)(() => this.root.isCommited(swapData), this.retryPolicy)) {
105
+ if (check && !await (0, Utils_1.tryWithRetries)(() => this.contract.isCommited(swapData), this.retryPolicy)) {
109
106
  throw new base_1.SwapDataVerificationError("Not correctly committed");
110
107
  }
111
108
  await (0, Utils_1.tryWithRetries)(() => this.isSignatureValid(swapData, timeout, prefix, signature), this.retryPolicy, (e) => e instanceof base_1.SignatureVerificationError);
@@ -19,7 +19,7 @@ class StarknetSigner {
19
19
  //TODO: Introduce proper nonce management!
20
20
  async getNonce() {
21
21
  try {
22
- return BigInt(await this.account.getNonceForAddress(this.getAddress()));
22
+ return BigInt(await this.account.getNonceForAddress(this.getAddress(), "pending"));
23
23
  }
24
24
  catch (e) {
25
25
  if (e.message != null && e.message.includes("20: Contract not found")) {
@@ -1,5 +1,5 @@
1
1
  import { BigNumberish, Uint256 } from "starknet";
2
- import { StarknetTx } from "../starknet/base/modules/StarknetTransactions";
2
+ import { StarknetTx } from "../starknet/chain/modules/StarknetTransactions";
3
3
  import { Buffer } from "buffer";
4
4
  import { StarknetSwapData } from "../starknet/swaps/StarknetSwapData";
5
5
  import { IClaimHandler } from "../starknet/swaps/handlers/claim/ClaimHandlers";
@@ -22,7 +22,7 @@ export declare function calculateHash(tx: StarknetTx): string;
22
22
  export declare function u32ArrayToBuffer(arr: BigNumberish[]): Buffer;
23
23
  export declare function bufferToU32Array(buffer: Buffer): number[];
24
24
  export declare function u32ReverseEndianness(value: number): number;
25
- export declare function bigNumberishToBuffer(value: BigNumberish | Uint256, length: number): Buffer;
25
+ export declare function bigNumberishToBuffer(value: BigNumberish | Uint256, length?: number): Buffer;
26
26
  export declare function toBigInt(value: BigNumberish | Uint256): bigint;
27
27
  export declare function bytes31SpanToBuffer(span: BigNumberish[], length: number): Buffer;
28
28
  export declare function bufferToBytes31Span(buffer: Buffer, startIndex?: number, endIndex?: number): BigNumberish[];
@@ -162,7 +162,9 @@ function bigNumberishToBuffer(value, length) {
162
162
  else {
163
163
  value = value.toString(16);
164
164
  }
165
- const buff = buffer_1.Buffer.from(value.padStart(length * 2, "0"), "hex");
165
+ if (length != null)
166
+ value = value.padStart(length * 2, "0");
167
+ const buff = buffer_1.Buffer.from(value, "hex");
166
168
  if (buff.length > length)
167
169
  return buff.slice(buff.length - length);
168
170
  return buff;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atomiqlabs/chain-starknet",
3
- "version": "1.0.8",
3
+ "version": "2.0.0-beta.0",
4
4
  "description": "Starknet specific base implementation",
5
5
  "main": "./dist/index.js",
6
6
  "types:": "./dist/index.d.ts",
@@ -22,7 +22,7 @@
22
22
  "author": "adambor",
23
23
  "license": "ISC",
24
24
  "dependencies": {
25
- "@atomiqlabs/base": "^8.0.0",
25
+ "@atomiqlabs/base": "^9.0.0-beta.0",
26
26
  "@noble/hashes": "^1.7.1",
27
27
  "@scure/btc-signer": "1.6.0",
28
28
  "abi-wan-kanabi": "2.2.4",
package/src/index.ts CHANGED
@@ -1,13 +1,13 @@
1
- export * from "./starknet/base/StarknetAction";
2
- export * from "./starknet/base/StarknetBase";
3
- export * from "./starknet/base/StarknetModule";
1
+ export * from "./starknet/chain/StarknetAction";
2
+ export * from "./starknet/chain/StarknetChainInterface";
3
+ export * from "./starknet/chain/StarknetModule";
4
4
 
5
- export * from "./starknet/base/modules/StarknetFees";
6
- export * from "./starknet/base/modules/StarknetEvents";
7
- export * from "./starknet/base/modules/StarknetTokens";
8
- export * from "./starknet/base/modules/StarknetAddresses";
9
- export * from "./starknet/base/modules/StarknetTransactions";
10
- export * from "./starknet/base/modules/StarknetSignatures";
5
+ export * from "./starknet/chain/modules/StarknetFees";
6
+ export * from "./starknet/chain/modules/StarknetEvents";
7
+ export * from "./starknet/chain/modules/StarknetTokens";
8
+ export * from "./starknet/chain/modules/StarknetAddresses";
9
+ export * from "./starknet/chain/modules/StarknetTransactions";
10
+ export * from "./starknet/chain/modules/StarknetSignatures";
11
11
 
12
12
  export * from "./starknet/btcrelay/headers/StarknetBtcStoredHeader";
13
13
  export * from "./starknet/btcrelay/headers/StarknetBtcHeader";
@@ -39,3 +39,9 @@ export * from "./starknet/wallet/StarknetKeypairWallet";
39
39
 
40
40
  export * from "./starknet/StarknetChainType";
41
41
  export * from "./starknet/StarknetInitializer";
42
+
43
+ export * from "./starknet/spv_swap/StarknetSpvVaultContract";
44
+ export * from "./starknet/spv_swap/StarknetSpvVaultData";
45
+ export * from "./starknet/spv_swap/StarknetSpvWithdrawalData";
46
+
47
+ export * from "./starknet/provider/RpcProviderWithRetries";
@@ -1,11 +1,15 @@
1
1
  import {ChainType} from "@atomiqlabs/base";
2
- import {StarknetTx} from "./base/modules/StarknetTransactions";
2
+ import {StarknetTx} from "./chain/modules/StarknetTransactions";
3
3
  import {StarknetSigner} from "./wallet/StarknetSigner";
4
4
  import {StarknetSwapData} from "./swaps/StarknetSwapData";
5
5
  import {StarknetSwapContract} from "./swaps/StarknetSwapContract";
6
6
  import {StarknetChainEventsBrowser} from "./events/StarknetChainEventsBrowser";
7
7
  import {StarknetBtcRelay} from "./btcrelay/StarknetBtcRelay";
8
8
  import {StarknetPreFetchVerification} from "./swaps/modules/StarknetSwapInit";
9
+ import {StarknetChainInterface} from "./chain/StarknetChainInterface";
10
+ import {StarknetSpvVaultData} from "./spv_swap/StarknetSpvVaultData";
11
+ import {StarknetSpvWithdrawalData} from "./spv_swap/StarknetSpvWithdrawalData";
12
+ import {StarknetSpvVaultContract} from "./spv_swap/StarknetSpvVaultContract";
9
13
 
10
14
  export type StarknetChainType = ChainType<
11
15
  "STARKNET",
@@ -15,6 +19,10 @@ export type StarknetChainType = ChainType<
15
19
  StarknetSigner,
16
20
  StarknetSwapData,
17
21
  StarknetSwapContract,
22
+ StarknetChainInterface,
18
23
  StarknetChainEventsBrowser,
19
- StarknetBtcRelay<any>
24
+ StarknetBtcRelay<any>,
25
+ StarknetSpvVaultData,
26
+ StarknetSpvWithdrawalData,
27
+ StarknetSpvVaultContract
20
28
  >;
@@ -1,12 +1,16 @@
1
1
  import {constants, Provider, RpcProvider} from "starknet";
2
- import {StarknetFees} from "./base/modules/StarknetFees";
3
- import {StarknetRetryPolicy} from "./base/StarknetBase";
2
+ import {StarknetFees} from "./chain/modules/StarknetFees";
3
+ import {StarknetChainInterface, StarknetRetryPolicy} from "./chain/StarknetChainInterface";
4
4
  import {StarknetBtcRelay} from "./btcrelay/StarknetBtcRelay";
5
5
  import {StarknetSwapContract} from "./swaps/StarknetSwapContract";
6
6
  import {StarknetChainEventsBrowser} from "./events/StarknetChainEventsBrowser";
7
7
  import {BaseTokenType, BitcoinNetwork, BitcoinRpc, ChainData, ChainInitializer} from "@atomiqlabs/base";
8
8
  import {StarknetChainType} from "./StarknetChainType";
9
9
  import {StarknetSwapData} from "./swaps/StarknetSwapData";
10
+ import {StarknetSpvVaultContract} from "./spv_swap/StarknetSpvVaultContract";
11
+ import {StarknetSpvVaultData} from "./spv_swap/StarknetSpvVaultData";
12
+ import {StarknetSpvWithdrawalData} from "./spv_swap/StarknetSpvWithdrawalData";
13
+ import {RpcProviderWithRetries} from "./provider/RpcProviderWithRetries";
10
14
 
11
15
  export type StarknetAssetsType = BaseTokenType<"ETH" | "STRK" | "WBTC">;
12
16
  export const StarknetAssets: StarknetAssetsType = {
@@ -33,6 +37,7 @@ export type StarknetOptions = {
33
37
 
34
38
  swapContract?: string,
35
39
  btcRelayContract?: string,
40
+ spvVaultContract?: string,
36
41
 
37
42
  fees?: StarknetFees
38
43
  }
@@ -43,7 +48,7 @@ export function initializeStarknet(
43
48
  network: BitcoinNetwork
44
49
  ): ChainData<StarknetChainType> {
45
50
  const provider = typeof(options.rpcUrl)==="string" ?
46
- new RpcProvider({nodeUrl: options.rpcUrl}) :
51
+ new RpcProviderWithRetries({nodeUrl: options.rpcUrl}) :
47
52
  options.rpcUrl;
48
53
 
49
54
  const Fees = options.fees ?? new StarknetFees(provider, "ETH");
@@ -51,21 +56,32 @@ export function initializeStarknet(
51
56
  const chainId = options.chainId ??
52
57
  (network===BitcoinNetwork.MAINNET ? constants.StarknetChainId.SN_MAIN : constants.StarknetChainId.SN_SEPOLIA);
53
58
 
59
+ const chainInterface = new StarknetChainInterface(chainId, provider, options.retryPolicy, Fees);
60
+
54
61
  const btcRelay = new StarknetBtcRelay(
55
- chainId, provider, bitcoinRpc, options.btcRelayContract, options.retryPolicy, Fees
62
+ chainInterface, bitcoinRpc, options.btcRelayContract
56
63
  );
57
64
 
58
65
  const swapContract = new StarknetSwapContract(
59
- chainId, provider, btcRelay, options.swapContract, options.retryPolicy, Fees
66
+ chainInterface, btcRelay, options.swapContract
60
67
  );
61
- const chainEvents = new StarknetChainEventsBrowser(swapContract);
68
+
69
+ const spvVaultContract = new StarknetSpvVaultContract(
70
+ chainInterface, btcRelay, bitcoinRpc, options.spvVaultContract
71
+ )
72
+
73
+ const chainEvents = new StarknetChainEventsBrowser(chainInterface, swapContract, spvVaultContract);
62
74
 
63
75
  return {
64
76
  chainId: "STARKNET",
65
77
  btcRelay,
78
+ chainInterface,
66
79
  swapContract,
67
80
  chainEvents,
68
- swapDataConstructor: StarknetSwapData
81
+ swapDataConstructor: StarknetSwapData,
82
+ spvVaultContract,
83
+ spvVaultDataConstructor: StarknetSpvVaultData,
84
+ spvVaultWithdrawalDataConstructor: StarknetSpvWithdrawalData
69
85
  }
70
86
  };
71
87