@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.
- package/dist/index.d.ts +18 -18
- package/dist/index.js +42 -42
- package/dist/starknet/StarknetChainType.d.ts +19 -19
- package/dist/starknet/StarknetChainType.js +2 -2
- package/dist/starknet/StarknetInitializer.d.ts +66 -63
- package/dist/starknet/StarknetInitializer.js +101 -101
- package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
- package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +196 -196
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +419 -411
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +70 -70
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +115 -115
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +91 -91
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +155 -155
- package/dist/starknet/chain/StarknetAction.d.ts +19 -19
- package/dist/starknet/chain/StarknetAction.js +74 -74
- package/dist/starknet/chain/StarknetChainInterface.d.ts +142 -143
- package/dist/starknet/chain/StarknetChainInterface.js +198 -199
- package/dist/starknet/chain/StarknetModule.d.ts +8 -8
- package/dist/starknet/chain/StarknetModule.js +12 -12
- package/dist/starknet/chain/modules/ERC20Abi.d.ts +755 -755
- package/dist/starknet/chain/modules/ERC20Abi.js +1032 -1032
- package/dist/starknet/chain/modules/StarknetAccounts.d.ts +6 -6
- package/dist/starknet/chain/modules/StarknetAccounts.js +26 -26
- package/dist/starknet/chain/modules/StarknetAddresses.d.ts +10 -10
- package/dist/starknet/chain/modules/StarknetAddresses.js +27 -27
- package/dist/starknet/chain/modules/StarknetBlocks.d.ts +27 -27
- package/dist/starknet/chain/modules/StarknetBlocks.js +82 -82
- package/dist/starknet/chain/modules/StarknetEvents.d.ts +47 -47
- package/dist/starknet/chain/modules/StarknetEvents.js +90 -90
- package/dist/starknet/chain/modules/StarknetFees.d.ts +118 -104
- package/dist/starknet/chain/modules/StarknetFees.js +150 -146
- package/dist/starknet/chain/modules/StarknetSignatures.d.ts +29 -29
- package/dist/starknet/chain/modules/StarknetSignatures.js +72 -72
- package/dist/starknet/chain/modules/StarknetTokens.d.ts +66 -66
- package/dist/starknet/chain/modules/StarknetTokens.js +99 -99
- package/dist/starknet/chain/modules/StarknetTransactions.d.ts +122 -115
- package/dist/starknet/chain/modules/StarknetTransactions.js +633 -612
- package/dist/starknet/contract/StarknetContractBase.d.ts +14 -13
- package/dist/starknet/contract/StarknetContractBase.js +21 -20
- package/dist/starknet/contract/StarknetContractModule.d.ts +8 -8
- package/dist/starknet/contract/StarknetContractModule.js +11 -11
- package/dist/starknet/contract/modules/StarknetContractEvents.d.ts +56 -57
- package/dist/starknet/contract/modules/StarknetContractEvents.js +111 -111
- package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
- package/dist/starknet/events/StarknetChainEvents.js +61 -61
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +178 -190
- package/dist/starknet/events/StarknetChainEventsBrowser.js +523 -582
- package/dist/starknet/provider/RpcProviderWithRetries.d.ts +49 -53
- package/dist/starknet/provider/RpcProviderWithRetries.js +94 -94
- package/dist/starknet/provider/WebSocketChannelWithRetries.d.ts +21 -21
- package/dist/starknet/provider/WebSocketChannelWithRetries.js +46 -46
- package/dist/starknet/spv_swap/SpvVaultContractAbi.d.ts +488 -488
- package/dist/starknet/spv_swap/SpvVaultContractAbi.js +656 -656
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.d.ts +225 -219
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +663 -621
- package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +108 -108
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +190 -190
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +56 -56
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +103 -103
- package/dist/starknet/swaps/EscrowManagerAbi.d.ts +431 -431
- package/dist/starknet/swaps/EscrowManagerAbi.js +583 -583
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +309 -278
- package/dist/starknet/swaps/StarknetSwapContract.js +755 -579
- package/dist/starknet/swaps/StarknetSwapData.d.ts +234 -234
- package/dist/starknet/swaps/StarknetSwapData.js +474 -474
- package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
- package/dist/starknet/swaps/StarknetSwapModule.js +12 -12
- package/dist/starknet/swaps/handlers/IHandler.d.ts +13 -13
- package/dist/starknet/swaps/handlers/IHandler.js +2 -2
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.d.ts +13 -13
- package/dist/starknet/swaps/handlers/claim/ClaimHandlers.js +13 -13
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.d.ts +21 -21
- package/dist/starknet/swaps/handlers/claim/HashlockClaimHandler.js +44 -44
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.d.ts +24 -24
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.js +48 -48
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.d.ts +25 -25
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.js +40 -40
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.d.ts +20 -20
- package/dist/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.js +30 -30
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.d.ts +42 -45
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +50 -54
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.d.ts +17 -17
- package/dist/starknet/swaps/handlers/refund/TimelockRefundHandler.js +27 -27
- package/dist/starknet/swaps/modules/StarknetLpVault.d.ts +67 -67
- package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
- package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +52 -52
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +99 -99
- package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +94 -94
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +239 -239
- package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +60 -60
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +126 -126
- package/dist/starknet/wallet/StarknetBrowserSigner.d.ts +11 -11
- package/dist/starknet/wallet/StarknetBrowserSigner.js +17 -17
- package/dist/starknet/wallet/StarknetPersistentSigner.d.ts +76 -76
- package/dist/starknet/wallet/StarknetPersistentSigner.js +291 -291
- package/dist/starknet/wallet/StarknetSigner.d.ts +72 -72
- package/dist/starknet/wallet/StarknetSigner.js +114 -114
- package/dist/starknet/wallet/accounts/StarknetKeypairWallet.d.ts +18 -18
- package/dist/starknet/wallet/accounts/StarknetKeypairWallet.js +45 -45
- package/dist/utils/Utils.d.ts +77 -77
- package/dist/utils/Utils.js +304 -303
- package/package.json +2 -2
- package/src/starknet/StarknetInitializer.ts +6 -3
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +19 -6
- package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +7 -7
- package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +6 -6
- package/src/starknet/chain/StarknetAction.ts +1 -0
- package/src/starknet/chain/StarknetChainInterface.ts +0 -2
- package/src/starknet/chain/modules/StarknetFees.ts +15 -2
- package/src/starknet/chain/modules/StarknetTransactions.ts +24 -0
- package/src/starknet/contract/StarknetContractBase.ts +7 -4
- package/src/starknet/contract/StarknetContractModule.ts +1 -1
- package/src/starknet/contract/modules/StarknetContractEvents.ts +7 -7
- package/src/starknet/events/StarknetChainEventsBrowser.ts +2 -64
- package/src/starknet/provider/RpcProviderWithRetries.ts +1 -1
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +84 -18
- package/src/starknet/swaps/StarknetSwapContract.ts +242 -6
- package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +0 -4
|
@@ -1,104 +1,118 @@
|
|
|
1
|
-
import { Provider } from "starknet";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export type
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* @
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
*
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
*
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
* @param feeRate
|
|
82
|
-
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* @
|
|
13
|
-
*/
|
|
14
|
-
function starknetGasMul(gas, scalar) {
|
|
15
|
-
return { l1Gas: gas.l1Gas * scalar, l2Gas: gas.l2Gas * scalar, l1DataGas: gas.l1DataGas * scalar };
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* @param
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
this.
|
|
48
|
-
this.
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
if (
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
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
|
+
}
|