@atomiqlabs/chain-starknet 4.0.0-dev.8 → 5.0.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 (74) hide show
  1. package/dist/starknet/StarknetInitializer.d.ts +1 -9
  2. package/dist/starknet/StarknetInitializer.js +3 -8
  3. package/dist/starknet/btcrelay/StarknetBtcRelay.js +5 -5
  4. package/dist/starknet/chain/StarknetAction.d.ts +10 -2
  5. package/dist/starknet/chain/StarknetAction.js +21 -21
  6. package/dist/starknet/chain/modules/StarknetAccounts.js +1 -1
  7. package/dist/starknet/chain/modules/StarknetFees.d.ts +8 -30
  8. package/dist/starknet/chain/modules/StarknetFees.js +26 -40
  9. package/dist/starknet/chain/modules/StarknetSignatures.js +1 -1
  10. package/dist/starknet/chain/modules/StarknetTokens.d.ts +4 -6
  11. package/dist/starknet/chain/modules/StarknetTokens.js +2 -2
  12. package/dist/starknet/chain/modules/StarknetTransactions.js +2 -2
  13. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +2 -1
  14. package/dist/starknet/events/StarknetChainEventsBrowser.js +3 -1
  15. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +2 -3
  16. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +8 -14
  17. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +0 -1
  18. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +0 -1
  19. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +0 -11
  20. package/dist/starknet/swaps/EscrowManagerAbi.d.ts +0 -26
  21. package/dist/starknet/swaps/EscrowManagerAbi.js +0 -36
  22. package/dist/starknet/swaps/StarknetSwapContract.d.ts +2 -3
  23. package/dist/starknet/swaps/StarknetSwapContract.js +19 -6
  24. package/dist/starknet/swaps/StarknetSwapData.d.ts +1 -8
  25. package/dist/starknet/swaps/StarknetSwapData.js +7 -51
  26. package/dist/starknet/swaps/handlers/IHandler.d.ts +1 -1
  27. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +1 -1
  28. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +1 -1
  29. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +1 -1
  30. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +1 -1
  31. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +1 -1
  32. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +1 -1
  33. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +1 -1
  34. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +1 -1
  35. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +1 -1
  36. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +1 -1
  37. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +1 -1
  38. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +1 -1
  39. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +1 -1
  40. package/dist/starknet/swaps/modules/StarknetLpVault.js +2 -2
  41. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +8 -8
  42. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +0 -1
  43. package/dist/starknet/swaps/modules/StarknetSwapInit.js +8 -67
  44. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +4 -4
  45. package/dist/utils/Utils.js +8 -12
  46. package/package.json +3 -3
  47. package/src/starknet/StarknetInitializer.ts +4 -17
  48. package/src/starknet/btcrelay/StarknetBtcRelay.ts +6 -9
  49. package/src/starknet/chain/StarknetAction.ts +20 -15
  50. package/src/starknet/chain/modules/StarknetAccounts.ts +1 -1
  51. package/src/starknet/chain/modules/StarknetFees.ts +31 -53
  52. package/src/starknet/chain/modules/StarknetSignatures.ts +4 -5
  53. package/src/starknet/chain/modules/StarknetTokens.ts +2 -2
  54. package/src/starknet/chain/modules/StarknetTransactions.ts +2 -2
  55. package/src/starknet/events/StarknetChainEventsBrowser.ts +3 -1
  56. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +8 -14
  57. package/src/starknet/spv_swap/StarknetSpvVaultData.ts +0 -1
  58. package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +2 -13
  59. package/src/starknet/swaps/EscrowManagerAbi.ts +0 -36
  60. package/src/starknet/swaps/StarknetSwapContract.ts +23 -8
  61. package/src/starknet/swaps/StarknetSwapData.ts +9 -70
  62. package/src/starknet/swaps/handlers/IHandler.ts +1 -1
  63. package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +1 -1
  64. package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +2 -2
  65. package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +2 -2
  66. package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +2 -2
  67. package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +2 -2
  68. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +2 -2
  69. package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +3 -3
  70. package/src/starknet/swaps/modules/StarknetLpVault.ts +2 -2
  71. package/src/starknet/swaps/modules/StarknetSwapClaim.ts +10 -10
  72. package/src/starknet/swaps/modules/StarknetSwapInit.ts +9 -67
  73. package/src/starknet/swaps/modules/StarknetSwapRefund.ts +7 -6
  74. package/src/utils/Utils.ts +6 -10
@@ -1,7 +1,7 @@
1
1
  import { constants, Provider } from "starknet";
2
2
  import { StarknetFees } from "./chain/modules/StarknetFees";
3
3
  import { StarknetRetryPolicy } from "./chain/StarknetChainInterface";
4
- import { BaseTokenType, BitcoinNetwork, BitcoinRpc, ChainData, ChainInitializer, ChainSwapType } from "@atomiqlabs/base";
4
+ import { BaseTokenType, BitcoinNetwork, BitcoinRpc, ChainData, ChainInitializer } from "@atomiqlabs/base";
5
5
  import { StarknetChainType } from "./StarknetChainType";
6
6
  export type StarknetAssetsType = BaseTokenType<"ETH" | "STRK" | "WBTC">;
7
7
  export declare const StarknetAssets: StarknetAssetsType;
@@ -12,14 +12,6 @@ export type StarknetOptions = {
12
12
  swapContract?: string;
13
13
  btcRelayContract?: string;
14
14
  spvVaultContract?: string;
15
- handlerContracts?: {
16
- refund?: {
17
- timelock?: string;
18
- };
19
- claim?: {
20
- [type in ChainSwapType]?: string;
21
- };
22
- };
23
15
  fees?: StarknetFees;
24
16
  };
25
17
  export declare function initializeStarknet(options: StarknetOptions, bitcoinRpc: BitcoinRpc<any>, network: BitcoinNetwork): ChainData<StarknetChainType>;
@@ -27,23 +27,18 @@ exports.StarknetAssets = {
27
27
  WBTC: {
28
28
  address: "0x03fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac",
29
29
  decimals: 8
30
- },
31
- // TBTC: {
32
- // address: "0x04daa17763b286d1e59b97c283C0b8C949994C361e426A28F743c67bDfE9a32f",
33
- // decimals: 18,
34
- // displayDecimals: 8
35
- // }
30
+ }
36
31
  };
37
32
  function initializeStarknet(options, bitcoinRpc, network) {
38
33
  const provider = typeof (options.rpcUrl) === "string" ?
39
34
  new RpcProviderWithRetries_1.RpcProviderWithRetries({ nodeUrl: options.rpcUrl }) :
40
35
  options.rpcUrl;
41
- const Fees = options.fees ?? new StarknetFees_1.StarknetFees(provider);
36
+ const Fees = options.fees ?? new StarknetFees_1.StarknetFees(provider, "STRK");
42
37
  const chainId = options.chainId ??
43
38
  (network === base_1.BitcoinNetwork.MAINNET ? starknet_1.constants.StarknetChainId.SN_MAIN : starknet_1.constants.StarknetChainId.SN_SEPOLIA);
44
39
  const chainInterface = new StarknetChainInterface_1.StarknetChainInterface(chainId, provider, options.retryPolicy, Fees);
45
40
  const btcRelay = new StarknetBtcRelay_1.StarknetBtcRelay(chainInterface, bitcoinRpc, network, options.btcRelayContract);
46
- const swapContract = new StarknetSwapContract_1.StarknetSwapContract(chainInterface, btcRelay, options.swapContract, options.handlerContracts);
41
+ const swapContract = new StarknetSwapContract_1.StarknetSwapContract(chainInterface, btcRelay, options.swapContract);
47
42
  const spvVaultContract = new StarknetSpvVaultContract_1.StarknetSpvVaultContract(chainInterface, btcRelay, bitcoinRpc, options.spvVaultContract);
48
43
  const chainEvents = new StarknetChainEventsBrowser_1.StarknetChainEventsBrowser(chainInterface, swapContract, spvVaultContract);
49
44
  return {
@@ -22,8 +22,8 @@ function serializeBlockHeader(e) {
22
22
  hash: buffer_1.Buffer.from(e.getHash(), "hex").reverse()
23
23
  });
24
24
  }
25
- const GAS_PER_BLOCKHEADER = { l1DataGas: 600, l2Gas: 40000000, l1Gas: 0 };
26
- const GAS_PER_BLOCKHEADER_FORK = { l1DataGas: 1000, l2Gas: 60000000, l1Gas: 0 };
25
+ const GAS_PER_BLOCKHEADER = 850;
26
+ const GAS_PER_BLOCKHEADER_FORK = 1000;
27
27
  const btcRelayAddreses = {
28
28
  [base_1.BitcoinNetwork.TESTNET4]: "0x0099b63f39f0cabb767361de3d8d3e97212351a51540e2687c2571f4da490dbe",
29
29
  [base_1.BitcoinNetwork.TESTNET]: "0x068601c79da2231d21e015ccfd59c243861156fa523a12c9f987ec28eb8dbc8c",
@@ -44,21 +44,21 @@ class StarknetBtcRelay extends StarknetContractBase_1.StarknetContractBase {
44
44
  contractAddress: this.contract.address,
45
45
  entrypoint: "submit_main_blockheaders",
46
46
  calldata: serializeCalldata(mainHeaders, storedHeader, [])
47
- }, (0, StarknetFees_1.starknetGasMul)(GAS_PER_BLOCKHEADER, mainHeaders.length));
47
+ }, { l1: GAS_PER_BLOCKHEADER * mainHeaders.length, l2: 0 });
48
48
  }
49
49
  SaveShortForkHeaders(signer, forkHeaders, storedHeader) {
50
50
  return new StarknetAction_1.StarknetAction(signer, this.Chain, {
51
51
  contractAddress: this.contract.address,
52
52
  entrypoint: "submit_short_fork_blockheaders",
53
53
  calldata: serializeCalldata(forkHeaders, storedHeader, [])
54
- }, (0, StarknetFees_1.starknetGasMul)(GAS_PER_BLOCKHEADER, forkHeaders.length));
54
+ }, { l1: GAS_PER_BLOCKHEADER * forkHeaders.length, l2: 0 });
55
55
  }
56
56
  SaveLongForkHeaders(signer, forkId, forkHeaders, storedHeader, totalForkHeaders = 100) {
57
57
  return new StarknetAction_1.StarknetAction(signer, this.Chain, {
58
58
  contractAddress: this.contract.address,
59
59
  entrypoint: "submit_fork_blockheaders",
60
60
  calldata: serializeCalldata(forkHeaders, storedHeader, [(0, Utils_1.toHex)(forkId)])
61
- }, (0, StarknetFees_1.starknetGasAdd)((0, StarknetFees_1.starknetGasMul)(GAS_PER_BLOCKHEADER, forkHeaders.length), (0, StarknetFees_1.starknetGasMul)(GAS_PER_BLOCKHEADER_FORK, totalForkHeaders)));
61
+ }, { l1: (GAS_PER_BLOCKHEADER * forkHeaders.length) + (GAS_PER_BLOCKHEADER_FORK * totalForkHeaders), l2: 0 });
62
62
  }
63
63
  constructor(chainInterface, bitcoinRpc, bitcoinNetwork, contractAddress = btcRelayAddreses[bitcoinNetwork]) {
64
64
  super(chainInterface, contractAddress, BtcRelayAbi_1.BtcRelayAbi);
@@ -1,9 +1,17 @@
1
1
  import { Call } from "starknet";
2
2
  import { StarknetChainInterface } from "./StarknetChainInterface";
3
3
  import { StarknetTx } from "./modules/StarknetTransactions";
4
- import { StarknetGas } from "./modules/StarknetFees";
4
+ export type StarknetGas = {
5
+ l1?: number;
6
+ l2?: number;
7
+ };
8
+ export declare function sumStarknetGas(a: StarknetGas, b: StarknetGas): {
9
+ l1: number;
10
+ l2: number;
11
+ };
5
12
  export declare class StarknetAction {
6
- gas: StarknetGas;
13
+ L1GasLimit: number;
14
+ L2GasLimit: number;
7
15
  readonly mainSigner: string;
8
16
  private readonly root;
9
17
  private readonly instructions;
@@ -1,17 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StarknetAction = void 0;
4
- const StarknetFees_1 = require("./modules/StarknetFees");
3
+ exports.StarknetAction = exports.sumStarknetGas = void 0;
4
+ function sumStarknetGas(a, b) {
5
+ return {
6
+ l1: (a?.l1 ?? 0) + (b?.l1 ?? 0),
7
+ l2: (a?.l2 ?? 0) + (b?.l2 ?? 0)
8
+ };
9
+ }
10
+ exports.sumStarknetGas = sumStarknetGas;
5
11
  class StarknetAction {
6
12
  constructor(mainSigner, root, instructions = [], gasLimit, feeRate) {
7
13
  this.mainSigner = mainSigner;
8
14
  this.root = root;
9
15
  this.instructions = Array.isArray(instructions) ? instructions : [instructions];
10
- this.gas = {
11
- l1Gas: gasLimit?.l1Gas ?? 0,
12
- l2Gas: gasLimit?.l2Gas ?? 0,
13
- l1DataGas: gasLimit?.l1DataGas ?? 0,
14
- };
16
+ this.L1GasLimit = gasLimit?.l1 ?? 0;
17
+ this.L2GasLimit = gasLimit?.l2 ?? 0;
15
18
  this.feeRate = feeRate;
16
19
  }
17
20
  estimateFeeRate() {
@@ -19,7 +22,8 @@ class StarknetAction {
19
22
  }
20
23
  addIx(instruction, gasLimit) {
21
24
  this.instructions.push(instruction);
22
- this.gas = (0, StarknetFees_1.starknetGasAdd)(this.gas, gasLimit);
25
+ this.L1GasLimit += gasLimit?.l1 ?? 0;
26
+ this.L2GasLimit += gasLimit?.l2 ?? 0;
23
27
  }
24
28
  add(action) {
25
29
  return this.addAction(action);
@@ -27,18 +31,14 @@ class StarknetAction {
27
31
  addAction(action, index = this.instructions.length) {
28
32
  if (action.mainSigner !== this.mainSigner)
29
33
  throw new Error("Actions need to have the same signer!");
30
- if (this.gas.l1Gas == null && action.gas.l1Gas != null)
31
- this.gas.l1Gas = action.gas.l1Gas;
32
- if (this.gas.l2Gas == null && action.gas.l2Gas != null)
33
- this.gas.l2Gas = action.gas.l2Gas;
34
- if (this.gas.l1DataGas == null && action.gas.l1DataGas != null)
35
- this.gas.l1DataGas = action.gas.l1DataGas;
36
- if (this.gas.l1Gas != null && action.gas.l1Gas != null)
37
- this.gas.l1Gas += action.gas.l1Gas;
38
- if (this.gas.l2Gas != null && action.gas.l2Gas != null)
39
- this.gas.l2Gas += action.gas.l2Gas;
40
- if (this.gas.l1DataGas != null && action.gas.l1DataGas != null)
41
- this.gas.l1DataGas += action.gas.l1DataGas;
34
+ if (this.L1GasLimit == null && action.L1GasLimit != null)
35
+ this.L1GasLimit = action.L1GasLimit;
36
+ if (this.L2GasLimit == null && action.L2GasLimit != null)
37
+ this.L2GasLimit = action.L2GasLimit;
38
+ if (this.L1GasLimit != null && action.L1GasLimit != null)
39
+ this.L1GasLimit += action.L1GasLimit;
40
+ if (this.L2GasLimit != null && action.L2GasLimit != null)
41
+ this.L2GasLimit += action.L2GasLimit;
42
42
  this.instructions.splice(index, 0, ...action.instructions);
43
43
  if (this.feeRate == null)
44
44
  this.feeRate = action.feeRate;
@@ -53,7 +53,7 @@ class StarknetAction {
53
53
  type: "INVOKE",
54
54
  tx: this.instructions,
55
55
  details: {
56
- ...this.root.Fees.getFeeDetails(this.gas, feeRate),
56
+ ...this.root.Fees.getFeeDetails(this.L1GasLimit, this.L2GasLimit, feeRate),
57
57
  walletAddress: this.mainSigner,
58
58
  cairoVersion: "1",
59
59
  chainId: this.root.starknetChainId,
@@ -4,7 +4,7 @@ exports.StarknetAccounts = void 0;
4
4
  const StarknetModule_1 = require("../StarknetModule");
5
5
  class StarknetAccounts extends StarknetModule_1.StarknetModule {
6
6
  async getAccountDeployTransaction(deploymentData) {
7
- const feeDetails = this.root.Fees.getFeeDetails({ l1DataGas: 500, l2Gas: 5000 * 40000, l1Gas: 0 }, await this.root.Fees.getFeeRate());
7
+ const feeDetails = this.root.Fees.getFeeDetails(5000, 0, await this.root.Fees.getFeeRate());
8
8
  const details = {
9
9
  ...feeDetails,
10
10
  walletAddress: deploymentData.contractAddress,
@@ -1,25 +1,14 @@
1
1
  import { Provider } from "starknet";
2
- export type StarknetFeeRate = {
3
- l1GasCost: bigint;
4
- l2GasCost: bigint;
5
- l1DataGasCost: bigint;
6
- };
7
- export type StarknetGas = {
8
- l1Gas: number;
9
- l2Gas: number;
10
- l1DataGas: number;
11
- };
12
- export declare function starknetGasMul(gas: StarknetGas, scalar: number): StarknetGas;
13
- export declare function starknetGasAdd(a: StarknetGas, b: StarknetGas): StarknetGas;
14
2
  export declare class StarknetFees {
15
3
  private readonly logger;
16
4
  private readonly feeDA;
17
5
  private readonly nonceDA;
18
6
  private readonly provider;
7
+ private readonly gasToken;
19
8
  private readonly maxFeeRate;
20
9
  private readonly feeMultiplierPPM;
21
10
  private blockFeeCache;
22
- constructor(provider: Provider, maxFeeRate?: StarknetFeeRate, feeMultiplier?: number, da?: {
11
+ constructor(provider: Provider, gasToken?: "ETH" | "STRK", maxFeeRate?: number, feeMultiplier?: number, da?: {
23
12
  fee?: "L1" | "L2";
24
13
  nonce?: "L1" | "L2";
25
14
  });
@@ -27,7 +16,7 @@ export declare class StarknetFees {
27
16
  * Gets starknet fee rate
28
17
  *
29
18
  * @private
30
- * @returns {Promise<StarknetFeeRate>} L1 gas price denominated in Wei
19
+ * @returns {Promise<BN>} L1 gas price denominated in Wei
31
20
  */
32
21
  private _getFeeRate;
33
22
  /**
@@ -38,23 +27,16 @@ export declare class StarknetFees {
38
27
  getFeeRate(): Promise<string>;
39
28
  getDefaultGasToken(): string;
40
29
  /**
41
- * Calculates the total gas fee paid for a given gas limit at a given fee rate
30
+ * Calculates the total gas fee fee paid for a given gas limit at a given fee rate
42
31
  *
43
32
  * @param gas
44
33
  * @param feeRate
45
34
  */
46
- static getGasFee(gas: {
47
- l1DataGas: number;
48
- l2Gas: number;
49
- l1Gas: number;
50
- }, feeRate: string): bigint;
35
+ static getGasFee(gas: number, feeRate: string): bigint;
51
36
  static getGasToken(feeRate: string): string;
52
- getFeeDetails(gas: {
53
- l1DataGas: number;
54
- l2Gas: number;
55
- l1Gas: number;
56
- }, feeRate: string): {
57
- version: "0x3";
37
+ getFeeDetails(L1GasLimit: number, L2GasLimit: number, feeRate: string): {
38
+ maxFee: string;
39
+ version: "0x3" | "0x1";
58
40
  resourceBounds: {
59
41
  l1_gas: {
60
42
  max_amount: string;
@@ -64,10 +46,6 @@ export declare class StarknetFees {
64
46
  max_amount: string;
65
47
  max_price_per_unit: string;
66
48
  };
67
- l1_data_gas: {
68
- max_amount: string;
69
- max_price_per_unit: string;
70
- };
71
49
  };
72
50
  tip: string;
73
51
  paymasterData: any[];
@@ -1,23 +1,16 @@
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 StarknetTokens_1 = require("./StarknetTokens");
6
6
  const MAX_FEE_AGE = 5000;
7
- function starknetGasMul(gas, scalar) {
8
- return { l1Gas: gas.l1Gas * scalar, l2Gas: gas.l2Gas * scalar, l1DataGas: gas.l1DataGas * scalar };
9
- }
10
- exports.starknetGasMul = starknetGasMul;
11
- function starknetGasAdd(a, b) {
12
- return { l1Gas: a.l1Gas + b.l1Gas, l2Gas: a.l2Gas + b.l2Gas, l1DataGas: a.l1DataGas + b.l1DataGas };
13
- }
14
- exports.starknetGasAdd = starknetGasAdd;
15
7
  class StarknetFees {
16
- constructor(provider, maxFeeRate = { l1GasCost: 1000000000000000n, l2GasCost: 1000000000000000n, l1DataGasCost: 1000000000000000n } /*100 * 10000 GWei*/, feeMultiplier = 1.25, da) {
8
+ constructor(provider, gasToken = "STRK", maxFeeRate = gasToken === "ETH" ? 100000000000 /*100 GWei*/ : 1000000000000000 /*100 * 10000 GWei*/, feeMultiplier = 1.25, da) {
17
9
  this.logger = (0, Utils_1.getLogger)("StarknetFees: ");
18
10
  this.blockFeeCache = null;
19
11
  this.provider = provider;
20
- this.maxFeeRate = maxFeeRate;
12
+ this.gasToken = gasToken;
13
+ this.maxFeeRate = BigInt(maxFeeRate);
21
14
  this.feeDA = da?.fee ?? "L1";
22
15
  this.nonceDA = da?.nonce ?? "L1";
23
16
  this.feeMultiplierPPM = BigInt(Math.floor(feeMultiplier * 1000000));
@@ -26,17 +19,14 @@ class StarknetFees {
26
19
  * Gets starknet fee rate
27
20
  *
28
21
  * @private
29
- * @returns {Promise<StarknetFeeRate>} L1 gas price denominated in Wei
22
+ * @returns {Promise<BN>} L1 gas price denominated in Wei
30
23
  */
31
24
  async _getFeeRate() {
32
- const block = await this.provider.getBlock("latest");
33
- let l1GasCost = (0, Utils_1.toBigInt)(block.l1_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
34
- let l1DataGasCost = (0, Utils_1.toBigInt)(block.l1_data_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
35
- let l2GasCost = (0, Utils_1.toBigInt)(block.l2_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
36
- this.logger.debug("_getFeeRate(): L1 fee rate: ", [l1GasCost.toString(10), l1DataGasCost.toString(10), l2GasCost.toString(10)]);
37
- return {
38
- l1GasCost, l2GasCost, l1DataGasCost
39
- };
25
+ const block = await this.provider.getBlockWithTxHashes("latest");
26
+ let l1GasCost = (0, Utils_1.toBigInt)(this.gasToken === "ETH" ? block.l1_gas_price.price_in_wei : block.l1_gas_price.price_in_fri);
27
+ l1GasCost = l1GasCost * this.feeMultiplierPPM / 1000000n;
28
+ this.logger.debug("_getFeeRate(): L1 fee rate: " + l1GasCost.toString(10));
29
+ return l1GasCost;
40
30
  }
41
31
  /**
42
32
  * Gets the gas price with caching, format: <gas price in Wei>;<transaction version: v1/v3>
@@ -56,22 +46,18 @@ class StarknetFees {
56
46
  });
57
47
  this.blockFeeCache = obj;
58
48
  }
59
- let { l1GasCost, l2GasCost, l1DataGasCost } = await this.blockFeeCache.feeRate;
60
- if (l1GasCost > this.maxFeeRate.l1GasCost)
61
- l1GasCost = this.maxFeeRate.l1GasCost;
62
- if (l2GasCost > this.maxFeeRate.l2GasCost)
63
- l2GasCost = this.maxFeeRate.l2GasCost;
64
- if (l1DataGasCost > this.maxFeeRate.l1DataGasCost)
65
- l1DataGasCost = this.maxFeeRate.l1DataGasCost;
66
- const fee = l1GasCost.toString(10) + "," + l2GasCost.toString(10) + "," + l1DataGasCost.toString(10) + ";v3";
49
+ let feeRate = await this.blockFeeCache.feeRate;
50
+ if (feeRate > this.maxFeeRate)
51
+ feeRate = this.maxFeeRate;
52
+ const fee = feeRate.toString(10) + ";" + (this.gasToken === "ETH" ? "v1" : "v3");
67
53
  this.logger.debug("getFeeRate(): calculated fee: " + fee);
68
54
  return fee;
69
55
  }
70
56
  getDefaultGasToken() {
71
- return StarknetTokens_1.StarknetTokens.ERC20_STRK;
57
+ return this.gasToken === "ETH" ? StarknetTokens_1.StarknetTokens.ERC20_ETH : StarknetTokens_1.StarknetTokens.ERC20_STRK;
72
58
  }
73
59
  /**
74
- * Calculates the total gas fee paid for a given gas limit at a given fee rate
60
+ * Calculates the total gas fee fee paid for a given gas limit at a given fee rate
75
61
  *
76
62
  * @param gas
77
63
  * @param feeRate
@@ -80,10 +66,8 @@ class StarknetFees {
80
66
  if (feeRate == null)
81
67
  return 0n;
82
68
  const arr = feeRate.split(";");
83
- const [l1GasCostStr, l2GasCostStr, l1DataGasCostStr] = arr[0].split(",");
84
- return (BigInt(gas.l1Gas) * BigInt(l1GasCostStr)) +
85
- (BigInt(gas.l2Gas) * BigInt(l2GasCostStr)) +
86
- (BigInt(gas.l1DataGas) * BigInt(l1DataGasCostStr));
69
+ const gasPrice = BigInt(arr[0]);
70
+ return gasPrice * BigInt(gas);
87
71
  }
88
72
  static getGasToken(feeRate) {
89
73
  if (feeRate == null)
@@ -92,17 +76,19 @@ class StarknetFees {
92
76
  const txVersion = arr[1];
93
77
  return txVersion === "v1" ? StarknetTokens_1.StarknetTokens.ERC20_ETH : StarknetTokens_1.StarknetTokens.ERC20_STRK;
94
78
  }
95
- getFeeDetails(gas, feeRate) {
79
+ getFeeDetails(L1GasLimit, L2GasLimit, feeRate) {
96
80
  if (feeRate == null)
97
81
  return null;
98
82
  const arr = feeRate.split(";");
99
- const [l1GasCostStr, l2GasCostStr, l1DataGasCostStr] = arr[0].split(",");
83
+ const gasPrice = BigInt(arr[0]);
84
+ const version = arr[1];
85
+ const maxFee = (0, Utils_1.toHex)(BigInt(L1GasLimit) * gasPrice, 16);
100
86
  return {
101
- version: "0x3",
87
+ maxFee: maxFee,
88
+ version: version === "v1" ? "0x1" : "0x3",
102
89
  resourceBounds: {
103
- l1_gas: { max_amount: (0, Utils_1.toHex)(gas.l1Gas, 16), max_price_per_unit: (0, Utils_1.toHex)(BigInt(l1GasCostStr), 16) },
104
- l2_gas: { max_amount: (0, Utils_1.toHex)(gas.l2Gas, 16), max_price_per_unit: (0, Utils_1.toHex)(BigInt(l2GasCostStr), 16) },
105
- l1_data_gas: { max_amount: (0, Utils_1.toHex)(gas.l1DataGas, 16), max_price_per_unit: (0, Utils_1.toHex)(BigInt(l1DataGasCostStr), 16) }
90
+ l1_gas: { max_amount: (0, Utils_1.toHex)(L1GasLimit, 16), max_price_per_unit: (0, Utils_1.toHex)(gasPrice, 16) },
91
+ l2_gas: { max_amount: "0x0", max_price_per_unit: "0x0" }
106
92
  },
107
93
  tip: "0x0",
108
94
  paymasterData: [],
@@ -41,7 +41,7 @@ class StarknetSignatures extends StarknetModule_1.StarknetModule {
41
41
  return JSON.stringify(starknet_1.stark.formatSignature(signature));
42
42
  }
43
43
  async isValidSignature(signature, address, type, typeName, message) {
44
- return this.provider.verifyMessageInStarknet(this.getTypedMessage(type, typeName, message), JSON.parse(signature), address);
44
+ return new starknet_1.Account(this.provider, address, null).verifyMessage(this.getTypedMessage(type, typeName, message), JSON.parse(signature));
45
45
  }
46
46
  ///////////////////
47
47
  //// Data signatures
@@ -5,14 +5,12 @@ export declare class StarknetTokens extends StarknetModule {
5
5
  static readonly ERC20_STRK = "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d";
6
6
  static readonly GasCosts: {
7
7
  TRANSFER: {
8
- l1DataGas: number;
9
- l2Gas: number;
10
- l1Gas: number;
8
+ l1: number;
9
+ l2: number;
11
10
  };
12
11
  APPROVE: {
13
- l1DataGas: number;
14
- l2Gas: number;
15
- l1Gas: number;
12
+ l1: number;
13
+ l2: number;
16
14
  };
17
15
  };
18
16
  private getContract;
@@ -93,6 +93,6 @@ exports.StarknetTokens = StarknetTokens;
93
93
  StarknetTokens.ERC20_ETH = "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7";
94
94
  StarknetTokens.ERC20_STRK = "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d";
95
95
  StarknetTokens.GasCosts = {
96
- TRANSFER: { l1DataGas: 400, l2Gas: 4000000, l1Gas: 0 },
97
- APPROVE: { l1DataGas: 400, l2Gas: 4000000, l1Gas: 0 }
96
+ TRANSFER: { l1: 400, l2: 0 },
97
+ APPROVE: { l1: 400, l2: 0 }
98
98
  };
@@ -25,7 +25,7 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
25
25
  await this.sendSignedTransaction(tx).catch(e => {
26
26
  if (e.baseError?.code === 59)
27
27
  return; //Transaction already in the mempool
28
- this.logger.error("confirmTransaction(): Error on transaction re-send: ", e);
28
+ console.error("Error on transaction re-send: ", e);
29
29
  });
30
30
  }
31
31
  if (state === "rejected")
@@ -49,7 +49,7 @@ class StarknetTransactions extends StarknetModule_1.StarknetModule {
49
49
  let nonce = await signer.getNonce();
50
50
  const latestConfirmedNonce = this.latestConfirmedNonces[signer.getAddress()];
51
51
  if (latestConfirmedNonce != null && latestConfirmedNonce > nonce) {
52
- this.logger.debug("prepareTransactions(): Using nonce from local cache!");
52
+ console.debug("StarknetTransactions: prepareTransactions(): Using nonce from local cache!");
53
53
  nonce = latestConfirmedNonce;
54
54
  }
55
55
  if (nonce === BigInt(0) && signer.isWalletAccount()) {
@@ -16,7 +16,7 @@ export type StarknetTraceCall = {
16
16
  calls: StarknetTraceCall[];
17
17
  };
18
18
  /**
19
- * Starknet on-chain event handler for front-end systems without access to fs, uses WS or long-polling to subscribe, might lose
19
+ * Solana on-chain event handler for front-end systems without access to fs, uses pure WS to subscribe, might lose
20
20
  * out on some events if the network is unreliable, front-end systems should take this into consideration and not
21
21
  * rely purely on events
22
22
  */
@@ -25,6 +25,7 @@ export declare class StarknetChainEventsBrowser implements ChainEvents<StarknetS
25
25
  protected readonly provider: Provider;
26
26
  protected readonly starknetSwapContract: StarknetSwapContract;
27
27
  protected readonly starknetSpvVaultContract: StarknetSpvVaultContract;
28
+ protected eventListeners: number[];
28
29
  protected readonly logger: {
29
30
  debug: (msg: any, ...args: any[]) => void;
30
31
  info: (msg: any, ...args: any[]) => void;
@@ -5,13 +5,14 @@ const base_1 = require("@atomiqlabs/base");
5
5
  const Utils_1 = require("../../utils/Utils");
6
6
  const starknet_1 = require("starknet");
7
7
  /**
8
- * Starknet on-chain event handler for front-end systems without access to fs, uses WS or long-polling to subscribe, might lose
8
+ * Solana on-chain event handler for front-end systems without access to fs, uses pure WS to subscribe, might lose
9
9
  * out on some events if the network is unreliable, front-end systems should take this into consideration and not
10
10
  * rely purely on events
11
11
  */
12
12
  class StarknetChainEventsBrowser {
13
13
  constructor(chainInterface, starknetSwapContract, starknetSpvVaultContract, pollIntervalSeconds = 5) {
14
14
  this.listeners = [];
15
+ this.eventListeners = [];
15
16
  this.logger = (0, Utils_1.getLogger)("StarknetChainEventsBrowser: ");
16
17
  this.initFunctionName = "initialize";
17
18
  this.initEntryPointSelector = BigInt(starknet_1.hash.starknetKeccak(this.initFunctionName));
@@ -276,6 +277,7 @@ class StarknetChainEventsBrowser {
276
277
  this.stopped = true;
277
278
  if (this.timeout != null)
278
279
  clearTimeout(this.timeout);
280
+ this.eventListeners = [];
279
281
  }
280
282
  registerListener(cbk) {
281
283
  this.listeners.push(cbk);
@@ -32,7 +32,6 @@ export declare class StarknetSpvVaultContract extends StarknetContractBase<typeo
32
32
  createVaultData(owner: string, vaultId: bigint, utxo: string, confirmations: number, tokenData: SpvVaultTokenData[]): Promise<StarknetSpvVaultData>;
33
33
  getVaultData(owner: string, vaultId: bigint): Promise<StarknetSpvVaultData>;
34
34
  getAllVaults(owner?: string): Promise<StarknetSpvVaultData[]>;
35
- getFronterAddress(owner: string, vaultId: bigint, withdrawal: StarknetSpvWithdrawalData): Promise<string | null>;
36
35
  getWithdrawalState(btcTxId: string): Promise<SpvWithdrawalState>;
37
36
  getWithdrawalData(btcTx: BtcTx): Promise<StarknetSpvWithdrawalData>;
38
37
  fromOpReturnData(data: Buffer): {
@@ -61,6 +60,6 @@ export declare class StarknetSpvVaultContract extends StarknetContractBase<typeo
61
60
  txsDeposit(signer: string, vault: StarknetSpvVaultData, rawAmounts: bigint[], feeRate?: string): Promise<StarknetTx[]>;
62
61
  txsFrontLiquidity(signer: string, vault: StarknetSpvVaultData, realWithdrawalTx: StarknetSpvWithdrawalData, withdrawSequence: number, feeRate?: string): Promise<StarknetTx[]>;
63
62
  txsOpen(signer: string, vault: StarknetSpvVaultData, feeRate?: string): Promise<StarknetTx[]>;
64
- getClaimFee(signer: string, vault: StarknetSpvVaultData, withdrawalData: StarknetSpvWithdrawalData, feeRate?: string): Promise<bigint>;
65
- getFrontFee(signer: string, vault: StarknetSpvVaultData, withdrawalData: StarknetSpvWithdrawalData, feeRate?: string): Promise<bigint>;
63
+ getClaimFee(signer: string, withdrawalData: StarknetSpvWithdrawalData, feeRate?: string): Promise<bigint>;
64
+ getFrontFee(signer: string, withdrawalData: StarknetSpvWithdrawalData, feeRate?: string): Promise<bigint>;
66
65
  }
@@ -120,12 +120,6 @@ class StarknetSpvVaultContract extends StarknetContractBase_1.StarknetContractBa
120
120
  }
121
121
  return vaults;
122
122
  }
123
- async getFronterAddress(owner, vaultId, withdrawal) {
124
- const fronterAddress = await this.contract.get_fronter_address_by_id(owner, vaultId, "0x" + withdrawal.getFrontingId());
125
- if ((0, Utils_1.toHex)(fronterAddress, 64) === "0x0000000000000000000000000000000000000000000000000000000000000000")
126
- return null;
127
- return fronterAddress;
128
- }
129
123
  async getWithdrawalState(btcTxId) {
130
124
  const txHash = buffer_1.Buffer.from(btcTxId, "hex").reverse();
131
125
  const txHashU256 = starknet_1.cairo.uint256("0x" + txHash.toString("hex"));
@@ -364,19 +358,19 @@ class StarknetSpvVaultContract extends StarknetContractBase_1.StarknetContractBa
364
358
  " vaultId: " + vault.getVaultId().toString(10));
365
359
  return [await action.tx(feeRate)];
366
360
  }
367
- async getClaimFee(signer, vault, withdrawalData, feeRate) {
361
+ async getClaimFee(signer, withdrawalData, feeRate) {
368
362
  feeRate ?? (feeRate = await this.Chain.Fees.getFeeRate());
369
- return StarknetFees_1.StarknetFees.getGasFee(StarknetSpvVaultContract.GasCosts.CLAIM, feeRate);
363
+ return StarknetFees_1.StarknetFees.getGasFee(StarknetSpvVaultContract.GasCosts.CLAIM.l1, feeRate);
370
364
  }
371
- async getFrontFee(signer, vault, withdrawalData, feeRate) {
365
+ async getFrontFee(signer, withdrawalData, feeRate) {
372
366
  feeRate ?? (feeRate = await this.Chain.Fees.getFeeRate());
373
- return StarknetFees_1.StarknetFees.getGasFee(StarknetSpvVaultContract.GasCosts.FRONT, feeRate);
367
+ return StarknetFees_1.StarknetFees.getGasFee(StarknetSpvVaultContract.GasCosts.FRONT.l1, feeRate);
374
368
  }
375
369
  }
376
370
  exports.StarknetSpvVaultContract = StarknetSpvVaultContract;
377
371
  StarknetSpvVaultContract.GasCosts = {
378
- DEPOSIT: { l1DataGas: 400, l2Gas: 4000000, l1Gas: 0 },
379
- OPEN: { l1DataGas: 1200, l2Gas: 3200000, l1Gas: 0 },
380
- FRONT: { l1DataGas: 800, l2Gas: 12000000, l1Gas: 0 },
381
- CLAIM: { l1DataGas: 1000, l2Gas: 400000000, l1Gas: 0 }
372
+ DEPOSIT: { l1: 750, l2: 0 },
373
+ OPEN: { l1: 1500, l2: 0 },
374
+ FRONT: { l1: 750, l2: 0 },
375
+ CLAIM: { l1: 10000, l2: 0 }
382
376
  };
@@ -97,7 +97,6 @@ class StarknetSpvVaultData extends base_1.SpvVaultData {
97
97
  utxo: this.utxo,
98
98
  confirmations: this.confirmations,
99
99
  withdrawCount: this.withdrawCount,
100
- depositCount: this.depositCount,
101
100
  initialUtxo: this.initialUtxo
102
101
  };
103
102
  }
@@ -21,5 +21,4 @@ export declare class StarknetSpvWithdrawalData extends SpvWithdrawalTransactionD
21
21
  execution_expiry: bigint;
22
22
  };
23
23
  serializeToFelts(): BigNumberish[];
24
- getFrontingId(): string;
25
24
  }
@@ -56,17 +56,6 @@ class StarknetSpvWithdrawalData extends base_1.SpvWithdrawalTransactionData {
56
56
  BigInt(this.executionExpiry)
57
57
  ];
58
58
  }
59
- getFrontingId() {
60
- const txHashU256 = starknet_1.cairo.uint256(base_1.BigIntBufferUtils.fromBuffer(buffer_1.Buffer.from(this.btcTx.txid), "le"));
61
- let frontingId = starknet_1.hash.computePoseidonHashOnElements([
62
- txHashU256.low,
63
- txHashU256.high,
64
- ...this.serializeToFelts()
65
- ]);
66
- if (frontingId.startsWith("0x"))
67
- frontingId = frontingId.slice(2);
68
- return frontingId.padStart(64, "0");
69
- }
70
59
  }
71
60
  exports.StarknetSpvWithdrawalData = StarknetSpvWithdrawalData;
72
61
  base_1.SpvWithdrawalTransactionData.deserializers["STARKNET"] = StarknetSpvWithdrawalData;
@@ -12,29 +12,6 @@ export declare const EscrowManagerAbi: readonly [{
12
12
  readonly name: "high";
13
13
  readonly type: "core::integer::u128";
14
14
  }];
15
- }, {
16
- readonly type: "struct";
17
- readonly name: "escrow_manager::structs::escrow::EscrowExecution";
18
- readonly members: readonly [{
19
- readonly name: "hash";
20
- readonly type: "core::felt252";
21
- }, {
22
- readonly name: "expiry";
23
- readonly type: "core::integer::u64";
24
- }, {
25
- readonly name: "fee";
26
- readonly type: "core::integer::u256";
27
- }];
28
- }, {
29
- readonly type: "enum";
30
- readonly name: "core::option::Option::<escrow_manager::structs::escrow::EscrowExecution>";
31
- readonly variants: readonly [{
32
- readonly name: "Some";
33
- readonly type: "escrow_manager::structs::escrow::EscrowExecution";
34
- }, {
35
- readonly name: "None";
36
- readonly type: "()";
37
- }];
38
15
  }, {
39
16
  readonly type: "struct";
40
17
  readonly name: "escrow_manager::structs::escrow::EscrowData";
@@ -74,9 +51,6 @@ export declare const EscrowManagerAbi: readonly [{
74
51
  }, {
75
52
  readonly name: "claimer_bounty";
76
53
  readonly type: "core::integer::u256";
77
- }, {
78
- readonly name: "success_action";
79
- readonly type: "core::option::Option::<escrow_manager::structs::escrow::EscrowExecution>";
80
54
  }];
81
55
  }, {
82
56
  readonly type: "struct";