@atomiqlabs/chain-starknet 3.0.0-dev.0 → 3.0.0-dev.1
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/LICENSE +201 -201
- package/dist/index.d.ts +38 -38
- package/dist/index.js +54 -54
- package/dist/starknet/StarknetChainType.d.ts +13 -13
- package/dist/starknet/StarknetChainType.js +2 -2
- package/dist/starknet/StarknetInitializer.d.ts +19 -19
- package/dist/starknet/StarknetInitializer.js +64 -64
- package/dist/starknet/btcrelay/BtcRelayAbi.d.ts +250 -250
- package/dist/starknet/btcrelay/BtcRelayAbi.js +341 -341
- package/dist/starknet/btcrelay/StarknetBtcRelay.d.ts +186 -186
- package/dist/starknet/btcrelay/StarknetBtcRelay.js +379 -379
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.d.ts +31 -31
- package/dist/starknet/btcrelay/headers/StarknetBtcHeader.js +74 -74
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.d.ts +51 -51
- package/dist/starknet/btcrelay/headers/StarknetBtcStoredHeader.js +113 -113
- package/dist/starknet/chain/StarknetAction.d.ts +19 -27
- package/dist/starknet/chain/StarknetAction.js +73 -73
- package/dist/starknet/chain/StarknetChainInterface.d.ts +52 -52
- package/dist/starknet/chain/StarknetChainInterface.js +91 -91
- package/dist/starknet/chain/StarknetModule.d.ts +14 -14
- package/dist/starknet/chain/StarknetModule.js +13 -13
- 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 +24 -24
- package/dist/starknet/chain/modules/StarknetAddresses.d.ts +9 -9
- package/dist/starknet/chain/modules/StarknetAddresses.js +26 -26
- package/dist/starknet/chain/modules/StarknetBlocks.d.ts +19 -19
- package/dist/starknet/chain/modules/StarknetBlocks.js +49 -49
- package/dist/starknet/chain/modules/StarknetEvents.d.ts +44 -44
- package/dist/starknet/chain/modules/StarknetEvents.js +88 -88
- package/dist/starknet/chain/modules/StarknetFees.d.ts +77 -55
- package/dist/starknet/chain/modules/StarknetFees.js +114 -100
- 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 +69 -67
- package/dist/starknet/chain/modules/StarknetTokens.js +98 -98
- package/dist/starknet/chain/modules/StarknetTransactions.d.ts +93 -93
- package/dist/starknet/chain/modules/StarknetTransactions.js +255 -255
- package/dist/starknet/contract/StarknetContractBase.d.ts +13 -13
- package/dist/starknet/contract/StarknetContractBase.js +16 -16
- 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 +51 -51
- package/dist/starknet/contract/modules/StarknetContractEvents.js +97 -97
- package/dist/starknet/events/StarknetChainEvents.d.ts +21 -21
- package/dist/starknet/events/StarknetChainEvents.js +52 -52
- package/dist/starknet/events/StarknetChainEventsBrowser.d.ts +91 -91
- package/dist/starknet/events/StarknetChainEventsBrowser.js +294 -294
- package/dist/starknet/provider/RpcProviderWithRetries.d.ts +21 -21
- package/dist/starknet/provider/RpcProviderWithRetries.js +32 -32
- 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 +65 -65
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +376 -376
- package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -49
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +144 -144
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +24 -24
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +61 -61
- package/dist/starknet/swaps/EscrowManagerAbi.d.ts +434 -434
- package/dist/starknet/swaps/EscrowManagerAbi.js +587 -587
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +196 -196
- package/dist/starknet/swaps/StarknetSwapContract.js +395 -395
- package/dist/starknet/swaps/StarknetSwapData.d.ts +67 -67
- package/dist/starknet/swaps/StarknetSwapData.js +290 -290
- package/dist/starknet/swaps/StarknetSwapModule.d.ts +10 -10
- package/dist/starknet/swaps/StarknetSwapModule.js +11 -11
- 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 +45 -45
- package/dist/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.js +52 -52
- 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 +69 -69
- package/dist/starknet/swaps/modules/StarknetLpVault.js +122 -122
- package/dist/starknet/swaps/modules/StarknetSwapClaim.d.ts +53 -53
- package/dist/starknet/swaps/modules/StarknetSwapClaim.js +100 -100
- package/dist/starknet/swaps/modules/StarknetSwapInit.d.ts +84 -84
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +164 -164
- package/dist/starknet/swaps/modules/StarknetSwapRefund.d.ts +62 -62
- package/dist/starknet/swaps/modules/StarknetSwapRefund.js +128 -128
- package/dist/starknet/wallet/StarknetKeypairWallet.d.ts +7 -7
- package/dist/starknet/wallet/StarknetKeypairWallet.js +30 -30
- package/dist/starknet/wallet/StarknetSigner.d.ts +12 -12
- package/dist/starknet/wallet/StarknetSigner.js +46 -46
- package/dist/utils/Utils.d.ts +37 -37
- package/dist/utils/Utils.js +257 -257
- package/package.json +37 -37
- package/src/index.ts +47 -47
- package/src/starknet/StarknetChainType.ts +28 -28
- package/src/starknet/StarknetInitializer.ts +95 -95
- package/src/starknet/btcrelay/BtcRelayAbi.ts +338 -338
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +494 -491
- package/src/starknet/btcrelay/headers/StarknetBtcHeader.ts +100 -100
- package/src/starknet/btcrelay/headers/StarknetBtcStoredHeader.ts +141 -141
- package/src/starknet/chain/StarknetAction.ts +85 -90
- package/src/starknet/chain/StarknetChainInterface.ts +149 -149
- package/src/starknet/chain/StarknetModule.ts +19 -19
- package/src/starknet/chain/modules/ERC20Abi.ts +1029 -1029
- package/src/starknet/chain/modules/StarknetAccounts.ts +25 -25
- package/src/starknet/chain/modules/StarknetAddresses.ts +22 -22
- package/src/starknet/chain/modules/StarknetBlocks.ts +58 -58
- package/src/starknet/chain/modules/StarknetEvents.ts +104 -104
- package/src/starknet/chain/modules/StarknetFees.ts +154 -132
- package/src/starknet/chain/modules/StarknetSignatures.ts +91 -90
- package/src/starknet/chain/modules/StarknetTokens.ts +116 -116
- package/src/starknet/chain/modules/StarknetTransactions.ts +277 -277
- package/src/starknet/contract/StarknetContractBase.ts +26 -26
- package/src/starknet/contract/StarknetContractModule.ts +16 -16
- package/src/starknet/contract/modules/StarknetContractEvents.ts +134 -134
- package/src/starknet/events/StarknetChainEvents.ts +67 -67
- package/src/starknet/events/StarknetChainEventsBrowser.ts +412 -412
- package/src/starknet/provider/RpcProviderWithRetries.ts +43 -43
- package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -656
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +477 -477
- package/src/starknet/spv_swap/StarknetSpvVaultData.ts +194 -194
- package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +68 -68
- package/src/starknet/swaps/EscrowManagerAbi.ts +586 -586
- package/src/starknet/swaps/StarknetSwapContract.ts +605 -605
- package/src/starknet/swaps/StarknetSwapData.ts +403 -403
- package/src/starknet/swaps/StarknetSwapModule.ts +17 -17
- package/src/starknet/swaps/handlers/IHandler.ts +20 -20
- package/src/starknet/swaps/handlers/claim/ClaimHandlers.ts +23 -23
- package/src/starknet/swaps/handlers/claim/HashlockClaimHandler.ts +53 -53
- package/src/starknet/swaps/handlers/claim/btc/BitcoinNoncedOutputClaimHandler.ts +73 -73
- package/src/starknet/swaps/handlers/claim/btc/BitcoinOutputClaimHandler.ts +67 -67
- package/src/starknet/swaps/handlers/claim/btc/BitcoinTxIdClaimHandler.ts +50 -50
- package/src/starknet/swaps/handlers/claim/btc/IBitcoinClaimHandler.ts +102 -102
- package/src/starknet/swaps/handlers/refund/TimelockRefundHandler.ts +38 -38
- package/src/starknet/swaps/modules/StarknetLpVault.ts +147 -147
- package/src/starknet/swaps/modules/StarknetSwapClaim.ts +141 -141
- package/src/starknet/swaps/modules/StarknetSwapInit.ts +225 -225
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +196 -197
- package/src/starknet/wallet/StarknetKeypairWallet.ts +39 -39
- package/src/starknet/wallet/StarknetSigner.ts +55 -55
- package/src/utils/Utils.ts +248 -248
|
@@ -1,133 +1,155 @@
|
|
|
1
|
-
import {getLogger, toBigInt, toHex} from "../../../utils/Utils";
|
|
2
|
-
import {Provider} from "starknet";
|
|
3
|
-
import {StarknetTokens} from "./StarknetTokens";
|
|
4
|
-
|
|
5
|
-
const MAX_FEE_AGE = 5000;
|
|
6
|
-
|
|
7
|
-
export
|
|
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
|
-
this.
|
|
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
|
-
|
|
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
|
-
|
|
1
|
+
import {getLogger, toBigInt, toHex} from "../../../utils/Utils";
|
|
2
|
+
import {Provider} from "starknet";
|
|
3
|
+
import {StarknetTokens} from "./StarknetTokens";
|
|
4
|
+
|
|
5
|
+
const MAX_FEE_AGE = 5000;
|
|
6
|
+
|
|
7
|
+
export type StarknetFeeRate = {
|
|
8
|
+
l1GasCost: bigint;
|
|
9
|
+
l2GasCost: bigint;
|
|
10
|
+
l1DataGasCost: bigint;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type StarknetGas = {
|
|
14
|
+
l1Gas: number,
|
|
15
|
+
l2Gas: number,
|
|
16
|
+
l1DataGas: number
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export function starknetGasMul(gas: StarknetGas, scalar: number): StarknetGas {
|
|
20
|
+
return {l1Gas: gas.l1Gas * scalar, l2Gas: gas.l2Gas * scalar, l1DataGas: gas.l1DataGas * scalar};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function starknetGasAdd(a: StarknetGas, b: StarknetGas): StarknetGas {
|
|
24
|
+
return {l1Gas: a.l1Gas + b.l1Gas, l2Gas: a.l2Gas + b.l2Gas, l1DataGas: a.l1DataGas + b.l1DataGas};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export class StarknetFees {
|
|
28
|
+
|
|
29
|
+
private readonly logger = getLogger("StarknetFees: ");
|
|
30
|
+
|
|
31
|
+
private readonly feeDA: "L1" | "L2";
|
|
32
|
+
private readonly nonceDA: "L1" | "L2";
|
|
33
|
+
private readonly provider: Provider;
|
|
34
|
+
private readonly maxFeeRate: StarknetFeeRate;
|
|
35
|
+
private readonly feeMultiplierPPM: bigint;
|
|
36
|
+
|
|
37
|
+
private blockFeeCache: {
|
|
38
|
+
timestamp: number,
|
|
39
|
+
feeRate: Promise<StarknetFeeRate>
|
|
40
|
+
} = null;
|
|
41
|
+
|
|
42
|
+
constructor(
|
|
43
|
+
provider: Provider,
|
|
44
|
+
maxFeeRate: StarknetFeeRate = {l1GasCost: 1_000_000_000_000_000n, l2GasCost: 1_000_000_000_000_000n, l1DataGasCost: 1_000_000_000_000_000n} /*100 * 10000 GWei*/,
|
|
45
|
+
feeMultiplier: number = 1.25,
|
|
46
|
+
da?: {fee?: "L1" | "L2", nonce?: "L1" | "L2"}
|
|
47
|
+
) {
|
|
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
|
+
/**
|
|
56
|
+
* Gets starknet fee rate
|
|
57
|
+
*
|
|
58
|
+
* @private
|
|
59
|
+
* @returns {Promise<StarknetFeeRate>} L1 gas price denominated in Wei
|
|
60
|
+
*/
|
|
61
|
+
private async _getFeeRate(): Promise<StarknetFeeRate> {
|
|
62
|
+
const block = await this.provider.getBlock("latest");
|
|
63
|
+
|
|
64
|
+
let l1GasCost = toBigInt(block.l1_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
|
|
65
|
+
let l1DataGasCost = toBigInt(block.l1_data_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
|
|
66
|
+
let l2GasCost = toBigInt(block.l2_gas_price.price_in_fri) * this.feeMultiplierPPM / 1000000n;
|
|
67
|
+
|
|
68
|
+
this.logger.debug("_getFeeRate(): L1 fee rate: ",[l1GasCost.toString(10), l1DataGasCost.toString(10), l2GasCost.toString(10)]);
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
l1GasCost, l2GasCost, l1DataGasCost
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Gets the gas price with caching, format: <gas price in Wei>;<transaction version: v1/v3>
|
|
77
|
+
*
|
|
78
|
+
* @private
|
|
79
|
+
*/
|
|
80
|
+
public async getFeeRate(): Promise<string> {
|
|
81
|
+
if(this.blockFeeCache==null || Date.now() - this.blockFeeCache.timestamp > MAX_FEE_AGE) {
|
|
82
|
+
let obj = {
|
|
83
|
+
timestamp: Date.now(),
|
|
84
|
+
feeRate: null
|
|
85
|
+
};
|
|
86
|
+
obj.feeRate = this._getFeeRate().catch(e => {
|
|
87
|
+
if(this.blockFeeCache===obj) this.blockFeeCache=null;
|
|
88
|
+
throw e;
|
|
89
|
+
});
|
|
90
|
+
this.blockFeeCache = obj;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
let {l1GasCost, l2GasCost, l1DataGasCost} = await this.blockFeeCache.feeRate;
|
|
94
|
+
if(l1GasCost>this.maxFeeRate.l1GasCost) l1GasCost = this.maxFeeRate.l1GasCost;
|
|
95
|
+
if(l2GasCost>this.maxFeeRate.l2GasCost) l2GasCost = this.maxFeeRate.l2GasCost;
|
|
96
|
+
if(l1DataGasCost>this.maxFeeRate.l1DataGasCost) l1DataGasCost = this.maxFeeRate.l1DataGasCost;
|
|
97
|
+
|
|
98
|
+
const fee = l1GasCost.toString(10)+","+l2GasCost.toString(10)+","+l1DataGasCost.toString(10)+";v3";
|
|
99
|
+
|
|
100
|
+
this.logger.debug("getFeeRate(): calculated fee: "+fee);
|
|
101
|
+
|
|
102
|
+
return fee;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public getDefaultGasToken(): string {
|
|
106
|
+
return StarknetTokens.ERC20_STRK;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Calculates the total gas fee paid for a given gas limit at a given fee rate
|
|
111
|
+
*
|
|
112
|
+
* @param gas
|
|
113
|
+
* @param feeRate
|
|
114
|
+
*/
|
|
115
|
+
public static getGasFee(gas: {l1DataGas: number, l2Gas: number, l1Gas: number}, feeRate: string): bigint {
|
|
116
|
+
if(feeRate==null) return 0n;
|
|
117
|
+
|
|
118
|
+
const arr = feeRate.split(";");
|
|
119
|
+
const [l1GasCostStr, l2GasCostStr, l1DataGasCostStr] = arr[0].split(",");
|
|
120
|
+
|
|
121
|
+
return (BigInt(gas.l1Gas) * BigInt(l1GasCostStr)) +
|
|
122
|
+
(BigInt(gas.l2Gas) * BigInt(l2GasCostStr)) +
|
|
123
|
+
(BigInt(gas.l1DataGas) * BigInt(l1DataGasCostStr));
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
public static getGasToken(feeRate: string): string {
|
|
127
|
+
if(feeRate==null) return null;
|
|
128
|
+
|
|
129
|
+
const arr = feeRate.split(";");
|
|
130
|
+
const txVersion = arr[1] as "v1" | 'v3';
|
|
131
|
+
|
|
132
|
+
return txVersion==="v1" ? StarknetTokens.ERC20_ETH : StarknetTokens.ERC20_STRK;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
getFeeDetails(gas: {l1DataGas: number, l2Gas: number, l1Gas: number}, feeRate: string) {
|
|
136
|
+
if(feeRate==null) return null;
|
|
137
|
+
|
|
138
|
+
const arr = feeRate.split(";");
|
|
139
|
+
const [l1GasCostStr, l2GasCostStr, l1DataGasCostStr] = arr[0].split(",");
|
|
140
|
+
|
|
141
|
+
return {
|
|
142
|
+
version: "0x3" as const,
|
|
143
|
+
resourceBounds: {
|
|
144
|
+
l1_gas: {max_amount: toHex(gas.l1Gas, 16), max_price_per_unit: toHex(toBigInt(l1GasCostStr), 16)},
|
|
145
|
+
l2_gas: {max_amount: toHex(gas.l2Gas, 16), max_price_per_unit: toHex(toBigInt(l2GasCostStr), 16)},
|
|
146
|
+
l1_data_gas: {max_amount: toHex(gas.l1DataGas, 16), max_price_per_unit: toHex(toBigInt(l1DataGasCostStr), 16)}
|
|
147
|
+
},
|
|
148
|
+
tip: "0x0",
|
|
149
|
+
paymasterData: [],
|
|
150
|
+
nonceDataAvailabilityMode: this.nonceDA,
|
|
151
|
+
feeDataAvailabilityMode: this.feeDA
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
133
155
|
}
|
|
@@ -1,91 +1,92 @@
|
|
|
1
|
-
import {Buffer} from "buffer";
|
|
2
|
-
import {StarknetModule} from "../StarknetModule";
|
|
3
|
-
import {StarknetSigner} from "../../wallet/StarknetSigner";
|
|
4
|
-
import {
|
|
5
|
-
Account, cairo,
|
|
6
|
-
shortString,
|
|
7
|
-
stark,
|
|
8
|
-
StarknetDomain, StarknetType,
|
|
9
|
-
TypedData
|
|
10
|
-
} from "starknet";
|
|
11
|
-
import {StarknetChainInterface} from "../StarknetChainInterface";
|
|
12
|
-
import {toHex} from "../../../utils/Utils";
|
|
13
|
-
import {sha256} from "@noble/hashes/sha2";
|
|
14
|
-
|
|
15
|
-
const StarknetDomain = [
|
|
16
|
-
{ name: 'name', type: 'shortstring' },
|
|
17
|
-
{ name: 'version', type: 'shortstring' },
|
|
18
|
-
{ name: 'chainId', type: 'shortstring' },
|
|
19
|
-
{ name: 'revision', type: 'shortstring' },
|
|
20
|
-
];
|
|
21
|
-
|
|
22
|
-
const DataHash = [
|
|
23
|
-
{ name: 'Data hash', type: 'u256' }
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
export class StarknetSignatures extends StarknetModule {
|
|
27
|
-
|
|
28
|
-
private readonly domain: StarknetDomain;
|
|
29
|
-
|
|
30
|
-
constructor(root: StarknetChainInterface, domainName: string = "atomiq.exchange") {
|
|
31
|
-
super(root);
|
|
32
|
-
this.domain = {
|
|
33
|
-
name: domainName,
|
|
34
|
-
version: '1',
|
|
35
|
-
chainId: shortString.decodeShortString(root.starknetChainId),
|
|
36
|
-
revision: '1'
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
public getTypedMessage(type: StarknetType[], typeName: string, message: object): TypedData {
|
|
41
|
-
return {
|
|
42
|
-
types: {
|
|
43
|
-
StarknetDomain,
|
|
44
|
-
[typeName]: type,
|
|
45
|
-
},
|
|
46
|
-
primaryType: typeName,
|
|
47
|
-
domain: this.domain,
|
|
48
|
-
message
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
public async signTypedMessage(signer: StarknetSigner, type: StarknetType[], typeName: string, message: object): Promise<string> {
|
|
53
|
-
const signature = await signer.account.signMessage(this.getTypedMessage(type, typeName, message));
|
|
54
|
-
return JSON.stringify(stark.formatSignature(signature));
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
public async isValidSignature(signature: string, address: string, type: StarknetType[], typeName: string, message: object) {
|
|
58
|
-
return
|
|
59
|
-
this.getTypedMessage(type, typeName, message),
|
|
60
|
-
JSON.parse(signature)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
* @param
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* @param
|
|
84
|
-
* @param
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
1
|
+
import {Buffer} from "buffer";
|
|
2
|
+
import {StarknetModule} from "../StarknetModule";
|
|
3
|
+
import {StarknetSigner} from "../../wallet/StarknetSigner";
|
|
4
|
+
import {
|
|
5
|
+
Account, cairo,
|
|
6
|
+
shortString,
|
|
7
|
+
stark,
|
|
8
|
+
StarknetDomain, StarknetType,
|
|
9
|
+
TypedData
|
|
10
|
+
} from "starknet";
|
|
11
|
+
import {StarknetChainInterface} from "../StarknetChainInterface";
|
|
12
|
+
import {toHex} from "../../../utils/Utils";
|
|
13
|
+
import {sha256} from "@noble/hashes/sha2";
|
|
14
|
+
|
|
15
|
+
const StarknetDomain = [
|
|
16
|
+
{ name: 'name', type: 'shortstring' },
|
|
17
|
+
{ name: 'version', type: 'shortstring' },
|
|
18
|
+
{ name: 'chainId', type: 'shortstring' },
|
|
19
|
+
{ name: 'revision', type: 'shortstring' },
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
const DataHash = [
|
|
23
|
+
{ name: 'Data hash', type: 'u256' }
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
export class StarknetSignatures extends StarknetModule {
|
|
27
|
+
|
|
28
|
+
private readonly domain: StarknetDomain;
|
|
29
|
+
|
|
30
|
+
constructor(root: StarknetChainInterface, domainName: string = "atomiq.exchange") {
|
|
31
|
+
super(root);
|
|
32
|
+
this.domain = {
|
|
33
|
+
name: domainName,
|
|
34
|
+
version: '1',
|
|
35
|
+
chainId: shortString.decodeShortString(root.starknetChainId),
|
|
36
|
+
revision: '1'
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public getTypedMessage(type: StarknetType[], typeName: string, message: object): TypedData {
|
|
41
|
+
return {
|
|
42
|
+
types: {
|
|
43
|
+
StarknetDomain,
|
|
44
|
+
[typeName]: type,
|
|
45
|
+
},
|
|
46
|
+
primaryType: typeName,
|
|
47
|
+
domain: this.domain,
|
|
48
|
+
message
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public async signTypedMessage(signer: StarknetSigner, type: StarknetType[], typeName: string, message: object): Promise<string> {
|
|
53
|
+
const signature = await signer.account.signMessage(this.getTypedMessage(type, typeName, message));
|
|
54
|
+
return JSON.stringify(stark.formatSignature(signature));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public async isValidSignature(signature: string, address: string, type: StarknetType[], typeName: string, message: object): Promise<boolean> {
|
|
58
|
+
return this.provider.verifyMessageInStarknet(
|
|
59
|
+
this.getTypedMessage(type, typeName, message),
|
|
60
|
+
JSON.parse(signature),
|
|
61
|
+
address
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
///////////////////
|
|
66
|
+
//// Data signatures
|
|
67
|
+
/**
|
|
68
|
+
* Produces a signature over the sha256 of a specified data Buffer, only works with providers which
|
|
69
|
+
* expose their private key (i.e. backend based, not browser wallet based)
|
|
70
|
+
*
|
|
71
|
+
* @param signer
|
|
72
|
+
* @param data data to sign
|
|
73
|
+
*/
|
|
74
|
+
public getDataSignature(signer: StarknetSigner, data: Buffer): Promise<string> {
|
|
75
|
+
const buff = Buffer.from(sha256(data));
|
|
76
|
+
return this.signTypedMessage(signer, DataHash, 'DataHash', {"Data hash": cairo.uint256(toHex(buff))});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Checks whether a signature is a valid signature produced by the account over a data message (computes
|
|
81
|
+
* sha256 hash of the message)
|
|
82
|
+
*
|
|
83
|
+
* @param data signed data
|
|
84
|
+
* @param signature data signature
|
|
85
|
+
* @param address public key of the signer
|
|
86
|
+
*/
|
|
87
|
+
public isValidDataSignature(data: Buffer, signature: string, address: string): Promise<boolean> {
|
|
88
|
+
const buff = Buffer.from(sha256(data));
|
|
89
|
+
return this.isValidSignature(signature, address, DataHash, 'DataHash', {"Data hash": cairo.uint256(toHex(buff))});
|
|
90
|
+
}
|
|
91
|
+
|
|
91
92
|
}
|