@bitgo-beta/sdk-coin-tempo 1.0.1-beta.7 → 1.0.1-beta.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -1
- package/dist/src/lib/constants.d.ts +17 -1
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +22 -5
- package/dist/src/lib/index.d.ts +4 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +5 -1
- package/dist/src/lib/keyPair.d.ts +8 -18
- package/dist/src/lib/keyPair.d.ts.map +1 -1
- package/dist/src/lib/keyPair.js +18 -84
- package/dist/src/lib/tip20Abi.d.ts +98 -0
- package/dist/src/lib/tip20Abi.d.ts.map +1 -0
- package/dist/src/lib/tip20Abi.js +62 -0
- package/dist/src/lib/transaction.d.ts +112 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +164 -0
- package/dist/src/lib/transactionBuilder.d.ts +100 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +204 -0
- package/dist/src/lib/types.d.ts +17 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +3 -0
- package/dist/src/lib/utils.d.ts +54 -7
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +122 -16
- package/dist/src/register.d.ts +4 -0
- package/dist/src/register.d.ts.map +1 -1
- package/dist/src/register.js +26 -1
- package/dist/src/tempo.d.ts +37 -44
- package/dist/src/tempo.d.ts.map +1 -1
- package/dist/src/tempo.js +52 -84
- package/dist/src/tip20Token.d.ts +89 -0
- package/dist/src/tip20Token.d.ts.map +1 -0
- package/dist/src/tip20Token.js +198 -0
- package/dist/test/integration/tip20.d.ts +2 -0
- package/dist/test/integration/tip20.d.ts.map +1 -0
- package/dist/test/integration/tip20.js +115 -0
- package/dist/test/unit/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.js +252 -0
- package/dist/test/unit/utils.js +6 -5
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +10 -6
package/dist/src/lib/utils.js
CHANGED
|
@@ -1,40 +1,146 @@
|
|
|
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
|
+
const secp256k1_1 = require("@bitgo-beta/secp256k1");
|
|
17
|
+
const ethers_1 = require("ethers");
|
|
6
18
|
const constants_1 = require("./constants");
|
|
19
|
+
const tip20Abi_1 = require("./tip20Abi");
|
|
7
20
|
/**
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Check if the address is valid
|
|
12
|
-
* @param address
|
|
21
|
+
* Check if address is valid Ethereum-style address
|
|
22
|
+
* Uses ethers.js isAddress for proper validation including checksum
|
|
13
23
|
*/
|
|
14
24
|
function isValidAddress(address) {
|
|
15
|
-
|
|
16
|
-
|
|
25
|
+
if (typeof address !== 'string') {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
return ethers_1.ethers.utils.isAddress(address);
|
|
17
29
|
}
|
|
18
30
|
/**
|
|
19
|
-
* Check if
|
|
20
|
-
*
|
|
31
|
+
* Check if public key is valid (BIP32 xpub format)
|
|
32
|
+
* TODO: Replace with ETH utils when implementing
|
|
21
33
|
*/
|
|
22
34
|
function isValidPublicKey(publicKey) {
|
|
23
|
-
|
|
24
|
-
|
|
35
|
+
if (typeof publicKey !== 'string') {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
const hdNode = secp256k1_1.bip32.fromBase58(publicKey);
|
|
40
|
+
return hdNode.isNeutered();
|
|
41
|
+
}
|
|
42
|
+
catch (e) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
25
45
|
}
|
|
26
46
|
/**
|
|
27
|
-
* Check if
|
|
28
|
-
*
|
|
47
|
+
* Check if private key is valid (BIP32 xprv format)
|
|
48
|
+
* TODO: Replace with ETH utils when implementing
|
|
29
49
|
*/
|
|
30
50
|
function isValidPrivateKey(privateKey) {
|
|
31
|
-
|
|
32
|
-
|
|
51
|
+
if (typeof privateKey !== 'string') {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
try {
|
|
55
|
+
const hdNode = secp256k1_1.bip32.fromBase58(privateKey);
|
|
56
|
+
return !hdNode.isNeutered();
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* TIP-20 Utility Functions
|
|
64
|
+
*/
|
|
65
|
+
/**
|
|
66
|
+
* Convert human-readable amount to TIP-20 units (6 decimals)
|
|
67
|
+
* @param amount - Human-readable amount (e.g., "1.5")
|
|
68
|
+
* @returns Amount in TIP-20 smallest units as bigint
|
|
69
|
+
* @example amountToTip20Units("1.5") => 1500000n
|
|
70
|
+
*/
|
|
71
|
+
function amountToTip20Units(amount) {
|
|
72
|
+
try {
|
|
73
|
+
return BigInt(ethers_1.ethers.utils.parseUnits(amount, constants_1.TIP20_DECIMALS).toString());
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
throw new Error(`Invalid amount format: ${amount}. Expected decimal string.`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Convert TIP-20 units (6 decimals) to human-readable amount
|
|
81
|
+
* @param units - Amount in TIP-20 smallest units
|
|
82
|
+
* @returns Human-readable amount string
|
|
83
|
+
* @example tip20UnitsToAmount(1500000n) => "1.5"
|
|
84
|
+
*/
|
|
85
|
+
function tip20UnitsToAmount(units) {
|
|
86
|
+
return ethers_1.ethers.utils.formatUnits(units.toString(), constants_1.TIP20_DECIMALS);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Convert string to bytes32 for memo field
|
|
90
|
+
* @param memo - Memo string to encode
|
|
91
|
+
* @returns Hex-encoded bytes32 value
|
|
92
|
+
* @example stringToBytes32("INVOICE-001") => "0x494e564f4943452d30303100..."
|
|
93
|
+
*/
|
|
94
|
+
function stringToBytes32(memo) {
|
|
95
|
+
const memoByteLength = new TextEncoder().encode(memo).length;
|
|
96
|
+
if (memoByteLength > 32) {
|
|
97
|
+
throw new Error(`Memo too long: ${memoByteLength} bytes. Maximum 32 bytes.`);
|
|
98
|
+
}
|
|
99
|
+
const hexString = ethers_1.ethers.utils.hexlify(ethers_1.ethers.utils.toUtf8Bytes(memo));
|
|
100
|
+
return ethers_1.ethers.utils.hexZeroPad(hexString, 32);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Encode TIP-20 transferWithMemo function call using ethers.js
|
|
104
|
+
* @param to - Recipient address
|
|
105
|
+
* @param amount - Amount in TIP-20 units (bigint)
|
|
106
|
+
* @param memo - Optional memo string
|
|
107
|
+
* @returns Encoded function call data
|
|
108
|
+
*/
|
|
109
|
+
function encodeTip20TransferWithMemo(to, amount, memo) {
|
|
110
|
+
const memoBytes = memo ? stringToBytes32(memo) : ethers_1.ethers.utils.hexZeroPad('0x', 32);
|
|
111
|
+
const iface = new ethers_1.ethers.utils.Interface(tip20Abi_1.TIP20_TRANSFER_WITH_MEMO_ABI);
|
|
112
|
+
return iface.encodeFunctionData('transferWithMemo', [to, amount, memoBytes]);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Validate TIP-20 amount format
|
|
116
|
+
* @param amount - Amount string to validate
|
|
117
|
+
* @returns true if valid, false otherwise
|
|
118
|
+
*/
|
|
119
|
+
function isValidTip20Amount(amount) {
|
|
120
|
+
if (typeof amount !== 'string' || amount.trim() === '') {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
// Check for negative amounts before parsing
|
|
124
|
+
if (amount.startsWith('-')) {
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
const parsed = ethers_1.ethers.utils.parseUnits(amount, constants_1.TIP20_DECIMALS);
|
|
129
|
+
return parsed.gte(0);
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
33
134
|
}
|
|
34
135
|
const utils = {
|
|
35
136
|
isValidAddress,
|
|
36
137
|
isValidPublicKey,
|
|
37
138
|
isValidPrivateKey,
|
|
139
|
+
amountToTip20Units,
|
|
140
|
+
tip20UnitsToAmount,
|
|
141
|
+
stringToBytes32,
|
|
142
|
+
encodeTip20TransferWithMemo,
|
|
143
|
+
isValidTip20Amount,
|
|
38
144
|
};
|
|
39
145
|
exports.default = utils;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7OztHQUlHOztBQWNILHdDQUtDO0FBTUQsNENBVUM7QUFNRCw4Q0FVQztBQVlELGdEQU1DO0FBUUQsZ0RBRUM7QUFRRCwwQ0FPQztBQVNELGtFQUtDO0FBT0QsZ0RBY0M7QUEvSEQscURBQThDO0FBQzlDLG1DQUFnQztBQUNoQywyQ0FBNkM7QUFDN0MseUNBQTBEO0FBSzFEOzs7R0FHRztBQUNILFNBQWdCLGNBQWMsQ0FBQyxPQUFlO0lBQzVDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDaEMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxlQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQUMsU0FBaUI7SUFDaEQsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxpQkFBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQyxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxVQUFrQjtJQUNsRCxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ25DLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLGlCQUFLLENBQUMsVUFB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SUFDaEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLDJCQUEyQjtJQUMzQixrQkFBa0I7Q0FDbkIsQ0FBQztBQUVGLGtCQUFlLEtBQUssQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGVtcG8gVXRpbGl0eSBGdW5jdGlvbnNcbiAqXG4gKiBTaW5jZSBUZW1wbyBpcyBFVk0tY29tcGF0aWJsZSwgd2UgY2FuIHJldXNlIEV0aGVyZXVtIHV0aWxpdGllc1xuICovXG5cbmltcG9ydCB7IGJpcDMyIH0gZnJvbSAnQGJpdGdvLWJldGEvc2VjcDI1NmsxJztcbmltcG9ydCB7IGV0aGVycyB9IGZyb20gJ2V0aGVycyc7XG5pbXBvcnQgeyBUSVAyMF9ERUNJTUFMUyB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IFRJUDIwX1RSQU5TRkVSX1dJVEhfTUVNT19BQkkgfSBmcm9tICcuL3RpcDIwQWJpJztcblxudHlwZSBBZGRyZXNzID0gc3RyaW5nO1xudHlwZSBIZXggPSBzdHJpbmc7XG5cbi8qKlxuICogQ2hlY2sgaWYgYWRkcmVzcyBpcyB2YWxpZCBFdGhlcmV1bS1zdHlsZSBhZGRyZXNzXG4gKiBVc2VzIGV0aGVycy5qcyBpc0FkZHJlc3MgZm9yIHByb3BlciB2YWxpZGF0aW9uIGluY2x1ZGluZyBjaGVja3N1bVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEFkZHJlc3MoYWRkcmVzczogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgYWRkcmVzcyAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGV0aGVycy51dGlscy5pc0FkZHJlc3MoYWRkcmVzcyk7XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgcHVibGljIGtleSBpcyB2YWxpZCAoQklQMzIgeHB1YiBmb3JtYXQpXG4gKiBUT0RPOiBSZXBsYWNlIHdpdGggRVRIIHV0aWxzIHdoZW4gaW1wbGVtZW50aW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkUHVibGljS2V5KHB1YmxpY0tleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgcHVibGljS2V5ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IGhkTm9kZSA9IGJpcDMyLmZyb21CYXNlNTgocHVibGljS2V5KTtcbiAgICByZXR1cm4gaGROb2RlLmlzTmV1dGVyZWQoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIGlmIHByaXZhdGUga2V5IGlzIHZhbGlkIChCSVAzMiB4cHJ2IGZvcm1hdClcbiAqIFRPRE86IFJlcGxhY2Ugd2l0aCBFVEggdXRpbHMgd2hlbiBpbXBsZW1lbnRpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRQcml2YXRlS2V5KHByaXZhdGVLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHByaXZhdGVLZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgaGROb2RlID0gYmlwMzIuZnJvbUJhc2U1OChwcml2YXRlS2V5KTtcbiAgICByZXR1cm4gIWhkTm9kZS5pc05ldXRlcmVkKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUSVAtMjAgVXRpbGl0eSBGdW5jdGlvbnNcbiAqL1xuXG4vKipcbiAqIENvbnZlcnQgaHVtYW4tcmVhZGFibGUgYW1vdW50IHRvIFRJUC0yMCB1bml0cyAoNiBkZWNpbWFscylcbiAqIEBwYXJhbSBhbW91bnQgLSBIdW1hbi1yZWFkYWJsZSBhbW91bnQgKGUuZy4sIFwiMS41XCIpXG4gKiBAcmV0dXJucyBBbW91bnQgaW4gVElQLTIwIHNtYWxsZXN0IHVuaXRzIGFzIGJpZ2ludFxuICogQGV4YW1wbGUgYW1vdW50VG9UaXAyMFVuaXRzKFwiMS41XCIpID0+IDE1MDAwMDBuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbW91bnRUb1RpcDIwVW5pdHMoYW1vdW50OiBzdHJpbmcpOiBiaWdpbnQge1xuICB0cnkge1xuICAgIHJldHVybiBCaWdJbnQoZXRoZXJzLnV0aWxzLnBhcnNlVW5pdHMoYW1vdW50LCBUSVAyMF9ERUNJTUFMUykudG9TdHJpbmcoKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFtb3VudCBmb3JtYXQ6ICR7YW1vdW50fS4gRXhwZWN0ZWQgZGVjaW1hbCBzdHJpbmcuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IFRJUC0yMCB1bml0cyAoNiBkZWNpbWFscykgdG8gaHVtYW4tcmVhZGFibGUgYW1vdW50XG4gKiBAcGFyYW0gdW5pdHMgLSBBbW91bnQgaW4gVElQLTIwIHNtYWxsZXN0IHVuaXRzXG4gKiBAcmV0dXJucyBIdW1hbi1yZWFkYWJsZSBhbW91bnQgc3RyaW5nXG4gKiBAZXhhbXBsZSB0aXAyMFVuaXRzVG9BbW91bnQoMTUwMDAwMG4pID0+IFwiMS41XCJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRpcDIwVW5pdHNUb0Ftb3VudCh1bml0czogYmlnaW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGV0aGVycy51dGlscy5mb3JtYXRVbml0cyh1bml0cy50b1N0cmluZygpLCBUSVAyMF9ERUNJTUFMUyk7XG59XG5cbi8qKlxuICogQ29udmVydCBzdHJpbmcgdG8gYnl0ZXMzMiBmb3IgbWVtbyBmaWVsZFxuICogQHBhcmFtIG1lbW8gLSBNZW1vIHN0cmluZyB0byBlbmNvZGVcbiAqIEByZXR1cm5zIEhleC1lbmNvZGVkIGJ5dGVzMzIgdmFsdWVcbiAqIEBleGFtcGxlIHN0cmluZ1RvQnl0ZXMzMihcIklOVk9JQ0UtMDAxXCIpID0+IFwiMHg0OTRlNTY0ZjQ5NDM0NTJkMzAzMDMxMDAuLi5cIlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9CeXRlczMyKG1lbW86IHN0cmluZyk6IEhleCB7XG4gIGNvbnN0IG1lbW9CeXRlTGVuZ3RoID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKG1lbW8pLmxlbmd0aDtcbiAgaWYgKG1lbW9CeXRlTGVuZ3RoID4gMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1lbW8gdG9vIGxvbmc6ICR7bWVtb0J5dGVMZW5ndGh9IGJ5dGVzLiBNYXhpbXVtIDMyIGJ5dGVzLmApO1xuICB9XG4gIGNvbnN0IGhleFN0cmluZyA9IGV0aGVycy51dGlscy5oZXhsaWZ5KGV0aGVycy51dGlscy50b1V0ZjhCeXRlcyhtZW1vKSk7XG4gIHJldHVybiBldGhlcnMudXRpbHMuaGV4WmVyb1BhZChoZXhTdHJpbmcsIDMyKTtcbn1cblxuLyoqXG4gKiBFbmNvZGUgVElQLTIwIHRyYW5zZmVyV2l0aE1lbW8gZnVuY3Rpb24gY2FsbCB1c2luZyBldGhlcnMuanNcbiAqIEBwYXJhbSB0byAtIFJlY2lwaWVudCBhZGRyZXNzXG4gKiBAcGFyYW0gYW1vdW50IC0gQW1vdW50IGluIFRJUC0yMCB1bml0cyAoYmlnaW50KVxuICogQHBhcmFtIG1lbW8gLSBPcHRpb25hbCBtZW1vIHN0cmluZ1xuICogQHJldHVybnMgRW5jb2RlZCBmdW5jdGlvbiBjYWxsIGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuY29kZVRpcDIwVHJhbnNmZXJXaXRoTWVtbyh0bzogQWRkcmVzcywgYW1vdW50OiBiaWdpbnQsIG1lbW8/OiBzdHJpbmcpOiBIZXgge1xuICBjb25zdCBtZW1vQnl0ZXMgPSBtZW1vID8gc3RyaW5nVG9CeXRlczMyKG1lbW8pIDogZXRoZXJzLnV0aWxzLmhleFplcm9QYWQoJzB4JywgMzIpO1xuXG4gIGNvbnN0IGlmYWNlID0gbmV3IGV0aGVycy51dGlscy5JbnRlcmZhY2UoVElQMjBfVFJBTlNGRVJfV0lUSF9NRU1PX0FCSSk7XG4gIHJldHVybiBpZmFjZS5lbmNvZGVGdW5jdGlvbkRhdGEoJ3RyYW5zZmVyV2l0aE1lbW8nLCBbdG8sIGFtb3VudCwgbWVtb0J5dGVzXSk7XG59XG5cbi8qKlxuICogVmFsaWRhdGUgVElQLTIwIGFtb3VudCBmb3JtYXRcbiAqIEBwYXJhbSBhbW91bnQgLSBBbW91bnQgc3RyaW5nIHRvIHZhbGlkYXRlXG4gKiBAcmV0dXJucyB0cnVlIGlmIHZhbGlkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRUaXAyMEFtb3VudChhbW91bnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIGFtb3VudCAhPT0gJ3N0cmluZycgfHwgYW1vdW50LnRyaW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIGFtb3VudHMgYmVmb3JlIHBhcnNpbmdcbiAgaWYgKGFtb3VudC5zdGFydHNXaXRoKCctJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBldGhlcnMudXRpbHMucGFyc2VVbml0cyhhbW91bnQsIFRJUDIwX0RFQ0lNQUxTKTtcbiAgICByZXR1cm4gcGFyc2VkLmd0ZSgwKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmNvbnN0IHV0aWxzID0ge1xuICBpc1ZhbGlkQWRkcmVzcyxcbiAgaXNWYWxpZFB1YmxpY0tleSxcbiAgaXNWYWxpZFByaXZhdGVLZXksXG4gIGFtb3VudFRvVGlwMjBVbml0cyxcbiAgdGlwMjBVbml0c1RvQW1vdW50LFxuICBzdHJpbmdUb0J5dGVzMzIsXG4gIGVuY29kZVRpcDIwVHJhbnNmZXJXaXRoTWVtbyxcbiAgaXNWYWxpZFRpcDIwQW1vdW50LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdXRpbHM7XG4iXX0=
|
package/dist/src/register.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAKjD;;;GAGG;AACH,eAAO,MAAM,QAAQ,QAAS,SAAS,KAAG,IAyBzC,CAAC"}
|
package/dist/src/register.js
CHANGED
|
@@ -3,9 +3,34 @@ 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");
|
|
7
|
+
/**
|
|
8
|
+
* Register Tempo and TIP20 tokens with the SDK
|
|
9
|
+
* @param sdk - BitGo SDK instance
|
|
10
|
+
*/
|
|
6
11
|
const register = (sdk) => {
|
|
12
|
+
// Register base Tempo coins
|
|
7
13
|
sdk.register('tempo', tempo_1.Tempo.createInstance);
|
|
8
14
|
sdk.register('ttempo', ttempo_1.Ttempo.createInstance);
|
|
15
|
+
// Register TIP20 tokens (skeleton)
|
|
16
|
+
// TODO: Add actual token configurations from @bitgo-beta/statics
|
|
17
|
+
// For now, this creates an empty array which can be populated progressively
|
|
18
|
+
const tip20Tokens = tip20Token_1.Tip20Token.createTokenConstructors([
|
|
19
|
+
// TODO: Add TIP20 token configurations here
|
|
20
|
+
// Example:
|
|
21
|
+
// {
|
|
22
|
+
// type: 'tempo:usdc',
|
|
23
|
+
// coin: 'tempo',
|
|
24
|
+
// network: 'Mainnet',
|
|
25
|
+
// name: 'USD Coin on Tempo',
|
|
26
|
+
// tokenContractAddress: '0x...',
|
|
27
|
+
// decimalPlaces: 6,
|
|
28
|
+
// },
|
|
29
|
+
]);
|
|
30
|
+
// Register each TIP20 token with the SDK
|
|
31
|
+
tip20Tokens.forEach(({ name, coinConstructor }) => {
|
|
32
|
+
sdk.register(name, coinConstructor);
|
|
33
|
+
});
|
|
9
34
|
};
|
|
10
35
|
exports.register = register;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnaXN0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVnaXN0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQWdDO0FBQ2hDLHFDQUFrQztBQUNsQyw2Q0FBMEM7QUFFMUM7OztHQUdHO0FBQ0ksTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFjLEVBQVEsRUFBRTtJQUMvQyw0QkFBNEI7SUFDNUIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsYUFBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGVBQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUU5QyxtQ0FBbUM7SUFDbkMsaUVBQWlFO0lBQ2pFLDRFQUE0RTtJQUM1RSxNQUFNLFdBQVcsR0FBRyx1QkFBVSxDQUFDLHVCQUF1QixDQUFDO0lBQ3JELDRDQUE0QztJQUM1QyxXQUFXO0lBQ1gsSUFBSTtJQUNKLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsd0JBQXdCO0lBQ3hCLCtCQUErQjtJQUMvQixtQ0FBbUM7SUFDbkMsc0JBQXNCO0lBQ3RCLEtBQUs7S0FDTixDQUFDLENBQUM7SUFFSCx5Q0FBeUM7SUFDekMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUU7UUFDaEQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUF6QlcsUUFBQSxRQUFRLFlBeUJuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJpdEdvQmFzZSB9IGZyb20gJ0BiaXRnby1iZXRhL3Nkay1jb3JlJztcbmltcG9ydCB7IFRlbXBvIH0gZnJvbSAnLi90ZW1wbyc7XG5pbXBvcnQgeyBUdGVtcG8gfSBmcm9tICcuL3R0ZW1wbyc7XG5pbXBvcnQgeyBUaXAyMFRva2VuIH0gZnJvbSAnLi90aXAyMFRva2VuJztcblxuLyoqXG4gKiBSZWdpc3RlciBUZW1wbyBhbmQgVElQMjAgdG9rZW5zIHdpdGggdGhlIFNES1xuICogQHBhcmFtIHNkayAtIEJpdEdvIFNESyBpbnN0YW5jZVxuICovXG5leHBvcnQgY29uc3QgcmVnaXN0ZXIgPSAoc2RrOiBCaXRHb0Jhc2UpOiB2b2lkID0+IHtcbiAgLy8gUmVnaXN0ZXIgYmFzZSBUZW1wbyBjb2luc1xuICBzZGsucmVnaXN0ZXIoJ3RlbXBvJywgVGVtcG8uY3JlYXRlSW5zdGFuY2UpO1xuICBzZGsucmVnaXN0ZXIoJ3R0ZW1wbycsIFR0ZW1wby5jcmVhdGVJbnN0YW5jZSk7XG5cbiAgLy8gUmVnaXN0ZXIgVElQMjAgdG9rZW5zIChza2VsZXRvbilcbiAgLy8gVE9ETzogQWRkIGFjdHVhbCB0b2tlbiBjb25maWd1cmF0aW9ucyBmcm9tIEBiaXRnby1iZXRhL3N0YXRpY3NcbiAgLy8gRm9yIG5vdywgdGhpcyBjcmVhdGVzIGFuIGVtcHR5IGFycmF5IHdoaWNoIGNhbiBiZSBwb3B1bGF0ZWQgcHJvZ3Jlc3NpdmVseVxuICBjb25zdCB0aXAyMFRva2VucyA9IFRpcDIwVG9rZW4uY3JlYXRlVG9rZW5Db25zdHJ1Y3RvcnMoW1xuICAgIC8vIFRPRE86IEFkZCBUSVAyMCB0b2tlbiBjb25maWd1cmF0aW9ucyBoZXJlXG4gICAgLy8gRXhhbXBsZTpcbiAgICAvLyB7XG4gICAgLy8gICB0eXBlOiAndGVtcG86dXNkYycsXG4gICAgLy8gICBjb2luOiAndGVtcG8nLFxuICAgIC8vICAgbmV0d29yazogJ01haW5uZXQnLFxuICAgIC8vICAgbmFtZTogJ1VTRCBDb2luIG9uIFRlbXBvJyxcbiAgICAvLyAgIHRva2VuQ29udHJhY3RBZGRyZXNzOiAnMHguLi4nLFxuICAgIC8vICAgZGVjaW1hbFBsYWNlczogNixcbiAgICAvLyB9LFxuICBdKTtcblxuICAvLyBSZWdpc3RlciBlYWNoIFRJUDIwIHRva2VuIHdpdGggdGhlIFNES1xuICB0aXAyMFRva2Vucy5mb3JFYWNoKCh7IG5hbWUsIGNvaW5Db25zdHJ1Y3RvciB9KSA9PiB7XG4gICAgc2RrLnJlZ2lzdGVyKG5hbWUsIGNvaW5Db25zdHJ1Y3Rvcik7XG4gIH0pO1xufTtcbiJdfQ==
|
package/dist/src/tempo.d.ts
CHANGED
|
@@ -1,72 +1,65 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @prettier
|
|
3
|
+
*/
|
|
4
|
+
import { AbstractEthLikeNewCoins, RecoverOptions, OfflineVaultTxInfo, UnsignedSweepTxMPCv2, TransactionBuilder } from '@bitgo-beta/abstract-eth';
|
|
5
|
+
import type * as EthLikeCommon from '@ethereumjs/common';
|
|
6
|
+
import { BaseCoin, BitGoBase, MPCAlgorithm } from '@bitgo-beta/sdk-core';
|
|
2
7
|
import { BaseCoin as StaticsBaseCoin } from '@bitgo-beta/statics';
|
|
3
|
-
export declare class Tempo extends
|
|
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
|
-
*
|
|
15
|
+
* Get the chain identifier
|
|
9
16
|
*/
|
|
10
|
-
getBaseFactor(): number;
|
|
11
17
|
getChain(): string;
|
|
12
|
-
getFamily(): string;
|
|
13
|
-
getFullName(): string;
|
|
14
18
|
/**
|
|
15
|
-
*
|
|
16
|
-
* @returns {boolean} True if okay to send 0 value, false otherwise
|
|
19
|
+
* Get the full chain name
|
|
17
20
|
*/
|
|
18
|
-
|
|
21
|
+
getFullName(): string;
|
|
19
22
|
/**
|
|
20
|
-
*
|
|
21
|
-
* @param address
|
|
23
|
+
* Get the base factor (1 TEMPO = 1e18 wei, like Ethereum)
|
|
22
24
|
*/
|
|
23
|
-
|
|
25
|
+
getBaseFactor(): number;
|
|
24
26
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* @param seed
|
|
28
|
-
* @returns {Object} object with generated pub, prv
|
|
27
|
+
* Check if value-less transfers are allowed
|
|
28
|
+
* TODO: Update based on Tempo requirements
|
|
29
29
|
*/
|
|
30
|
-
|
|
30
|
+
valuelessTransferAllowed(): boolean;
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* @param {String} pub the pub to be checked
|
|
35
|
-
* @returns {Boolean} is it valid?
|
|
32
|
+
* Check if TSS is supported
|
|
36
33
|
*/
|
|
37
|
-
|
|
34
|
+
supportsTss(): boolean;
|
|
38
35
|
/**
|
|
39
|
-
*
|
|
40
|
-
* @param params
|
|
41
|
-
* @param params.txPrebuild
|
|
42
|
-
* @param params.txParams
|
|
43
|
-
* @returns {boolean}
|
|
36
|
+
* Get the MPC algorithm (ECDSA for EVM chains)
|
|
44
37
|
*/
|
|
45
|
-
|
|
38
|
+
getMPCAlgorithm(): MPCAlgorithm;
|
|
46
39
|
/**
|
|
47
|
-
* Check if
|
|
48
|
-
* @param params
|
|
40
|
+
* Check if message signing is supported
|
|
49
41
|
*/
|
|
50
|
-
|
|
42
|
+
supportsMessageSigning(): boolean;
|
|
51
43
|
/**
|
|
52
|
-
*
|
|
53
|
-
* @param params
|
|
44
|
+
* Check if typed data signing is supported (EIP-712)
|
|
54
45
|
*/
|
|
55
|
-
|
|
46
|
+
supportsSigningTypedData(): boolean;
|
|
56
47
|
/**
|
|
57
|
-
*
|
|
58
|
-
*
|
|
48
|
+
* Build unsigned sweep transaction for TSS
|
|
49
|
+
* TODO: Implement sweep transaction logic
|
|
59
50
|
*/
|
|
60
|
-
|
|
51
|
+
protected buildUnsignedSweepTxnTSS(params: RecoverOptions): Promise<OfflineVaultTxInfo | UnsignedSweepTxMPCv2>;
|
|
61
52
|
/**
|
|
62
|
-
*
|
|
63
|
-
*
|
|
53
|
+
* Query block explorer for recovery information
|
|
54
|
+
* TODO: Implement when Tempo block explorer is available
|
|
64
55
|
*/
|
|
65
|
-
|
|
56
|
+
recoveryBlockchainExplorerQuery(query: Record<string, string>, apiKey?: string): Promise<Record<string, unknown>>;
|
|
66
57
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
58
|
+
* Get transaction builder for Tempo
|
|
59
|
+
* Returns a TIP-20 transaction builder for Tempo-specific operations
|
|
60
|
+
* @param common - Optional common chain configuration
|
|
61
|
+
* @protected
|
|
69
62
|
*/
|
|
70
|
-
|
|
63
|
+
protected getTransactionBuilder(common?: EthLikeCommon.default): TransactionBuilder;
|
|
71
64
|
}
|
|
72
65
|
//# sourceMappingURL=tempo.d.ts.map
|
package/dist/src/tempo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tempo.d.ts","sourceRoot":"","sources":["../../src/tempo.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,
|
|
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,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,KAAK,aAAa,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAS,MAAM,qBAAqB,CAAC;AAGzE,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;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;;OAGG;IACH,wBAAwB,IAAI,OAAO;IAInC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;OAEG;IACH,wBAAwB,IAAI,OAAO;IAInC;;;OAGG;cACa,wBAAwB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,GAAG,oBAAoB,CAAC;IAMpH;;;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;IAMnC;;;;;OAKG;IACH,SAAS,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC,OAAO,GAAG,kBAAkB;CAGpF"}
|
package/dist/src/tempo.js
CHANGED
|
@@ -1,130 +1,98 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.Tempo = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
/**
|
|
5
|
+
* @prettier
|
|
6
|
+
*/
|
|
7
|
+
const abstract_eth_1 = require("@bitgo-beta/abstract-eth");
|
|
8
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
9
|
+
const lib_1 = require("./lib");
|
|
10
|
+
class Tempo extends abstract_eth_1.AbstractEthLikeNewCoins {
|
|
11
11
|
constructor(bitgo, staticsCoin) {
|
|
12
|
-
super(bitgo);
|
|
13
|
-
if (!staticsCoin) {
|
|
14
|
-
throw new Error('missing required constructor parameter staticsCoin');
|
|
15
|
-
}
|
|
16
|
-
this._staticsCoin = staticsCoin;
|
|
12
|
+
super(bitgo, staticsCoin);
|
|
17
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Factory method to create Tempo instance
|
|
16
|
+
*/
|
|
18
17
|
static createInstance(bitgo, staticsCoin) {
|
|
19
18
|
return new Tempo(bitgo, staticsCoin);
|
|
20
19
|
}
|
|
21
20
|
/**
|
|
22
|
-
*
|
|
21
|
+
* Get the chain identifier
|
|
23
22
|
*/
|
|
24
|
-
getBaseFactor() {
|
|
25
|
-
return 1e18;
|
|
26
|
-
}
|
|
27
23
|
getChain() {
|
|
28
|
-
return 'tempo';
|
|
29
|
-
}
|
|
30
|
-
getFamily() {
|
|
31
|
-
return 'tempo';
|
|
32
|
-
}
|
|
33
|
-
getFullName() {
|
|
34
|
-
return 'Tempo';
|
|
24
|
+
return this._staticsCoin?.name || 'tempo';
|
|
35
25
|
}
|
|
36
26
|
/**
|
|
37
|
-
*
|
|
38
|
-
* @returns {boolean} True if okay to send 0 value, false otherwise
|
|
27
|
+
* Get the full chain name
|
|
39
28
|
*/
|
|
40
|
-
|
|
41
|
-
return
|
|
29
|
+
getFullName() {
|
|
30
|
+
return 'Tempo';
|
|
42
31
|
}
|
|
43
32
|
/**
|
|
44
|
-
*
|
|
45
|
-
* @param address
|
|
33
|
+
* Get the base factor (1 TEMPO = 1e18 wei, like Ethereum)
|
|
46
34
|
*/
|
|
47
|
-
|
|
48
|
-
return
|
|
35
|
+
getBaseFactor() {
|
|
36
|
+
return 1e18;
|
|
49
37
|
}
|
|
50
38
|
/**
|
|
51
|
-
*
|
|
52
|
-
*
|
|
53
|
-
* @param seed
|
|
54
|
-
* @returns {Object} object with generated pub, prv
|
|
39
|
+
* Check if value-less transfers are allowed
|
|
40
|
+
* TODO: Update based on Tempo requirements
|
|
55
41
|
*/
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
const keys = keyPair.getKeys();
|
|
59
|
-
if (!keys.prv) {
|
|
60
|
-
throw new Error('Missing prv in key generation.');
|
|
61
|
-
}
|
|
62
|
-
return {
|
|
63
|
-
pub: keys.pub,
|
|
64
|
-
prv: keys.prv,
|
|
65
|
-
};
|
|
42
|
+
valuelessTransferAllowed() {
|
|
43
|
+
return false;
|
|
66
44
|
}
|
|
67
45
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
* @param {String} pub the pub to be checked
|
|
71
|
-
* @returns {Boolean} is it valid?
|
|
46
|
+
* Check if TSS is supported
|
|
72
47
|
*/
|
|
73
|
-
|
|
74
|
-
return
|
|
48
|
+
supportsTss() {
|
|
49
|
+
return true;
|
|
75
50
|
}
|
|
76
51
|
/**
|
|
77
|
-
*
|
|
78
|
-
* @param params
|
|
79
|
-
* @param params.txPrebuild
|
|
80
|
-
* @param params.txParams
|
|
81
|
-
* @returns {boolean}
|
|
52
|
+
* Get the MPC algorithm (ECDSA for EVM chains)
|
|
82
53
|
*/
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
return false;
|
|
54
|
+
getMPCAlgorithm() {
|
|
55
|
+
return 'ecdsa';
|
|
86
56
|
}
|
|
87
57
|
/**
|
|
88
|
-
* Check if
|
|
89
|
-
* @param params
|
|
58
|
+
* Check if message signing is supported
|
|
90
59
|
*/
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
return false;
|
|
60
|
+
supportsMessageSigning() {
|
|
61
|
+
return true;
|
|
94
62
|
}
|
|
95
63
|
/**
|
|
96
|
-
*
|
|
97
|
-
* @param params
|
|
64
|
+
* Check if typed data signing is supported (EIP-712)
|
|
98
65
|
*/
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
// This method is typically used for security compliance
|
|
102
|
-
return Promise.resolve();
|
|
66
|
+
supportsSigningTypedData() {
|
|
67
|
+
return true;
|
|
103
68
|
}
|
|
104
69
|
/**
|
|
105
|
-
*
|
|
106
|
-
*
|
|
70
|
+
* Build unsigned sweep transaction for TSS
|
|
71
|
+
* TODO: Implement sweep transaction logic
|
|
107
72
|
*/
|
|
108
|
-
async
|
|
109
|
-
// TODO: Implement
|
|
73
|
+
async buildUnsignedSweepTxnTSS(params) {
|
|
74
|
+
// TODO: Implement when recovery logic is needed
|
|
75
|
+
// Return dummy value to prevent downstream services from breaking
|
|
110
76
|
return {};
|
|
111
77
|
}
|
|
112
78
|
/**
|
|
113
|
-
*
|
|
114
|
-
*
|
|
79
|
+
* Query block explorer for recovery information
|
|
80
|
+
* TODO: Implement when Tempo block explorer is available
|
|
115
81
|
*/
|
|
116
|
-
async
|
|
117
|
-
// TODO: Implement
|
|
82
|
+
async recoveryBlockchainExplorerQuery(query, apiKey) {
|
|
83
|
+
// TODO: Implement with Tempo block explorer API
|
|
84
|
+
// Return empty object to prevent downstream services from breaking
|
|
118
85
|
return {};
|
|
119
86
|
}
|
|
120
87
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
88
|
+
* Get transaction builder for Tempo
|
|
89
|
+
* Returns a TIP-20 transaction builder for Tempo-specific operations
|
|
90
|
+
* @param common - Optional common chain configuration
|
|
91
|
+
* @protected
|
|
123
92
|
*/
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
return {};
|
|
93
|
+
getTransactionBuilder(common) {
|
|
94
|
+
return new lib_1.Tip20TransactionBuilder(statics_1.coins.get(this.getBaseChain()));
|
|
127
95
|
}
|
|
128
96
|
}
|
|
129
97
|
exports.Tempo = Tempo;
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCwyREFNa0M7QUFHbEMsaURBQXlFO0FBQ3pFLCtCQUFnRDtBQUVoRCxNQUFhLEtBQU0sU0FBUSxzQ0FBdUI7SUFDaEQsWUFBc0IsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksSUFBSSxPQUFPLENBQUM7SUFDNUMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVztRQUNULE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNILGFBQWE7UUFDWCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSCx3QkFBd0I7UUFDdEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxlQUFlO1FBQ2IsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOztPQUVHO0lBQ0gsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNPLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxNQUFzQjtRQUM3RCxnREFBZ0Q7UUFDaEQsa0VBQWtFO1FBQ2xFLE9BQU8sRUFBd0IsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLCtCQUErQixDQUNuQyxLQUE2QixFQUM3QixNQUFlO1FBRWYsZ0RBQWdEO1FBQ2hELG1FQUFtRTtRQUNuRSxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLHFCQUFxQixDQUFDLE1BQThCO1FBQzVELE9BQU8sSUFBSSw2QkFBdUIsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFrQyxDQUFDO0lBQ3RHLENBQUM7Q0FDRjtBQXJHRCxzQkFxR0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwcmV0dGllclxuICovXG5pbXBvcnQge1xuICBBYnN0cmFjdEV0aExpa2VOZXdDb2lucyxcbiAgUmVjb3Zlck9wdGlvbnMsXG4gIE9mZmxpbmVWYXVsdFR4SW5mbyxcbiAgVW5zaWduZWRTd2VlcFR4TVBDdjIsXG4gIFRyYW5zYWN0aW9uQnVpbGRlcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvYWJzdHJhY3QtZXRoJztcbmltcG9ydCB0eXBlICogYXMgRXRoTGlrZUNvbW1vbiBmcm9tICdAZXRoZXJldW1qcy9jb21tb24nO1xuaW1wb3J0IHsgQmFzZUNvaW4sIEJpdEdvQmFzZSwgTVBDQWxnb3JpdGhtIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgU3RhdGljc0Jhc2VDb2luLCBjb2lucyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL2xpYic7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbyBleHRlbmRzIEFic3RyYWN0RXRoTGlrZU5ld0NvaW5zIHtcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKGJpdGdvOiBCaXRHb0Jhc2UsIHN0YXRpY3NDb2luPzogUmVhZG9ubHk8U3RhdGljc0Jhc2VDb2luPikge1xuICAgIHN1cGVyKGJpdGdvLCBzdGF0aWNzQ29pbik7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIFRlbXBvIGluc3RhbmNlXG4gICAqL1xuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgVGVtcG8oYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoYWluIGlkZW50aWZpZXJcbiAgICovXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luPy5uYW1lIHx8ICd0ZW1wbyc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBmdWxsIGNoYWluIG5hbWVcbiAgICovXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdUZW1wbyc7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBiYXNlIGZhY3RvciAoMSBURU1QTyA9IDFlMTggd2VpLCBsaWtlIEV0aGVyZXVtKVxuICAgKi9cbiAgZ2V0QmFzZUZhY3RvcigpOiBudW1iZXIge1xuICAgIHJldHVybiAxZTE4O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhbHVlLWxlc3MgdHJhbnNmZXJzIGFyZSBhbGxvd2VkXG4gICAqIFRPRE86IFVwZGF0ZSBiYXNlZCBvbiBUZW1wbyByZXF1aXJlbWVudHNcbiAgICovXG4gIHZhbHVlbGVzc1RyYW5zZmVyQWxsb3dlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgVFNTIGlzIHN1cHBvcnRlZFxuICAgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBNUEMgYWxnb3JpdGhtIChFQ0RTQSBmb3IgRVZNIGNoYWlucylcbiAgICovXG4gIGdldE1QQ0FsZ29yaXRobSgpOiBNUENBbGdvcml0aG0ge1xuICAgIHJldHVybiAnZWNkc2EnO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIG1lc3NhZ2Ugc2lnbmluZyBpcyBzdXBwb3J0ZWRcbiAgICovXG4gIHN1cHBvcnRzTWVzc2FnZVNpZ25pbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdHlwZWQgZGF0YSBzaWduaW5nIGlzIHN1cHBvcnRlZCAoRUlQLTcxMilcbiAgICovXG4gIHN1cHBvcnRzU2lnbmluZ1R5cGVkRGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB1bnNpZ25lZCBzd2VlcCB0cmFuc2FjdGlvbiBmb3IgVFNTXG4gICAqIFRPRE86IEltcGxlbWVudCBzd2VlcCB0cmFuc2FjdGlvbiBsb2dpY1xuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGJ1aWxkVW5zaWduZWRTd2VlcFR4blRTUyhwYXJhbXM6IFJlY292ZXJPcHRpb25zKTogUHJvbWlzZTxPZmZsaW5lVmF1bHRUeEluZm8gfCBVbnNpZ25lZFN3ZWVwVHhNUEN2Mj4ge1xuICAgIC8vIFRPRE86IEltcGxlbWVudCB3aGVuIHJlY292ZXJ5IGxvZ2ljIGlzIG5lZWRlZFxuICAgIC8vIFJldHVybiBkdW1teSB2YWx1ZSB0byBwcmV2ZW50IGRvd25zdHJlYW0gc2VydmljZXMgZnJvbSBicmVha2luZ1xuICAgIHJldHVybiB7fSBhcyBPZmZsaW5lVmF1bHRUeEluZm87XG4gIH1cblxuICAvKipcbiAgICogUXVlcnkgYmxvY2sgZXhwbG9yZXIgZm9yIHJlY292ZXJ5IGluZm9ybWF0aW9uXG4gICAqIFRPRE86IEltcGxlbWVudCB3aGVuIFRlbXBvIGJsb2NrIGV4cGxvcmVyIGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgYXN5bmMgcmVjb3ZlcnlCbG9ja2NoYWluRXhwbG9yZXJRdWVyeShcbiAgICBxdWVyeTogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgICBhcGlLZXk/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAgIC8vIFRPRE86IEltcGxlbWVudCB3aXRoIFRlbXBvIGJsb2NrIGV4cGxvcmVyIEFQSVxuICAgIC8vIFJldHVybiBlbXB0eSBvYmplY3QgdG8gcHJldmVudCBkb3duc3RyZWFtIHNlcnZpY2VzIGZyb20gYnJlYWtpbmdcbiAgICByZXR1cm4ge307XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRyYW5zYWN0aW9uIGJ1aWxkZXIgZm9yIFRlbXBvXG4gICAqIFJldHVybnMgYSBUSVAtMjAgdHJhbnNhY3Rpb24gYnVpbGRlciBmb3IgVGVtcG8tc3BlY2lmaWMgb3BlcmF0aW9uc1xuICAgKiBAcGFyYW0gY29tbW9uIC0gT3B0aW9uYWwgY29tbW9uIGNoYWluIGNvbmZpZ3VyYXRpb25cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGdldFRyYW5zYWN0aW9uQnVpbGRlcihjb21tb24/OiBFdGhMaWtlQ29tbW9uLmRlZmF1bHQpOiBUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICAgIHJldHVybiBuZXcgVGlwMjBUcmFuc2FjdGlvbkJ1aWxkZXIoY29pbnMuZ2V0KHRoaXMuZ2V0QmFzZUNoYWluKCkpKSBhcyB1bmtub3duIGFzIFRyYW5zYWN0aW9uQnVpbGRlcjtcbiAgfVxufVxuIl19
|