@atomiqlabs/chain-starknet 4.0.0-dev.12 → 4.0.0-dev.13
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 +27 -27
- package/dist/starknet/StarknetInitializer.js +69 -69
- 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 -19
- 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 +20 -20
- package/dist/starknet/chain/modules/StarknetBlocks.js +64 -64
- 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 -77
- package/dist/starknet/chain/modules/StarknetFees.js +114 -114
- 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 -69
- package/dist/starknet/chain/modules/StarknetTokens.js +102 -98
- package/dist/starknet/chain/modules/StarknetTransactions.d.ts +93 -93
- package/dist/starknet/chain/modules/StarknetTransactions.js +261 -260
- package/dist/starknet/contract/StarknetContractBase.d.ts +13 -13
- package/dist/starknet/contract/StarknetContractBase.js +20 -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 +89 -90
- package/dist/starknet/events/StarknetChainEventsBrowser.js +296 -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 +66 -66
- package/dist/starknet/spv_swap/StarknetSpvVaultContract.js +382 -382
- package/dist/starknet/spv_swap/StarknetSpvVaultData.d.ts +49 -49
- package/dist/starknet/spv_swap/StarknetSpvVaultData.js +145 -145
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.d.ts +25 -25
- package/dist/starknet/spv_swap/StarknetSpvWithdrawalData.js +72 -72
- package/dist/starknet/swaps/EscrowManagerAbi.d.ts +431 -431
- package/dist/starknet/swaps/EscrowManagerAbi.js +583 -583
- package/dist/starknet/swaps/StarknetSwapContract.d.ts +191 -191
- package/dist/starknet/swaps/StarknetSwapContract.js +424 -424
- package/dist/starknet/swaps/StarknetSwapData.d.ts +74 -74
- package/dist/starknet/swaps/StarknetSwapData.js +325 -325
- 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 +94 -87
- package/dist/starknet/swaps/modules/StarknetSwapInit.js +235 -225
- 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 +35 -30
- package/dist/starknet/wallet/StarknetSigner.d.ts +12 -12
- package/dist/starknet/wallet/StarknetSigner.js +47 -46
- package/dist/utils/Utils.d.ts +37 -37
- package/dist/utils/Utils.js +260 -261
- package/package.json +43 -37
- package/src/index.ts +47 -47
- package/src/starknet/StarknetChainType.ts +28 -28
- package/src/starknet/StarknetInitializer.ts +108 -108
- package/src/starknet/btcrelay/BtcRelayAbi.ts +338 -338
- package/src/starknet/btcrelay/StarknetBtcRelay.ts +494 -494
- 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 -85
- 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 +75 -74
- package/src/starknet/chain/modules/StarknetEvents.ts +104 -104
- package/src/starknet/chain/modules/StarknetFees.ts +154 -154
- package/src/starknet/chain/modules/StarknetSignatures.ts +91 -91
- package/src/starknet/chain/modules/StarknetTokens.ts +120 -116
- package/src/starknet/chain/modules/StarknetTransactions.ts +285 -283
- package/src/starknet/contract/StarknetContractBase.ts +30 -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 +411 -411
- package/src/starknet/provider/RpcProviderWithRetries.ts +43 -43
- package/src/starknet/spv_swap/SpvVaultContractAbi.ts +656 -656
- package/src/starknet/spv_swap/StarknetSpvVaultContract.ts +483 -483
- package/src/starknet/spv_swap/StarknetSpvVaultData.ts +195 -195
- package/src/starknet/spv_swap/StarknetSpvWithdrawalData.ts +79 -79
- package/src/starknet/swaps/EscrowManagerAbi.ts +582 -582
- package/src/starknet/swaps/StarknetSwapContract.ts +647 -647
- package/src/starknet/swaps/StarknetSwapData.ts +455 -455
- 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 +300 -287
- package/src/starknet/swaps/modules/StarknetSwapRefund.ts +196 -196
- package/src/starknet/wallet/StarknetKeypairWallet.ts +44 -39
- package/src/starknet/wallet/StarknetSigner.ts +55 -55
- package/src/utils/Utils.ts +251 -252
package/dist/utils/Utils.d.ts
CHANGED
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import { BigNumberish, Uint256 } from "starknet";
|
|
2
|
-
import { StarknetTx } from "../starknet/chain/modules/StarknetTransactions";
|
|
3
|
-
import { Buffer } from "buffer";
|
|
4
|
-
import { StarknetSwapData } from "../starknet/swaps/StarknetSwapData";
|
|
5
|
-
import { IClaimHandler } from "../starknet/swaps/handlers/claim/ClaimHandlers";
|
|
6
|
-
export declare function isUint256(val: any): val is Uint256;
|
|
7
|
-
export declare function timeoutPromise(timeoutMillis: number, abortSignal?: AbortSignal): Promise<void>;
|
|
8
|
-
export declare function onceAsync<T>(executor: () => Promise<T>): () => Promise<T>;
|
|
9
|
-
export declare function getLogger(prefix: string): {
|
|
10
|
-
debug: (msg: any, ...args: any[]) => void;
|
|
11
|
-
info: (msg: any, ...args: any[]) => void;
|
|
12
|
-
warn: (msg: any, ...args: any[]) => void;
|
|
13
|
-
error: (msg: any, ...args: any[]) => void;
|
|
14
|
-
};
|
|
15
|
-
export declare function tryWithRetries<T>(func: () => Promise<T>, retryPolicy?: {
|
|
16
|
-
maxRetries?: number;
|
|
17
|
-
delay?: number;
|
|
18
|
-
exponential?: boolean;
|
|
19
|
-
}, errorAllowed?: (e: any) => boolean, abortSignal?: AbortSignal): Promise<T>;
|
|
20
|
-
export declare function toHex(value: number | bigint | string | Buffer, length?: number): string;
|
|
21
|
-
export declare function calculateHash(tx: StarknetTx): string;
|
|
22
|
-
export declare function u32ArrayToBuffer(arr: BigNumberish[]): Buffer;
|
|
23
|
-
export declare function bufferToU32Array(buffer: Buffer): number[];
|
|
24
|
-
export declare function u32ReverseEndianness(value: number): number;
|
|
25
|
-
export declare function bigNumberishToBuffer(value: BigNumberish | Uint256, length?: number): Buffer;
|
|
26
|
-
export declare function toBigInt(value: BigNumberish | Uint256): bigint;
|
|
27
|
-
export declare function bytes31SpanToBuffer(span: BigNumberish[], length: number): Buffer;
|
|
28
|
-
export declare function bufferToBytes31Span(buffer: Buffer, startIndex?: number, endIndex?: number): BigNumberish[];
|
|
29
|
-
export declare function bufferToByteArray(buffer: Buffer, startIndex?: number, endIndex?: number): BigNumberish[];
|
|
30
|
-
export declare function poseidonHashRange(buffer: Buffer, startIndex?: number, endIndex?: number): BigNumberish;
|
|
31
|
-
export declare function parseInitFunctionCalldata(calldata: BigNumberish[], claimHandler: IClaimHandler<any, any>): {
|
|
32
|
-
escrow: StarknetSwapData;
|
|
33
|
-
signature: BigNumberish[];
|
|
34
|
-
timeout: bigint;
|
|
35
|
-
extraData: BigNumberish[];
|
|
36
|
-
};
|
|
37
|
-
export declare function findLastIndex<T>(array: T[], callback: (value: T, index: number) => boolean): number;
|
|
1
|
+
import { BigNumberish, Uint256 } from "starknet";
|
|
2
|
+
import { StarknetTx } from "../starknet/chain/modules/StarknetTransactions";
|
|
3
|
+
import { Buffer } from "buffer";
|
|
4
|
+
import { StarknetSwapData } from "../starknet/swaps/StarknetSwapData";
|
|
5
|
+
import { IClaimHandler } from "../starknet/swaps/handlers/claim/ClaimHandlers";
|
|
6
|
+
export declare function isUint256(val: any): val is Uint256;
|
|
7
|
+
export declare function timeoutPromise(timeoutMillis: number, abortSignal?: AbortSignal): Promise<void>;
|
|
8
|
+
export declare function onceAsync<T>(executor: () => Promise<T>): () => Promise<T>;
|
|
9
|
+
export declare function getLogger(prefix: string): {
|
|
10
|
+
debug: (msg: any, ...args: any[]) => void;
|
|
11
|
+
info: (msg: any, ...args: any[]) => void;
|
|
12
|
+
warn: (msg: any, ...args: any[]) => void;
|
|
13
|
+
error: (msg: any, ...args: any[]) => void;
|
|
14
|
+
};
|
|
15
|
+
export declare function tryWithRetries<T>(func: () => Promise<T>, retryPolicy?: {
|
|
16
|
+
maxRetries?: number;
|
|
17
|
+
delay?: number;
|
|
18
|
+
exponential?: boolean;
|
|
19
|
+
}, errorAllowed?: (e: any) => boolean, abortSignal?: AbortSignal): Promise<T>;
|
|
20
|
+
export declare function toHex(value: number | bigint | string | Buffer, length?: number): string;
|
|
21
|
+
export declare function calculateHash(tx: StarknetTx): string;
|
|
22
|
+
export declare function u32ArrayToBuffer(arr: BigNumberish[]): Buffer;
|
|
23
|
+
export declare function bufferToU32Array(buffer: Buffer): number[];
|
|
24
|
+
export declare function u32ReverseEndianness(value: number): number;
|
|
25
|
+
export declare function bigNumberishToBuffer(value: BigNumberish | Uint256, length?: number): Buffer;
|
|
26
|
+
export declare function toBigInt(value: BigNumberish | Uint256): bigint;
|
|
27
|
+
export declare function bytes31SpanToBuffer(span: BigNumberish[], length: number): Buffer;
|
|
28
|
+
export declare function bufferToBytes31Span(buffer: Buffer, startIndex?: number, endIndex?: number): BigNumberish[];
|
|
29
|
+
export declare function bufferToByteArray(buffer: Buffer, startIndex?: number, endIndex?: number): BigNumberish[];
|
|
30
|
+
export declare function poseidonHashRange(buffer: Buffer, startIndex?: number, endIndex?: number): BigNumberish;
|
|
31
|
+
export declare function parseInitFunctionCalldata(calldata: BigNumberish[], claimHandler: IClaimHandler<any, any>): {
|
|
32
|
+
escrow: StarknetSwapData;
|
|
33
|
+
signature: BigNumberish[];
|
|
34
|
+
timeout: bigint;
|
|
35
|
+
extraData: BigNumberish[];
|
|
36
|
+
};
|
|
37
|
+
export declare function findLastIndex<T>(array: T[], callback: (value: T, index: number) => boolean): number;
|
package/dist/utils/Utils.js
CHANGED
|
@@ -1,261 +1,260 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.findLastIndex = exports.parseInitFunctionCalldata = exports.poseidonHashRange = exports.bufferToByteArray = exports.bufferToBytes31Span = exports.bytes31SpanToBuffer = exports.toBigInt = exports.bigNumberishToBuffer = exports.u32ReverseEndianness = exports.bufferToU32Array = exports.u32ArrayToBuffer = exports.calculateHash = exports.toHex = exports.tryWithRetries = exports.getLogger = exports.onceAsync = exports.timeoutPromise = exports.isUint256 = void 0;
|
|
4
|
-
const starknet_types_08_1 = require("@starknet-io/starknet-types-08");
|
|
5
|
-
const starknet_1 = require("starknet");
|
|
6
|
-
const buffer_1 = require("buffer");
|
|
7
|
-
const StarknetSwapData_1 = require("../starknet/swaps/StarknetSwapData");
|
|
8
|
-
function isUint256(val) {
|
|
9
|
-
return val.low != null && val.high != null;
|
|
10
|
-
}
|
|
11
|
-
exports.isUint256 = isUint256;
|
|
12
|
-
function timeoutPromise(timeoutMillis, abortSignal) {
|
|
13
|
-
return new Promise((resolve, reject) => {
|
|
14
|
-
const timeout = setTimeout(resolve, timeoutMillis);
|
|
15
|
-
if (abortSignal != null)
|
|
16
|
-
abortSignal.addEventListener("abort", () => {
|
|
17
|
-
clearTimeout(timeout);
|
|
18
|
-
reject(new Error("Aborted"));
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
exports.timeoutPromise = timeoutPromise;
|
|
23
|
-
function onceAsync(executor) {
|
|
24
|
-
let promise;
|
|
25
|
-
return () => {
|
|
26
|
-
if (promise == null) {
|
|
27
|
-
promise = executor();
|
|
28
|
-
return promise;
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
return promise.catch(() => promise = executor());
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
exports.onceAsync = onceAsync;
|
|
36
|
-
function getLogger(prefix) {
|
|
37
|
-
return {
|
|
38
|
-
// @ts-ignore
|
|
39
|
-
debug: (msg, ...args) => global.atomiqLogLevel >= 3 && console.debug(prefix + msg, ...args),
|
|
40
|
-
// @ts-ignore
|
|
41
|
-
info: (msg, ...args) => global.atomiqLogLevel >= 2 && console.info(prefix + msg, ...args),
|
|
42
|
-
// @ts-ignore
|
|
43
|
-
warn: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 1) && console.warn(prefix + msg, ...args),
|
|
44
|
-
// @ts-ignore
|
|
45
|
-
error: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 0) && console.error(prefix + msg, ...args)
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
exports.getLogger = getLogger;
|
|
49
|
-
const logger = getLogger("Utils: ");
|
|
50
|
-
async function tryWithRetries(func, retryPolicy, errorAllowed, abortSignal) {
|
|
51
|
-
retryPolicy = retryPolicy || {};
|
|
52
|
-
retryPolicy.maxRetries = retryPolicy.maxRetries || 5;
|
|
53
|
-
retryPolicy.delay = retryPolicy.delay || 500;
|
|
54
|
-
retryPolicy.exponential = retryPolicy.exponential == null ? true : retryPolicy.exponential;
|
|
55
|
-
let err = null;
|
|
56
|
-
for (let i = 0; i < retryPolicy.maxRetries; i++) {
|
|
57
|
-
try {
|
|
58
|
-
const resp = await func();
|
|
59
|
-
return resp;
|
|
60
|
-
}
|
|
61
|
-
catch (e) {
|
|
62
|
-
if (errorAllowed != null && errorAllowed(e))
|
|
63
|
-
throw e;
|
|
64
|
-
err = e;
|
|
65
|
-
logger.error("tryWithRetries(): error on try number: " + i, e);
|
|
66
|
-
}
|
|
67
|
-
if (abortSignal != null && abortSignal.aborted)
|
|
68
|
-
throw new Error("Aborted");
|
|
69
|
-
if (i !== retryPolicy.maxRetries - 1) {
|
|
70
|
-
await timeoutPromise(retryPolicy.exponential ? retryPolicy.delay * Math.pow(2, i) : retryPolicy.delay, abortSignal);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
throw err;
|
|
74
|
-
}
|
|
75
|
-
exports.tryWithRetries = tryWithRetries;
|
|
76
|
-
function toHex(value, length = 64) {
|
|
77
|
-
if (value == null)
|
|
78
|
-
return null;
|
|
79
|
-
switch (typeof (value)) {
|
|
80
|
-
case "string":
|
|
81
|
-
if (value.startsWith("0x")) {
|
|
82
|
-
return "0x" + value.slice(2).padStart(length, "0").toLowerCase();
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
return "0x" + BigInt(value).toString(16).padStart(length, "0");
|
|
86
|
-
}
|
|
87
|
-
case "number":
|
|
88
|
-
case "bigint":
|
|
89
|
-
return "0x" + value.toString(16).padStart(length, "0");
|
|
90
|
-
}
|
|
91
|
-
return "0x" + value.toString("hex").padStart(length, "0");
|
|
92
|
-
}
|
|
93
|
-
exports.toHex = toHex;
|
|
94
|
-
function calculateHash(tx) {
|
|
95
|
-
const commonData = {
|
|
96
|
-
version: tx.details.version,
|
|
97
|
-
maxFee: tx.details.maxFee,
|
|
98
|
-
chainId: tx.details.chainId,
|
|
99
|
-
nonce: tx.details.nonce,
|
|
100
|
-
accountDeploymentData: tx.details.version === "0x3" ? tx.details.accountDeploymentData : null,
|
|
101
|
-
nonceDataAvailabilityMode: tx.details.version === "0x3" ? starknet_types_08_1.EDAMode[tx.details.nonceDataAvailabilityMode] : null,
|
|
102
|
-
feeDataAvailabilityMode: tx.details.version === "0x3" ? starknet_types_08_1.EDAMode[tx.details.feeDataAvailabilityMode] : null,
|
|
103
|
-
resourceBounds: tx.details.version === "0x3" ? tx.details.resourceBounds : null,
|
|
104
|
-
tip: tx.details.version === "0x3" ? tx.details.tip : null,
|
|
105
|
-
paymasterData: tx.details.version === "0x3" ? tx.details.paymasterData : null
|
|
106
|
-
};
|
|
107
|
-
switch (tx.type) {
|
|
108
|
-
case "INVOKE":
|
|
109
|
-
const invokeData = starknet_1.CallData.compile(tx.signed.calldata);
|
|
110
|
-
return tx.txId = starknet_1.hash.calculateInvokeTransactionHash({
|
|
111
|
-
senderAddress: tx.details.walletAddress,
|
|
112
|
-
compiledCalldata: invokeData,
|
|
113
|
-
...commonData
|
|
114
|
-
});
|
|
115
|
-
case "DEPLOY_ACCOUNT":
|
|
116
|
-
const deployAccountData = starknet_1.CallData.compile(tx.signed.constructorCalldata);
|
|
117
|
-
return tx.txId = starknet_1.hash.calculateDeployAccountTransactionHash({
|
|
118
|
-
contractAddress: tx.tx.contractAddress,
|
|
119
|
-
classHash: tx.signed.classHash,
|
|
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
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
((valueBN
|
|
150
|
-
((valueBN >>
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
const
|
|
196
|
-
const
|
|
197
|
-
const
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
let
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
const
|
|
244
|
-
const
|
|
245
|
-
const
|
|
246
|
-
const
|
|
247
|
-
const
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
exports.findLastIndex = findLastIndex;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findLastIndex = exports.parseInitFunctionCalldata = exports.poseidonHashRange = exports.bufferToByteArray = exports.bufferToBytes31Span = exports.bytes31SpanToBuffer = exports.toBigInt = exports.bigNumberishToBuffer = exports.u32ReverseEndianness = exports.bufferToU32Array = exports.u32ArrayToBuffer = exports.calculateHash = exports.toHex = exports.tryWithRetries = exports.getLogger = exports.onceAsync = exports.timeoutPromise = exports.isUint256 = void 0;
|
|
4
|
+
const starknet_types_08_1 = require("@starknet-io/starknet-types-08");
|
|
5
|
+
const starknet_1 = require("starknet");
|
|
6
|
+
const buffer_1 = require("buffer");
|
|
7
|
+
const StarknetSwapData_1 = require("../starknet/swaps/StarknetSwapData");
|
|
8
|
+
function isUint256(val) {
|
|
9
|
+
return val.low != null && val.high != null;
|
|
10
|
+
}
|
|
11
|
+
exports.isUint256 = isUint256;
|
|
12
|
+
function timeoutPromise(timeoutMillis, abortSignal) {
|
|
13
|
+
return new Promise((resolve, reject) => {
|
|
14
|
+
const timeout = setTimeout(resolve, timeoutMillis);
|
|
15
|
+
if (abortSignal != null)
|
|
16
|
+
abortSignal.addEventListener("abort", () => {
|
|
17
|
+
clearTimeout(timeout);
|
|
18
|
+
reject(new Error("Aborted"));
|
|
19
|
+
});
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
exports.timeoutPromise = timeoutPromise;
|
|
23
|
+
function onceAsync(executor) {
|
|
24
|
+
let promise;
|
|
25
|
+
return () => {
|
|
26
|
+
if (promise == null) {
|
|
27
|
+
promise = executor();
|
|
28
|
+
return promise;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return promise.catch(() => promise = executor());
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
exports.onceAsync = onceAsync;
|
|
36
|
+
function getLogger(prefix) {
|
|
37
|
+
return {
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
debug: (msg, ...args) => global.atomiqLogLevel >= 3 && console.debug(prefix + msg, ...args),
|
|
40
|
+
// @ts-ignore
|
|
41
|
+
info: (msg, ...args) => global.atomiqLogLevel >= 2 && console.info(prefix + msg, ...args),
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
warn: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 1) && console.warn(prefix + msg, ...args),
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
error: (msg, ...args) => (global.atomiqLogLevel == null || global.atomiqLogLevel >= 0) && console.error(prefix + msg, ...args)
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
exports.getLogger = getLogger;
|
|
49
|
+
const logger = getLogger("Utils: ");
|
|
50
|
+
async function tryWithRetries(func, retryPolicy, errorAllowed, abortSignal) {
|
|
51
|
+
retryPolicy = retryPolicy || {};
|
|
52
|
+
retryPolicy.maxRetries = retryPolicy.maxRetries || 5;
|
|
53
|
+
retryPolicy.delay = retryPolicy.delay || 500;
|
|
54
|
+
retryPolicy.exponential = retryPolicy.exponential == null ? true : retryPolicy.exponential;
|
|
55
|
+
let err = null;
|
|
56
|
+
for (let i = 0; i < retryPolicy.maxRetries; i++) {
|
|
57
|
+
try {
|
|
58
|
+
const resp = await func();
|
|
59
|
+
return resp;
|
|
60
|
+
}
|
|
61
|
+
catch (e) {
|
|
62
|
+
if (errorAllowed != null && errorAllowed(e))
|
|
63
|
+
throw e;
|
|
64
|
+
err = e;
|
|
65
|
+
logger.error("tryWithRetries(): error on try number: " + i, e);
|
|
66
|
+
}
|
|
67
|
+
if (abortSignal != null && abortSignal.aborted)
|
|
68
|
+
throw new Error("Aborted");
|
|
69
|
+
if (i !== retryPolicy.maxRetries - 1) {
|
|
70
|
+
await timeoutPromise(retryPolicy.exponential ? retryPolicy.delay * Math.pow(2, i) : retryPolicy.delay, abortSignal);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
throw err;
|
|
74
|
+
}
|
|
75
|
+
exports.tryWithRetries = tryWithRetries;
|
|
76
|
+
function toHex(value, length = 64) {
|
|
77
|
+
if (value == null)
|
|
78
|
+
return null;
|
|
79
|
+
switch (typeof (value)) {
|
|
80
|
+
case "string":
|
|
81
|
+
if (value.startsWith("0x")) {
|
|
82
|
+
return "0x" + value.slice(2).padStart(length, "0").toLowerCase();
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
return "0x" + BigInt(value).toString(16).padStart(length, "0");
|
|
86
|
+
}
|
|
87
|
+
case "number":
|
|
88
|
+
case "bigint":
|
|
89
|
+
return "0x" + value.toString(16).padStart(length, "0");
|
|
90
|
+
}
|
|
91
|
+
return "0x" + value.toString("hex").padStart(length, "0");
|
|
92
|
+
}
|
|
93
|
+
exports.toHex = toHex;
|
|
94
|
+
function calculateHash(tx) {
|
|
95
|
+
const commonData = {
|
|
96
|
+
version: tx.details.version,
|
|
97
|
+
maxFee: tx.details.maxFee,
|
|
98
|
+
chainId: tx.details.chainId,
|
|
99
|
+
nonce: tx.details.nonce,
|
|
100
|
+
accountDeploymentData: tx.details.version === "0x3" ? tx.details.accountDeploymentData : null,
|
|
101
|
+
nonceDataAvailabilityMode: tx.details.version === "0x3" ? starknet_types_08_1.EDAMode[tx.details.nonceDataAvailabilityMode] : null,
|
|
102
|
+
feeDataAvailabilityMode: tx.details.version === "0x3" ? starknet_types_08_1.EDAMode[tx.details.feeDataAvailabilityMode] : null,
|
|
103
|
+
resourceBounds: tx.details.version === "0x3" ? tx.details.resourceBounds : null,
|
|
104
|
+
tip: tx.details.version === "0x3" ? tx.details.tip : null,
|
|
105
|
+
paymasterData: tx.details.version === "0x3" ? tx.details.paymasterData : null
|
|
106
|
+
};
|
|
107
|
+
switch (tx.type) {
|
|
108
|
+
case "INVOKE":
|
|
109
|
+
const invokeData = starknet_1.CallData.compile(tx.signed.calldata);
|
|
110
|
+
return tx.txId = starknet_1.hash.calculateInvokeTransactionHash({
|
|
111
|
+
senderAddress: tx.details.walletAddress,
|
|
112
|
+
compiledCalldata: invokeData,
|
|
113
|
+
...commonData
|
|
114
|
+
});
|
|
115
|
+
case "DEPLOY_ACCOUNT":
|
|
116
|
+
const deployAccountData = starknet_1.CallData.compile(tx.signed.constructorCalldata);
|
|
117
|
+
return tx.txId = starknet_1.hash.calculateDeployAccountTransactionHash({
|
|
118
|
+
contractAddress: tx.tx.contractAddress,
|
|
119
|
+
classHash: tx.signed.classHash,
|
|
120
|
+
compiledConstructorCalldata: deployAccountData,
|
|
121
|
+
salt: tx.signed.addressSalt,
|
|
122
|
+
...commonData
|
|
123
|
+
});
|
|
124
|
+
default:
|
|
125
|
+
throw new Error("Unsupported tx type!");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.calculateHash = calculateHash;
|
|
129
|
+
function u32ArrayToBuffer(arr) {
|
|
130
|
+
const buffer = buffer_1.Buffer.alloc(4 * arr.length);
|
|
131
|
+
for (let i = 0; i < arr.length; i++) {
|
|
132
|
+
buffer.writeUInt32BE(Number(arr[i]), i * 4);
|
|
133
|
+
}
|
|
134
|
+
return buffer;
|
|
135
|
+
}
|
|
136
|
+
exports.u32ArrayToBuffer = u32ArrayToBuffer;
|
|
137
|
+
function bufferToU32Array(buffer) {
|
|
138
|
+
const result = [];
|
|
139
|
+
for (let i = 0; i < buffer.length; i += 4) {
|
|
140
|
+
result.push(buffer.readUInt32BE(i));
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
exports.bufferToU32Array = bufferToU32Array;
|
|
145
|
+
function u32ReverseEndianness(value) {
|
|
146
|
+
const valueBN = BigInt(value);
|
|
147
|
+
return Number(((valueBN & 0xffn) << 24n) |
|
|
148
|
+
((valueBN & 0xff00n) << 8n) |
|
|
149
|
+
((valueBN >> 8n) & 0xff00n) |
|
|
150
|
+
((valueBN >> 24n) & 0xffn));
|
|
151
|
+
}
|
|
152
|
+
exports.u32ReverseEndianness = u32ReverseEndianness;
|
|
153
|
+
function bigNumberishToBuffer(value, length) {
|
|
154
|
+
if (isUint256(value)) {
|
|
155
|
+
return buffer_1.Buffer.concat([bigNumberishToBuffer(value.high, 16), bigNumberishToBuffer(value.low, 16)]);
|
|
156
|
+
}
|
|
157
|
+
if (typeof (value) === "string") {
|
|
158
|
+
if (value.startsWith("0x")) {
|
|
159
|
+
value = value.slice(2);
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
value = BigInt(value).toString(16);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
value = value.toString(16);
|
|
167
|
+
}
|
|
168
|
+
if (length != null)
|
|
169
|
+
value = value.padStart(length * 2, "0");
|
|
170
|
+
const buff = buffer_1.Buffer.from(value, "hex");
|
|
171
|
+
if (buff.length > length)
|
|
172
|
+
return buff.slice(buff.length - length);
|
|
173
|
+
return buff;
|
|
174
|
+
}
|
|
175
|
+
exports.bigNumberishToBuffer = bigNumberishToBuffer;
|
|
176
|
+
function toBigInt(value) {
|
|
177
|
+
if (value == null)
|
|
178
|
+
return null;
|
|
179
|
+
if (isUint256(value)) {
|
|
180
|
+
return (toBigInt(value.high) << 128n) | toBigInt(value.low);
|
|
181
|
+
}
|
|
182
|
+
if (typeof (value) === "string") {
|
|
183
|
+
if (!value.startsWith("0x"))
|
|
184
|
+
value = "0x" + value;
|
|
185
|
+
return BigInt(value);
|
|
186
|
+
}
|
|
187
|
+
if (typeof (value) === "bigint") {
|
|
188
|
+
return value;
|
|
189
|
+
}
|
|
190
|
+
return BigInt(value);
|
|
191
|
+
}
|
|
192
|
+
exports.toBigInt = toBigInt;
|
|
193
|
+
function bytes31SpanToBuffer(span, length) {
|
|
194
|
+
const buffers = [];
|
|
195
|
+
const numFullBytes31 = Math.floor(length / 31);
|
|
196
|
+
const additionalBytes = length - (numFullBytes31 * 31);
|
|
197
|
+
const requiredSpanLength = numFullBytes31 + (additionalBytes === 0 ? 0 : 1);
|
|
198
|
+
if (span.length < requiredSpanLength)
|
|
199
|
+
throw new Error("Not enough bytes in the felt array!");
|
|
200
|
+
let i = 0;
|
|
201
|
+
for (; i < numFullBytes31; i++) {
|
|
202
|
+
buffers.push(bigNumberishToBuffer(span[i], 31));
|
|
203
|
+
}
|
|
204
|
+
if (additionalBytes !== 0)
|
|
205
|
+
buffers.push(bigNumberishToBuffer(span[i], additionalBytes));
|
|
206
|
+
return buffer_1.Buffer.concat(buffers);
|
|
207
|
+
}
|
|
208
|
+
exports.bytes31SpanToBuffer = bytes31SpanToBuffer;
|
|
209
|
+
function bufferToBytes31Span(buffer, startIndex = 0, endIndex = buffer.length) {
|
|
210
|
+
const values = [];
|
|
211
|
+
for (let i = startIndex + 31; i < endIndex; i += 31) {
|
|
212
|
+
values.push(BigInt("0x" + buffer.slice(i - 31, i).toString("hex")));
|
|
213
|
+
}
|
|
214
|
+
if (endIndex > startIndex + (values.length * 31))
|
|
215
|
+
values.push(BigInt("0x" + buffer.slice(startIndex + (values.length * 31), endIndex).toString("hex")));
|
|
216
|
+
return values;
|
|
217
|
+
}
|
|
218
|
+
exports.bufferToBytes31Span = bufferToBytes31Span;
|
|
219
|
+
function bufferToByteArray(buffer, startIndex = 0, endIndex = buffer.length) {
|
|
220
|
+
const values = [];
|
|
221
|
+
for (let i = startIndex + 31; i < endIndex; i += 31) {
|
|
222
|
+
values.push(BigInt("0x" + buffer.slice(i - 31, i).toString("hex")));
|
|
223
|
+
}
|
|
224
|
+
let pendingWord = BigInt(0);
|
|
225
|
+
let pendingWordLen = BigInt(endIndex - (startIndex + (values.length * 31)));
|
|
226
|
+
if (pendingWordLen !== BigInt(0)) {
|
|
227
|
+
pendingWord = BigInt("0x" + buffer.slice(startIndex + (values.length * 31), endIndex).toString("hex"));
|
|
228
|
+
}
|
|
229
|
+
return [
|
|
230
|
+
BigInt(values.length),
|
|
231
|
+
...values,
|
|
232
|
+
pendingWord,
|
|
233
|
+
pendingWordLen
|
|
234
|
+
];
|
|
235
|
+
}
|
|
236
|
+
exports.bufferToByteArray = bufferToByteArray;
|
|
237
|
+
function poseidonHashRange(buffer, startIndex = 0, endIndex = buffer.length) {
|
|
238
|
+
return starknet_1.hash.computePoseidonHashOnElements(bufferToBytes31Span(buffer, startIndex, endIndex));
|
|
239
|
+
}
|
|
240
|
+
exports.poseidonHashRange = poseidonHashRange;
|
|
241
|
+
function parseInitFunctionCalldata(calldata, claimHandler) {
|
|
242
|
+
const escrow = StarknetSwapData_1.StarknetSwapData.fromSerializedFeltArray(calldata, claimHandler);
|
|
243
|
+
const signatureLen = Number(toBigInt(calldata.shift()));
|
|
244
|
+
const signature = calldata.splice(0, signatureLen);
|
|
245
|
+
const timeout = toBigInt(calldata.shift());
|
|
246
|
+
const extraDataLen = Number(toBigInt(calldata.shift()));
|
|
247
|
+
const extraData = calldata.splice(0, extraDataLen);
|
|
248
|
+
if (calldata.length !== 0)
|
|
249
|
+
throw new Error("Calldata not read fully!");
|
|
250
|
+
return { escrow, signature, timeout, extraData };
|
|
251
|
+
}
|
|
252
|
+
exports.parseInitFunctionCalldata = parseInitFunctionCalldata;
|
|
253
|
+
function findLastIndex(array, callback) {
|
|
254
|
+
for (let i = array.length - 1; i >= 0; i--) {
|
|
255
|
+
if (callback(array[i], i))
|
|
256
|
+
return i;
|
|
257
|
+
}
|
|
258
|
+
return -1;
|
|
259
|
+
}
|
|
260
|
+
exports.findLastIndex = findLastIndex;
|