@atomiqlabs/chain-starknet 8.0.13 → 8.1.10

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 (119) hide show
  1. package/dist/index.d.ts +18 -18
  2. package/dist/index.js +42 -42
  3. package/dist/starknet/StarknetChainType.d.ts +19 -19
  4. package/dist/starknet/StarknetChainType.js +2 -2
  5. package/dist/starknet/StarknetInitializer.d.ts +66 -63
  6. package/dist/starknet/StarknetInitializer.js +101 -101
  7. package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
  8. package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
  9. package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +196 -196
  10. package/dist/starknet/btcrelay/StarknetBtcRelay.js +419 -411
  11. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +70 -70
  12. package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +115 -115
  13. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +91 -91
  14. package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +155 -155
  15. package/dist/starknet/chain/StarknetAction.d.ts +19 -19
  16. package/dist/starknet/chain/StarknetAction.js +74 -74
  17. package/dist/starknet/chain/StarknetChainInterface.d.ts +142 -143
  18. package/dist/starknet/chain/StarknetChainInterface.js +198 -199
  19. package/dist/starknet/chain/StarknetModule.d.ts +8 -8
  20. package/dist/starknet/chain/StarknetModule.js +12 -12
  21. package/dist/starknet/chain/modules/ERC20Abi.d.ts +755 -755
  22. package/dist/starknet/chain/modules/ERC20Abi.js +1032 -1032
  23. package/dist/starknet/chain/modules/StarknetAccounts.d.ts +6 -6
  24. package/dist/starknet/chain/modules/StarknetAccounts.js +26 -26
  25. package/dist/starknet/chain/modules/StarknetAddresses.d.ts +10 -10
  26. package/dist/starknet/chain/modules/StarknetAddresses.js +27 -27
  27. package/dist/starknet/chain/modules/StarknetBlocks.d.ts +27 -27
  28. package/dist/starknet/chain/modules/StarknetBlocks.js +82 -82
  29. package/dist/starknet/chain/modules/StarknetEvents.d.ts +47 -47
  30. package/dist/starknet/chain/modules/StarknetEvents.js +90 -90
  31. package/dist/starknet/chain/modules/StarknetFees.d.ts +118 -104
  32. package/dist/starknet/chain/modules/StarknetFees.js +150 -146
  33. package/dist/starknet/chain/modules/StarknetSignatures.d.ts +29 -29
  34. package/dist/starknet/chain/modules/StarknetSignatures.js +72 -72
  35. package/dist/starknet/chain/modules/StarknetTokens.d.ts +66 -66
  36. package/dist/starknet/chain/modules/StarknetTokens.js +99 -99
  37. package/dist/starknet/chain/modules/StarknetTransactions.d.ts +122 -115
  38. package/dist/starknet/chain/modules/StarknetTransactions.js +633 -612
  39. package/dist/starknet/contract/StarknetContractBase.d.ts +14 -13
  40. package/dist/starknet/contract/StarknetContractBase.js +21 -20
  41. package/dist/starknet/contract/StarknetContractModule.d.ts +8 -8
  42. package/dist/starknet/contract/StarknetContractModule.js +11 -11
  43. package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +56 -57
  44. package/dist/starknet/contract/modules/StarknetContractEvents.js +111 -111
  45. package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
  46. package/dist/starknet/events/StarknetChainEvents.js +61 -61
  47. package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +178 -190
  48. package/dist/starknet/events/StarknetChainEventsBrowser.js +523 -582
  49. package/dist/starknet/provider/RpcProviderWithRetries.d.ts +49 -53
  50. package/dist/starknet/provider/RpcProviderWithRetries.js +94 -94
  51. package/dist/starknet/provider/WebSocketChannelWithRetries.d.ts +21 -21
  52. package/dist/starknet/provider/WebSocketChannelWithRetries.js +46 -46
  53. package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -488
  54. package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -656
  55. package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +225 -219
  56. package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +663 -621
  57. package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +108 -108
  58. package/dist/starknet/spv_swap/StarknetSpvVaultData.js +190 -190
  59. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +56 -56
  60. package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +103 -103
  61. package/dist/starknet/swaps/EscrowManagerAbi.d.ts +431 -431
  62. package/dist/starknet/swaps/EscrowManagerAbi.js +583 -583
  63. package/dist/starknet/swaps/StarknetSwapContract.d.ts +309 -278
  64. package/dist/starknet/swaps/StarknetSwapContract.js +755 -579
  65. package/dist/starknet/swaps/StarknetSwapData.d.ts +234 -234
  66. package/dist/starknet/swaps/StarknetSwapData.js +474 -474
  67. package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
  68. package/dist/starknet/swaps/StarknetSwapModule.js +12 -12
  69. package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -13
  70. package/dist/starknet/swaps/handlers/IHandler.js +2 -2
  71. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -13
  72. package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -13
  73. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +21 -21
  74. package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -44
  75. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
  76. package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -48
  77. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
  78. package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -40
  79. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -20
  80. package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +30 -30
  81. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +42 -45
  82. package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +50 -54
  83. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
  84. package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -27
  85. package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +67 -67
  86. package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
  87. package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +52 -52
  88. package/dist/starknet/swaps/modules/StarknetSwapClaim.js +99 -99
  89. package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +94 -94
  90. package/dist/starknet/swaps/modules/StarknetSwapInit.js +239 -239
  91. package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +60 -60
  92. package/dist/starknet/swaps/modules/StarknetSwapRefund.js +126 -126
  93. package/dist/starknet/wallet/StarknetBrowserSigner.d.ts +11 -11
  94. package/dist/starknet/wallet/StarknetBrowserSigner.js +17 -17
  95. package/dist/starknet/wallet/StarknetPersistentSigner.d.ts +76 -76
  96. package/dist/starknet/wallet/StarknetPersistentSigner.js +291 -291
  97. package/dist/starknet/wallet/StarknetSigner.d.ts +72 -72
  98. package/dist/starknet/wallet/StarknetSigner.js +114 -114
  99. package/dist/starknet/wallet/accounts/StarknetKeypairWallet.d.ts +18 -18
  100. package/dist/starknet/wallet/accounts/StarknetKeypairWallet.js +45 -45
  101. package/dist/utils/Utils.d.ts +77 -77
  102. package/dist/utils/Utils.js +304 -303
  103. package/package.json +2 -2
  104. package/src/starknet/StarknetInitializer.ts +6 -3
  105. package/src/starknet/btcrelay/StarknetBtcRelay.ts +19 -6
  106. package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +7 -7
  107. package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +6 -6
  108. package/src/starknet/chain/StarknetAction.ts +1 -0
  109. package/src/starknet/chain/StarknetChainInterface.ts +0 -2
  110. package/src/starknet/chain/modules/StarknetFees.ts +15 -2
  111. package/src/starknet/chain/modules/StarknetTransactions.ts +24 -0
  112. package/src/starknet/contract/StarknetContractBase.ts +7 -4
  113. package/src/starknet/contract/StarknetContractModule.ts +1 -1
  114. package/src/starknet/contract/modules/StarknetContractEvents.ts +7 -7
  115. package/src/starknet/events/StarknetChainEventsBrowser.ts +2 -64
  116. package/src/starknet/provider/RpcProviderWithRetries.ts +1 -1
  117. package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +84 -18
  118. package/src/starknet/swaps/StarknetSwapContract.ts +242 -6
  119. package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +0 -4
@@ -1,104 +1,118 @@
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
- /**
13
- * Multiplies all the gas parameters by a specific scalar
14
- *
15
- * @param gas
16
- * @param scalar
17
- */
18
- export declare function starknetGasMul(gas: StarknetGas, scalar: number): StarknetGas;
19
- /**
20
- * Sums up all the gas parameters
21
- *
22
- * @param a
23
- * @param b
24
- */
25
- export declare function starknetGasAdd(a: StarknetGas, b?: StarknetGas): StarknetGas;
26
- /**
27
- * A module for starknet fee estimation
28
- *
29
- * @category Chain Interface
30
- */
31
- export declare class StarknetFees {
32
- private readonly logger;
33
- private readonly feeDA;
34
- private readonly nonceDA;
35
- private readonly provider;
36
- private readonly maxFeeRate;
37
- private readonly feeMultiplierPPM;
38
- private blockFeeCache?;
39
- /**
40
- * Constructs a new Starknet fee module
41
- *
42
- * @param provider A starknet.js provider to use for fee estimation
43
- * @param maxFeeRate Fee rate limits in base units
44
- * @param feeMultiplier A multiplier to use for the returned fee rates
45
- * @param da Data-availability mode - currently just L1
46
- */
47
- constructor(provider: Provider, maxFeeRate?: StarknetFeeRate, feeMultiplier?: number, da?: {
48
- fee?: "L1" | "L2";
49
- nonce?: "L1" | "L2";
50
- });
51
- /**
52
- * Gets starknet fee rate
53
- *
54
- * @private
55
- * @returns {Promise<StarknetFeeRate>} L1 gas price denominated in Wei
56
- */
57
- private _getFeeRate;
58
- /**
59
- * Gets the gas price with caching, format: <gas price in Wei>;<transaction version: v1/v3>
60
- *
61
- * @private
62
- */
63
- getFeeRate(): Promise<string>;
64
- /**
65
- * A utility function for deserializing a stringified starknet fee rate to its constituent fees
66
- *
67
- * @param feeRate Serialized fee rate in format: [l1Gas],[l2Gas],[l1DataGas]
68
- */
69
- static extractFromFeeRateString(feeRate: string): StarknetFeeRate;
70
- /**
71
- * Calculates the total gas fee paid for a given gas limit at a given fee rate
72
- *
73
- * @param gas Gas limits
74
- * @param feeRate Fee rate to use for the calculation, serialized as a string: [l1Gas],[l2Gas],[l1DataGas]
75
- */
76
- static getGasFee(gas: StarknetGas, feeRate: string): bigint;
77
- /**
78
- * Returns transaction details that apply the corresponding gas limits and gas price to the transaction
79
- *
80
- * @param gas Gas limits
81
- * @param feeRate Fee rate to use for the calculation, serialized as a string: [l1Gas],[l2Gas],[l1DataGas]
82
- */
83
- getFeeDetails(gas: StarknetGas, feeRate: string): {
84
- version: "0x3";
85
- resourceBounds: {
86
- l1_gas: {
87
- max_amount: bigint;
88
- max_price_per_unit: bigint;
89
- };
90
- l2_gas: {
91
- max_amount: bigint;
92
- max_price_per_unit: bigint;
93
- };
94
- l1_data_gas: {
95
- max_amount: bigint;
96
- max_price_per_unit: bigint;
97
- };
98
- };
99
- tip: bigint;
100
- paymasterData: never[];
101
- nonceDataAvailabilityMode: "L1" | "L2";
102
- feeDataAvailabilityMode: "L1" | "L2";
103
- };
104
- }
1
+ import { Provider } from "starknet";
2
+ /**
3
+ * Representation of a starknet feerate including costs for different units of gas
4
+ *
5
+ * @category Chain Interface
6
+ */
7
+ export type StarknetFeeRate = {
8
+ l1GasCost: bigint;
9
+ l2GasCost: bigint;
10
+ l1DataGasCost: bigint;
11
+ };
12
+ /**
13
+ * Representation of the starknet transaction gas limits used to create resource bounds and estimate fees
14
+ *
15
+ * @category Chain Interface
16
+ */
17
+ export type StarknetGas = {
18
+ l1Gas: number;
19
+ l2Gas: number;
20
+ l1DataGas: number;
21
+ };
22
+ /**
23
+ * Multiplies all the gas parameters by a specific scalar
24
+ *
25
+ * @param gas
26
+ * @param scalar
27
+ *
28
+ * @category Chain Interface
29
+ */
30
+ export declare function starknetGasMul(gas: StarknetGas, scalar: number): StarknetGas;
31
+ /**
32
+ * Sums up all the gas parameters
33
+ *
34
+ * @param a
35
+ * @param b
36
+ *
37
+ * @category Chain Interface
38
+ */
39
+ export declare function starknetGasAdd(a: StarknetGas, b?: StarknetGas): StarknetGas;
40
+ /**
41
+ * A module for starknet fee estimation
42
+ *
43
+ * @category Chain Interface
44
+ */
45
+ export declare class StarknetFees {
46
+ private readonly logger;
47
+ private readonly feeDA;
48
+ private readonly nonceDA;
49
+ private readonly provider;
50
+ private readonly maxFeeRate;
51
+ private readonly feeMultiplierPPM;
52
+ private blockFeeCache?;
53
+ /**
54
+ * Constructs a new Starknet fee module
55
+ *
56
+ * @param provider A starknet.js provider to use for fee estimation
57
+ * @param maxFeeRate Fee rate limits in base units
58
+ * @param feeMultiplier A multiplier to use for the returned fee rates
59
+ * @param da Data-availability mode - currently just L1
60
+ */
61
+ constructor(provider: Provider, maxFeeRate?: StarknetFeeRate, feeMultiplier?: number, da?: {
62
+ fee?: "L1" | "L2";
63
+ nonce?: "L1" | "L2";
64
+ });
65
+ /**
66
+ * Gets starknet fee rate
67
+ *
68
+ * @private
69
+ * @returns {Promise<StarknetFeeRate>} L1 gas price denominated in Wei
70
+ */
71
+ private _getFeeRate;
72
+ /**
73
+ * Gets the gas price with caching, format: <gas price in Wei>;<transaction version: v1/v3>
74
+ *
75
+ * @private
76
+ */
77
+ getFeeRate(): Promise<string>;
78
+ /**
79
+ * A utility function for deserializing a stringified starknet fee rate to its constituent fees
80
+ *
81
+ * @param feeRate Serialized fee rate in format: [l1Gas],[l2Gas],[l1DataGas]
82
+ */
83
+ static extractFromFeeRateString(feeRate: string): StarknetFeeRate;
84
+ /**
85
+ * Calculates the total gas fee paid for a given gas limit at a given fee rate
86
+ *
87
+ * @param gas Gas limits
88
+ * @param feeRate Fee rate to use for the calculation, serialized as a string: [l1Gas],[l2Gas],[l1DataGas]
89
+ */
90
+ static getGasFee(gas: StarknetGas, feeRate: string): bigint;
91
+ /**
92
+ * Returns transaction details that apply the corresponding gas limits and gas price to the transaction
93
+ *
94
+ * @param gas Gas limits
95
+ * @param feeRate Fee rate to use for the calculation, serialized as a string: [l1Gas],[l2Gas],[l1DataGas]
96
+ */
97
+ getFeeDetails(gas: StarknetGas, feeRate: string): {
98
+ version: "0x3";
99
+ resourceBounds: {
100
+ l1_gas: {
101
+ max_amount: bigint;
102
+ max_price_per_unit: bigint;
103
+ };
104
+ l2_gas: {
105
+ max_amount: bigint;
106
+ max_price_per_unit: bigint;
107
+ };
108
+ l1_data_gas: {
109
+ max_amount: bigint;
110
+ max_price_per_unit: bigint;
111
+ };
112
+ };
113
+ tip: bigint;
114
+ paymasterData: never[];
115
+ nonceDataAvailabilityMode: "L1" | "L2";
116
+ feeDataAvailabilityMode: "L1" | "L2";
117
+ };
118
+ }
@@ -1,146 +1,150 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.StarknetFees = void 0;
4
- exports.starknetGasMul = starknetGasMul;
5
- exports.starknetGasAdd = starknetGasAdd;
6
- const Utils_1 = require("../../../utils/Utils");
7
- const MAX_FEE_AGE = 5000;
8
- /**
9
- * Multiplies all the gas parameters by a specific scalar
10
- *
11
- * @param gas
12
- * @param scalar
13
- */
14
- function starknetGasMul(gas, scalar) {
15
- return { l1Gas: gas.l1Gas * scalar, l2Gas: gas.l2Gas * scalar, l1DataGas: gas.l1DataGas * scalar };
16
- }
17
- /**
18
- * Sums up all the gas parameters
19
- *
20
- * @param a
21
- * @param b
22
- */
23
- function starknetGasAdd(a, b) {
24
- if (b == null)
25
- return a;
26
- return { l1Gas: a.l1Gas + b.l1Gas, l2Gas: a.l2Gas + b.l2Gas, l1DataGas: a.l1DataGas + b.l1DataGas };
27
- }
28
- /**
29
- * A module for starknet fee estimation
30
- *
31
- * @category Chain Interface
32
- */
33
- class StarknetFees {
34
- /**
35
- * Constructs a new Starknet fee module
36
- *
37
- * @param provider A starknet.js provider to use for fee estimation
38
- * @param maxFeeRate Fee rate limits in base units
39
- * @param feeMultiplier A multiplier to use for the returned fee rates
40
- * @param da Data-availability mode - currently just L1
41
- */
42
- constructor(provider, maxFeeRate = { l1GasCost: 20000000000000000n, l2GasCost: 4000000000000000n, l1DataGasCost: 10000000000000000n }, feeMultiplier = 1.25, da) {
43
- this.logger = (0, Utils_1.getLogger)("StarknetFees: ");
44
- this.provider = provider;
45
- this.maxFeeRate = maxFeeRate;
46
- this.feeDA = da?.fee ?? "L1";
47
- this.nonceDA = da?.nonce ?? "L1";
48
- this.feeMultiplierPPM = BigInt(Math.floor(feeMultiplier * 1000000));
49
- }
50
- /**
51
- * Gets starknet fee rate
52
- *
53
- * @private
54
- * @returns {Promise<StarknetFeeRate>} L1 gas price denominated in Wei
55
- */
56
- async _getFeeRate() {
57
- const block = await this.provider.getBlock("latest");
58
- let l1GasCost = (0, Utils_1.toBigInt)(block.l1_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
59
- let l1DataGasCost = (0, Utils_1.toBigInt)(block.l1_data_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
60
- let l2GasCost = (0, Utils_1.toBigInt)(block.l2_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
61
- this.logger.debug("_getFeeRate(): L1 fee rate: ", [l1GasCost.toString(10), l1DataGasCost.toString(10), l2GasCost.toString(10)]);
62
- return {
63
- l1GasCost, l2GasCost, l1DataGasCost
64
- };
65
- }
66
- /**
67
- * Gets the gas price with caching, format: <gas price in Wei>;<transaction version: v1/v3>
68
- *
69
- * @private
70
- */
71
- async getFeeRate() {
72
- if (this.blockFeeCache == null || Date.now() - this.blockFeeCache.timestamp > MAX_FEE_AGE) {
73
- let obj;
74
- this.blockFeeCache = obj = {
75
- timestamp: Date.now(),
76
- feeRate: this._getFeeRate().catch(e => {
77
- if (this.blockFeeCache === obj)
78
- delete this.blockFeeCache;
79
- throw e;
80
- })
81
- };
82
- }
83
- let { l1GasCost, l2GasCost, l1DataGasCost } = await this.blockFeeCache.feeRate;
84
- if (l1GasCost > this.maxFeeRate.l1GasCost)
85
- l1GasCost = this.maxFeeRate.l1GasCost;
86
- if (l2GasCost > this.maxFeeRate.l2GasCost)
87
- l2GasCost = this.maxFeeRate.l2GasCost;
88
- if (l1DataGasCost > this.maxFeeRate.l1DataGasCost)
89
- l1DataGasCost = this.maxFeeRate.l1DataGasCost;
90
- const fee = l1GasCost.toString(10) + "," + l2GasCost.toString(10) + "," + l1DataGasCost.toString(10) + ";v3";
91
- this.logger.debug("getFeeRate(): calculated fee: " + fee);
92
- return fee;
93
- }
94
- /**
95
- * A utility function for deserializing a stringified starknet fee rate to its constituent fees
96
- *
97
- * @param feeRate Serialized fee rate in format: [l1Gas],[l2Gas],[l1DataGas]
98
- */
99
- static extractFromFeeRateString(feeRate) {
100
- const arr = feeRate.split(";");
101
- const [l1GasCostStr, l2GasCostStr, l1DataGasCostStr] = arr[0].split(",");
102
- return {
103
- l1GasCost: BigInt(l1GasCostStr),
104
- l2GasCost: BigInt(l2GasCostStr),
105
- l1DataGasCost: BigInt(l1DataGasCostStr)
106
- };
107
- }
108
- /**
109
- * Calculates the total gas fee paid for a given gas limit at a given fee rate
110
- *
111
- * @param gas Gas limits
112
- * @param feeRate Fee rate to use for the calculation, serialized as a string: [l1Gas],[l2Gas],[l1DataGas]
113
- */
114
- static getGasFee(gas, feeRate) {
115
- if (feeRate == null)
116
- return 0n;
117
- const { l1GasCost, l2GasCost, l1DataGasCost } = StarknetFees.extractFromFeeRateString(feeRate);
118
- return (BigInt(gas.l1Gas) * l1GasCost) +
119
- (BigInt(gas.l2Gas) * l2GasCost) +
120
- (BigInt(gas.l1DataGas) * l1DataGasCost);
121
- }
122
- /**
123
- * Returns transaction details that apply the corresponding gas limits and gas price to the transaction
124
- *
125
- * @param gas Gas limits
126
- * @param feeRate Fee rate to use for the calculation, serialized as a string: [l1Gas],[l2Gas],[l1DataGas]
127
- */
128
- getFeeDetails(gas, feeRate) {
129
- if (feeRate == null)
130
- throw new Error("No feeRate passed, cannot get fee details!");
131
- const { l1GasCost, l2GasCost, l1DataGasCost } = StarknetFees.extractFromFeeRateString(feeRate);
132
- return {
133
- version: "0x3",
134
- resourceBounds: {
135
- l1_gas: { max_amount: BigInt(gas.l1Gas), max_price_per_unit: l1GasCost },
136
- l2_gas: { max_amount: BigInt(gas.l2Gas), max_price_per_unit: l2GasCost },
137
- l1_data_gas: { max_amount: BigInt(gas.l1DataGas), max_price_per_unit: l1DataGasCost }
138
- },
139
- tip: 0n,
140
- paymasterData: [],
141
- nonceDataAvailabilityMode: this.nonceDA,
142
- feeDataAvailabilityMode: this.feeDA
143
- };
144
- }
145
- }
146
- exports.StarknetFees = StarknetFees;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StarknetFees = exports.starknetGasAdd = exports.starknetGasMul = void 0;
4
+ const Utils_1 = require("../../../utils/Utils");
5
+ const MAX_FEE_AGE = 5000;
6
+ /**
7
+ * Multiplies all the gas parameters by a specific scalar
8
+ *
9
+ * @param gas
10
+ * @param scalar
11
+ *
12
+ * @category Chain Interface
13
+ */
14
+ function starknetGasMul(gas, scalar) {
15
+ return { l1Gas: gas.l1Gas * scalar, l2Gas: gas.l2Gas * scalar, l1DataGas: gas.l1DataGas * scalar };
16
+ }
17
+ exports.starknetGasMul = starknetGasMul;
18
+ /**
19
+ * Sums up all the gas parameters
20
+ *
21
+ * @param a
22
+ * @param b
23
+ *
24
+ * @category Chain Interface
25
+ */
26
+ function starknetGasAdd(a, b) {
27
+ if (b == null)
28
+ return a;
29
+ return { l1Gas: a.l1Gas + b.l1Gas, l2Gas: a.l2Gas + b.l2Gas, l1DataGas: a.l1DataGas + b.l1DataGas };
30
+ }
31
+ exports.starknetGasAdd = starknetGasAdd;
32
+ /**
33
+ * A module for starknet fee estimation
34
+ *
35
+ * @category Chain Interface
36
+ */
37
+ class StarknetFees {
38
+ /**
39
+ * Constructs a new Starknet fee module
40
+ *
41
+ * @param provider A starknet.js provider to use for fee estimation
42
+ * @param maxFeeRate Fee rate limits in base units
43
+ * @param feeMultiplier A multiplier to use for the returned fee rates
44
+ * @param da Data-availability mode - currently just L1
45
+ */
46
+ constructor(provider, maxFeeRate = { l1GasCost: 20000000000000000n, l2GasCost: 4000000000000000n, l1DataGasCost: 10000000000000000n }, feeMultiplier = 1.25, da) {
47
+ this.logger = (0, Utils_1.getLogger)("StarknetFees: ");
48
+ this.provider = provider;
49
+ this.maxFeeRate = maxFeeRate;
50
+ this.feeDA = da?.fee ?? "L1";
51
+ this.nonceDA = da?.nonce ?? "L1";
52
+ this.feeMultiplierPPM = BigInt(Math.floor(feeMultiplier * 1000000));
53
+ }
54
+ /**
55
+ * Gets starknet fee rate
56
+ *
57
+ * @private
58
+ * @returns {Promise<StarknetFeeRate>} L1 gas price denominated in Wei
59
+ */
60
+ async _getFeeRate() {
61
+ const block = await this.provider.getBlock("latest");
62
+ let l1GasCost = (0, Utils_1.toBigInt)(block.l1_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
63
+ let l1DataGasCost = (0, Utils_1.toBigInt)(block.l1_data_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
64
+ let l2GasCost = (0, Utils_1.toBigInt)(block.l2_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
65
+ this.logger.debug("_getFeeRate(): L1 fee rate: ", [l1GasCost.toString(10), l1DataGasCost.toString(10), l2GasCost.toString(10)]);
66
+ return {
67
+ l1GasCost, l2GasCost, l1DataGasCost
68
+ };
69
+ }
70
+ /**
71
+ * Gets the gas price with caching, format: <gas price in Wei>;<transaction version: v1/v3>
72
+ *
73
+ * @private
74
+ */
75
+ async getFeeRate() {
76
+ if (this.blockFeeCache == null || Date.now() - this.blockFeeCache.timestamp > MAX_FEE_AGE) {
77
+ let obj;
78
+ this.blockFeeCache = obj = {
79
+ timestamp: Date.now(),
80
+ feeRate: this._getFeeRate().catch(e => {
81
+ if (this.blockFeeCache === obj)
82
+ delete this.blockFeeCache;
83
+ throw e;
84
+ })
85
+ };
86
+ }
87
+ let { l1GasCost, l2GasCost, l1DataGasCost } = await this.blockFeeCache.feeRate;
88
+ if (l1GasCost > this.maxFeeRate.l1GasCost)
89
+ l1GasCost = this.maxFeeRate.l1GasCost;
90
+ if (l2GasCost > this.maxFeeRate.l2GasCost)
91
+ l2GasCost = this.maxFeeRate.l2GasCost;
92
+ if (l1DataGasCost > this.maxFeeRate.l1DataGasCost)
93
+ l1DataGasCost = this.maxFeeRate.l1DataGasCost;
94
+ const fee = l1GasCost.toString(10) + "," + l2GasCost.toString(10) + "," + l1DataGasCost.toString(10) + ";v3";
95
+ this.logger.debug("getFeeRate(): calculated fee: " + fee);
96
+ return fee;
97
+ }
98
+ /**
99
+ * A utility function for deserializing a stringified starknet fee rate to its constituent fees
100
+ *
101
+ * @param feeRate Serialized fee rate in format: [l1Gas],[l2Gas],[l1DataGas]
102
+ */
103
+ static extractFromFeeRateString(feeRate) {
104
+ const arr = feeRate.split(";");
105
+ const [l1GasCostStr, l2GasCostStr, l1DataGasCostStr] = arr[0].split(",");
106
+ return {
107
+ l1GasCost: BigInt(l1GasCostStr),
108
+ l2GasCost: BigInt(l2GasCostStr),
109
+ l1DataGasCost: BigInt(l1DataGasCostStr)
110
+ };
111
+ }
112
+ /**
113
+ * Calculates the total gas fee paid for a given gas limit at a given fee rate
114
+ *
115
+ * @param gas Gas limits
116
+ * @param feeRate Fee rate to use for the calculation, serialized as a string: [l1Gas],[l2Gas],[l1DataGas]
117
+ */
118
+ static getGasFee(gas, feeRate) {
119
+ if (feeRate == null)
120
+ return 0n;
121
+ const { l1GasCost, l2GasCost, l1DataGasCost } = StarknetFees.extractFromFeeRateString(feeRate);
122
+ return (BigInt(gas.l1Gas) * l1GasCost) +
123
+ (BigInt(gas.l2Gas) * l2GasCost) +
124
+ (BigInt(gas.l1DataGas) * l1DataGasCost);
125
+ }
126
+ /**
127
+ * Returns transaction details that apply the corresponding gas limits and gas price to the transaction
128
+ *
129
+ * @param gas Gas limits
130
+ * @param feeRate Fee rate to use for the calculation, serialized as a string: [l1Gas],[l2Gas],[l1DataGas]
131
+ */
132
+ getFeeDetails(gas, feeRate) {
133
+ if (feeRate == null)
134
+ throw new Error("No feeRate passed, cannot get fee details!");
135
+ const { l1GasCost, l2GasCost, l1DataGasCost } = StarknetFees.extractFromFeeRateString(feeRate);
136
+ return {
137
+ version: "0x3",
138
+ resourceBounds: {
139
+ l1_gas: { max_amount: BigInt(gas.l1Gas), max_price_per_unit: l1GasCost },
140
+ l2_gas: { max_amount: BigInt(gas.l2Gas), max_price_per_unit: l2GasCost },
141
+ l1_data_gas: { max_amount: BigInt(gas.l1DataGas), max_price_per_unit: l1DataGasCost }
142
+ },
143
+ tip: 0n,
144
+ paymasterData: [],
145
+ nonceDataAvailabilityMode: this.nonceDA,
146
+ feeDataAvailabilityMode: this.feeDA
147
+ };
148
+ }
149
+ }
150
+ exports.StarknetFees = StarknetFees;
@@ -1,29 +1,29 @@
1
- import { Buffer } from "buffer";
2
- import { StarknetModule } from "../StarknetModule";
3
- import { StarknetSigner } from "../../wallet/StarknetSigner";
4
- import { StarknetType, TypedData } from "starknet";
5
- import { StarknetChainInterface } from "../StarknetChainInterface";
6
- export declare class StarknetSignatures extends StarknetModule {
7
- private readonly domain;
8
- constructor(root: StarknetChainInterface, domainName?: string);
9
- getTypedMessage(type: StarknetType[], typeName: string, message: object): TypedData;
10
- signTypedMessage(signer: StarknetSigner, type: StarknetType[], typeName: string, message: object): Promise<string>;
11
- isValidSignature(signature: string, address: string, type: StarknetType[], typeName: string, message: object): Promise<boolean>;
12
- /**
13
- * Produces a signature over the sha256 of a specified data Buffer, only works with providers which
14
- * expose their private key (i.e. backend based, not browser wallet based)
15
- *
16
- * @param signer
17
- * @param data data to sign
18
- */
19
- getDataSignature(signer: StarknetSigner, data: Buffer): Promise<string>;
20
- /**
21
- * Checks whether a signature is a valid signature produced by the account over a data message (computes
22
- * sha256 hash of the message)
23
- *
24
- * @param data signed data
25
- * @param signature data signature
26
- * @param address public key of the signer
27
- */
28
- isValidDataSignature(data: Buffer, signature: string, address: string): Promise<boolean>;
29
- }
1
+ import { Buffer } from "buffer";
2
+ import { StarknetModule } from "../StarknetModule";
3
+ import { StarknetSigner } from "../../wallet/StarknetSigner";
4
+ import { StarknetType, TypedData } from "starknet";
5
+ import { StarknetChainInterface } from "../StarknetChainInterface";
6
+ export declare class StarknetSignatures extends StarknetModule {
7
+ private readonly domain;
8
+ constructor(root: StarknetChainInterface, domainName?: string);
9
+ getTypedMessage(type: StarknetType[], typeName: string, message: object): TypedData;
10
+ signTypedMessage(signer: StarknetSigner, type: StarknetType[], typeName: string, message: object): Promise<string>;
11
+ isValidSignature(signature: string, address: string, type: StarknetType[], typeName: string, message: object): Promise<boolean>;
12
+ /**
13
+ * Produces a signature over the sha256 of a specified data Buffer, only works with providers which
14
+ * expose their private key (i.e. backend based, not browser wallet based)
15
+ *
16
+ * @param signer
17
+ * @param data data to sign
18
+ */
19
+ getDataSignature(signer: StarknetSigner, data: Buffer): Promise<string>;
20
+ /**
21
+ * Checks whether a signature is a valid signature produced by the account over a data message (computes
22
+ * sha256 hash of the message)
23
+ *
24
+ * @param data signed data
25
+ * @param signature data signature
26
+ * @param address public key of the signer
27
+ */
28
+ isValidDataSignature(data: Buffer, signature: string, address: string): Promise<boolean>;
29
+ }