@bitgo/sdk-coin-starknet 0.0.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/LICENSE +191 -0
  2. package/dist/src/index.d.ts +4 -0
  3. package/dist/src/index.d.ts.map +1 -0
  4. package/dist/src/index.js +20 -0
  5. package/dist/src/lib/constants.d.ts +13 -0
  6. package/dist/src/lib/constants.d.ts.map +1 -0
  7. package/dist/src/lib/constants.js +25 -0
  8. package/dist/src/lib/iface.d.ts +78 -0
  9. package/dist/src/lib/iface.d.ts.map +1 -0
  10. package/dist/src/lib/iface.js +9 -0
  11. package/dist/src/lib/index.d.ts +9 -0
  12. package/dist/src/lib/index.d.ts.map +1 -0
  13. package/dist/src/lib/index.js +53 -0
  14. package/dist/src/lib/keyPair.d.ts +9 -0
  15. package/dist/src/lib/keyPair.d.ts.map +1 -0
  16. package/dist/src/lib/keyPair.js +48 -0
  17. package/dist/src/lib/transaction.d.ts +23 -0
  18. package/dist/src/lib/transaction.d.ts.map +1 -0
  19. package/dist/src/lib/transaction.js +145 -0
  20. package/dist/src/lib/transactionBuilder.d.ts +43 -0
  21. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  22. package/dist/src/lib/transactionBuilder.js +158 -0
  23. package/dist/src/lib/transactionBuilderFactory.d.ts +16 -0
  24. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  25. package/dist/src/lib/transactionBuilderFactory.js +44 -0
  26. package/dist/src/lib/transferBuilder.d.ts +21 -0
  27. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  28. package/dist/src/lib/transferBuilder.js +88 -0
  29. package/dist/src/lib/utils.d.ts +104 -0
  30. package/dist/src/lib/utils.d.ts.map +1 -0
  31. package/dist/src/lib/utils.js +290 -0
  32. package/dist/src/register.d.ts +3 -0
  33. package/dist/src/register.d.ts.map +1 -0
  34. package/dist/src/register.js +10 -0
  35. package/dist/src/starknet.d.ts +35 -0
  36. package/dist/src/starknet.d.ts.map +1 -0
  37. package/dist/src/starknet.js +127 -0
  38. package/dist/test/resources/starknet.d.ts +98 -0
  39. package/dist/test/resources/starknet.d.ts.map +1 -0
  40. package/dist/test/resources/starknet.js +104 -0
  41. package/dist/test/unit/keyPair.d.ts +2 -0
  42. package/dist/test/unit/keyPair.d.ts.map +1 -0
  43. package/dist/test/unit/keyPair.js +56 -0
  44. package/dist/test/unit/starknet.d.ts +2 -0
  45. package/dist/test/unit/starknet.d.ts.map +1 -0
  46. package/dist/test/unit/starknet.js +126 -0
  47. package/dist/test/unit/transaction.d.ts +2 -0
  48. package/dist/test/unit/transaction.d.ts.map +1 -0
  49. package/dist/test/unit/transaction.js +53 -0
  50. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts +2 -0
  51. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.d.ts.map +1 -0
  52. package/dist/test/unit/transactionBuilder/transactionBuilderFactory.js +74 -0
  53. package/dist/test/unit/transferBuilder.d.ts +2 -0
  54. package/dist/test/unit/transferBuilder.d.ts.map +1 -0
  55. package/dist/test/unit/transferBuilder.js +208 -0
  56. package/dist/test/unit/utils.d.ts +2 -0
  57. package/dist/test/unit/utils.d.ts.map +1 -0
  58. package/dist/test/unit/utils.js +260 -0
  59. package/dist/tsconfig.tsbuildinfo +1 -0
  60. package/package.json +52 -10
@@ -0,0 +1,104 @@
1
+ import { StarknetTransactionData, StarknetCall, ParsedTransferData, InvokeTransactionHashParams } from './iface';
2
+ /**
3
+ * Normalize a Starknet address to canonical form: 0x + 64 hex chars, zero-padded.
4
+ */
5
+ export declare function normalizeAddress(address: string): string;
6
+ /**
7
+ * Starknet addresses are felt252 values represented as 0x-prefixed hex.
8
+ * Valid range: 0 < address < FELT_MAX, with 0x prefix and hex chars.
9
+ */
10
+ export declare function isValidAddress(address: string): boolean;
11
+ /**
12
+ * Validate a secp256k1 public key (compressed 33 bytes or uncompressed 65 bytes).
13
+ */
14
+ export declare function isValidPublicKey(key: string): boolean;
15
+ /**
16
+ * Validate a secp256k1 private key (32 bytes hex).
17
+ */
18
+ export declare function isValidPrivateKey(key: string): boolean;
19
+ /**
20
+ * Get uncompressed public key (x || y, 128 hex chars, no 04 prefix).
21
+ */
22
+ export declare function getUncompressedPublicKey(compressedHex: string): string;
23
+ /**
24
+ * Compile EthAccount constructor calldata from full secp256k1 public key.
25
+ * Returns [x_low, x_high, y_low, y_high] as felt252 strings.
26
+ */
27
+ export declare function compileEthAccountConstructorCalldata(fullPublicKey: string): string[];
28
+ /**
29
+ * Compute Starknet contract address from hash components.
30
+ * Replicates starknet.js calculateContractAddressFromHash using @scure/starknet pedersen.
31
+ */
32
+ export declare function calculateContractAddressFromHash(salt: string, classHash: string, constructorCalldata: string[], deployerAddress: number | bigint): string;
33
+ /**
34
+ * Compute Starknet EthAccount counterfactual address from public key.
35
+ */
36
+ export declare function computeStarknetAddress(fullPublicKey: string): {
37
+ address: string;
38
+ constructorCalldata: string[];
39
+ salt: string;
40
+ };
41
+ /**
42
+ * Derive Starknet EthAccount address from compressed secp256k1 public key.
43
+ */
44
+ export declare function getAddressFromPublicKey(compressedPublicKey: string): string;
45
+ /**
46
+ * Format ECDSA signature for Starknet EthAccount.
47
+ * Returns [r_low, r_high, s_low, s_high, v].
48
+ */
49
+ export declare function formatEthAccountSignature(r: string, s: string, recid: number): string[];
50
+ /**
51
+ * Extract recipient, amount, and token contract from a transfer call.
52
+ * Reverse of TransferBuilder.compileTransferCalldata: calldata = [recipient, amount_low, amount_high].
53
+ */
54
+ export declare function parseTransferCall(call: StarknetCall): ParsedTransferData | undefined;
55
+ /**
56
+ * Generate a new secp256k1 key pair.
57
+ */
58
+ export declare function generateKeyPair(seed?: Buffer): {
59
+ pub: string;
60
+ prv: string;
61
+ };
62
+ /**
63
+ * Validate raw transaction data has required fields.
64
+ */
65
+ export declare function validateRawTransaction(tx: StarknetTransactionData): void;
66
+ /**
67
+ * Encode an ASCII string (max 31 chars) as a felt252.
68
+ */
69
+ export declare function encodeShortString(str: string): bigint;
70
+ /**
71
+ * Compute the Starknet function selector: keccak256(name) masked to 250 bits.
72
+ * @scure/starknet's keccak() already applies the 250-bit mask.
73
+ */
74
+ export declare function getSelectorFromName(name: string): bigint;
75
+ /**
76
+ * Compile calls into the Cairo 1 multicall __execute__ calldata format.
77
+ * Format: [num_calls, to_0, selector_0, data_len_0, ...data_0, to_1, ...]
78
+ */
79
+ export declare function compileExecuteCalldata(calls: StarknetCall[]): string[];
80
+ /**
81
+ * Compute the Poseidon V3 INVOKE transaction hash per SNIP-8.
82
+ */
83
+ export declare function calculateInvokeTransactionHash(params: InvokeTransactionHashParams): string;
84
+ declare const _default: {
85
+ isValidAddress: typeof isValidAddress;
86
+ isValidPublicKey: typeof isValidPublicKey;
87
+ isValidPrivateKey: typeof isValidPrivateKey;
88
+ getUncompressedPublicKey: typeof getUncompressedPublicKey;
89
+ compileEthAccountConstructorCalldata: typeof compileEthAccountConstructorCalldata;
90
+ calculateContractAddressFromHash: typeof calculateContractAddressFromHash;
91
+ computeStarknetAddress: typeof computeStarknetAddress;
92
+ getAddressFromPublicKey: typeof getAddressFromPublicKey;
93
+ normalizeAddress: typeof normalizeAddress;
94
+ formatEthAccountSignature: typeof formatEthAccountSignature;
95
+ parseTransferCall: typeof parseTransferCall;
96
+ generateKeyPair: typeof generateKeyPair;
97
+ validateRawTransaction: typeof validateRawTransaction;
98
+ encodeShortString: typeof encodeShortString;
99
+ getSelectorFromName: typeof getSelectorFromName;
100
+ compileExecuteCalldata: typeof compileExecuteCalldata;
101
+ calculateInvokeTransactionHash: typeof calculateInvokeTransactionHash;
102
+ };
103
+ export default _default;
104
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAGjH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CASvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAgBrD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAatE;AAED;;;GAGG;AACH,wBAAgB,oCAAoC,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpF;AAED;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,EAAE,EAC7B,eAAe,EAAE,MAAM,GAAG,MAAM,GAC/B,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd,CASA;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,mBAAmB,EAAE,MAAM,GAAG,MAAM,CAI3E;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAYvF;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,kBAAkB,GAAG,SAAS,CAYpF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAQ3E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,uBAAuB,GAAG,IAAI,CAOxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAerD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAUtE;AAMD;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,2BAA2B,GAAG,MAAM,CA+C1F;;;;;;;;;;;;;;;;;;;;AAED,wBAkBE"}
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeAddress = normalizeAddress;
4
+ exports.isValidAddress = isValidAddress;
5
+ exports.isValidPublicKey = isValidPublicKey;
6
+ exports.isValidPrivateKey = isValidPrivateKey;
7
+ exports.getUncompressedPublicKey = getUncompressedPublicKey;
8
+ exports.compileEthAccountConstructorCalldata = compileEthAccountConstructorCalldata;
9
+ exports.calculateContractAddressFromHash = calculateContractAddressFromHash;
10
+ exports.computeStarknetAddress = computeStarknetAddress;
11
+ exports.getAddressFromPublicKey = getAddressFromPublicKey;
12
+ exports.formatEthAccountSignature = formatEthAccountSignature;
13
+ exports.parseTransferCall = parseTransferCall;
14
+ exports.generateKeyPair = generateKeyPair;
15
+ exports.validateRawTransaction = validateRawTransaction;
16
+ exports.encodeShortString = encodeShortString;
17
+ exports.getSelectorFromName = getSelectorFromName;
18
+ exports.compileExecuteCalldata = compileExecuteCalldata;
19
+ exports.calculateInvokeTransactionHash = calculateInvokeTransactionHash;
20
+ const starknet_1 = require("@scure/starknet");
21
+ const constants_1 = require("./constants");
22
+ const secp256k1_1 = require("@bitgo/secp256k1");
23
+ /**
24
+ * Normalize a Starknet address to canonical form: 0x + 64 hex chars, zero-padded.
25
+ */
26
+ function normalizeAddress(address) {
27
+ const hex = address.startsWith('0x') ? address.slice(2) : address;
28
+ return '0x' + hex.padStart(64, '0').toLowerCase();
29
+ }
30
+ /**
31
+ * Starknet addresses are felt252 values represented as 0x-prefixed hex.
32
+ * Valid range: 0 < address < FELT_MAX, with 0x prefix and hex chars.
33
+ */
34
+ function isValidAddress(address) {
35
+ if (typeof address !== 'string')
36
+ return false;
37
+ if (!address.match(/^0x[0-9a-fA-F]{1,64}$/))
38
+ return false;
39
+ try {
40
+ const val = BigInt(address);
41
+ return val > 0n && val < constants_1.FELT_MAX;
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ /**
48
+ * Validate a secp256k1 public key (compressed 33 bytes or uncompressed 65 bytes).
49
+ */
50
+ function isValidPublicKey(key) {
51
+ if (typeof key !== 'string')
52
+ return false;
53
+ try {
54
+ const buf = Buffer.from(key, 'hex');
55
+ if (buf.length === 33 && (buf[0] === 0x02 || buf[0] === 0x03)) {
56
+ secp256k1_1.ecc.pointCompress(buf, true);
57
+ return true;
58
+ }
59
+ if (buf.length === 65 && buf[0] === 0x04) {
60
+ secp256k1_1.ecc.pointCompress(buf, true);
61
+ return true;
62
+ }
63
+ return false;
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ /**
70
+ * Validate a secp256k1 private key (32 bytes hex).
71
+ */
72
+ function isValidPrivateKey(key) {
73
+ if (typeof key !== 'string')
74
+ return false;
75
+ return /^[0-9a-fA-F]{64}$/.test(key);
76
+ }
77
+ /**
78
+ * Get uncompressed public key (x || y, 128 hex chars, no 04 prefix).
79
+ */
80
+ function getUncompressedPublicKey(compressedHex) {
81
+ const buf = Buffer.from(compressedHex, 'hex');
82
+ if (buf.length === 65 && buf[0] === 0x04) {
83
+ return compressedHex.slice(2);
84
+ }
85
+ if (buf.length === 33 && (buf[0] === 0x02 || buf[0] === 0x03)) {
86
+ const uncompressed = Buffer.from(secp256k1_1.ecc.pointCompress(buf, false));
87
+ return uncompressed.toString('hex').slice(2);
88
+ }
89
+ if (buf.length === 64) {
90
+ return compressedHex;
91
+ }
92
+ throw new Error(`Invalid public key format: ${compressedHex.substring(0, 10)}...`);
93
+ }
94
+ /**
95
+ * Compile EthAccount constructor calldata from full secp256k1 public key.
96
+ * Returns [x_low, x_high, y_low, y_high] as felt252 strings.
97
+ */
98
+ function compileEthAccountConstructorCalldata(fullPublicKey) {
99
+ const pubX = BigInt('0x' + fullPublicKey.slice(0, 64));
100
+ const pubY = BigInt('0x' + fullPublicKey.slice(64));
101
+ return [
102
+ '0x' + (pubX & constants_1.MASK_128).toString(16),
103
+ '0x' + (pubX >> 128n).toString(16),
104
+ '0x' + (pubY & constants_1.MASK_128).toString(16),
105
+ '0x' + (pubY >> 128n).toString(16),
106
+ ];
107
+ }
108
+ /**
109
+ * Compute Starknet contract address from hash components.
110
+ * Replicates starknet.js calculateContractAddressFromHash using @scure/starknet pedersen.
111
+ */
112
+ function calculateContractAddressFromHash(salt, classHash, constructorCalldata, deployerAddress) {
113
+ const calldataHash = (0, starknet_1.computeHashOnElements)(constructorCalldata.map(BigInt));
114
+ const rawHash = (0, starknet_1.computeHashOnElements)([
115
+ constants_1.CONTRACT_ADDRESS_PREFIX,
116
+ BigInt(deployerAddress),
117
+ BigInt(salt),
118
+ BigInt(classHash),
119
+ BigInt(calldataHash),
120
+ ]);
121
+ return normalizeAddress('0x' + (BigInt(rawHash) % constants_1.ADDR_BOUND).toString(16));
122
+ }
123
+ /**
124
+ * Compute Starknet EthAccount counterfactual address from public key.
125
+ */
126
+ function computeStarknetAddress(fullPublicKey) {
127
+ const constructorCalldata = compileEthAccountConstructorCalldata(fullPublicKey);
128
+ const pubX = BigInt('0x' + fullPublicKey.slice(0, 64));
129
+ const salt = '0x' + (pubX % constants_1.FELT_MAX).toString(16);
130
+ const address = calculateContractAddressFromHash(salt, constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, constructorCalldata, 0);
131
+ return { address, constructorCalldata, salt };
132
+ }
133
+ /**
134
+ * Derive Starknet EthAccount address from compressed secp256k1 public key.
135
+ */
136
+ function getAddressFromPublicKey(compressedPublicKey) {
137
+ const fullPublicKey = getUncompressedPublicKey(compressedPublicKey);
138
+ const { address } = computeStarknetAddress(fullPublicKey);
139
+ return address;
140
+ }
141
+ /**
142
+ * Format ECDSA signature for Starknet EthAccount.
143
+ * Returns [r_low, r_high, s_low, s_high, v].
144
+ */
145
+ function formatEthAccountSignature(r, s, recid) {
146
+ const rBig = BigInt('0x' + r);
147
+ const sBig = BigInt('0x' + s);
148
+ const v = BigInt(recid);
149
+ return [
150
+ '0x' + (rBig & constants_1.MASK_128).toString(16),
151
+ '0x' + (rBig >> 128n).toString(16),
152
+ '0x' + (sBig & constants_1.MASK_128).toString(16),
153
+ '0x' + (sBig >> 128n).toString(16),
154
+ '0x' + v.toString(16),
155
+ ];
156
+ }
157
+ /**
158
+ * Extract recipient, amount, and token contract from a transfer call.
159
+ * Reverse of TransferBuilder.compileTransferCalldata: calldata = [recipient, amount_low, amount_high].
160
+ */
161
+ function parseTransferCall(call) {
162
+ if (call.entrypoint !== 'transfer' || call.calldata.length < 3) {
163
+ return undefined;
164
+ }
165
+ const amountLow = BigInt(call.calldata[1]);
166
+ const amountHigh = BigInt(call.calldata[2]);
167
+ const amount = ((amountHigh << 128n) | amountLow).toString();
168
+ return {
169
+ recipient: call.calldata[0],
170
+ amount,
171
+ tokenContract: call.contractAddress,
172
+ };
173
+ }
174
+ /**
175
+ * Generate a new secp256k1 key pair.
176
+ */
177
+ function generateKeyPair(seed) {
178
+ const { KeyPair: StarknetKeyPair } = require('./keyPair');
179
+ const keyPair = seed ? new StarknetKeyPair({ seed }) : new StarknetKeyPair();
180
+ const { pub, prv } = keyPair.getKeys();
181
+ if (!prv) {
182
+ throw new Error('Private key is missing in the generated key pair.');
183
+ }
184
+ return { pub, prv };
185
+ }
186
+ /**
187
+ * Validate raw transaction data has required fields.
188
+ */
189
+ function validateRawTransaction(tx) {
190
+ if (!tx.senderAddress) {
191
+ throw new Error('Missing sender address');
192
+ }
193
+ if (!isValidAddress(tx.senderAddress)) {
194
+ throw new Error(`Invalid sender address: ${tx.senderAddress}`);
195
+ }
196
+ }
197
+ /**
198
+ * Encode an ASCII string (max 31 chars) as a felt252.
199
+ */
200
+ function encodeShortString(str) {
201
+ if (str.length > 31) {
202
+ throw new Error(`Short string too long: ${str.length} > 31`);
203
+ }
204
+ for (let i = 0; i < str.length; i++) {
205
+ const code = str.charCodeAt(i);
206
+ if (code > 127) {
207
+ throw new Error(`Non-ASCII character at index ${i}: code ${code}`);
208
+ }
209
+ }
210
+ let result = 0n;
211
+ for (let i = 0; i < str.length; i++) {
212
+ result = (result << 8n) | BigInt(str.charCodeAt(i));
213
+ }
214
+ return result;
215
+ }
216
+ /**
217
+ * Compute the Starknet function selector: keccak256(name) masked to 250 bits.
218
+ * @scure/starknet's keccak() already applies the 250-bit mask.
219
+ */
220
+ function getSelectorFromName(name) {
221
+ return (0, starknet_1.keccak)(Buffer.from(name, 'ascii'));
222
+ }
223
+ /**
224
+ * Compile calls into the Cairo 1 multicall __execute__ calldata format.
225
+ * Format: [num_calls, to_0, selector_0, data_len_0, ...data_0, to_1, ...]
226
+ */
227
+ function compileExecuteCalldata(calls) {
228
+ const result = [];
229
+ result.push('0x' + BigInt(calls.length).toString(16));
230
+ for (const call of calls) {
231
+ result.push(call.contractAddress);
232
+ result.push('0x' + getSelectorFromName(call.entrypoint).toString(16));
233
+ result.push('0x' + BigInt(call.calldata.length).toString(16));
234
+ result.push(...call.calldata);
235
+ }
236
+ return result;
237
+ }
238
+ function encodeResourceBound(typeName, maxAmount, maxPricePerUnit) {
239
+ return (typeName << 192n) | (BigInt(maxAmount) << 128n) | BigInt(maxPricePerUnit);
240
+ }
241
+ /**
242
+ * Compute the Poseidon V3 INVOKE transaction hash per SNIP-8.
243
+ */
244
+ function calculateInvokeTransactionHash(params) {
245
+ const { senderAddress, compiledCalldata, chainId, nonce, resourceBounds, tip = '0x0', nonceDataAvailabilityMode = 0, feeDataAvailabilityMode = 0, paymasterData = [], accountDeploymentData = [], proofFacts, } = params;
246
+ const feeFieldHash = (0, starknet_1.poseidonHashMany)([
247
+ BigInt(tip),
248
+ encodeResourceBound(constants_1.L1_GAS_NAME, resourceBounds.l1_gas.max_amount, resourceBounds.l1_gas.max_price_per_unit),
249
+ encodeResourceBound(constants_1.L2_GAS_NAME, resourceBounds.l2_gas.max_amount, resourceBounds.l2_gas.max_price_per_unit),
250
+ encodeResourceBound(constants_1.L1_DATA_GAS_NAME, resourceBounds.l1_data_gas.max_amount, resourceBounds.l1_data_gas.max_price_per_unit),
251
+ ]);
252
+ const daMode = (BigInt(nonceDataAvailabilityMode) << 32n) | BigInt(feeDataAvailabilityMode);
253
+ const hashFields = [
254
+ constants_1.INVOKE_TX_PREFIX,
255
+ constants_1.TRANSACTION_VERSION_3,
256
+ BigInt(senderAddress),
257
+ feeFieldHash,
258
+ (0, starknet_1.poseidonHashMany)(paymasterData.map(BigInt)),
259
+ BigInt(chainId),
260
+ BigInt(nonce),
261
+ daMode,
262
+ (0, starknet_1.poseidonHashMany)(accountDeploymentData.map(BigInt)),
263
+ (0, starknet_1.poseidonHashMany)(compiledCalldata.map(BigInt)),
264
+ ];
265
+ if (proofFacts && proofFacts.length > 0) {
266
+ hashFields.push((0, starknet_1.poseidonHashMany)(proofFacts.map(BigInt)));
267
+ }
268
+ const hash = (0, starknet_1.poseidonHashMany)(hashFields);
269
+ return '0x' + hash.toString(16);
270
+ }
271
+ exports.default = {
272
+ isValidAddress,
273
+ isValidPublicKey,
274
+ isValidPrivateKey,
275
+ getUncompressedPublicKey,
276
+ compileEthAccountConstructorCalldata,
277
+ calculateContractAddressFromHash,
278
+ computeStarknetAddress,
279
+ getAddressFromPublicKey,
280
+ normalizeAddress,
281
+ formatEthAccountSignature,
282
+ parseTransferCall,
283
+ generateKeyPair,
284
+ validateRawTransaction,
285
+ encodeShortString,
286
+ getSelectorFromName,
287
+ compileExecuteCalldata,
288
+ calculateInvokeTransactionHash,
289
+ };
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBbUJBLDRDQUdDO0FBTUQsd0NBU0M7QUFLRCw0Q0FnQkM7QUFLRCw4Q0FHQztBQUtELDREQWFDO0FBTUQsb0ZBVUM7QUFNRCw0RUFlQztBQUtELHdEQWFDO0FBS0QsMERBSUM7QUFNRCw4REFZQztBQU1ELDhDQVlDO0FBS0QsMENBUUM7QUFLRCx3REFPQztBQUtELDhDQWVDO0FBTUQsa0RBRUM7QUFNRCx3REFVQztBQVNELHdFQStDQztBQXJURCw4Q0FBa0Y7QUFDbEYsMkNBV3FCO0FBRXJCLGdEQUF1QztBQUV2Qzs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLE9BQWU7SUFDOUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ2xFLE9BQU8sSUFBSSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixjQUFjLENBQUMsT0FBZTtJQUM1QyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzFELElBQUksQ0FBQztRQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixPQUFPLEdBQUcsR0FBRyxFQUFFLElBQUksR0FBRyxHQUFHLG9CQUFRLENBQUM7SUFDcEMsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8s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LENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNiLE1BQU07UUFDTixJQUFBLDJCQUFnQixFQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuRCxJQUFBLDJCQUFnQixFQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMvQyxDQUFDO0lBRUYsSUFBSSxVQUFVLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUN4QyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUEsMkJBQWdCLEVBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLElBQUEsMkJBQWdCLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDMUMsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsa0JBQWU7SUFDYixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQix3QkFBd0I7SUFDeEIsb0NBQW9DO0lBQ3BDLGdDQUFnQztJQUNoQyxzQkFBc0I7SUFDdEIsdUJBQXVCO0lBQ3ZCLGdCQUFnQjtJQUNoQix5QkFBeUI7SUFDekIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixzQkFBc0I7SUFDdEIsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixzQkFBc0I7SUFDdEIsOEJBQThCO0NBQy9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlSGFzaE9uRWxlbWVudHMsIHBvc2VpZG9uSGFzaE1hbnksIGtlY2NhayB9IGZyb20gJ0BzY3VyZS9zdGFya25ldCc7XG5pbXBvcnQge1xuICBGRUxUX01BWCxcbiAgTUFTS18xMjgsXG4gIE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsXG4gIEFERFJfQk9VTkQsXG4gIENPTlRSQUNUX0FERFJFU1NfUFJFRklYLFxuICBJTlZPS0VfVFhfUFJFRklYLFxuICBUUkFOU0FDVElPTl9WRVJTSU9OXzMsXG4gIEwxX0dBU19OQU1FLFxuICBMMl9HQVNfTkFNRSxcbiAgTDFfREFUQV9HQVNfTkFNRSxcbn0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgU3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEsIFN0YXJrbmV0Q2FsbCwgUGFyc2VkVHJhbnNmZXJEYXRhLCBJbnZva2VUcmFuc2FjdGlvbkhhc2hQYXJhbXMgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IGVjYyB9IGZyb20gJ0BiaXRnby9zZWNwMjU2azEnO1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBhIFN0YXJrbmV0IGFkZHJlc3MgdG8gY2Fub25pY2FsIGZvcm06IDB4ICsgNjQgaGV4IGNoYXJzLCB6ZXJvLXBhZGRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaGV4ID0gYWRkcmVzcy5zdGFydHNXaXRoKCcweCcpID8gYWRkcmVzcy5zbGljZSgyKSA6IGFkZHJlc3M7XG4gIHJldHVybiAnMHgnICsgaGV4LnBhZFN0YXJ0KDY0LCAnMCcpLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogU3RhcmtuZXQgYWRkcmVzc2VzIGFyZSBmZWx0MjUyIHZhbHVlcyByZXByZXNlbnRlZCBhcyAweC1wcmVmaXhlZCBoZXguXG4gKiBWYWxpZCByYW5nZTogMCA8IGFkZHJlc3MgPCBGRUxUX01BWCwgd2l0aCAweCBwcmVmaXggYW5kIGhleCBjaGFycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGFkZHJlc3MgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gIGlmICghYWRkcmVzcy5tYXRjaCgvXjB4WzAtOWEtZkEtRl17MSw2NH0kLykpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWwgPSBCaWdJbnQoYWRkcmVzcyk7XG4gICAgcmV0dXJuIHZhbCA+IDBuICYmIHZhbCA8IEZFTFRfTUFYO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHNlY3AyNTZrMSBwdWJsaWMga2V5IChjb21wcmVzc2VkIDMzIGJ5dGVzIG9yIHVuY29tcHJlc3NlZCA2NSBieXRlcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHVibGljS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICB0cnkge1xuICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5mcm9tKGtleSwgJ2hleCcpO1xuICAgIGlmIChidWYubGVuZ3RoID09PSAzMyAmJiAoYnVmWzBdID09PSAweDAyIHx8IGJ1ZlswXSA9PT0gMHgwMykpIHtcbiAgICAgIGVjYy5wb2ludENvbXByZXNzKGJ1ZiwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDY1ICYmIGJ1ZlswXSA9PT0gMHgwNCkge1xuICAgICAgZWNjLnBvaW50Q29tcHJlc3MoYnVmLCB0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIGEgc2VjcDI1NmsxIHByaXZhdGUga2V5ICgzMiBieXRlcyBoZXgpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFByaXZhdGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAvXlswLTlhLWZBLUZdezY0fSQvLnRlc3Qoa2V5KTtcbn1cblxuLyoqXG4gKiBHZXQgdW5jb21wcmVzc2VkIHB1YmxpYyBrZXkgKHggfHwgeSwgMTI4IGhleCBjaGFycywgbm8gMDQgcHJlZml4KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVuY29tcHJlc3NlZFB1YmxpY0tleShjb21wcmVzc2VkSGV4OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShjb21wcmVzc2VkSGV4LCAnaGV4Jyk7XG4gIGlmIChidWYubGVuZ3RoID09PSA2NSAmJiBidWZbMF0gPT09IDB4MDQpIHtcbiAgICByZXR1cm4gY29tcHJlc3NlZEhleC5zbGljZSgyKTtcbiAgfVxuICBpZiAoYnVmLmxlbmd0aCA9PT0gMzMgJiYgKGJ1ZlswXSA9PT0gMHgwMiB8fCBidWZbMF0gPT09IDB4MDMpKSB7XG4gICAgY29uc3QgdW5jb21wcmVzc2VkID0gQnVmZmVyLmZyb20oZWNjLnBvaW50Q29tcHJlc3MoYnVmLCBmYWxzZSkpO1xuICAgIHJldHVybiB1bmNvbXByZXNzZWQudG9TdHJpbmcoJ2hleCcpLnNsaWNlKDIpO1xuICB9XG4gIGlmIChidWYubGVuZ3RoID09PSA2NCkge1xuICAgIHJldHVybiBjb21wcmVzc2VkSGV4O1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwdWJsaWMga2V5IGZvcm1hdDogJHtjb21wcmVzc2VkSGV4LnN1YnN0cmluZygwLCAxMCl9Li4uYCk7XG59XG5cbi8qKlxuICogQ29tcGlsZSBFdGhBY2NvdW50IGNvbnN0cnVjdG9yIGNhbGxkYXRhIGZyb20gZnVsbCBzZWNwMjU2azEgcHVibGljIGtleS5cbiAqIFJldHVybnMgW3hfbG93LCB4X2hpZ2gsIHlfbG93LCB5X2hpZ2hdIGFzIGZlbHQyNTIgc3RyaW5ncy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVFdGhBY2NvdW50Q29uc3RydWN0b3JDYWxsZGF0YShmdWxsUHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHB1YlggPSBCaWdJbnQoJzB4JyArIGZ1bGxQdWJsaWNLZXkuc2xpY2UoMCwgNjQpKTtcbiAgY29uc3QgcHViWSA9IEJpZ0ludCgnMHgnICsgZnVsbFB1YmxpY0tleS5zbGljZSg2NCkpO1xuXG4gIHJldHVybiBbXG4gICAgJzB4JyArIChwdWJYICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHB1YlggPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAocHViWSAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChwdWJZID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgXTtcbn1cblxuLyoqXG4gKiBDb21wdXRlIFN0YXJrbmV0IGNvbnRyYWN0IGFkZHJlc3MgZnJvbSBoYXNoIGNvbXBvbmVudHMuXG4gKiBSZXBsaWNhdGVzIHN0YXJrbmV0LmpzIGNhbGN1bGF0ZUNvbnRyYWN0QWRkcmVzc0Zyb21IYXNoIHVzaW5nIEBzY3VyZS9zdGFya25ldCBwZWRlcnNlbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbnRyYWN0QWRkcmVzc0Zyb21IYXNoKFxuICBzYWx0OiBzdHJpbmcsXG4gIGNsYXNzSGFzaDogc3RyaW5nLFxuICBjb25zdHJ1Y3RvckNhbGxkYXRhOiBzdHJpbmdbXSxcbiAgZGVwbG95ZXJBZGRyZXNzOiBudW1iZXIgfCBiaWdpbnRcbik6IHN0cmluZyB7XG4gIGNvbnN0IGNhbGxkYXRhSGFzaCA9IGNvbXB1dGVIYXNoT25FbGVtZW50cyhjb25zdHJ1Y3RvckNhbGxkYXRhLm1hcChCaWdJbnQpKSBhcyBzdHJpbmc7XG4gIGNvbnN0IHJhd0hhc2ggPSBjb21wdXRlSGFzaE9uRWxlbWVudHMoW1xuICAgIENPTlRSQUNUX0FERFJFU1NfUFJFRklYLFxuICAgIEJpZ0ludChkZXBsb3llckFkZHJlc3MpLFxuICAgIEJpZ0ludChzYWx0KSxcbiAgICBCaWdJbnQoY2xhc3NIYXNoKSxcbiAgICBCaWdJbnQoY2FsbGRhdGFIYXNoKSxcbiAgXSkgYXMgc3RyaW5nO1xuICByZXR1cm4gbm9ybWFsaXplQWRkcmVzcygnMHgnICsgKEJpZ0ludChyYXdIYXNoKSAlIEFERFJfQk9VTkQpLnRvU3RyaW5nKDE2KSk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSBTdGFya25ldCBFdGhBY2NvdW50IGNvdW50ZXJmYWN0dWFsIGFkZHJlc3MgZnJvbSBwdWJsaWMga2V5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVN0YXJrbmV0QWRkcmVzcyhmdWxsUHVibGljS2V5OiBzdHJpbmcpOiB7XG4gIGFkZHJlc3M6IHN0cmluZztcbiAgY29uc3RydWN0b3JDYWxsZGF0YTogc3RyaW5nW107XG4gIHNhbHQ6IHN0cmluZztcbn0ge1xuICBjb25zdCBjb25zdHJ1Y3RvckNhbGxkYXRhID0gY29tcGlsZUV0aEFjY291bnRDb25zdHJ1Y3RvckNhbGxkYXRhKGZ1bGxQdWJsaWNLZXkpO1xuXG4gIGNvbnN0IHB1YlggPSBCaWdJbnQoJzB4JyArIGZ1bGxQdWJsaWNLZXkuc2xpY2UoMCwgNjQpKTtcbiAgY29uc3Qgc2FsdCA9ICcweCcgKyAocHViWCAlIEZFTFRfTUFYKS50b1N0cmluZygxNik7XG5cbiAgY29uc3QgYWRkcmVzcyA9IGNhbGN1bGF0ZUNvbnRyYWN0QWRkcmVzc0Zyb21IYXNoKHNhbHQsIE9aX0VUSF9BQ0NPVU5UX0NMQVNTX0hBU0gsIGNvbnN0cnVjdG9yQ2FsbGRhdGEsIDApO1xuXG4gIHJldHVybiB7IGFkZHJlc3MsIGNvbnN0cnVjdG9yQ2FsbGRhdGEsIHNhbHQgfTtcbn1cblxuLyoqXG4gKiBEZXJpdmUgU3RhcmtuZXQgRXRoQWNjb3VudCBhZGRyZXNzIGZyb20gY29tcHJlc3NlZCBzZWNwMjU2azEgcHVibGljIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFkZHJlc3NGcm9tUHVibGljS2V5KGNvbXByZXNzZWRQdWJsaWNLZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGZ1bGxQdWJsaWNLZXkgPSBnZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkoY29tcHJlc3NlZFB1YmxpY0tleSk7XG4gIGNvbnN0IHsgYWRkcmVzcyB9ID0gY29tcHV0ZVN0YXJrbmV0QWRkcmVzcyhmdWxsUHVibGljS2V5KTtcbiAgcmV0dXJuIGFkZHJlc3M7XG59XG5cbi8qKlxuICogRm9ybWF0IEVDRFNBIHNpZ25hdHVyZSBmb3IgU3RhcmtuZXQgRXRoQWNjb3VudC5cbiAqIFJldHVybnMgW3JfbG93LCByX2hpZ2gsIHNfbG93LCBzX2hpZ2gsIHZdLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZShyOiBzdHJpbmcsIHM6IHN0cmluZywgcmVjaWQ6IG51bWJlcik6IHN0cmluZ1tdIHtcbiAgY29uc3QgckJpZyA9IEJpZ0ludCgnMHgnICsgcik7XG4gIGNvbnN0IHNCaWcgPSBCaWdJbnQoJzB4JyArIHMpO1xuICBjb25zdCB2ID0gQmlnSW50KHJlY2lkKTtcblxuICByZXR1cm4gW1xuICAgICcweCcgKyAockJpZyAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChyQmlnID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHNCaWcgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAoc0JpZyA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIHYudG9TdHJpbmcoMTYpLFxuICBdO1xufVxuXG4vKipcbiAqIEV4dHJhY3QgcmVjaXBpZW50LCBhbW91bnQsIGFuZCB0b2tlbiBjb250cmFjdCBmcm9tIGEgdHJhbnNmZXIgY2FsbC5cbiAqIFJldmVyc2Ugb2YgVHJhbnNmZXJCdWlsZGVyLmNvbXBpbGVUcmFuc2ZlckNhbGxkYXRhOiBjYWxsZGF0YSA9IFtyZWNpcGllbnQsIGFtb3VudF9sb3csIGFtb3VudF9oaWdoXS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVHJhbnNmZXJDYWxsKGNhbGw6IFN0YXJrbmV0Q2FsbCk6IFBhcnNlZFRyYW5zZmVyRGF0YSB8IHVuZGVmaW5lZCB7XG4gIGlmIChjYWxsLmVudHJ5cG9pbnQgIT09ICd0cmFuc2ZlcicgfHwgY2FsbC5jYWxsZGF0YS5sZW5ndGggPCAzKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBhbW91bnRMb3cgPSBCaWdJbnQoY2FsbC5jYWxsZGF0YVsxXSk7XG4gIGNvbnN0IGFtb3VudEhpZ2ggPSBCaWdJbnQoY2FsbC5jYWxsZGF0YVsyXSk7XG4gIGNvbnN0IGFtb3VudCA9ICgoYW1vdW50SGlnaCA8PCAxMjhuKSB8IGFtb3VudExvdykudG9TdHJpbmcoKTtcbiAgcmV0dXJuIHtcbiAgICByZWNpcGllbnQ6IGNhbGwuY2FsbGRhdGFbMF0sXG4gICAgYW1vdW50LFxuICAgIHRva2VuQ29udHJhY3Q6IGNhbGwuY29udHJhY3RBZGRyZXNzLFxuICB9O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlIGEgbmV3IHNlY3AyNTZrMSBrZXkgcGFpci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogeyBwdWI6IHN0cmluZzsgcHJ2OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHsgS2V5UGFpcjogU3RhcmtuZXRLZXlQYWlyIH0gPSByZXF1aXJlKCcuL2tleVBhaXInKTtcbiAgY29uc3Qga2V5UGFpciA9IHNlZWQgPyBuZXcgU3RhcmtuZXRLZXlQYWlyKHsgc2VlZCB9KSA6IG5ldyBTdGFya25ldEtleVBhaXIoKTtcbiAgY29uc3QgeyBwdWIsIHBydiB9ID0ga2V5UGFpci5nZXRLZXlzKCk7XG4gIGlmICghcHJ2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQcml2YXRlIGtleSBpcyBtaXNzaW5nIGluIHRoZSBnZW5lcmF0ZWQga2V5IHBhaXIuJyk7XG4gIH1cbiAgcmV0dXJuIHsgcHViLCBwcnYgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSByYXcgdHJhbnNhY3Rpb24gZGF0YSBoYXMgcmVxdWlyZWQgZmllbGRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVSYXdUcmFuc2FjdGlvbih0eDogU3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEpOiB2b2lkIHtcbiAgaWYgKCF0eC5zZW5kZXJBZGRyZXNzKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHNlbmRlciBhZGRyZXNzJyk7XG4gIH1cbiAgaWYgKCFpc1ZhbGlkQWRkcmVzcyh0eC5zZW5kZXJBZGRyZXNzKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzZW5kZXIgYWRkcmVzczogJHt0eC5zZW5kZXJBZGRyZXNzfWApO1xuICB9XG59XG5cbi8qKlxuICogRW5jb2RlIGFuIEFTQ0lJIHN0cmluZyAobWF4IDMxIGNoYXJzKSBhcyBhIGZlbHQyNTIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmNvZGVTaG9ydFN0cmluZyhzdHI6IHN0cmluZyk6IGJpZ2ludCB7XG4gIGlmIChzdHIubGVuZ3RoID4gMzEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNob3J0IHN0cmluZyB0b28gbG9uZzogJHtzdHIubGVuZ3RofSA+IDMxYCk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgaWYgKGNvZGUgPiAxMjcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTm9uLUFTQ0lJIGNoYXJhY3RlciBhdCBpbmRleCAke2l9OiBjb2RlICR7Y29kZX1gKTtcbiAgICB9XG4gIH1cbiAgbGV0IHJlc3VsdCA9IDBuO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgIHJlc3VsdCA9IChyZXN1bHQgPDwgOG4pIHwgQmlnSW50KHN0ci5jaGFyQ29kZUF0KGkpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENvbXB1dGUgdGhlIFN0YXJrbmV0IGZ1bmN0aW9uIHNlbGVjdG9yOiBrZWNjYWsyNTYobmFtZSkgbWFza2VkIHRvIDI1MCBiaXRzLlxuICogQHNjdXJlL3N0YXJrbmV0J3Mga2VjY2FrKCkgYWxyZWFkeSBhcHBsaWVzIHRoZSAyNTAtYml0IG1hc2suXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWxlY3RvckZyb21OYW1lKG5hbWU6IHN0cmluZyk6IGJpZ2ludCB7XG4gIHJldHVybiBrZWNjYWsoQnVmZmVyLmZyb20obmFtZSwgJ2FzY2lpJykpO1xufVxuXG4vKipcbiAqIENvbXBpbGUgY2FsbHMgaW50byB0aGUgQ2Fpcm8gMSBtdWx0aWNhbGwgX19leGVjdXRlX18gY2FsbGRhdGEgZm9ybWF0LlxuICogRm9ybWF0OiBbbnVtX2NhbGxzLCB0b18wLCBzZWxlY3Rvcl8wLCBkYXRhX2xlbl8wLCAuLi5kYXRhXzAsIHRvXzEsIC4uLl1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBpbGVFeGVjdXRlQ2FsbGRhdGEoY2FsbHM6IFN0YXJrbmV0Q2FsbFtdKTogc3RyaW5nW10ge1xuICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gIHJlc3VsdC5wdXNoKCcweCcgKyBCaWdJbnQoY2FsbHMubGVuZ3RoKS50b1N0cmluZygxNikpO1xuICBmb3IgKGNvbnN0IGNhbGwgb2YgY2FsbHMpIHtcbiAgICByZXN1bHQucHVzaChjYWxsLmNvbnRyYWN0QWRkcmVzcyk7XG4gICAgcmVzdWx0LnB1c2goJzB4JyArIGdldFNlbGVjdG9yRnJvbU5hbWUoY2FsbC5lbnRyeXBvaW50KS50b1N0cmluZygxNikpO1xuICAgIHJlc3VsdC5wdXNoKCcweCcgKyBCaWdJbnQoY2FsbC5jYWxsZGF0YS5sZW5ndGgpLnRvU3RyaW5nKDE2KSk7XG4gICAgcmVzdWx0LnB1c2goLi4uY2FsbC5jYWxsZGF0YSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZW5jb2RlUmVzb3VyY2VCb3VuZCh0eXBlTmFtZTogYmlnaW50LCBtYXhBbW91bnQ6IHN0cmluZywgbWF4UHJpY2VQZXJVbml0OiBzdHJpbmcpOiBiaWdpbnQge1xuICByZXR1cm4gKHR5cGVOYW1lIDw8IDE5Mm4pIHwgKEJpZ0ludChtYXhBbW91bnQpIDw8IDEyOG4pIHwgQmlnSW50KG1heFByaWNlUGVyVW5pdCk7XG59XG5cbi8qKlxuICogQ29tcHV0ZSB0aGUgUG9zZWlkb24gVjMgSU5WT0tFIHRyYW5zYWN0aW9uIGhhc2ggcGVyIFNOSVAtOC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUludm9rZVRyYW5zYWN0aW9uSGFzaChwYXJhbXM6IEludm9rZVRyYW5zYWN0aW9uSGFzaFBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBzZW5kZXJBZGRyZXNzLFxuICAgIGNvbXBpbGVkQ2FsbGRhdGEsXG4gICAgY2hhaW5JZCxcbiAgICBub25jZSxcbiAgICByZXNvdXJjZUJvdW5kcyxcbiAgICB0aXAgPSAnMHgwJyxcbiAgICBub25jZURhdGFBdmFpbGFiaWxpdHlNb2RlID0gMCxcbiAgICBmZWVEYXRhQXZhaWxhYmlsaXR5TW9kZSA9IDAsXG4gICAgcGF5bWFzdGVyRGF0YSA9IFtdLFxuICAgIGFjY291bnREZXBsb3ltZW50RGF0YSA9IFtdLFxuICAgIHByb29mRmFjdHMsXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgZmVlRmllbGRIYXNoID0gcG9zZWlkb25IYXNoTWFueShbXG4gICAgQmlnSW50KHRpcCksXG4gICAgZW5jb2RlUmVzb3VyY2VCb3VuZChMMV9HQVNfTkFNRSwgcmVzb3VyY2VCb3VuZHMubDFfZ2FzLm1heF9hbW91bnQsIHJlc291cmNlQm91bmRzLmwxX2dhcy5tYXhfcHJpY2VfcGVyX3VuaXQpLFxuICAgIGVuY29kZVJlc291cmNlQm91bmQoTDJfR0FTX05BTUUsIHJlc291cmNlQm91bmRzLmwyX2dhcy5tYXhfYW1vdW50LCByZXNvdXJjZUJvdW5kcy5sMl9nYXMubWF4X3ByaWNlX3Blcl91bml0KSxcbiAgICBlbmNvZGVSZXNvdXJjZUJvdW5kKFxuICAgICAgTDFfREFUQV9HQVNfTkFNRSxcbiAgICAgIHJlc291cmNlQm91bmRzLmwxX2RhdGFfZ2FzLm1heF9hbW91bnQsXG4gICAgICByZXNvdXJjZUJvdW5kcy5sMV9kYXRhX2dhcy5tYXhfcHJpY2VfcGVyX3VuaXRcbiAgICApLFxuICBdKTtcblxuICBjb25zdCBkYU1vZGUgPSAoQmlnSW50KG5vbmNlRGF0YUF2YWlsYWJpbGl0eU1vZGUpIDw8IDMybikgfCBCaWdJbnQoZmVlRGF0YUF2YWlsYWJpbGl0eU1vZGUpO1xuXG4gIGNvbnN0IGhhc2hGaWVsZHM6IGJpZ2ludFtdID0gW1xuICAgIElOVk9LRV9UWF9QUkVGSVgsXG4gICAgVFJBTlNBQ1RJT05fVkVSU0lPTl8zLFxuICAgIEJpZ0ludChzZW5kZXJBZGRyZXNzKSxcbiAgICBmZWVGaWVsZEhhc2gsXG4gICAgcG9zZWlkb25IYXNoTWFueShwYXltYXN0ZXJEYXRhLm1hcChCaWdJbnQpKSxcbiAgICBCaWdJbnQoY2hhaW5JZCksXG4gICAgQmlnSW50KG5vbmNlKSxcbiAgICBkYU1vZGUsXG4gICAgcG9zZWlkb25IYXNoTWFueShhY2NvdW50RGVwbG95bWVudERhdGEubWFwKEJpZ0ludCkpLFxuICAgIHBvc2VpZG9uSGFzaE1hbnkoY29tcGlsZWRDYWxsZGF0YS5tYXAoQmlnSW50KSksXG4gIF07XG5cbiAgaWYgKHByb29mRmFjdHMgJiYgcHJvb2ZGYWN0cy5sZW5ndGggPiAwKSB7XG4gICAgaGFzaEZpZWxkcy5wdXNoKHBvc2VpZG9uSGFzaE1hbnkocHJvb2ZGYWN0cy5tYXAoQmlnSW50KSkpO1xuICB9XG5cbiAgY29uc3QgaGFzaCA9IHBvc2VpZG9uSGFzaE1hbnkoaGFzaEZpZWxkcyk7XG4gIHJldHVybiAnMHgnICsgaGFzaC50b1N0cmluZygxNik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgaXNWYWxpZEFkZHJlc3MsXG4gIGlzVmFsaWRQdWJsaWNLZXksXG4gIGlzVmFsaWRQcml2YXRlS2V5LFxuICBnZXRVbmNvbXByZXNzZWRQdWJsaWNLZXksXG4gIGNvbXBpbGVFdGhBY2NvdW50Q29uc3RydWN0b3JDYWxsZGF0YSxcbiAgY2FsY3VsYXRlQ29udHJhY3RBZGRyZXNzRnJvbUhhc2gsXG4gIGNvbXB1dGVTdGFya25ldEFkZHJlc3MsXG4gIGdldEFkZHJlc3NGcm9tUHVibGljS2V5LFxuICBub3JtYWxpemVBZGRyZXNzLFxuICBmb3JtYXRFdGhBY2NvdW50U2lnbmF0dXJlLFxuICBwYXJzZVRyYW5zZmVyQ2FsbCxcbiAgZ2VuZXJhdGVLZXlQYWlyLFxuICB2YWxpZGF0ZVJhd1RyYW5zYWN0aW9uLFxuICBlbmNvZGVTaG9ydFN0cmluZyxcbiAgZ2V0U2VsZWN0b3JGcm9tTmFtZSxcbiAgY29tcGlsZUV4ZWN1dGVDYWxsZGF0YSxcbiAgY2FsY3VsYXRlSW52b2tlVHJhbnNhY3Rpb25IYXNoLFxufTtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { BitGoBase } from '@bitgo/sdk-core';
2
+ export declare const register: (sdk: BitGoBase) => void;
3
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAGzC,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.register = void 0;
4
+ const starknet_1 = require("./starknet");
5
+ const register = (sdk) => {
6
+ sdk.register('starknet', starknet_1.Starknet.createInstance);
7
+ sdk.register('tstarknet', starknet_1.Starknet.createInstance);
8
+ };
9
+ exports.register = register;
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXNDO0FBRS9CLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYyxFQUFRLEVBQUU7SUFDL0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsbUJBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxtQkFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQztBQUhXLFFBQUEsUUFBUSxZQUduQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBTdGFya25ldCB9IGZyb20gJy4vc3RhcmtuZXQnO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgc2RrLnJlZ2lzdGVyKCdzdGFya25ldCcsIFN0YXJrbmV0LmNyZWF0ZUluc3RhbmNlKTtcbiAgc2RrLnJlZ2lzdGVyKCd0c3RhcmtuZXQnLCBTdGFya25ldC5jcmVhdGVJbnN0YW5jZSk7XG59O1xuIl19
@@ -0,0 +1,35 @@
1
+ import { AuditDecryptedKeyParams, BaseCoin, BitGoBase, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions, VerifyTransactionOptions } from '@bitgo/sdk-core';
2
+ import { BaseCoin as StaticsBaseCoin } from '@bitgo/statics';
3
+ import { Hash } from 'crypto';
4
+ import { StarknetTransactionExplanation, TransactionHexParams, TssVerifyStarknetAddressOptions } from './lib/iface';
5
+ export declare class Starknet extends BaseCoin {
6
+ protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
7
+ protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
8
+ static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
9
+ getChain(): string;
10
+ getBaseChain(): string;
11
+ getFamily(): string;
12
+ getFullName(): string;
13
+ getBaseFactor(): number;
14
+ explainTransaction(params: TransactionHexParams): Promise<StarknetTransactionExplanation>;
15
+ verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
16
+ isWalletAddress(params: TssVerifyStarknetAddressOptions): Promise<boolean>;
17
+ parseTransaction(params: ParseTransactionOptions): Promise<ParsedTransaction>;
18
+ generateKeyPair(seed?: Buffer): KeyPair;
19
+ isValidAddress(address: string): boolean;
20
+ signTransaction(_params: SignTransactionOptions): Promise<SignedTransaction>;
21
+ isValidPub(key: string): boolean;
22
+ isValidPrv(key: string): boolean;
23
+ /** @inheritDoc */
24
+ supportsTss(): boolean;
25
+ /** inherited doc */
26
+ getDefaultMultisigType(): MultisigType;
27
+ /** @inheritDoc */
28
+ getMPCAlgorithm(): MPCAlgorithm;
29
+ /** @inheritDoc **/
30
+ getHashFunction(): Hash;
31
+ private getBuilderFactory;
32
+ /** @inheritDoc */
33
+ auditDecryptedKey({ multiSigType, prv, publicKey }: AuditDecryptedKeyParams): void;
34
+ }
35
+ //# sourceMappingURL=starknet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starknet.d.ts","sourceRoot":"","sources":["../../src/starknet.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,SAAS,EAET,OAAO,EAEP,YAAY,EACZ,YAAY,EAEZ,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,wBAAwB,EAGzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAS,QAAQ,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAc,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,8BAA8B,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAKpH,qBAAa,QAAS,SAAQ,QAAQ;IACpC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAC3D,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAU/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F,QAAQ,IAAI,MAAM;IAIlB,YAAY,IAAI,MAAM;IAItB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM;IAIrB,aAAa,IAAI,MAAM;IAIjB,kBAAkB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,8BAA8B,CAAC;IAOzF,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IA+BrE,eAAe,CAAC,MAAM,EAAE,+BAA+B,GAAG,OAAO,CAAC,OAAO,CAAC;IAoB1E,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAI5E,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAI9C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKlC,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIlF,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC,kBAAkB;IAClB,WAAW,IAAI,OAAO;IAItB,oBAAoB;IACpB,sBAAsB,IAAI,YAAY;IAItC,kBAAkB;IAClB,eAAe,IAAI,YAAY;IAI/B,mBAAmB;IACnB,eAAe,IAAI,IAAI;IAIvB,OAAO,CAAC,iBAAiB;IAIzB,kBAAkB;IAClB,iBAAiB,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,uBAAuB,GAAG,IAAI;CAMnF"}