@bitgo-beta/sdk-coin-tempo 1.0.1-beta.31 → 1.0.1-beta.310

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 (51) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +2 -1
  4. package/dist/src/lib/constants.d.ts +21 -1
  5. package/dist/src/lib/constants.d.ts.map +1 -1
  6. package/dist/src/lib/constants.js +25 -5
  7. package/dist/src/lib/index.d.ts +4 -0
  8. package/dist/src/lib/index.d.ts.map +1 -1
  9. package/dist/src/lib/index.js +5 -1
  10. package/dist/src/lib/keyPair.d.ts +5 -25
  11. package/dist/src/lib/keyPair.d.ts.map +1 -1
  12. package/dist/src/lib/keyPair.js +9 -97
  13. package/dist/src/lib/tip20Abi.d.ts +98 -0
  14. package/dist/src/lib/tip20Abi.d.ts.map +1 -0
  15. package/dist/src/lib/tip20Abi.js +62 -0
  16. package/dist/src/lib/transaction.d.ts +144 -0
  17. package/dist/src/lib/transaction.d.ts.map +1 -0
  18. package/dist/src/lib/transaction.js +216 -0
  19. package/dist/src/lib/transactionBuilder.d.ts +139 -0
  20. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  21. package/dist/src/lib/transactionBuilder.js +408 -0
  22. package/dist/src/lib/types.d.ts +27 -0
  23. package/dist/src/lib/types.d.ts.map +1 -0
  24. package/dist/src/lib/types.js +3 -0
  25. package/dist/src/lib/utils.d.ts +70 -7
  26. package/dist/src/lib/utils.d.ts.map +1 -1
  27. package/dist/src/lib/utils.js +148 -16
  28. package/dist/src/register.d.ts.map +1 -1
  29. package/dist/src/register.js +5 -1
  30. package/dist/src/tempo.d.ts +95 -41
  31. package/dist/src/tempo.d.ts.map +1 -1
  32. package/dist/src/tempo.js +447 -76
  33. package/dist/src/tip20Token.d.ts +83 -0
  34. package/dist/src/tip20Token.d.ts.map +1 -0
  35. package/dist/src/tip20Token.js +202 -0
  36. package/dist/test/integration/tip20.d.ts +7 -0
  37. package/dist/test/integration/tip20.d.ts.map +1 -0
  38. package/dist/test/integration/tip20.js +178 -0
  39. package/dist/test/resources/tempo.d.ts +61 -0
  40. package/dist/test/resources/tempo.d.ts.map +1 -0
  41. package/dist/test/resources/tempo.js +79 -0
  42. package/dist/test/unit/index.js +172 -3
  43. package/dist/test/unit/tempo.d.ts +2 -0
  44. package/dist/test/unit/tempo.d.ts.map +1 -0
  45. package/dist/test/unit/tempo.js +207 -0
  46. package/dist/test/unit/transactionBuilder.d.ts +2 -0
  47. package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
  48. package/dist/test/unit/transactionBuilder.js +858 -0
  49. package/dist/test/unit/utils.js +6 -5
  50. package/dist/tsconfig.tsbuildinfo +1 -1
  51. package/package.json +12 -7
@@ -1,40 +1,172 @@
1
1
  "use strict";
2
+ /**
3
+ * Tempo Utility Functions
4
+ *
5
+ * Since Tempo is EVM-compatible, we can reuse Ethereum utilities
6
+ */
2
7
  Object.defineProperty(exports, "__esModule", { value: true });
3
8
  exports.isValidAddress = isValidAddress;
4
9
  exports.isValidPublicKey = isValidPublicKey;
5
10
  exports.isValidPrivateKey = isValidPrivateKey;
11
+ exports.amountToTip20Units = amountToTip20Units;
12
+ exports.tip20UnitsToAmount = tip20UnitsToAmount;
13
+ exports.stringToBytes32 = stringToBytes32;
14
+ exports.encodeTip20TransferWithMemo = encodeTip20TransferWithMemo;
15
+ exports.isValidTip20Amount = isValidTip20Amount;
16
+ exports.isTip20Transaction = isTip20Transaction;
17
+ exports.isValidMemoId = isValidMemoId;
18
+ exports.isValidHexData = isValidHexData;
19
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
20
+ const ethers_1 = require("ethers");
6
21
  const constants_1 = require("./constants");
22
+ const tip20Abi_1 = require("./tip20Abi");
23
+ const AA_TX_HEX_REGEX = new RegExp(`^${constants_1.AA_TRANSACTION_TYPE}[0-9a-f]*$`, 'i');
7
24
  /**
8
- * Utility functions for Tempo
9
- */
10
- /**
11
- * Check if the address is valid
12
- * @param address
25
+ * Check if address is valid Ethereum-style address
26
+ * Uses ethers.js isAddress for proper validation including checksum
13
27
  */
14
28
  function isValidAddress(address) {
15
- // TODO: Implement proper address validation for Tempo
16
- return constants_1.VALID_ADDRESS_REGEX.test(address);
29
+ if (typeof address !== 'string') {
30
+ return false;
31
+ }
32
+ return ethers_1.ethers.utils.isAddress(address);
17
33
  }
18
34
  /**
19
- * Check if the public key is valid
20
- * @param publicKey
35
+ * Check if public key is valid (BIP32 xpub format)
36
+ * TODO: Replace with ETH utils when implementing
21
37
  */
22
38
  function isValidPublicKey(publicKey) {
23
- // TODO: Implement proper public key validation for Tempo
24
- return constants_1.VALID_PUBLIC_KEY_REGEX.test(publicKey);
39
+ if (typeof publicKey !== 'string') {
40
+ return false;
41
+ }
42
+ try {
43
+ const hdNode = secp256k1_1.bip32.fromBase58(publicKey);
44
+ return hdNode.isNeutered();
45
+ }
46
+ catch (e) {
47
+ return false;
48
+ }
25
49
  }
26
50
  /**
27
- * Check if the private key is valid
28
- * @param privateKey
51
+ * Check if private key is valid (BIP32 xprv format)
52
+ * TODO: Replace with ETH utils when implementing
29
53
  */
30
54
  function isValidPrivateKey(privateKey) {
31
- // TODO: Implement proper private key validation for Tempo
32
- return privateKey.length === 64;
55
+ if (typeof privateKey !== 'string') {
56
+ return false;
57
+ }
58
+ try {
59
+ const hdNode = secp256k1_1.bip32.fromBase58(privateKey);
60
+ return !hdNode.isNeutered();
61
+ }
62
+ catch (e) {
63
+ return false;
64
+ }
65
+ }
66
+ /**
67
+ * TIP-20 Utility Functions
68
+ */
69
+ /**
70
+ * Convert human-readable amount to TIP-20 units (6 decimals)
71
+ * @param amount - Human-readable amount (e.g., "1.5")
72
+ * @returns Amount in TIP-20 smallest units as bigint
73
+ * @example amountToTip20Units("1.5") => 1500000n
74
+ */
75
+ function amountToTip20Units(amount) {
76
+ try {
77
+ return BigInt(ethers_1.ethers.utils.parseUnits(amount, constants_1.TIP20_DECIMALS).toString());
78
+ }
79
+ catch (error) {
80
+ throw new Error(`Invalid amount format: ${amount}. Expected decimal string.`);
81
+ }
82
+ }
83
+ /**
84
+ * Convert TIP-20 units (6 decimals) to human-readable amount
85
+ * @param units - Amount in TIP-20 smallest units
86
+ * @returns Human-readable amount string
87
+ * @example tip20UnitsToAmount(1500000n) => "1.5"
88
+ */
89
+ function tip20UnitsToAmount(units) {
90
+ return ethers_1.ethers.utils.formatUnits(units.toString(), constants_1.TIP20_DECIMALS);
91
+ }
92
+ /**
93
+ * Convert string to bytes32 for memo field
94
+ * @param memo - Memo string to encode
95
+ * @returns Hex-encoded bytes32 value
96
+ * @example stringToBytes32("INVOICE-001") => "0x494e564f4943452d30303100..."
97
+ */
98
+ function stringToBytes32(memo) {
99
+ const memoByteLength = new TextEncoder().encode(memo).length;
100
+ if (memoByteLength > 32) {
101
+ throw new Error(`Memo too long: ${memoByteLength} bytes. Maximum 32 bytes.`);
102
+ }
103
+ const hexString = ethers_1.ethers.utils.hexlify(ethers_1.ethers.utils.toUtf8Bytes(memo));
104
+ return ethers_1.ethers.utils.hexZeroPad(hexString, 32);
105
+ }
106
+ /**
107
+ * Encode TIP-20 transferWithMemo function call using ethers.js
108
+ * @param to - Recipient address
109
+ * @param amount - Amount in TIP-20 units (bigint)
110
+ * @param memo - Optional memo string
111
+ * @returns Encoded function call data
112
+ */
113
+ function encodeTip20TransferWithMemo(to, amount, memo) {
114
+ const memoBytes = memo ? stringToBytes32(memo) : ethers_1.ethers.utils.hexZeroPad('0x', 32);
115
+ const iface = new ethers_1.ethers.utils.Interface(tip20Abi_1.TIP20_TRANSFER_WITH_MEMO_ABI);
116
+ return iface.encodeFunctionData('transferWithMemo', [to, amount, memoBytes]);
117
+ }
118
+ /**
119
+ * Validate TIP-20 amount format
120
+ * @param amount - Amount string to validate
121
+ * @returns true if valid, false otherwise
122
+ */
123
+ function isValidTip20Amount(amount) {
124
+ if (typeof amount !== 'string' || amount.trim() === '') {
125
+ return false;
126
+ }
127
+ // Check for negative amounts before parsing
128
+ if (amount.startsWith('-')) {
129
+ return false;
130
+ }
131
+ try {
132
+ const parsed = ethers_1.ethers.utils.parseUnits(amount, constants_1.TIP20_DECIMALS);
133
+ return parsed.gte(0);
134
+ }
135
+ catch {
136
+ return false;
137
+ }
138
+ }
139
+ /**
140
+ * Check if a raw transaction string is a Tempo AA transaction (type 0x76)
141
+ */
142
+ function isTip20Transaction(raw) {
143
+ return AA_TX_HEX_REGEX.test(raw);
144
+ }
145
+ /**
146
+ * Validate that a memoId is a valid non-negative integer string
147
+ */
148
+ function isValidMemoId(memoId) {
149
+ return typeof memoId === 'string' && /^(0|[1-9]\d*)$/.test(memoId);
150
+ }
151
+ /**
152
+ * Validate that a string is a non-empty 0x-prefixed hex string
153
+ * Used to validate pre-encoded calldata for raw contract calls
154
+ */
155
+ function isValidHexData(data) {
156
+ return typeof data === 'string' && /^0x[0-9a-fA-F]+$/.test(data) && data.length > 2 && data.length % 2 === 0;
33
157
  }
34
158
  const utils = {
35
159
  isValidAddress,
36
160
  isValidPublicKey,
37
161
  isValidPrivateKey,
162
+ amountToTip20Units,
163
+ tip20UnitsToAmount,
164
+ stringToBytes32,
165
+ encodeTip20TransferWithMemo,
166
+ isValidTip20Amount,
167
+ isTip20Transaction,
168
+ isValidMemoId,
169
+ isValidHexData,
38
170
  };
39
171
  exports.default = utils;
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsd0NBR0M7QUFNRCw0Q0FHQztBQU1ELDhDQUdDO0FBL0JELDJDQUEwRTtBQUUxRTs7R0FFRztBQUVIOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlO0lBQzVDLHNEQUFzRDtJQUN0RCxPQUFPLCtCQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsU0FBaUI7SUFDaEQseURBQXlEO0lBQ3pELE9BQU8sa0NBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxVQUFrQjtJQUNsRCwwREFBMEQ7SUFDMUQsT0FBTyxVQUFVLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxLQUFLLEdBQUc7SUFDWixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtDQUNsQixDQUFDO0FBRUYsa0JBQWUsS0FBSyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVkFMSURfQUREUkVTU19SRUdFWCwgVkFMSURfUFVCTElDX0tFWV9SRUdFWCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgVGVtcG9cbiAqL1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkXG4gKiBAcGFyYW0gYWRkcmVzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIFRPRE86IEltcGxlbWVudCBwcm9wZXIgYWRkcmVzcyB2YWxpZGF0aW9uIGZvciBUZW1wb1xuICByZXR1cm4gVkFMSURfQUREUkVTU19SRUdFWC50ZXN0KGFkZHJlc3MpO1xufVxuXG4vKipcbiAqIENoZWNrIGlmIHRoZSBwdWJsaWMga2V5IGlzIHZhbGlkXG4gKiBAcGFyYW0gcHVibGljS2V5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIFRPRE86IEltcGxlbWVudCBwcm9wZXIgcHVibGljIGtleSB2YWxpZGF0aW9uIGZvciBUZW1wb1xuICByZXR1cm4gVkFMSURfUFVCTElDX0tFWV9SRUdFWC50ZXN0KHB1YmxpY0tleSk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHByaXZhdGUga2V5IGlzIHZhbGlkXG4gKiBAcGFyYW0gcHJpdmF0ZUtleVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZFByaXZhdGVLZXkocHJpdmF0ZUtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIFRPRE86IEltcGxlbWVudCBwcm9wZXIgcHJpdmF0ZSBrZXkgdmFsaWRhdGlvbiBmb3IgVGVtcG9cbiAgcmV0dXJuIHByaXZhdGVLZXkubGVuZ3RoID09PSA2NDtcbn1cblxuY29uc3QgdXRpbHMgPSB7XG4gIGlzVmFsaWRBZGRyZXNzLFxuICBpc1ZhbGlkUHVibGljS2V5LFxuICBpc1ZhbGlkUHJpdmF0ZUtleSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHV0aWxzO1xuIl19
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOztBQWdCSCx3Q0FLQztBQU1ELDRDQVVDO0FBTUQsOENBVUM7QUFZRCxnREFNQztBQVFELGdEQUVDO0FBUUQsMENBT0M7QUFTRCxrRUFLQztBQU9ELGdEQWNDO0FBS0QsZ0RBRUM7QUFLRCxzQ0FFQztBQU1ELHdDQUVDO0FBdkpELHFEQUE4QztBQUM5QyxtQ0FBZ0M7QUFDaEMsMkNBQWtFO0FBQ2xFLHlDQUEwRDtBQUUxRCxNQUFNLGVBQWUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLCtCQUFtQixZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFLN0U7OztHQUdHO0FBQ0gsU0FBZ0IsY0FBYyxDQUFDLE9BQWU7SUFDNUMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLGVBQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxTQUFpQjtJQUNoRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLGlCQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQWdCLGlCQUFpQixDQUFDLFVBQWtCO0lBQ2xELElBQUksT0FB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QUN2QixDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsR0FBVztJQUM1QyxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLE1BQWM7SUFDMUMsT0FBTyxPQUFPLE1BQU0sS0FBSyxRQUFRLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixjQUFjLENBQUMsSUFBWTtJQUN6QyxPQUFPLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9HLENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRztJQUNaLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLDJCQUEyQjtJQUMzQixrQkFBa0I7SUFDbEIsa0JBQWtCO0lBQ2xCLGFBQWE7SUFDYixjQUFjO0NBQ2YsQ0FBQztBQUVGLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVtcG8gVXRpbGl0eSBGdW5jdGlvbnNcbiAqXG4gKiBTaW5jZSBUZW1wbyBpcyBFVk0tY29tcGF0aWJsZSwgd2UgY2FuIHJldXNlIEV0aGVyZXVtIHV0aWxpdGllc1xuICovXG5cbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IGV0aGVycyB9IGZyb20gJ2V0aGVycyc7XG5pbXBvcnQgeyBBQV9UUkFOU0FDVElPTl9UWVBFLCBUSVAyMF9ERUNJTUFMUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFRJUDIwX1RSQU5TRkVSX1dJVEhfTUVNT19BQkkgfSBmcm9tICcuL3RpcDIwQWJpJztcblxuY29uc3QgQUFfVFhfSEVYX1JFR0VYID0gbmV3IFJlZ0V4cChgXiR7QUFfVFJBTlNBQ1RJT05fVFlQRX1bMC05YS1mXSokYCwgJ2knKTtcblxudHlwZSBBZGRyZXNzID0gc3RyaW5nO1xudHlwZSBIZXggPSBzdHJpbmc7XG5cbi8qKlxuICogQ2hlY2sgaWYgYWRkcmVzcyBpcyB2YWxpZCBFdGhlcmV1bS1zdHlsZSBhZGRyZXNzXG4gKiBVc2VzIGV0aGVycy5qcyBpc0FkZHJlc3MgZm9yIHByb3BlciB2YWxpZGF0aW9uIGluY2x1ZGluZyBjaGVja3N1bVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgYWRkcmVzcyAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGV0aGVycy51dGlscy5pc0FkZHJlc3MoYWRkcmVzcyk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgcHVibGljIGtleSBpcyB2YWxpZCAoQklQMzIgeHB1YiBmb3JtYXQpXG4gKiBUT0RPOiBSZXBsYWNlIHdpdGggRVRIIHV0aWxzIHdoZW4gaW1wbGVtZW50aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgcHVibGljS2V5ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgocHVibGljS2V5KTtcbiAgICByZXR1cm4gaGROb2RlLmlzTmV1dGVyZWQoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHByaXZhdGUga2V5IGlzIHZhbGlkIChCSVAzMiB4cHJ2IGZvcm1hdClcbiAqIFRPRE86IFJlcGxhY2Ugd2l0aCBFVEggdXRpbHMgd2hlbiBpbXBsZW1lbnRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcml2YXRlS2V5KHByaXZhdGVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHByaXZhdGVLZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaGROb2RlID0gYmlwMzIuZnJvbUJhc2U1OChwcml2YXRlS2V5KTtcbiAgICByZXR1cm4gIWhkTm9kZS5pc05ldXRlcmVkKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUSVAtMjAgVXRpbGl0eSBGdW5jdGlvbnNcbiAqL1xuXG4vKipcbiAqIENvbnZlcnQgaHVtYW4tcmVhZGFibGUgYW1vdW50IHRvIFRJUC0yMCB1bml0cyAoNiBkZWNpbWFscylcbiAqIEBwYXJhbSBhbW91bnQgLSBIdW1hbi1yZWFkYWJsZSBhbW91bnQgKGUuZy4sIFwiMS41XCIpXG4gKiBAcmV0dXJucyBBbW91bnQgaW4gVElQLTIwIHNtYWxsZXN0IHVuaXRzIGFzIGJpZ2ludFxuICogQGV4YW1wbGUgYW1vdW50VG9UaXAyMFVuaXRzKFwiMS41XCIpID0+IDE1MDAwMDBuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbW91bnRUb1RpcDIwVW5pdHMoYW1vdW50OiBzdHJpbmcpOiBiaWdpbnQge1xuICB0cnkge1xuICAgIHJldHVybiBCaWdJbnQoZXRoZXJzLnV0aWxzLnBhcnNlVW5pdHMoYW1vdW50LCBUSVAyMF9ERUNJTUFMUykudG9TdHJpbmcoKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFtb3VudCBmb3JtYXQ6ICR7YW1vdW50fS4gRXhwZWN0ZWQgZGVjaW1hbCBzdHJpbmcuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IFRJUC0yMCB1bml0cyAoNiBkZWNpbWFscykgdG8gaHVtYW4tcmVhZGFibGUgYW1vdW50XG4gKiBAcGFyYW0gdW5pdHMgLSBBbW91bnQgaW4gVElQLTIwIHNtYWxsZXN0IHVuaXRzXG4gKiBAcmV0dXJucyBIdW1hbi1yZWFkYWJsZSBhbW91bnQgc3RyaW5nXG4gKiBAZXhhbXBsZSB0aXAyMFVuaXRzVG9BbW91bnQoMTUwMDAwMG4pID0+IFwiMS41XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpcDIwVW5pdHNUb0Ftb3VudCh1bml0czogYmlnaW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGV0aGVycy51dGlscy5mb3JtYXRVbml0cyh1bml0cy50b1N0cmluZygpLCBUSVAyMF9ERUNJTUFMUyk7XG59XG5cbi8qKlxuICogQ29udmVydCBzdHJpbmcgdG8gYnl0ZXMzMiBmb3IgbWVtbyBmaWVsZFxuICogQHBhcmFtIG1lbW8gLSBNZW1vIHN0cmluZyB0byBlbmNvZGVcbiAqIEByZXR1cm5zIEhleC1lbmNvZGVkIGJ5dGVzMzIgdmFsdWVcbiAqIEBleGFtcGxlIHN0cmluZ1RvQnl0ZXMzMihcIklOVk9JQ0UtMDAxXCIpID0+IFwiMHg0OTRlNTY0ZjQ5NDM0NTJkMzAzMDMxMDAuLi5cIlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9CeXRlczMyKG1lbW86IHN0cmluZyk6IEhleCB7XG4gIGNvbnN0IG1lbW9CeXRlTGVuZ3RoID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKG1lbW8pLmxlbmd0aDtcbiAgaWYgKG1lbW9CeXRlTGVuZ3RoID4gMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1lbW8gdG9vIGxvbmc6ICR7bWVtb0J5dGVMZW5ndGh9IGJ5dGVzLiBNYXhpbXVtIDMyIGJ5dGVzLmApO1xuICB9XG4gIGNvbnN0IGhleFN0cmluZyA9IGV0aGVycy51dGlscy5oZXhsaWZ5KGV0aGVycy51dGlscy50b1V0ZjhCeXRlcyhtZW1vKSk7XG4gIHJldHVybiBldGhlcnMudXRpbHMuaGV4WmVyb1BhZChoZXhTdHJpbmcsIDMyKTtcbn1cblxuLyoqXG4gKiBFbmNvZGUgVElQLTIwIHRyYW5zZmVyV2l0aE1lbW8gZnVuY3Rpb24gY2FsbCB1c2luZyBldGhlcnMuanNcbiAqIEBwYXJhbSB0byAtIFJlY2lwaWVudCBhZGRyZXNzXG4gKiBAcGFyYW0gYW1vdW50IC0gQW1vdW50IGluIFRJUC0yMCB1bml0cyAoYmlnaW50KVxuICogQHBhcmFtIG1lbW8gLSBPcHRpb25hbCBtZW1vIHN0cmluZ1xuICogQHJldHVybnMgRW5jb2RlZCBmdW5jdGlvbiBjYWxsIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVRpcDIwVHJhbnNmZXJXaXRoTWVtbyh0bzogQWRkcmVzcywgYW1vdW50OiBiaWdpbnQsIG1lbW8/OiBzdHJpbmcpOiBIZXgge1xuICBjb25zdCBtZW1vQnl0ZXMgPSBtZW1vID8gc3RyaW5nVG9CeXRlczMyKG1lbW8pIDogZXRoZXJzLnV0aWxzLmhleFplcm9QYWQoJzB4JywgMzIpO1xuXG4gIGNvbnN0IGlmYWNlID0gbmV3IGV0aGVycy51dGlscy5JbnRlcmZhY2UoVElQMjBfVFJBTlNGRVJfV0lUSF9NRU1PX0FCSSk7XG4gIHJldHVybiBpZmFjZS5lbmNvZGVGdW5jdGlvbkRhdGEoJ3RyYW5zZmVyV2l0aE1lbW8nLCBbdG8sIGFtb3VudCwgbWVtb0J5dGVzXSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgVElQLTIwIGFtb3VudCBmb3JtYXRcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgc3RyaW5nIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB0cnVlIGlmIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUaXAyMEFtb3VudChhbW91bnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGFtb3VudCAhPT0gJ3N0cmluZycgfHwgYW1vdW50LnRyaW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIGFtb3VudHMgYmVmb3JlIHBhcnNpbmdcbiAgaWYgKGFtb3VudC5zdGFydHNXaXRoKCctJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBldGhlcnMudXRpbHMucGFyc2VVbml0cyhhbW91bnQsIFRJUDIwX0RFQ0lNQUxTKTtcbiAgICByZXR1cm4gcGFyc2VkLmd0ZSgwKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSByYXcgdHJhbnNhY3Rpb24gc3RyaW5nIGlzIGEgVGVtcG8gQUEgdHJhbnNhY3Rpb24gKHR5cGUgMHg3NilcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGlwMjBUcmFuc2FjdGlvbihyYXc6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQUFfVFhfSEVYX1JFR0VYLnRlc3QocmF3KTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IGEgbWVtb0lkIGlzIGEgdmFsaWQgbm9uLW5lZ2F0aXZlIGludGVnZXIgc3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkTWVtb0lkKG1lbW9JZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbWVtb0lkID09PSAnc3RyaW5nJyAmJiAvXigwfFsxLTldXFxkKikkLy50ZXN0KG1lbW9JZCk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhhdCBhIHN0cmluZyBpcyBhIG5vbi1lbXB0eSAweC1wcmVmaXhlZCBoZXggc3RyaW5nXG4gKiBVc2VkIHRvIHZhbGlkYXRlIHByZS1lbmNvZGVkIGNhbGxkYXRhIGZvciByYXcgY29udHJhY3QgY2FsbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRIZXhEYXRhKGRhdGE6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnICYmIC9eMHhbMC05YS1mQS1GXSskLy50ZXN0KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gMiAmJiBkYXRhLmxlbmd0aCAlIDIgPT09IDA7XG59XG5cbmNvbnN0IHV0aWxzID0ge1xuICBpc1ZhbGlkQWRkcmVzcyxcbiAgaXNWYWxpZFB1YmxpY0tleSxcbiAgaXNWYWxpZFByaXZhdGVLZXksXG4gIGFtb3VudFRvVGlwMjBVbml0cyxcbiAgdGlwMjBVbml0c1RvQW1vdW50LFxuICBzdHJpbmdUb0J5dGVzMzIsXG4gIGVuY29kZVRpcDIwVHJhbnNmZXJXaXRoTWVtbyxcbiAgaXNWYWxpZFRpcDIwQW1vdW50LFxuICBpc1RpcDIwVHJhbnNhY3Rpb24sXG4gIGlzVmFsaWRNZW1vSWQsXG4gIGlzVmFsaWRIZXhEYXRhLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAGzC,CAAC"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKjD,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAMzC,CAAC"}
@@ -3,9 +3,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.register = void 0;
4
4
  const tempo_1 = require("./tempo");
5
5
  const ttempo_1 = require("./ttempo");
6
+ const tip20Token_1 = require("./tip20Token");
6
7
  const register = (sdk) => {
7
8
  sdk.register('tempo', tempo_1.Tempo.createInstance);
8
9
  sdk.register('ttempo', ttempo_1.Ttempo.createInstance);
10
+ tip20Token_1.Tip20Token.createTokenConstructors().forEach(({ name, coinConstructor }) => {
11
+ sdk.register(name, coinConstructor);
12
+ });
9
13
  };
10
14
  exports.register = register;
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQWdDO0FBQ2hDLHFDQUFrQztBQUUzQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQWMsRUFBUSxFQUFFO0lBQy9DLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLGFBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM1QyxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxlQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBSFcsUUFBQSxRQUFRLFlBR25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVGVtcG8gfSBmcm9tICcuL3RlbXBvJztcbmltcG9ydCB7IFR0ZW1wbyB9IGZyb20gJy4vdHRlbXBvJztcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyID0gKHNkazogQml0R29CYXNlKTogdm9pZCA9PiB7XG4gIHNkay5yZWdpc3RlcigndGVtcG8nLCBUZW1wby5jcmVhdGVJbnN0YW5jZSk7XG4gIHNkay5yZWdpc3RlcigndHRlbXBvJywgVHRlbXBvLmNyZWF0ZUluc3RhbmNlKTtcbn07XG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQWdDO0FBQ2hDLHFDQUFrQztBQUNsQyw2Q0FBMEM7QUFFbkMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFjLEVBQVEsRUFBRTtJQUMvQyxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxhQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDNUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsZUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLHVCQUFVLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFO1FBQ3pFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBTlcsUUFBQSxRQUFRLFlBTW5CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQml0R29CYXNlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgVGVtcG8gfSBmcm9tICcuL3RlbXBvJztcbmltcG9ydCB7IFR0ZW1wbyB9IGZyb20gJy4vdHRlbXBvJztcbmltcG9ydCB7IFRpcDIwVG9rZW4gfSBmcm9tICcuL3RpcDIwVG9rZW4nO1xuXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgc2RrLnJlZ2lzdGVyKCd0ZW1wbycsIFRlbXBvLmNyZWF0ZUluc3RhbmNlKTtcbiAgc2RrLnJlZ2lzdGVyKCd0dGVtcG8nLCBUdGVtcG8uY3JlYXRlSW5zdGFuY2UpO1xuICBUaXAyMFRva2VuLmNyZWF0ZVRva2VuQ29uc3RydWN0b3JzKCkuZm9yRWFjaCgoeyBuYW1lLCBjb2luQ29uc3RydWN0b3IgfSkgPT4ge1xuICAgIHNkay5yZWdpc3RlcihuYW1lLCBjb2luQ29uc3RydWN0b3IpO1xuICB9KTtcbn07XG4iXX0=
@@ -1,72 +1,126 @@
1
- import { AuditDecryptedKeyParams, BaseCoin, BitGoBase, KeyPair, ParsedTransaction, ParseTransactionOptions, SignedTransaction, SignTransactionOptions, VerifyAddressOptions, VerifyTransactionOptions, TransactionExplanation } from '@bitgo-beta/sdk-core';
1
+ /**
2
+ * @prettier
3
+ */
4
+ import { AbstractEthLikeNewCoins, RecoverOptions, OfflineVaultTxInfo, UnsignedSweepTxMPCv2, RecoveryInfo, TransactionBuilder, VerifyEthTransactionOptions, VerifyEthAddressOptions, TssVerifyEthAddressOptions } from '@bitgo-beta/abstract-eth';
5
+ import type * as EthLikeCommon from '@ethereumjs/common';
6
+ import { BaseCoin, BitGoBase, MPCAlgorithm, ParseTransactionOptions, ParsedTransaction, PopulatedIntent, PrebuildTransactionWithIntentOptions } from '@bitgo-beta/sdk-core';
2
7
  import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
3
- export declare class Tempo extends BaseCoin {
4
- protected readonly _staticsCoin: Readonly<StaticsBaseCoin>;
8
+ export declare class Tempo extends AbstractEthLikeNewCoins {
5
9
  protected constructor(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>);
10
+ /**
11
+ * Factory method to create Tempo instance
12
+ */
6
13
  static createInstance(bitgo: BitGoBase, staticsCoin?: Readonly<StaticsBaseCoin>): BaseCoin;
7
14
  /**
8
- * Factor between the coin's base unit and its smallest subdivision
15
+ * Get the chain identifier
9
16
  */
10
- getBaseFactor(): number;
11
17
  getChain(): string;
12
- getFamily(): string;
18
+ /**
19
+ * Get the full chain name
20
+ */
13
21
  getFullName(): string;
22
+ /** @inheritdoc */
23
+ getBaseFactor(): number;
14
24
  /**
15
- * Flag for sending value of 0
16
- * @returns {boolean} True if okay to send 0 value, false otherwise
25
+ * Check if value-less transfers are allowed
26
+ * EVM-based chains allow zero-value transfers for smart contract interactions
17
27
  */
18
28
  valuelessTransferAllowed(): boolean;
19
29
  /**
20
- * Checks if this is a valid base58 or hex address
21
- * @param address
30
+ * Check if TSS is supported
22
31
  */
23
- isValidAddress(address: string): boolean;
32
+ supportsTss(): boolean;
24
33
  /**
25
- * Generate ed25519 key pair
26
- *
27
- * @param seed
28
- * @returns {Object} object with generated pub, prv
34
+ * Get the MPC algorithm (ECDSA for EVM chains)
29
35
  */
30
- generateKeyPair(seed?: Buffer): KeyPair;
36
+ getMPCAlgorithm(): MPCAlgorithm;
31
37
  /**
32
- * Return boolean indicating whether input is valid public key for the coin.
33
- *
34
- * @param {String} pub the pub to be checked
35
- * @returns {Boolean} is it valid?
38
+ * Evaluates whether an address string is valid for Tempo
39
+ * Supports addresses with optional memoId query parameter (e.g., 0x...?memoId=123)
40
+ * @param address - The address to validate
41
+ * @returns true if address is valid
36
42
  */
37
- isValidPub(pub: string): boolean;
43
+ isValidAddress(address: string): boolean;
38
44
  /**
39
- * Verify that a transaction prebuild complies with the original intention
40
- * @param params
41
- * @param params.txPrebuild
42
- * @param params.txParams
43
- * @returns {boolean}
45
+ * Parse address into base address and optional memoId
46
+ * Throws InvalidAddressError for invalid address formats
47
+ * @param address - Address string, potentially with ?memoId=X suffix
48
+ * @returns Object containing address, baseAddress, and memoId (null if not present)
49
+ * @throws InvalidAddressError if address format is invalid
44
50
  */
45
- verifyTransaction(params: VerifyTransactionOptions): Promise<boolean>;
51
+ getAddressDetails(address: string): {
52
+ address: string;
53
+ baseAddress: string;
54
+ memoId: string | null;
55
+ };
46
56
  /**
47
- * Check if address is a wallet address
48
- * @param params
57
+ * Validate that a memoId is a valid non-negative integer string
58
+ * @param memoId - The memoId to validate
59
+ * @returns true if valid
49
60
  */
50
- isWalletAddress(params: VerifyAddressOptions): Promise<boolean>;
61
+ isValidMemoId(memoId: string): boolean;
51
62
  /**
52
- * Audit a decrypted private key for security purposes
53
- * @param params
63
+ * Tempo uses memoId-based addresses rather than forwarder contracts.
64
+ * Verify that the address belongs to this wallet by checking that the
65
+ * base (EVM) portion matches the wallet's base address.
54
66
  */
55
- auditDecryptedKey(params: AuditDecryptedKeyParams): Promise<void>;
67
+ isWalletAddress(params: VerifyEthAddressOptions | TssVerifyEthAddressOptions): Promise<boolean>;
56
68
  /**
57
- * Parse a transaction from the raw transaction hex
58
- * @param params
69
+ * Parse a serialised Tempo transaction and return its operations as SDK outputs.
70
+ * @inheritdoc
59
71
  */
60
72
  parseTransaction(params: ParseTransactionOptions): Promise<ParsedTransaction>;
61
73
  /**
62
- * Explain a transaction
63
- * @param params
74
+ * Verify that a Tempo transaction matches the intended recipients and amounts.
75
+ * @inheritdoc
76
+ */
77
+ verifyTransaction(params: VerifyEthTransactionOptions): Promise<boolean>;
78
+ /**
79
+ * Set coin-specific fields in the intent for Tempo TSS transactions.
80
+ * Ensures feeToken is properly wired through the intent for Tempo transactions.
81
+ * @param intent - The populated intent to modify
82
+ * @param params - The parameters containing feeToken
83
+ */
84
+ setCoinSpecificFieldsInIntent(intent: PopulatedIntent, params: PrebuildTransactionWithIntentOptions): void;
85
+ /**
86
+ * Query the Tempo Alchemy RPC for recovery balance/nonce information.
87
+ * Routes through queryTempoRpc using the URL from environments.ts.
88
+ */
89
+ recoveryBlockchainExplorerQuery(query: Record<string, string>, apiKey?: string): Promise<Record<string, unknown>>;
90
+ /**
91
+ * Translates Etherscan-style recovery queries into Tempo Alchemy JSON-RPC calls.
92
+ *
93
+ * Supported:
94
+ * account/balance → returns { result: '0' } (no native coin on Tempo)
95
+ * account/tokenbalance → eth_call (balanceOf selector 0x70a08231) → { result: decimalString }
96
+ * account/txlist → eth_getTransactionCount → { nonce: number }
97
+ */
98
+ private queryTempoRpc;
99
+ /**
100
+ * Shared helper: queries the token balance, computes sweep amount, and builds
101
+ * an unsigned TIP-20 transfer transaction. Used by both recovery paths.
102
+ *
103
+ * - tokenContractAddress: the token to sweep (defaults to pathUSD)
104
+ * - feeToken: always pathUSD
105
+ * - If sweeping pathUSD itself, reserves gasLimit × maxFeePerGas / 10^12 pathUSD units for fees.
106
+ */
107
+ private buildTempoSweepTx;
108
+ /**
109
+ * Overrides the base-class recoverTSS to use TIP-20 transactions instead of standard ETH.
110
+ *
111
+ * Two paths:
112
+ * - Unsigned sweep (plain public key shares): delegates to buildUnsignedSweepTxnTSS
113
+ * - Signed sweep (encrypted keys + passphrase): builds and signs a TIP-20 tx via MPC
114
+ */
115
+ protected recoverTSS(params: RecoverOptions): Promise<RecoveryInfo | OfflineVaultTxInfo | UnsignedSweepTxMPCv2>;
116
+ /**
117
+ * Builds an unsigned TIP-20 sweep transaction for the offline vault (unsigned sweep path).
118
+ * Called by recoverTSS when plain public key shares are provided.
64
119
  */
65
- explainTransaction(params: Record<string, unknown>): Promise<TransactionExplanation>;
120
+ protected buildUnsignedSweepTxnTSS(params: RecoverOptions): Promise<OfflineVaultTxInfo | UnsignedSweepTxMPCv2>;
66
121
  /**
67
- * Sign a transaction
68
- * @param params
122
+ * Get transaction builder for Tempo.
69
123
  */
70
- signTransaction(params: SignTransactionOptions): Promise<SignedTransaction>;
124
+ protected getTransactionBuilder(common?: EthLikeCommon.default): TransactionBuilder;
71
125
  }
72
126
  //# sourceMappingURL=tempo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/tempo.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,QAAQ,EACR,SAAS,EACT,OAAO,EACP,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAIlE,qBAAa,KAAM,SAAQ,QAAQ;IACjC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IAE3D,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;;OAEG;IACI,aAAa,IAAI,MAAM;IAIvB,QAAQ,IAAI,MAAM;IAIlB,SAAS,IAAI,MAAM;IAInB,WAAW,IAAI,MAAM;IAI5B;;;OAGG;IACH,wBAAwB,IAAI,OAAO;IAInC;;;OAGG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIxC;;;;;OAKG;IACH,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO;IAcvC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC;;;;;;OAMG;IACG,iBAAiB,CAAC,MAAM,EAAE,wBAAwB,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3E;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAKrE;;;OAGG;IACG,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvE;;;OAGG;IACG,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKnF;;;OAGG;IACG,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAK1F;;;OAGG;IACG,eAAe,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAIlF"}
1
+ {"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/tempo.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAClB,2BAA2B,EAC3B,uBAAuB,EACvB,0BAA0B,EAG3B,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,SAAS,EAGT,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EAEjB,eAAe,EACf,oCAAoC,EAKrC,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AAazE,qBAAa,KAAM,SAAQ,uBAAuB;IAChD,SAAS,aAAa,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC;IAI/E;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,QAAQ;IAI1F;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB,kBAAkB;IAClB,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,wBAAwB,IAAI,OAAO;IAInC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;;;;OAKG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAaxC;;;;;;OAMG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAsDnG;;;;OAIG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAItC;;;;OAIG;IACG,eAAe,CAAC,MAAM,EAAE,uBAAuB,GAAG,0BAA0B,GAAG,OAAO,CAAC,OAAO,CAAC;IA4BrG;;;OAGG;IACG,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAyBnF;;;OAGG;IACG,iBAAiB,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAAC,OAAO,CAAC;IAyE9E;;;;;OAKG;IACH,6BAA6B,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,oCAAoC,GAAG,IAAI;IAQ1G;;;OAGG;IACG,+BAA+B,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAWnC;;;;;;;OAOG;YACW,aAAa;IAkD3B;;;;;;;OAOG;YACW,iBAAiB;IA8C/B;;;;;;OAMG;cACa,UAAU,CACxB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,YAAY,GAAG,kBAAkB,GAAG,oBAAoB,CAAC;IA0CpE;;;OAGG;cACa,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;IAkDpH;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,GAAG,kBAAkB;CAGpF"}