@bitgo-beta/sdk-coin-starknet 0.0.1-beta.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 (57) 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 +8 -0
  6. package/dist/src/lib/constants.d.ts.map +1 -0
  7. package/dist/src/lib/constants.js +17 -0
  8. package/dist/src/lib/iface.d.ts +61 -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 +22 -0
  18. package/dist/src/lib/transaction.d.ts.map +1 -0
  19. package/dist/src/lib/transaction.js +134 -0
  20. package/dist/src/lib/transactionBuilder.d.ts +39 -0
  21. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  22. package/dist/src/lib/transactionBuilder.js +119 -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 +19 -0
  27. package/dist/src/lib/transferBuilder.d.ts.map +1 -0
  28. package/dist/src/lib/transferBuilder.js +79 -0
  29. package/dist/src/lib/utils.d.ts +82 -0
  30. package/dist/src/lib/utils.d.ts.map +1 -0
  31. package/dist/src/lib/utils.js +208 -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 +53 -0
  39. package/dist/test/resources/starknet.d.ts.map +1 -0
  40. package/dist/test/resources/starknet.js +75 -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/utils.d.ts +2 -0
  54. package/dist/test/unit/utils.d.ts.map +1 -0
  55. package/dist/test/unit/utils.js +73 -0
  56. package/dist/tsconfig.tsbuildinfo +1 -0
  57. package/package.json +59 -0
@@ -0,0 +1,208 @@
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
+ const starknet_1 = require("@scure/starknet");
17
+ const constants_1 = require("./constants");
18
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
19
+ /**
20
+ * Normalize a Starknet address to canonical form: 0x + 64 hex chars, zero-padded.
21
+ */
22
+ function normalizeAddress(address) {
23
+ const hex = address.startsWith('0x') ? address.slice(2) : address;
24
+ return '0x' + hex.padStart(64, '0').toLowerCase();
25
+ }
26
+ /**
27
+ * Starknet addresses are felt252 values represented as 0x-prefixed hex.
28
+ * Valid range: 0 < address < FELT_MAX, with 0x prefix and hex chars.
29
+ */
30
+ function isValidAddress(address) {
31
+ if (typeof address !== 'string')
32
+ return false;
33
+ if (!address.match(/^0x[0-9a-fA-F]{1,64}$/))
34
+ return false;
35
+ try {
36
+ const val = BigInt(address);
37
+ return val > 0n && val < constants_1.FELT_MAX;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ /**
44
+ * Validate a secp256k1 public key (compressed 33 bytes or uncompressed 65 bytes).
45
+ */
46
+ function isValidPublicKey(key) {
47
+ if (typeof key !== 'string')
48
+ return false;
49
+ try {
50
+ const buf = Buffer.from(key, 'hex');
51
+ if (buf.length === 33 && (buf[0] === 0x02 || buf[0] === 0x03)) {
52
+ secp256k1_1.ecc.pointCompress(buf, true);
53
+ return true;
54
+ }
55
+ if (buf.length === 65 && buf[0] === 0x04) {
56
+ secp256k1_1.ecc.pointCompress(buf, true);
57
+ return true;
58
+ }
59
+ return false;
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ /**
66
+ * Validate a secp256k1 private key (32 bytes hex).
67
+ */
68
+ function isValidPrivateKey(key) {
69
+ if (typeof key !== 'string')
70
+ return false;
71
+ return /^[0-9a-fA-F]{64}$/.test(key);
72
+ }
73
+ /**
74
+ * Get uncompressed public key (x || y, 128 hex chars, no 04 prefix).
75
+ */
76
+ function getUncompressedPublicKey(compressedHex) {
77
+ const buf = Buffer.from(compressedHex, 'hex');
78
+ if (buf.length === 65 && buf[0] === 0x04) {
79
+ return compressedHex.slice(2);
80
+ }
81
+ if (buf.length === 33 && (buf[0] === 0x02 || buf[0] === 0x03)) {
82
+ const uncompressed = Buffer.from(secp256k1_1.ecc.pointCompress(buf, false));
83
+ return uncompressed.toString('hex').slice(2);
84
+ }
85
+ if (buf.length === 64) {
86
+ return compressedHex;
87
+ }
88
+ throw new Error(`Invalid public key format: ${compressedHex.substring(0, 10)}...`);
89
+ }
90
+ /**
91
+ * Compile EthAccount constructor calldata from full secp256k1 public key.
92
+ * Returns [x_low, x_high, y_low, y_high] as felt252 strings.
93
+ */
94
+ function compileEthAccountConstructorCalldata(fullPublicKey) {
95
+ const pubX = BigInt('0x' + fullPublicKey.slice(0, 64));
96
+ const pubY = BigInt('0x' + fullPublicKey.slice(64));
97
+ return [
98
+ '0x' + (pubX & constants_1.MASK_128).toString(16),
99
+ '0x' + (pubX >> 128n).toString(16),
100
+ '0x' + (pubY & constants_1.MASK_128).toString(16),
101
+ '0x' + (pubY >> 128n).toString(16),
102
+ ];
103
+ }
104
+ /**
105
+ * Compute Starknet contract address from hash components.
106
+ * Replicates starknet.js calculateContractAddressFromHash using @scure/starknet pedersen.
107
+ */
108
+ function calculateContractAddressFromHash(salt, classHash, constructorCalldata, deployerAddress) {
109
+ const calldataHash = (0, starknet_1.computeHashOnElements)(constructorCalldata.map(BigInt));
110
+ const rawHash = (0, starknet_1.computeHashOnElements)([
111
+ constants_1.CONTRACT_ADDRESS_PREFIX,
112
+ BigInt(deployerAddress),
113
+ BigInt(salt),
114
+ BigInt(classHash),
115
+ BigInt(calldataHash),
116
+ ]);
117
+ return normalizeAddress('0x' + (BigInt(rawHash) % constants_1.ADDR_BOUND).toString(16));
118
+ }
119
+ /**
120
+ * Compute Starknet EthAccount counterfactual address from public key.
121
+ */
122
+ function computeStarknetAddress(fullPublicKey) {
123
+ const constructorCalldata = compileEthAccountConstructorCalldata(fullPublicKey);
124
+ const pubX = BigInt('0x' + fullPublicKey.slice(0, 64));
125
+ const salt = '0x' + (pubX % constants_1.FELT_MAX).toString(16);
126
+ const address = calculateContractAddressFromHash(salt, constants_1.OZ_ETH_ACCOUNT_CLASS_HASH, constructorCalldata, 0);
127
+ return { address, constructorCalldata, salt };
128
+ }
129
+ /**
130
+ * Derive Starknet EthAccount address from compressed secp256k1 public key.
131
+ */
132
+ function getAddressFromPublicKey(compressedPublicKey) {
133
+ const fullPublicKey = getUncompressedPublicKey(compressedPublicKey);
134
+ const { address } = computeStarknetAddress(fullPublicKey);
135
+ return address;
136
+ }
137
+ /**
138
+ * Format ECDSA signature for Starknet EthAccount.
139
+ * Returns [r_low, r_high, s_low, s_high, v].
140
+ */
141
+ function formatEthAccountSignature(r, s, recid) {
142
+ const rBig = BigInt('0x' + r);
143
+ const sBig = BigInt('0x' + s);
144
+ const v = BigInt(recid);
145
+ return [
146
+ '0x' + (rBig & constants_1.MASK_128).toString(16),
147
+ '0x' + (rBig >> 128n).toString(16),
148
+ '0x' + (sBig & constants_1.MASK_128).toString(16),
149
+ '0x' + (sBig >> 128n).toString(16),
150
+ '0x' + v.toString(16),
151
+ ];
152
+ }
153
+ /**
154
+ * Extract recipient, amount, and token contract from a transfer call.
155
+ * Reverse of TransferBuilder.compileTransferCalldata: calldata = [recipient, amount_low, amount_high].
156
+ */
157
+ function parseTransferCall(call) {
158
+ if (call.entrypoint !== 'transfer' || call.calldata.length < 3) {
159
+ return undefined;
160
+ }
161
+ const amountLow = BigInt(call.calldata[1]);
162
+ const amountHigh = BigInt(call.calldata[2]);
163
+ const amount = ((amountHigh << 128n) | amountLow).toString();
164
+ return {
165
+ recipient: call.calldata[0],
166
+ amount,
167
+ tokenContract: call.contractAddress,
168
+ };
169
+ }
170
+ /**
171
+ * Generate a new secp256k1 key pair.
172
+ */
173
+ function generateKeyPair(seed) {
174
+ const { KeyPair: StarknetKeyPair } = require('./keyPair');
175
+ const keyPair = seed ? new StarknetKeyPair({ seed }) : new StarknetKeyPair();
176
+ const { pub, prv } = keyPair.getKeys();
177
+ if (!prv) {
178
+ throw new Error('Private key is missing in the generated key pair.');
179
+ }
180
+ return { pub, prv };
181
+ }
182
+ /**
183
+ * Validate raw transaction data has required fields.
184
+ */
185
+ function validateRawTransaction(tx) {
186
+ if (!tx.senderAddress) {
187
+ throw new Error('Missing sender address');
188
+ }
189
+ if (!isValidAddress(tx.senderAddress)) {
190
+ throw new Error(`Invalid sender address: ${tx.senderAddress}`);
191
+ }
192
+ }
193
+ exports.default = {
194
+ isValidAddress,
195
+ isValidPublicKey,
196
+ isValidPrivateKey,
197
+ getUncompressedPublicKey,
198
+ compileEthAccountConstructorCalldata,
199
+ calculateContractAddressFromHash,
200
+ computeStarknetAddress,
201
+ getAddressFromPublicKey,
202
+ normalizeAddress,
203
+ formatEthAccountSignature,
204
+ parseTransferCall,
205
+ generateKeyPair,
206
+ validateRawTransaction,
207
+ };
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsNENBR0M7QUFNRCx3Q0FTQztBQUtELDRDQWdCQztBQUtELDhDQUdDO0FBS0QsNERBYUM7QUFNRCxvRkFVQztBQU1ELDRFQWVDO0FBS0Qsd0RBYUM7QUFLRCwwREFJQztBQU1ELDhEQVlDO0FBTUQsOENBWUM7QUFLRCwwQ0FRQztBQUtELHdEQU9DO0FBdE1ELDhDQUF3RDtBQUN4RCwyQ0FBaUg7QUFFakgscURBQTRDO0FBRTVDOztHQUVHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsT0FBZTtJQUM5QyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDbEUsT0FBTyxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDcEQsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlO0lBQzVDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUTtRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDMUQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLE9BQU8sR0FBRyxHQUFHLEVBQUUsSUFBSSxHQUFHLEdBQUcsb0JBQVEsQ0FBQztJQUNwQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gs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QixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxFQUEyQjtJQUNoRSxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNqRSxDQUFDO0FBQ0gsQ0FBQztBQUVELGtCQUFlO0lBQ2IsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsd0JBQXdCO0lBQ3hCLG9DQUFvQztJQUNwQyxnQ0FBZ0M7SUFDaEMsc0JBQXNCO0lBQ3RCLHVCQUF1QjtJQUN2QixnQkFBZ0I7SUFDaEIseUJBQXlCO0lBQ3pCLGlCQUFpQjtJQUNqQixlQUFlO0lBQ2Ysc0JBQXNCO0NBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb21wdXRlSGFzaE9uRWxlbWVudHMgfSBmcm9tICdAc2N1cmUvc3RhcmtuZXQnO1xuaW1wb3J0IHsgRkVMVF9NQVgsIE1BU0tfMTI4LCBPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILCBBRERSX0JPVU5ELCBDT05UUkFDVF9BRERSRVNTX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhLCBTdGFya25ldENhbGwsIFBhcnNlZFRyYW5zZmVyRGF0YSB9IGZyb20gJy4vaWZhY2UnO1xuaW1wb3J0IHsgZWNjIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcblxuLyoqXG4gKiBOb3JtYWxpemUgYSBTdGFya25ldCBhZGRyZXNzIHRvIGNhbm9uaWNhbCBmb3JtOiAweCArIDY0IGhleCBjaGFycywgemVyby1wYWRkZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGhleCA9IGFkZHJlc3Muc3RhcnRzV2l0aCgnMHgnKSA/IGFkZHJlc3Muc2xpY2UoMikgOiBhZGRyZXNzO1xuICByZXR1cm4gJzB4JyArIGhleC5wYWRTdGFydCg2NCwgJzAnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIFN0YXJrbmV0IGFkZHJlc3NlcyBhcmUgZmVsdDI1MiB2YWx1ZXMgcmVwcmVzZW50ZWQgYXMgMHgtcHJlZml4ZWQgaGV4LlxuICogVmFsaWQgcmFuZ2U6IDAgPCBhZGRyZXNzIDwgRkVMVF9NQVgsIHdpdGggMHggcHJlZml4IGFuZCBoZXggY2hhcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkQWRkcmVzcyhhZGRyZXNzOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKHR5cGVvZiBhZGRyZXNzICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWFkZHJlc3MubWF0Y2goL14weFswLTlhLWZBLUZdezEsNjR9JC8pKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsID0gQmlnSW50KGFkZHJlc3MpO1xuICAgIHJldHVybiB2YWwgPiAwbiAmJiB2YWwgPCBGRUxUX01BWDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGUgYSBzZWNwMjU2azEgcHVibGljIGtleSAoY29tcHJlc3NlZCAzMyBieXRlcyBvciB1bmNvbXByZXNzZWQgNjUgYnl0ZXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFB1YmxpY0tleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShrZXksICdoZXgnKTtcbiAgICBpZiAoYnVmLmxlbmd0aCA9PT0gMzMgJiYgKGJ1ZlswXSA9PT0gMHgwMiB8fCBidWZbMF0gPT09IDB4MDMpKSB7XG4gICAgICBlY2MucG9pbnRDb21wcmVzcyhidWYsIHRydWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChidWYubGVuZ3RoID09PSA2NSAmJiBidWZbMF0gPT09IDB4MDQpIHtcbiAgICAgIGVjYy5wb2ludENvbXByZXNzKGJ1ZiwgdHJ1ZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBhIHNlY3AyNTZrMSBwcml2YXRlIGtleSAoMzIgYnl0ZXMgaGV4KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcml2YXRlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gL15bMC05YS1mQS1GXXs2NH0kLy50ZXN0KGtleSk7XG59XG5cbi8qKlxuICogR2V0IHVuY29tcHJlc3NlZCBwdWJsaWMga2V5ICh4IHx8IHksIDEyOCBoZXggY2hhcnMsIG5vIDA0IHByZWZpeCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRVbmNvbXByZXNzZWRQdWJsaWNLZXkoY29tcHJlc3NlZEhleDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oY29tcHJlc3NlZEhleCwgJ2hleCcpO1xuICBpZiAoYnVmLmxlbmd0aCA9PT0gNjUgJiYgYnVmWzBdID09PSAweDA0KSB7XG4gICAgcmV0dXJuIGNvbXByZXNzZWRIZXguc2xpY2UoMik7XG4gIH1cbiAgaWYgKGJ1Zi5sZW5ndGggPT09IDMzICYmIChidWZbMF0gPT09IDB4MDIgfHwgYnVmWzBdID09PSAweDAzKSkge1xuICAgIGNvbnN0IHVuY29tcHJlc3NlZCA9IEJ1ZmZlci5mcm9tKGVjYy5wb2ludENvbXByZXNzKGJ1ZiwgZmFsc2UpKTtcbiAgICByZXR1cm4gdW5jb21wcmVzc2VkLnRvU3RyaW5nKCdoZXgnKS5zbGljZSgyKTtcbiAgfVxuICBpZiAoYnVmLmxlbmd0aCA9PT0gNjQpIHtcbiAgICByZXR1cm4gY29tcHJlc3NlZEhleDtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgcHVibGljIGtleSBmb3JtYXQ6ICR7Y29tcHJlc3NlZEhleC5zdWJzdHJpbmcoMCwgMTApfS4uLmApO1xufVxuXG4vKipcbiAqIENvbXBpbGUgRXRoQWNjb3VudCBjb25zdHJ1Y3RvciBjYWxsZGF0YSBmcm9tIGZ1bGwgc2VjcDI1NmsxIHB1YmxpYyBrZXkuXG4gKiBSZXR1cm5zIFt4X2xvdywgeF9oaWdoLCB5X2xvdywgeV9oaWdoXSBhcyBmZWx0MjUyIHN0cmluZ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlRXRoQWNjb3VudENvbnN0cnVjdG9yQ2FsbGRhdGEoZnVsbFB1YmxpY0tleTogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBwdWJYID0gQmlnSW50KCcweCcgKyBmdWxsUHVibGljS2V5LnNsaWNlKDAsIDY0KSk7XG4gIGNvbnN0IHB1YlkgPSBCaWdJbnQoJzB4JyArIGZ1bGxQdWJsaWNLZXkuc2xpY2UoNjQpKTtcblxuICByZXR1cm4gW1xuICAgICcweCcgKyAocHViWCAmIE1BU0tfMTI4KS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChwdWJYID4+IDEyOG4pLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHB1YlkgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAocHViWSA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gIF07XG59XG5cbi8qKlxuICogQ29tcHV0ZSBTdGFya25ldCBjb250cmFjdCBhZGRyZXNzIGZyb20gaGFzaCBjb21wb25lbnRzLlxuICogUmVwbGljYXRlcyBzdGFya25ldC5qcyBjYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaCB1c2luZyBAc2N1cmUvc3RhcmtuZXQgcGVkZXJzZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaChcbiAgc2FsdDogc3RyaW5nLFxuICBjbGFzc0hhc2g6IHN0cmluZyxcbiAgY29uc3RydWN0b3JDYWxsZGF0YTogc3RyaW5nW10sXG4gIGRlcGxveWVyQWRkcmVzczogbnVtYmVyIHwgYmlnaW50XG4pOiBzdHJpbmcge1xuICBjb25zdCBjYWxsZGF0YUhhc2ggPSBjb21wdXRlSGFzaE9uRWxlbWVudHMoY29uc3RydWN0b3JDYWxsZGF0YS5tYXAoQmlnSW50KSkgYXMgc3RyaW5nO1xuICBjb25zdCByYXdIYXNoID0gY29tcHV0ZUhhc2hPbkVsZW1lbnRzKFtcbiAgICBDT05UUkFDVF9BRERSRVNTX1BSRUZJWCxcbiAgICBCaWdJbnQoZGVwbG95ZXJBZGRyZXNzKSxcbiAgICBCaWdJbnQoc2FsdCksXG4gICAgQmlnSW50KGNsYXNzSGFzaCksXG4gICAgQmlnSW50KGNhbGxkYXRhSGFzaCksXG4gIF0pIGFzIHN0cmluZztcbiAgcmV0dXJuIG5vcm1hbGl6ZUFkZHJlc3MoJzB4JyArIChCaWdJbnQocmF3SGFzaCkgJSBBRERSX0JPVU5EKS50b1N0cmluZygxNikpO1xufVxuXG4vKipcbiAqIENvbXB1dGUgU3RhcmtuZXQgRXRoQWNjb3VudCBjb3VudGVyZmFjdHVhbCBhZGRyZXNzIGZyb20gcHVibGljIGtleS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVTdGFya25ldEFkZHJlc3MoZnVsbFB1YmxpY0tleTogc3RyaW5nKToge1xuICBhZGRyZXNzOiBzdHJpbmc7XG4gIGNvbnN0cnVjdG9yQ2FsbGRhdGE6IHN0cmluZ1tdO1xuICBzYWx0OiBzdHJpbmc7XG59IHtcbiAgY29uc3QgY29uc3RydWN0b3JDYWxsZGF0YSA9IGNvbXBpbGVFdGhBY2NvdW50Q29uc3RydWN0b3JDYWxsZGF0YShmdWxsUHVibGljS2V5KTtcblxuICBjb25zdCBwdWJYID0gQmlnSW50KCcweCcgKyBmdWxsUHVibGljS2V5LnNsaWNlKDAsIDY0KSk7XG4gIGNvbnN0IHNhbHQgPSAnMHgnICsgKHB1YlggJSBGRUxUX01BWCkudG9TdHJpbmcoMTYpO1xuXG4gIGNvbnN0IGFkZHJlc3MgPSBjYWxjdWxhdGVDb250cmFjdEFkZHJlc3NGcm9tSGFzaChzYWx0LCBPWl9FVEhfQUNDT1VOVF9DTEFTU19IQVNILCBjb25zdHJ1Y3RvckNhbGxkYXRhLCAwKTtcblxuICByZXR1cm4geyBhZGRyZXNzLCBjb25zdHJ1Y3RvckNhbGxkYXRhLCBzYWx0IH07XG59XG5cbi8qKlxuICogRGVyaXZlIFN0YXJrbmV0IEV0aEFjY291bnQgYWRkcmVzcyBmcm9tIGNvbXByZXNzZWQgc2VjcDI1NmsxIHB1YmxpYyBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleShjb21wcmVzc2VkUHVibGljS2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBmdWxsUHVibGljS2V5ID0gZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5KGNvbXByZXNzZWRQdWJsaWNLZXkpO1xuICBjb25zdCB7IGFkZHJlc3MgfSA9IGNvbXB1dGVTdGFya25ldEFkZHJlc3MoZnVsbFB1YmxpY0tleSk7XG4gIHJldHVybiBhZGRyZXNzO1xufVxuXG4vKipcbiAqIEZvcm1hdCBFQ0RTQSBzaWduYXR1cmUgZm9yIFN0YXJrbmV0IEV0aEFjY291bnQuXG4gKiBSZXR1cm5zIFtyX2xvdywgcl9oaWdoLCBzX2xvdywgc19oaWdoLCB2XS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEV0aEFjY291bnRTaWduYXR1cmUocjogc3RyaW5nLCBzOiBzdHJpbmcsIHJlY2lkOiBudW1iZXIpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHJCaWcgPSBCaWdJbnQoJzB4JyArIHIpO1xuICBjb25zdCBzQmlnID0gQmlnSW50KCcweCcgKyBzKTtcbiAgY29uc3QgdiA9IEJpZ0ludChyZWNpZCk7XG5cbiAgcmV0dXJuIFtcbiAgICAnMHgnICsgKHJCaWcgJiBNQVNLXzEyOCkudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyAockJpZyA+PiAxMjhuKS50b1N0cmluZygxNiksXG4gICAgJzB4JyArIChzQmlnICYgTUFTS18xMjgpLnRvU3RyaW5nKDE2KSxcbiAgICAnMHgnICsgKHNCaWcgPj4gMTI4bikudG9TdHJpbmcoMTYpLFxuICAgICcweCcgKyB2LnRvU3RyaW5nKDE2KSxcbiAgXTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHJlY2lwaWVudCwgYW1vdW50LCBhbmQgdG9rZW4gY29udHJhY3QgZnJvbSBhIHRyYW5zZmVyIGNhbGwuXG4gKiBSZXZlcnNlIG9mIFRyYW5zZmVyQnVpbGRlci5jb21waWxlVHJhbnNmZXJDYWxsZGF0YTogY2FsbGRhdGEgPSBbcmVjaXBpZW50LCBhbW91bnRfbG93LCBhbW91bnRfaGlnaF0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVRyYW5zZmVyQ2FsbChjYWxsOiBTdGFya25ldENhbGwpOiBQYXJzZWRUcmFuc2ZlckRhdGEgfCB1bmRlZmluZWQge1xuICBpZiAoY2FsbC5lbnRyeXBvaW50ICE9PSAndHJhbnNmZXInIHx8IGNhbGwuY2FsbGRhdGEubGVuZ3RoIDwgMykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYW1vdW50TG93ID0gQmlnSW50KGNhbGwuY2FsbGRhdGFbMV0pO1xuICBjb25zdCBhbW91bnRIaWdoID0gQmlnSW50KGNhbGwuY2FsbGRhdGFbMl0pO1xuICBjb25zdCBhbW91bnQgPSAoKGFtb3VudEhpZ2ggPDwgMTI4bikgfCBhbW91bnRMb3cpLnRvU3RyaW5nKCk7XG4gIHJldHVybiB7XG4gICAgcmVjaXBpZW50OiBjYWxsLmNhbGxkYXRhWzBdLFxuICAgIGFtb3VudCxcbiAgICB0b2tlbkNvbnRyYWN0OiBjYWxsLmNvbnRyYWN0QWRkcmVzcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIG5ldyBzZWNwMjU2azEga2V5IHBhaXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUtleVBhaXIoc2VlZD86IEJ1ZmZlcik6IHsgcHViOiBzdHJpbmc7IHBydjogc3RyaW5nIH0ge1xuICBjb25zdCB7IEtleVBhaXI6IFN0YXJrbmV0S2V5UGFpciB9ID0gcmVxdWlyZSgnLi9rZXlQYWlyJyk7XG4gIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IFN0YXJrbmV0S2V5UGFpcih7IHNlZWQgfSkgOiBuZXcgU3RhcmtuZXRLZXlQYWlyKCk7XG4gIGNvbnN0IHsgcHViLCBwcnYgfSA9IGtleVBhaXIuZ2V0S2V5cygpO1xuICBpZiAoIXBydikge1xuICAgIHRocm93IG5ldyBFcnJvcignUHJpdmF0ZSBrZXkgaXMgbWlzc2luZyBpbiB0aGUgZ2VuZXJhdGVkIGtleSBwYWlyLicpO1xuICB9XG4gIHJldHVybiB7IHB1YiwgcHJ2IH07XG59XG5cbi8qKlxuICogVmFsaWRhdGUgcmF3IHRyYW5zYWN0aW9uIGRhdGEgaGFzIHJlcXVpcmVkIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlUmF3VHJhbnNhY3Rpb24odHg6IFN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhKTogdm9pZCB7XG4gIGlmICghdHguc2VuZGVyQWRkcmVzcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBzZW5kZXIgYWRkcmVzcycpO1xuICB9XG4gIGlmICghaXNWYWxpZEFkZHJlc3ModHguc2VuZGVyQWRkcmVzcykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VuZGVyIGFkZHJlc3M6ICR7dHguc2VuZGVyQWRkcmVzc31gKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlzVmFsaWRBZGRyZXNzLFxuICBpc1ZhbGlkUHVibGljS2V5LFxuICBpc1ZhbGlkUHJpdmF0ZUtleSxcbiAgZ2V0VW5jb21wcmVzc2VkUHVibGljS2V5LFxuICBjb21waWxlRXRoQWNjb3VudENvbnN0cnVjdG9yQ2FsbGRhdGEsXG4gIGNhbGN1bGF0ZUNvbnRyYWN0QWRkcmVzc0Zyb21IYXNoLFxuICBjb21wdXRlU3RhcmtuZXRBZGRyZXNzLFxuICBnZXRBZGRyZXNzRnJvbVB1YmxpY0tleSxcbiAgbm9ybWFsaXplQWRkcmVzcyxcbiAgZm9ybWF0RXRoQWNjb3VudFNpZ25hdHVyZSxcbiAgcGFyc2VUcmFuc2ZlckNhbGwsXG4gIGdlbmVyYXRlS2V5UGFpcixcbiAgdmFsaWRhdGVSYXdUcmFuc2FjdGlvbixcbn07XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { BitGoBase } from '@bitgo-beta/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,sBAAsB,CAAC;AAGjD,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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXNDO0FBRS9CLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBYyxFQUFRLEVBQUU7SUFDL0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsbUJBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNsRCxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxtQkFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQztBQUhXLFFBQUEsUUFBUSxZQUduQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFN0YXJrbmV0IH0gZnJvbSAnLi9zdGFya25ldCc7XG5cbmV4cG9ydCBjb25zdCByZWdpc3RlciA9IChzZGs6IEJpdEdvQmFzZSk6IHZvaWQgPT4ge1xuICBzZGsucmVnaXN0ZXIoJ3N0YXJrbmV0JywgU3RhcmtuZXQuY3JlYXRlSW5zdGFuY2UpO1xuICBzZGsucmVnaXN0ZXIoJ3RzdGFya25ldCcsIFN0YXJrbmV0LmNyZWF0ZUluc3RhbmNlKTtcbn07XG4iXX0=
@@ -0,0 +1,35 @@
1
+ import { AuditDecryptedKeyParams, BaseCoin, BitGoBase, KeyPair, MPCAlgorithm, MultisigType, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
2
+ import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/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,sBAAsB,CAAC;AAC9B,OAAO,EAAS,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzE,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"}
@@ -0,0 +1,127 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Starknet = void 0;
7
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
8
+ const statics_1 = require("@bitgo-beta/statics");
9
+ const crypto_1 = require("crypto");
10
+ const transactionBuilderFactory_1 = require("./lib/transactionBuilderFactory");
11
+ const utils_1 = __importDefault(require("./lib/utils"));
12
+ const sdk_lib_mpc_1 = require("@bitgo-beta/sdk-lib-mpc");
13
+ class Starknet extends sdk_core_1.BaseCoin {
14
+ constructor(bitgo, staticsCoin) {
15
+ super(bitgo);
16
+ if (!staticsCoin) {
17
+ throw new Error('missing required constructor parameter staticsCoin');
18
+ }
19
+ this._staticsCoin = staticsCoin;
20
+ }
21
+ static createInstance(bitgo, staticsCoin) {
22
+ return new Starknet(bitgo, staticsCoin);
23
+ }
24
+ getChain() {
25
+ return this._staticsCoin.name;
26
+ }
27
+ getBaseChain() {
28
+ return this._staticsCoin.name;
29
+ }
30
+ getFamily() {
31
+ return this._staticsCoin.family;
32
+ }
33
+ getFullName() {
34
+ return this._staticsCoin.fullName;
35
+ }
36
+ getBaseFactor() {
37
+ return Math.pow(10, this._staticsCoin.decimalPlaces);
38
+ }
39
+ async explainTransaction(params) {
40
+ const factory = this.getBuilderFactory();
41
+ const txBuilder = await factory.from(params.transactionHex);
42
+ const transaction = await txBuilder.build();
43
+ return transaction.explainTransaction();
44
+ }
45
+ async verifyTransaction(params) {
46
+ const { txParams, txPrebuild } = params;
47
+ const txHex = txPrebuild?.txHex;
48
+ if (!txHex) {
49
+ throw new Error('txHex is required');
50
+ }
51
+ const explainedTx = await this.explainTransaction({ transactionHex: txHex });
52
+ if (Array.isArray(txParams.recipients) && txParams.recipients.length > 0) {
53
+ if (txParams.recipients.length > 1) {
54
+ throw new Error(`${this.getChain()} doesn't support sending to more than 1 destination address within a single transaction. Try again, using only a single recipient.`);
55
+ }
56
+ if (explainedTx.outputs.length !== 1) {
57
+ throw new Error('Tx outputs does not match with expected txParams recipients');
58
+ }
59
+ const output = explainedTx.outputs[0];
60
+ const recipient = txParams.recipients[0];
61
+ const normalizedOutput = utils_1.default.normalizeAddress(output.address);
62
+ const normalizedRecipient = utils_1.default.normalizeAddress(recipient.address);
63
+ if (normalizedOutput !== normalizedRecipient || output.amount !== recipient.amount) {
64
+ throw new Error('Tx outputs does not match with expected txParams recipients');
65
+ }
66
+ }
67
+ return true;
68
+ }
69
+ async isWalletAddress(params) {
70
+ const { address } = params;
71
+ if (!this.isValidAddress(address)) {
72
+ throw new sdk_core_1.InvalidAddressError(`invalid address: ${address}`);
73
+ }
74
+ const result = await (0, sdk_core_1.verifyMPCWalletAddress)({ ...params, keyCurve: 'secp256k1' }, this.isValidAddress.bind(this), (pubKey) => utils_1.default.getAddressFromPublicKey(pubKey));
75
+ if (!result) {
76
+ throw new sdk_core_1.UnexpectedAddressError(`address validation failure: address ${address} is not a wallet address`);
77
+ }
78
+ return true;
79
+ }
80
+ async parseTransaction(params) {
81
+ return {};
82
+ }
83
+ generateKeyPair(seed) {
84
+ return utils_1.default.generateKeyPair(seed);
85
+ }
86
+ isValidAddress(address) {
87
+ return utils_1.default.isValidAddress(address);
88
+ }
89
+ // Starknet is TSS-only; signing is handled by threshold ECDSA in wallet-platform/OVC.
90
+ async signTransaction(_params) {
91
+ throw new sdk_core_1.MethodNotImplementedError('signTransaction');
92
+ }
93
+ isValidPub(key) {
94
+ return utils_1.default.isValidPublicKey(key);
95
+ }
96
+ isValidPrv(key) {
97
+ return utils_1.default.isValidPrivateKey(key);
98
+ }
99
+ /** @inheritDoc */
100
+ supportsTss() {
101
+ return true;
102
+ }
103
+ /** inherited doc */
104
+ getDefaultMultisigType() {
105
+ return sdk_core_1.multisigTypes.tss;
106
+ }
107
+ /** @inheritDoc */
108
+ getMPCAlgorithm() {
109
+ return 'ecdsa';
110
+ }
111
+ /** @inheritDoc **/
112
+ getHashFunction() {
113
+ return (0, crypto_1.createHash)('sha256');
114
+ }
115
+ getBuilderFactory() {
116
+ return new transactionBuilderFactory_1.TransactionBuilderFactory(statics_1.coins.get(this.getBaseChain()));
117
+ }
118
+ /** @inheritDoc */
119
+ auditDecryptedKey({ multiSigType, prv, publicKey }) {
120
+ if (multiSigType !== 'tss') {
121
+ throw new Error('Unsupported multisigtype');
122
+ }
123
+ (0, sdk_lib_mpc_1.auditEcdsaPrivateKey)(prv, publicKey);
124
+ }
125
+ }
126
+ exports.Starknet = Starknet;
127
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcmtuZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RhcmtuZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsbURBaUI4QjtBQUM5QixpREFBeUU7QUFDekUsbUNBQTBDO0FBRzFDLCtFQUE0RTtBQUM1RSx3REFBZ0M7QUFDaEMseURBQStEO0FBRS9ELE1BQWEsUUFBUyxTQUFRLG1CQUFRO0lBRXBDLFlBQXNCLEtBQWdCLEVBQUUsV0FBdUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQztJQUNsQyxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDcEMsQ0FBQztJQUVELGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUE0QjtRQUNuRCxNQUFNLE9B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QUksWUFBWSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQ0QsSUFBQSxrQ0FBb0IsRUFBQyxHQUFhLEVBQUUsU0FBbUIsQ0FBQyxDQUFDO0lBQzNELENBQUM7Q0FDRjtBQXRKRCw0QkFzSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyxcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgS2V5UGFpcixcbiAgTWV0aG9kTm90SW1wbGVtZW50ZWRFcnJvcixcbiAgTVBDQWxnb3JpdGhtLFxuICBNdWx0aXNpZ1R5cGUsXG4gIG11bHRpc2lnVHlwZXMsXG4gIFBhcnNlZFRyYW5zYWN0aW9uLFxuICBQYXJzZVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgU2lnbmVkVHJhbnNhY3Rpb24sXG4gIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFZlcmlmeVRyYW5zYWN0aW9uT3B0aW9ucyxcbiAgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyxcbiAgVW5leHBlY3RlZEFkZHJlc3NFcnJvcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgY29pbnMsIEJhc2VDb2luIGFzIFN0YXRpY3NCYXNlQ29pbiB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgY3JlYXRlSGFzaCwgSGFzaCB9IGZyb20gJ2NyeXB0byc7XG5cbmltcG9ydCB7IFN0YXJrbmV0VHJhbnNhY3Rpb25FeHBsYW5hdGlvbiwgVHJhbnNhY3Rpb25IZXhQYXJhbXMsIFRzc1ZlcmlmeVN0YXJrbmV0QWRkcmVzc09wdGlvbnMgfSBmcm9tICcuL2xpYi9pZmFjZSc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi9saWIvdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi9saWIvdXRpbHMnO1xuaW1wb3J0IHsgYXVkaXRFY2RzYVByaXZhdGVLZXkgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstbGliLW1wYyc7XG5cbmV4cG9ydCBjbGFzcyBTdGFya25ldCBleHRlbmRzIEJhc2VDb2luIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9zdGF0aWNzQ29pbjogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPjtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvKTtcblxuICAgIGlmICghc3RhdGljc0NvaW4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignbWlzc2luZyByZXF1aXJlZCBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgc3RhdGljc0NvaW4nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0aWNzQ29pbiA9IHN0YXRpY3NDb2luO1xuICB9XG5cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPik6IEJhc2VDb2luIHtcbiAgICByZXR1cm4gbmV3IFN0YXJrbmV0KGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICBnZXRDaGFpbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zdGF0aWNzQ29pbi5uYW1lO1xuICB9XG5cbiAgZ2V0QmFzZUNoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZmFtaWx5O1xuICB9XG5cbiAgZ2V0RnVsbE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGljc0NvaW4uZnVsbE5hbWU7XG4gIH1cblxuICBnZXRCYXNlRmFjdG9yKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIE1hdGgucG93KDEwLCB0aGlzLl9zdGF0aWNzQ29pbi5kZWNpbWFsUGxhY2VzKTtcbiAgfVxuXG4gIGFzeW5jIGV4cGxhaW5UcmFuc2FjdGlvbihwYXJhbXM6IFRyYW5zYWN0aW9uSGV4UGFyYW1zKTogUHJvbWlzZTxTdGFya25ldFRyYW5zYWN0aW9uRXhwbGFuYXRpb24+IHtcbiAgICBjb25zdCBmYWN0b3J5ID0gdGhpcy5nZXRCdWlsZGVyRmFjdG9yeSgpO1xuICAgIGNvbnN0IHR4QnVpbGRlciA9IGF3YWl0IGZhY3RvcnkuZnJvbShwYXJhbXMudHJhbnNhY3Rpb25IZXgpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCk7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5VHJhbnNhY3Rpb24ocGFyYW1zOiBWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB7IHR4UGFyYW1zLCB0eFByZWJ1aWxkIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdHhIZXggPSB0eFByZWJ1aWxkPy50eEhleDtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R4SGV4IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZXhwbGFpbmVkVHggPSBhd2FpdCB0aGlzLmV4cGxhaW5UcmFuc2FjdGlvbih7IHRyYW5zYWN0aW9uSGV4OiB0eEhleCB9KTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHR4UGFyYW1zLnJlY2lwaWVudHMpICYmIHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgaWYgKHR4UGFyYW1zLnJlY2lwaWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5nZXRDaGFpbigpfSBkb2Vzbid0IHN1cHBvcnQgc2VuZGluZyB0byBtb3JlIHRoYW4gMSBkZXN0aW5hdGlvbiBhZGRyZXNzIHdpdGhpbiBhIHNpbmdsZSB0cmFuc2FjdGlvbi4gVHJ5IGFnYWluLCB1c2luZyBvbmx5IGEgc2luZ2xlIHJlY2lwaWVudC5gXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG91dHB1dCA9IGV4cGxhaW5lZFR4Lm91dHB1dHNbMF07XG4gICAgICBjb25zdCByZWNpcGllbnQgPSB0eFBhcmFtcy5yZWNpcGllbnRzWzBdO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZE91dHB1dCA9IHV0aWxzLm5vcm1hbGl6ZUFkZHJlc3Mob3V0cHV0LmFkZHJlc3MpO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFJlY2lwaWVudCA9IHV0aWxzLm5vcm1hbGl6ZUFkZHJlc3MocmVjaXBpZW50LmFkZHJlc3MpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRPdXRwdXQgIT09IG5vcm1hbGl6ZWRSZWNpcGllbnQgfHwgb3V0cHV0LmFtb3VudCAhPT0gcmVjaXBpZW50LmFtb3VudCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R4IG91dHB1dHMgZG9lcyBub3QgbWF0Y2ggd2l0aCBleHBlY3RlZCB0eFBhcmFtcyByZWNpcGllbnRzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgYXN5bmMgaXNXYWxsZXRBZGRyZXNzKHBhcmFtczogVHNzVmVyaWZ5U3RhcmtuZXRBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcyB9ID0gcGFyYW1zO1xuXG4gICAgaWYgKCF0aGlzLmlzVmFsaWRBZGRyZXNzKGFkZHJlc3MpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFkZHJlc3NFcnJvcihgaW52YWxpZCBhZGRyZXNzOiAke2FkZHJlc3N9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdmVyaWZ5TVBDV2FsbGV0QWRkcmVzcyhcbiAgICAgIHsgLi4ucGFyYW1zLCBrZXlDdXJ2ZTogJ3NlY3AyNTZrMScgfSxcbiAgICAgIHRoaXMuaXNWYWxpZEFkZHJlc3MuYmluZCh0aGlzKSxcbiAgICAgIChwdWJLZXkpID0+IHV0aWxzLmdldEFkZHJlc3NGcm9tUHVibGljS2V5KHB1YktleSlcbiAgICApO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHRocm93IG5ldyBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yKGBhZGRyZXNzIHZhbGlkYXRpb24gZmFpbHVyZTogYWRkcmVzcyAke2FkZHJlc3N9IGlzIG5vdCBhIHdhbGxldCBhZGRyZXNzYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBhc3luYyBwYXJzZVRyYW5zYWN0aW9uKHBhcmFtczogUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPFBhcnNlZFRyYW5zYWN0aW9uPiB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG5cbiAgcHVibGljIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogS2V5UGFpciB7XG4gICAgcmV0dXJuIHV0aWxzLmdlbmVyYXRlS2V5UGFpcihzZWVkKTtcbiAgfVxuXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKTtcbiAgfVxuXG4gIC8vIFN0YXJrbmV0IGlzIFRTUy1vbmx5OyBzaWduaW5nIGlzIGhhbmRsZWQgYnkgdGhyZXNob2xkIEVDRFNBIGluIHdhbGxldC1wbGF0Zm9ybS9PVkMuXG4gIGFzeW5jIHNpZ25UcmFuc2FjdGlvbihfcGFyYW1zOiBTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yKCdzaWduVHJhbnNhY3Rpb24nKTtcbiAgfVxuXG4gIGlzVmFsaWRQdWIoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdXRpbHMuaXNWYWxpZFB1YmxpY0tleShrZXkpO1xuICB9XG5cbiAgaXNWYWxpZFBydihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB1dGlscy5pc1ZhbGlkUHJpdmF0ZUtleShrZXkpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIHN1cHBvcnRzVHNzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIGluaGVyaXRlZCBkb2MgKi9cbiAgZ2V0RGVmYXVsdE11bHRpc2lnVHlwZSgpOiBNdWx0aXNpZ1R5cGUge1xuICAgIHJldHVybiBtdWx0aXNpZ1R5cGVzLnRzcztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqL1xuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ2VjZHNhJztcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdERvYyAqKi9cbiAgZ2V0SGFzaEZ1bmN0aW9uKCk6IEhhc2gge1xuICAgIHJldHVybiBjcmVhdGVIYXNoKCdzaGEyNTYnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QnVpbGRlckZhY3RvcnkoKTogVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB7XG4gICAgcmV0dXJuIG5ldyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5KGNvaW5zLmdldCh0aGlzLmdldEJhc2VDaGFpbigpKSk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXVkaXREZWNyeXB0ZWRLZXkoeyBtdWx0aVNpZ1R5cGUsIHBydiwgcHVibGljS2V5IH06IEF1ZGl0RGVjcnlwdGVkS2V5UGFyYW1zKTogdm9pZCB7XG4gICAgaWYgKG11bHRpU2lnVHlwZSAhPT0gJ3RzcycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbXVsdGlzaWd0eXBlJyk7XG4gICAgfVxuICAgIGF1ZGl0RWNkc2FQcml2YXRlS2V5KHBydiBhcyBzdHJpbmcsIHB1YmxpY0tleSBhcyBzdHJpbmcpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,53 @@
1
+ import { StarknetTransactionType } from '../../src/lib/iface';
2
+ export declare const Accounts: {
3
+ account1: {
4
+ secretKey: string;
5
+ publicKey: string;
6
+ address: string;
7
+ };
8
+ account2: {
9
+ secretKey: string;
10
+ publicKey: string;
11
+ address: string;
12
+ };
13
+ account3: {
14
+ publicKey: string;
15
+ secretKey: string;
16
+ address: string;
17
+ };
18
+ errorsAccounts: {
19
+ account1: {
20
+ secretKey: string;
21
+ publicKey: string;
22
+ address: string;
23
+ };
24
+ account2: {
25
+ secretKey: string;
26
+ publicKey: string;
27
+ address: string;
28
+ };
29
+ };
30
+ };
31
+ export declare const StarknetTransactionData: {
32
+ senderAddress: string;
33
+ nonce: string;
34
+ calls: {
35
+ contractAddress: string;
36
+ entrypoint: string;
37
+ calldata: string[];
38
+ }[];
39
+ chainId: string;
40
+ transactionType: StarknetTransactionType;
41
+ };
42
+ export declare const rawTx: {
43
+ transfer: {
44
+ unsigned: string;
45
+ signed: string;
46
+ };
47
+ };
48
+ export declare const TEST_AMOUNTS: {
49
+ small: string;
50
+ medium: string;
51
+ large: string;
52
+ };
53
+ //# sourceMappingURL=starknet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"starknet.d.ts","sourceRoot":"","sources":["../../../test/resources/starknet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BpB,CAAC;AAEF,eAAO,MAAM,uBAAuB;;;;;;;;;;CAYnC,CAAC;AA2BF,eAAO,MAAM,KAAK;;;;;CAKjB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;CAIxB,CAAC"}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TEST_AMOUNTS = exports.rawTx = exports.StarknetTransactionData = exports.Accounts = void 0;
4
+ const iface_1 = require("../../src/lib/iface");
5
+ exports.Accounts = {
6
+ account1: {
7
+ secretKey: 'c5bccb8f471c5c9eb6483aa77ee4b700003b1e12df430a24d93238eb378b968b',
8
+ publicKey: '042ab77b959e28c4fa47fa8fb9e57cec3d66df5684d076ac2e4c5f28fd69a23dd31a59f908c8add51eab3530b4ac5d015166eaf2198c52fa9a8df7cfaeb8fdb7d4',
9
+ address: '0x05a63dd0563db1ab71b5ffd25a6b4aaf5730de5de53d64423e4293fc8b3e12f6',
10
+ },
11
+ account2: {
12
+ secretKey: '73312c28d0d455b6a29a9a66811ffda94f3db6bfd57bf5c2bed917ee5928e15f',
13
+ publicKey: '044e01707f70f6ad8d9f79e5f2c2f0bac5e91520e5e2491354c6c7827b59d44148847f9180ac9679a6ce66f69c330551a99f8f9b7419c437705602a54c258a9dfe',
14
+ address: '0x02e153ef86ae7682160f69f4218b6a41aebc79ca11dabb1a4fcd7cc55f16f977',
15
+ },
16
+ account3: {
17
+ publicKey: '042281378584012843130dce9b19002f88a949f237397e2f6cda2db1392d54f6345faaf51c384fbfe4e8f67eb12fdb53732d2ddfe7470f9310a0bf824dad3f6b1b',
18
+ secretKey: '7b4de3d8cc3e312c70f674b52f11818205546ca7036c8071997c46e429160dc3',
19
+ address: '0x00b45a0e9f4b1eff1e2d2e528ae7c443655346c62750518217fb82cbce4dbb54',
20
+ },
21
+ errorsAccounts: {
22
+ account1: {
23
+ secretKey: 'not ok',
24
+ publicKey: 'not ok',
25
+ address: 'not ok',
26
+ },
27
+ account2: {
28
+ secretKey: 'test_test',
29
+ publicKey: 'test_test',
30
+ address: 'invalid',
31
+ },
32
+ },
33
+ };
34
+ exports.StarknetTransactionData = {
35
+ senderAddress: exports.Accounts.account1.address,
36
+ nonce: '0',
37
+ calls: [
38
+ {
39
+ contractAddress: '0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d',
40
+ entrypoint: 'transfer',
41
+ calldata: [exports.Accounts.account2.address, '0xde0b6b3a7640000', '0x0'],
42
+ },
43
+ ],
44
+ chainId: '0x534e5f5345504f4c4941',
45
+ transactionType: iface_1.StarknetTransactionType.INVOKE,
46
+ };
47
+ // Raw transaction hex (JSON serialized to hex)
48
+ const rawTxUnsigned = Buffer.from(JSON.stringify({
49
+ senderAddress: exports.Accounts.account1.address,
50
+ calls: exports.StarknetTransactionData.calls,
51
+ nonce: '0',
52
+ chainId: '0x534e5f5345504f4c4941',
53
+ transactionType: iface_1.StarknetTransactionType.INVOKE,
54
+ }), 'utf-8').toString('hex');
55
+ const rawTxSigned = Buffer.from(JSON.stringify({
56
+ senderAddress: exports.Accounts.account1.address,
57
+ calls: exports.StarknetTransactionData.calls,
58
+ nonce: '0',
59
+ chainId: '0x534e5f5345504f4c4941',
60
+ transactionType: iface_1.StarknetTransactionType.INVOKE,
61
+ signature: ['0xabc123', '0xdef456', '0x789012', '0x345678', '0x0'],
62
+ transactionHash: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',
63
+ }), 'utf-8').toString('hex');
64
+ exports.rawTx = {
65
+ transfer: {
66
+ unsigned: rawTxUnsigned,
67
+ signed: rawTxSigned,
68
+ },
69
+ };
70
+ exports.TEST_AMOUNTS = {
71
+ small: '1000000000000000000',
72
+ medium: '10000000000000000000',
73
+ large: '999999999999999999999999',
74
+ };
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhcmtuZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3Jlc291cmNlcy9zdGFya25ldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBOEQ7QUFFakQsUUFBQSxRQUFRLEdBQUc7SUFDdEIsUUFBUSxFQUFFO1FBQ1IsU0FBUyxFQUFFLGtFQUFrRTtRQUM3RSxTQUFTLEVBQ1Asb0lBQW9JO1FBQ3RJLE9BQU8sRUFBRSxvRUFBb0U7S0FDOUU7SUFDRCxRQUFRLEVBQUU7UUFDUixTQUFTLEVBQUUsa0VBQWtFO1FBQzdFLFNBQVMsRUFDUCxvSUFBb0k7UUFDdEksT0FBTyxFQUFFLG9FQUFvRTtLQUM5RTtJQUNELFFBQVEsRUFBRTtRQUNSLFNBQVMsRUFDUCxvSUFBb0k7UUFDdEksU0FBUyxFQUFFLGtFQUFrRTtRQUM3RSxPQUFPLEVBQUUsb0VBQW9FO0tBQzlFO0lBQ0QsY0FBYyxFQUFFO1FBQ2QsUUFBUSxFQUFFO1lBQ1IsU0FBUyxFQUFFLFFBQVE7WUFDbkIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsT0FBTyxFQUFFLFFBQVE7U0FDbEI7UUFDRCxRQUFRLEVBQUU7WUFDUixTQUFTLEVBQUUsV0FBVztZQUN0QixTQUFTLEVBQUUsV0FBVztZQUN0QixPQUFPLEVBQUUsU0FBUztTQUNuQjtLQUNGO0NBQ0YsQ0FBQztBQUVXLFFBQUEsdUJBQXVCLEdBQUc7SUFDckMsYUFBYSxFQUFFLGdCQUFRLENBQUMsUUFBUSxDQUFDLE9BQU87SUFDeEMsS0FBSyxFQUFFLEdBQUc7SUFDVixLQUFLLEVBQUU7UUFDTDtZQUNFLGVBQWUsRUFBRSxvRUFBb0U7WUFDckYsVUFBVSxFQUFFLFVBQVU7WUFDdEIsUUFBUSxFQUFFLENBQUMsZ0JBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLEtBQUssQ0FBQztTQUNsRTtLQUNGO0lBQ0QsT0FBTyxFQUFFLHdCQUF3QjtJQUNqQyxlQUFlLEVBQUUsK0JBQXVCLENBQUMsTUFBTTtDQUNoRCxDQUFDO0FBRUYsK0NBQStDO0FBQy9DLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQy9CLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDYixhQUFhLEVBQUUsZ0JBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTztJQUN4QyxLQUFLLEVBQUUsK0JBQXVCLENBQUMsS0FBSztJQUNwQyxLQUFLLEVBQUUsR0FBRztJQUNWLE9BQU8sRUFBRSx3QkFBd0I7SUFDakMsZUFBZSxFQUFFLCtCQUF1QixDQUFDLE1BQU07Q0FDaEQsQ0FBQyxFQUNGLE9BQU8sQ0FDUixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUVsQixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ2IsYUFBYSxFQUFFLGdCQUFRLENBQUMsUUFBUSxDQUFDLE9BQU87SUFDeEMsS0FBSyxFQUFFLCtCQUF1QixDQUFDLEtBQUs7SUFDcEMsS0FBSyxFQUFFLEdBQUc7SUFDVixPQUFPLEVBQUUsd0JBQXdCO0lBQ2pDLGVBQWUsRUFBRSwrQkFBdUIsQ0FBQyxNQUFNO0lBQy9DLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUM7SUFDbEUsZUFBZSxFQUFFLG9FQUFvRTtDQUN0RixDQUFDLEVBQ0YsT0FBTyxDQUNSLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRUwsUUFBQSxLQUFLLEdBQUc7SUFDbkIsUUFBUSxFQUFFO1FBQ1IsUUFBUSxFQUFFLGFBQWE7UUFDdkIsTUFBTSxFQUFFLFdBQVc7S0FDcEI7Q0FDRixDQUFDO0FBRVcsUUFBQSxZQUFZLEdBQUc7SUFDMUIsS0FBSyxFQUFFLHFCQUFxQjtJQUM1QixNQUFNLEVBQUUsc0JBQXNCO0lBQzlCLEtBQUssRUFBRSwwQkFBMEI7Q0FDbEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9pZmFjZSc7XG5cbmV4cG9ydCBjb25zdCBBY2NvdW50cyA9IHtcbiAgYWNjb3VudDE6IHtcbiAgICBzZWNyZXRLZXk6ICdjNWJjY2I4ZjQ3MWM1YzllYjY0ODNhYTc3ZWU0YjcwMDAwM2IxZTEyZGY0MzBhMjRkOTMyMzhlYjM3OGI5NjhiJyxcbiAgICBwdWJsaWNLZXk6XG4gICAgICAnMDQyYWI3N2I5NTllMjhjNGZhNDdmYThmYjllNTdjZWMzZDY2ZGY1Njg0ZDA3NmFjMmU0YzVmMjhmZDY5YTIzZGQzMWE1OWY5MDhjOGFkZDUxZWFiMzUzMGI0YWM1ZDAxNTE2NmVhZjIxOThjNTJmYTlhOGRmN2NmYWViOGZkYjdkNCcsXG4gICAgYWRkcmVzczogJzB4MDVhNjNkZDA1NjNkYjFhYjcxYjVmZmQyNWE2YjRhYWY1NzMwZGU1ZGU1M2Q2NDQyM2U0MjkzZmM4YjNlMTJmNicsXG4gIH0sXG4gIGFjY291bnQyOiB7XG4gICAgc2VjcmV0S2V5OiAnNzMzMTJjMjhkMGQ0NTViNmEyOWE5YTY2ODExZmZkYTk0ZjNkYjZiZmQ1N2JmNWMyYmVkOTE3ZWU1OTI4ZTE1ZicsXG4gICAgcHVibGljS2V5OlxuICAgICAgJzA0NGUwMTcwN2Y3MGY2YWQ4ZDlmNzllNWYyYzJmMGJhYzVlOTE1MjBlNWUyNDkxMzU0YzZjNzgyN2I1OWQ0NDE0ODg0N2Y5MTgwYWM5Njc5YTZjZTY2ZjY5YzMzMDU1MWE5OWY4ZjliNzQxOWM0Mzc3MDU2MDJhNTRjMjU4YTlkZmUnLFxuICAgIGFkZHJlc3M6ICcweDAyZTE1M2VmODZhZTc2ODIxNjBmNjlmNDIxOGI2YTQxYWViYzc5Y2ExMWRhYmIxYTRmY2Q3Y2M1NWYxNmY5NzcnLFxuICB9LFxuICBhY2NvdW50Mzoge1xuICAgIHB1YmxpY0tleTpcbiAgICAgICcwNDIyODEzNzg1ODQwMTI4NDMxMzBkY2U5YjE5MDAyZjg4YTk0OWYyMzczOTdlMmY2Y2RhMmRiMTM5MmQ1NGY2MzQ1ZmFhZjUxYzM4NGZiZmU0ZThmNjdlYjEyZmRiNTM3MzJkMmRkZmU3NDcwZjkzMTBhMGJmODI0ZGFkM2Y2YjFiJyxcbiAgICBzZWNyZXRLZXk6ICc3YjRkZTNkOGNjM2UzMTJjNzBmNjc0YjUyZjExODE4MjA1NTQ2Y2E3MDM2YzgwNzE5OTdjNDZlNDI5MTYwZGMzJyxcbiAgICBhZGRyZXNzOiAnMHgwMGI0NWEwZTlmNGIxZWZmMWUyZDJlNTI4YWU3YzQ0MzY1NTM0NmM2Mjc1MDUxODIxN2ZiODJjYmNlNGRiYjU0JyxcbiAgfSxcbiAgZXJyb3JzQWNjb3VudHM6IHtcbiAgICBhY2NvdW50MToge1xuICAgICAgc2VjcmV0S2V5OiAnbm90IG9rJyxcbiAgICAgIHB1YmxpY0tleTogJ25vdCBvaycsXG4gICAgICBhZGRyZXNzOiAnbm90IG9rJyxcbiAgICB9LFxuICAgIGFjY291bnQyOiB7XG4gICAgICBzZWNyZXRLZXk6ICd0ZXN0X3Rlc3QnLFxuICAgICAgcHVibGljS2V5OiAndGVzdF90ZXN0JyxcbiAgICAgIGFkZHJlc3M6ICdpbnZhbGlkJyxcbiAgICB9LFxuICB9LFxufTtcblxuZXhwb3J0IGNvbnN0IFN0YXJrbmV0VHJhbnNhY3Rpb25EYXRhID0ge1xuICBzZW5kZXJBZGRyZXNzOiBBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICBub25jZTogJzAnLFxuICBjYWxsczogW1xuICAgIHtcbiAgICAgIGNvbnRyYWN0QWRkcmVzczogJzB4MDQ3MThmNWEwZmMzNGNjMWFmMTZhMWNkZWU5OGZmYjIwYzMxZjVjZDYxZDZhYjA3MjAxODU4ZjQyODdjOTM4ZCcsXG4gICAgICBlbnRyeXBvaW50OiAndHJhbnNmZXInLFxuICAgICAgY2FsbGRhdGE6IFtBY2NvdW50cy5hY2NvdW50Mi5hZGRyZXNzLCAnMHhkZTBiNmIzYTc2NDAwMDAnLCAnMHgwJ10sXG4gICAgfSxcbiAgXSxcbiAgY2hhaW5JZDogJzB4NTM0ZTVmNTM0NTUwNGY0YzQ5NDEnLFxuICB0cmFuc2FjdGlvblR5cGU6IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLklOVk9LRSxcbn07XG5cbi8vIFJhdyB0cmFuc2FjdGlvbiBoZXggKEpTT04gc2VyaWFsaXplZCB0byBoZXgpXG5jb25zdCByYXdUeFVuc2lnbmVkID0gQnVmZmVyLmZyb20oXG4gIEpTT04uc3RyaW5naWZ5KHtcbiAgICBzZW5kZXJBZGRyZXNzOiBBY2NvdW50cy5hY2NvdW50MS5hZGRyZXNzLFxuICAgIGNhbGxzOiBTdGFya25ldFRyYW5zYWN0aW9uRGF0YS5jYWxscyxcbiAgICBub25jZTogJzAnLFxuICAgIGNoYWluSWQ6ICcweDUzNGU1ZjUzNDU1MDRmNGM0OTQxJyxcbiAgICB0cmFuc2FjdGlvblR5cGU6IFN0YXJrbmV0VHJhbnNhY3Rpb25UeXBlLklOVk9LRSxcbiAgfSksXG4gICd1dGYtOCdcbikudG9TdHJpbmcoJ2hleCcpO1xuXG5jb25zdCByYXdUeFNpZ25lZCA9IEJ1ZmZlci5mcm9tKFxuICBKU09OLnN0cmluZ2lmeSh7XG4gICAgc2VuZGVyQWRkcmVzczogQWNjb3VudHMuYWNjb3VudDEuYWRkcmVzcyxcbiAgICBjYWxsczogU3RhcmtuZXRUcmFuc2FjdGlvbkRhdGEuY2FsbHMsXG4gICAgbm9uY2U6ICcwJyxcbiAgICBjaGFpbklkOiAnMHg1MzRlNWY1MzQ1NTA0ZjRjNDk0MScsXG4gICAgdHJhbnNhY3Rpb25UeXBlOiBTdGFya25ldFRyYW5zYWN0aW9uVHlwZS5JTlZPS0UsXG4gICAgc2lnbmF0dXJlOiBbJzB4YWJjMTIzJywgJzB4ZGVmNDU2JywgJzB4Nzg5MDEyJywgJzB4MzQ1Njc4JywgJzB4MCddLFxuICAgIHRyYW5zYWN0aW9uSGFzaDogJzB4MTIzNDU2Nzg5MGFiY2RlZjEyMzQ1Njc4OTBhYmNkZWYxMjM0NTY3ODkwYWJjZGVmMTIzNDU2Nzg5MGFiY2RlZicsXG4gIH0pLFxuICAndXRmLTgnXG4pLnRvU3RyaW5nKCdoZXgnKTtcblxuZXhwb3J0IGNvbnN0IHJhd1R4ID0ge1xuICB0cmFuc2Zlcjoge1xuICAgIHVuc2lnbmVkOiByYXdUeFVuc2lnbmVkLFxuICAgIHNpZ25lZDogcmF3VHhTaWduZWQsXG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgVEVTVF9BTU9VTlRTID0ge1xuICBzbWFsbDogJzEwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICBtZWRpdW06ICcxMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gIGxhcmdlOiAnOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Jyxcbn07XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keyPair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../test/unit/keyPair.ts"],"names":[],"mappings":""}