@bitgo-beta/sdk-coin-kaspa 0.0.1-alpha.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.
- package/LICENSE +191 -0
- package/README.md +126 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +44 -0
- package/dist/src/kaspa.d.ts +64 -0
- package/dist/src/kaspa.d.ts.map +1 -0
- package/dist/src/kaspa.js +246 -0
- package/dist/src/lib/constants.d.ts +12 -0
- package/dist/src/lib/constants.d.ts.map +1 -0
- package/dist/src/lib/constants.js +18 -0
- package/dist/src/lib/iface.d.ts +109 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +3 -0
- package/dist/src/lib/index.d.ts +10 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +36 -0
- package/dist/src/lib/keyPair.d.ts +22 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +61 -0
- package/dist/src/lib/sighash.d.ts +25 -0
- package/dist/src/lib/sighash.d.ts.map +1 -0
- package/dist/src/lib/sighash.js +191 -0
- package/dist/src/lib/transaction.d.ts +53 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +133 -0
- package/dist/src/lib/transactionBuilder.d.ts +58 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +139 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +15 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +25 -0
- package/dist/src/lib/utils.d.ts +43 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +236 -0
- package/dist/src/register.d.ts +3 -0
- package/dist/src/register.d.ts.map +1 -0
- package/dist/src/register.js +10 -0
- package/dist/test/fixtures/kaspa.fixtures.d.ts +29 -0
- package/dist/test/fixtures/kaspa.fixtures.d.ts.map +1 -0
- package/dist/test/fixtures/kaspa.fixtures.js +90 -0
- package/dist/test/unit/coin.test.d.ts +2 -0
- package/dist/test/unit/coin.test.d.ts.map +1 -0
- package/dist/test/unit/coin.test.js +225 -0
- package/dist/test/unit/keyPair.test.d.ts +2 -0
- package/dist/test/unit/keyPair.test.d.ts.map +1 -0
- package/dist/test/unit/keyPair.test.js +90 -0
- package/dist/test/unit/transaction.test.d.ts +2 -0
- package/dist/test/unit/transaction.test.d.ts.map +1 -0
- package/dist/test/unit/transaction.test.js +206 -0
- package/dist/test/unit/transactionBuilder.test.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.test.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.test.js +220 -0
- package/dist/test/unit/transactionFlow.test.d.ts +8 -0
- package/dist/test/unit/transactionFlow.test.d.ts.map +1 -0
- package/dist/test/unit/transactionFlow.test.js +105 -0
- package/dist/test/unit/utils.test.d.ts +2 -0
- package/dist/test/unit/utils.test.d.ts.map +1 -0
- package/dist/test/unit/utils.test.js +159 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Kaspa (KASPA) Test Fixtures
|
|
4
|
+
*
|
|
5
|
+
* Deterministic test data derived from a fixed private key.
|
|
6
|
+
* Do NOT use these keys in production.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TRANSACTIONS = exports.UTXOS = exports.SCRIPT_PUBLIC_KEY = exports.ADDRESSES = exports.KEYS = exports.TEST_PRV_KEY = void 0;
|
|
10
|
+
const keyPair_1 = require("../../src/lib/keyPair");
|
|
11
|
+
const sighash_1 = require("../../src/lib/sighash");
|
|
12
|
+
// Fixed 32-byte private key for deterministic tests only
|
|
13
|
+
exports.TEST_PRV_KEY = 'b94f5374fce5edbc8e2a8697c15331677e6ebf0b000000000000000000000001';
|
|
14
|
+
const _kp = new keyPair_1.KeyPair({ prv: exports.TEST_PRV_KEY });
|
|
15
|
+
const _keys = _kp.getKeys();
|
|
16
|
+
const _xOnlyPub = (0, sighash_1.compressedToXOnly)(Buffer.from(_keys.pub, 'hex'));
|
|
17
|
+
const _scriptPublicKey = (0, sighash_1.buildP2PKScriptPublicKey)(_xOnlyPub).toString('hex');
|
|
18
|
+
exports.KEYS = {
|
|
19
|
+
prv: exports.TEST_PRV_KEY,
|
|
20
|
+
pub: _keys.pub,
|
|
21
|
+
};
|
|
22
|
+
exports.ADDRESSES = {
|
|
23
|
+
valid: _kp.getAddress('mainnet'),
|
|
24
|
+
testnet: _kp.getAddress('testnet'),
|
|
25
|
+
invalid: 'notanaddress',
|
|
26
|
+
sender: _kp.getAddress('mainnet'),
|
|
27
|
+
recipient: _kp.getAddress('mainnet'),
|
|
28
|
+
};
|
|
29
|
+
exports.SCRIPT_PUBLIC_KEY = _scriptPublicKey;
|
|
30
|
+
// Getters return fresh objects to prevent mutation leakage between tests
|
|
31
|
+
exports.UTXOS = {
|
|
32
|
+
get simple() {
|
|
33
|
+
return {
|
|
34
|
+
transactionId: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
|
35
|
+
transactionIndex: 0,
|
|
36
|
+
amount: '100000000',
|
|
37
|
+
scriptPublicKey: _scriptPublicKey,
|
|
38
|
+
sequence: '0',
|
|
39
|
+
sigOpCount: 1,
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
get second() {
|
|
43
|
+
return {
|
|
44
|
+
transactionId: 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
|
45
|
+
transactionIndex: 1,
|
|
46
|
+
amount: '200000000',
|
|
47
|
+
scriptPublicKey: _scriptPublicKey,
|
|
48
|
+
sequence: '0',
|
|
49
|
+
sigOpCount: 1,
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
// Use getter functions to return fresh deep copies, preventing test mutation leakage
|
|
54
|
+
exports.TRANSACTIONS = {
|
|
55
|
+
get simple() {
|
|
56
|
+
return JSON.parse(JSON.stringify({
|
|
57
|
+
version: 0,
|
|
58
|
+
inputs: [exports.UTXOS.simple],
|
|
59
|
+
outputs: [
|
|
60
|
+
{
|
|
61
|
+
address: _kp.getAddress('mainnet'),
|
|
62
|
+
amount: '99998000',
|
|
63
|
+
scriptPublicKey: _scriptPublicKey,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
fee: '2000',
|
|
67
|
+
lockTime: '0',
|
|
68
|
+
subnetworkId: '0000000000000000000000000000000000000000',
|
|
69
|
+
payload: '',
|
|
70
|
+
}));
|
|
71
|
+
},
|
|
72
|
+
get multiInput() {
|
|
73
|
+
return JSON.parse(JSON.stringify({
|
|
74
|
+
version: 0,
|
|
75
|
+
inputs: [exports.UTXOS.simple, exports.UTXOS.second],
|
|
76
|
+
outputs: [
|
|
77
|
+
{
|
|
78
|
+
address: _kp.getAddress('mainnet'),
|
|
79
|
+
amount: '299998000',
|
|
80
|
+
scriptPublicKey: _scriptPublicKey,
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
fee: '2000',
|
|
84
|
+
lockTime: '0',
|
|
85
|
+
subnetworkId: '0000000000000000000000000000000000000000',
|
|
86
|
+
payload: '',
|
|
87
|
+
}));
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FzcGEuZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L2ZpeHR1cmVzL2thc3BhLmZpeHR1cmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7R0FLRzs7O0FBRUgsbURBQWdEO0FBQ2hELG1EQUFvRjtBQUdwRix5REFBeUQ7QUFDNUMsUUFBQSxZQUFZLEdBQUcsa0VBQWtFLENBQUM7QUFFL0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLG9CQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFBLDJCQUFpQixFQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ25FLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSxrQ0FBd0IsRUFBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFFaEUsUUFBQSxJQUFJLEdBQUc7SUFDbEIsR0FBRyxFQUFFLG9CQUFZO0lBQ2pCLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRztDQUNmLENBQUM7QUFFVyxRQUFBLFNBQVMsR0FBRztJQUN2QixLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7SUFDaEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ2xDLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLE1BQU0sRUFBRSxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxTQUFTLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Q0FDckMsQ0FBQztBQUVXLFFBQUEsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFFbEQseUVBQXlFO0FBQzVELFFBQUEsS0FBSyxHQUFHO0lBQ25CLElBQUksTUFBTTtRQUNSLE9BQU87WUFDTCxhQUFhLEVBQUUsa0VBQWtFO1lBQ2pGLGdCQUFnQixFQUFFLENBQUM7WUFDbkIsTUFBTSxFQUFFLFdBQVc7WUFDbkIsZUFBZSxFQUFFLGdCQUFnQjtZQUNqQyxRQUFRLEVBQUUsR0FBRztZQUNiLFVBQVUsRUFBRSxDQUFDO1NBQ2QsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFJLE1BQU07UUFDUixPQUFPO1lBQ0wsYUFBYSxFQUFFLGtFQUFrRTtZQUNqRixnQkFBZ0IsRUFBRSxDQUFDO1lBQ25CLE1BQU0sRUFBRSxXQUFXO1lBQ25CLGVBQWUsRUFBRSxnQkFBZ0I7WUFDakMsUUFBUSxFQUFFLEdBQUc7WUFDYixVQUFVLEVBQUUsQ0FBQztTQUNkLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQztBQUVGLHFGQUFxRjtBQUN4RSxRQUFBLFlBQVksR0FBRztJQUMxQixJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLENBQUMsYUFBSyxDQUFDLE1BQU0sQ0FBQztZQUN0QixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsT0FBTyxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO29CQUNsQyxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsZUFBZSxFQUFFLGdCQUFnQjtpQkFDbEM7YUFDRjtZQUNELEdBQUcsRUFBRSxNQUFNO1lBQ1gsUUFBUSxFQUFFLEdBQUc7WUFDYixZQUFZLEVBQUUsMENBQTBDO1lBQ3hELE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUNxQixDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLE9BQU8sRUFBRSxDQUFDO1lBQ1YsTUFBTSxFQUFFLENBQUMsYUFBSyxDQUFDLE1BQU0sRUFBRSxhQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3BDLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxPQUFPLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7b0JBQ2xDLE1BQU0sRUFBRSxXQUFXO29CQUNuQixlQUFlLEVBQUUsZ0JBQWdCO2lCQUNsQzthQUNGO1lBQ0QsR0FBRyxFQUFFLE1BQU07WUFDWCxRQUFRLEVBQUUsR0FBRztZQUNiLFlBQVksRUFBRSwwQ0FBMEM7WUFDeEQsT0FBTyxFQUFFLEVBQUU7U0FDWixDQUFDLENBQ3FCLENBQUM7SUFDNUIsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEthc3BhIChLQVNQQSkgVGVzdCBGaXh0dXJlc1xuICpcbiAqIERldGVybWluaXN0aWMgdGVzdCBkYXRhIGRlcml2ZWQgZnJvbSBhIGZpeGVkIHByaXZhdGUga2V5LlxuICogRG8gTk9UIHVzZSB0aGVzZSBrZXlzIGluIHByb2R1Y3Rpb24uXG4gKi9cblxuaW1wb3J0IHsgS2V5UGFpciB9IGZyb20gJy4uLy4uL3NyYy9saWIva2V5UGFpcic7XG5pbXBvcnQgeyBjb21wcmVzc2VkVG9YT25seSwgYnVpbGRQMlBLU2NyaXB0UHVibGljS2V5IH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9zaWdoYXNoJztcbmltcG9ydCB7IEthc3BhVHJhbnNhY3Rpb25EYXRhLCBLYXNwYVV0eG9JbnB1dCB9IGZyb20gJy4uLy4uL3NyYy9saWIvaWZhY2UnO1xuXG4vLyBGaXhlZCAzMi1ieXRlIHByaXZhdGUga2V5IGZvciBkZXRlcm1pbmlzdGljIHRlc3RzIG9ubHlcbmV4cG9ydCBjb25zdCBURVNUX1BSVl9LRVkgPSAnYjk0ZjUzNzRmY2U1ZWRiYzhlMmE4Njk3YzE1MzMxNjc3ZTZlYmYwYjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSc7XG5cbmNvbnN0IF9rcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBURVNUX1BSVl9LRVkgfSk7XG5jb25zdCBfa2V5cyA9IF9rcC5nZXRLZXlzKCk7XG5jb25zdCBfeE9ubHlQdWIgPSBjb21wcmVzc2VkVG9YT25seShCdWZmZXIuZnJvbShfa2V5cy5wdWIsICdoZXgnKSk7XG5jb25zdCBfc2NyaXB0UHVibGljS2V5ID0gYnVpbGRQMlBLU2NyaXB0UHVibGljS2V5KF94T25seVB1YikudG9TdHJpbmcoJ2hleCcpO1xuXG5leHBvcnQgY29uc3QgS0VZUyA9IHtcbiAgcHJ2OiBURVNUX1BSVl9LRVksXG4gIHB1YjogX2tleXMucHViLFxufTtcblxuZXhwb3J0IGNvbnN0IEFERFJFU1NFUyA9IHtcbiAgdmFsaWQ6IF9rcC5nZXRBZGRyZXNzKCdtYWlubmV0JyksXG4gIHRlc3RuZXQ6IF9rcC5nZXRBZGRyZXNzKCd0ZXN0bmV0JyksXG4gIGludmFsaWQ6ICdub3RhbmFkZHJlc3MnLFxuICBzZW5kZXI6IF9rcC5nZXRBZGRyZXNzKCdtYWlubmV0JyksXG4gIHJlY2lwaWVudDogX2twLmdldEFkZHJlc3MoJ21haW5uZXQnKSxcbn07XG5cbmV4cG9ydCBjb25zdCBTQ1JJUFRfUFVCTElDX0tFWSA9IF9zY3JpcHRQdWJsaWNLZXk7XG5cbi8vIEdldHRlcnMgcmV0dXJuIGZyZXNoIG9iamVjdHMgdG8gcHJldmVudCBtdXRhdGlvbiBsZWFrYWdlIGJldHdlZW4gdGVzdHNcbmV4cG9ydCBjb25zdCBVVFhPUyA9IHtcbiAgZ2V0IHNpbXBsZSgpOiBLYXNwYVV0eG9JbnB1dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zYWN0aW9uSWQ6ICdhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhJyxcbiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IDAsXG4gICAgICBhbW91bnQ6ICcxMDAwMDAwMDAnLFxuICAgICAgc2NyaXB0UHVibGljS2V5OiBfc2NyaXB0UHVibGljS2V5LFxuICAgICAgc2VxdWVuY2U6ICcwJyxcbiAgICAgIHNpZ09wQ291bnQ6IDEsXG4gICAgfTtcbiAgfSxcbiAgZ2V0IHNlY29uZCgpOiBLYXNwYVV0eG9JbnB1dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRyYW5zYWN0aW9uSWQ6ICdiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiJyxcbiAgICAgIHRyYW5zYWN0aW9uSW5kZXg6IDEsXG4gICAgICBhbW91bnQ6ICcyMDAwMDAwMDAnLFxuICAgICAgc2NyaXB0UHVibGljS2V5OiBfc2NyaXB0UHVibGljS2V5LFxuICAgICAgc2VxdWVuY2U6ICcwJyxcbiAgICAgIHNpZ09wQ291bnQ6IDEsXG4gICAgfTtcbiAgfSxcbn07XG5cbi8vIFVzZSBnZXR0ZXIgZnVuY3Rpb25zIHRvIHJldHVybiBmcmVzaCBkZWVwIGNvcGllcywgcHJldmVudGluZyB0ZXN0IG11dGF0aW9uIGxlYWthZ2VcbmV4cG9ydCBjb25zdCBUUkFOU0FDVElPTlMgPSB7XG4gIGdldCBzaW1wbGUoKTogS2FzcGFUcmFuc2FjdGlvbkRhdGEge1xuICAgIHJldHVybiBKU09OLnBhcnNlKFxuICAgICAgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICB2ZXJzaW9uOiAwLFxuICAgICAgICBpbnB1dHM6IFtVVFhPUy5zaW1wbGVdLFxuICAgICAgICBvdXRwdXRzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWRkcmVzczogX2twLmdldEFkZHJlc3MoJ21haW5uZXQnKSxcbiAgICAgICAgICAgIGFtb3VudDogJzk5OTk4MDAwJyxcbiAgICAgICAgICAgIHNjcmlwdFB1YmxpY0tleTogX3NjcmlwdFB1YmxpY0tleSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBmZWU6ICcyMDAwJyxcbiAgICAgICAgbG9ja1RpbWU6ICcwJyxcbiAgICAgICAgc3VibmV0d29ya0lkOiAnMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCcsXG4gICAgICAgIHBheWxvYWQ6ICcnLFxuICAgICAgfSlcbiAgICApIGFzIEthc3BhVHJhbnNhY3Rpb25EYXRhO1xuICB9LFxuICBnZXQgbXVsdGlJbnB1dCgpOiBLYXNwYVRyYW5zYWN0aW9uRGF0YSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoXG4gICAgICBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIHZlcnNpb246IDAsXG4gICAgICAgIGlucHV0czogW1VUWE9TLnNpbXBsZSwgVVRYT1Muc2Vjb25kXSxcbiAgICAgICAgb3V0cHV0czogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFkZHJlc3M6IF9rcC5nZXRBZGRyZXNzKCdtYWlubmV0JyksXG4gICAgICAgICAgICBhbW91bnQ6ICcyOTk5OTgwMDAnLFxuICAgICAgICAgICAgc2NyaXB0UHVibGljS2V5OiBfc2NyaXB0UHVibGljS2V5LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGZlZTogJzIwMDAnLFxuICAgICAgICBsb2NrVGltZTogJzAnLFxuICAgICAgICBzdWJuZXR3b3JrSWQ6ICcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgcGF5bG9hZDogJycsXG4gICAgICB9KVxuICAgICkgYXMgS2FzcGFUcmFuc2FjdGlvbkRhdGE7XG4gIH0sXG59O1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coin.test.d.ts","sourceRoot":"","sources":["../../../test/unit/coin.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const should = __importStar(require("should"));
|
|
37
|
+
const statics_1 = require("@bitgo-beta/statics");
|
|
38
|
+
const src_1 = require("../../src");
|
|
39
|
+
const keyPair_1 = require("../../src/lib/keyPair");
|
|
40
|
+
const transactionBuilder_1 = require("../../src/lib/transactionBuilder");
|
|
41
|
+
const transaction_1 = require("../../src/lib/transaction");
|
|
42
|
+
const kaspa_fixtures_1 = require("../fixtures/kaspa.fixtures");
|
|
43
|
+
async function buildSignedTxHex(coinName) {
|
|
44
|
+
const builder = new transactionBuilder_1.TransactionBuilder(statics_1.coins.get(coinName));
|
|
45
|
+
builder.addInput(kaspa_fixtures_1.UTXOS.simple).to(kaspa_fixtures_1.ADDRESSES.recipient, '99998000').fee('2000');
|
|
46
|
+
const tx = (await builder.build());
|
|
47
|
+
tx.sign(Buffer.from(kaspa_fixtures_1.KEYS.prv, 'hex'));
|
|
48
|
+
return tx.toHex();
|
|
49
|
+
}
|
|
50
|
+
async function buildUnsignedTxHex(coinName) {
|
|
51
|
+
const builder = new transactionBuilder_1.TransactionBuilder(statics_1.coins.get(coinName));
|
|
52
|
+
builder.addInput(kaspa_fixtures_1.UTXOS.simple).to(kaspa_fixtures_1.ADDRESSES.recipient, '99998000').fee('2000');
|
|
53
|
+
const tx = (await builder.build());
|
|
54
|
+
return tx.toHex();
|
|
55
|
+
}
|
|
56
|
+
describe('Kaspa (KASPA)', function () {
|
|
57
|
+
let kaspa;
|
|
58
|
+
let tkaspa;
|
|
59
|
+
before(function () {
|
|
60
|
+
const mockBitgo = {
|
|
61
|
+
url: () => '',
|
|
62
|
+
microservicesUrl: () => '',
|
|
63
|
+
post: () => ({ result: () => Promise.resolve({}) }),
|
|
64
|
+
get: () => ({ result: () => Promise.resolve({}) }),
|
|
65
|
+
};
|
|
66
|
+
kaspa = new src_1.Kaspa(mockBitgo, statics_1.coins.get('kaspa'));
|
|
67
|
+
tkaspa = new src_1.Kaspa(mockBitgo, statics_1.coins.get('tkaspa'));
|
|
68
|
+
});
|
|
69
|
+
describe('Coin Properties', function () {
|
|
70
|
+
it('should have the correct chain name', function () {
|
|
71
|
+
kaspa.getChain().should.equal('kaspa');
|
|
72
|
+
tkaspa.getChain().should.equal('tkaspa');
|
|
73
|
+
});
|
|
74
|
+
it('should have the correct family', function () {
|
|
75
|
+
kaspa.getFamily().should.equal('kaspa');
|
|
76
|
+
});
|
|
77
|
+
it('should have the correct full name', function () {
|
|
78
|
+
kaspa.getFullName().should.equal('Kaspa');
|
|
79
|
+
tkaspa.getFullName().should.equal('Testnet Kaspa');
|
|
80
|
+
});
|
|
81
|
+
it('should have the correct base factor (10^8)', function () {
|
|
82
|
+
kaspa.getBaseFactor().should.equal(100000000);
|
|
83
|
+
});
|
|
84
|
+
it('should support TSS (ECDSA MPC)', function () {
|
|
85
|
+
kaspa.supportsTss().should.be.true();
|
|
86
|
+
kaspa.getMPCAlgorithm().should.equal('ecdsa');
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
describe('Key Validation', function () {
|
|
90
|
+
it('should validate a valid public key', function () {
|
|
91
|
+
kaspa.isValidPub('0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798').should.be.true();
|
|
92
|
+
});
|
|
93
|
+
it('should reject an invalid public key', function () {
|
|
94
|
+
kaspa.isValidPub('not-a-key').should.be.false();
|
|
95
|
+
});
|
|
96
|
+
it('should validate a valid private key', function () {
|
|
97
|
+
kaspa.isValidPrv('a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2').should.be.true();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('Key Generation', function () {
|
|
101
|
+
it('should generate a key pair', function () {
|
|
102
|
+
const kp = kaspa.generateKeyPair();
|
|
103
|
+
should.exist(kp.pub);
|
|
104
|
+
should.exist(kp.prv);
|
|
105
|
+
kp.pub.should.have.length(66);
|
|
106
|
+
kp.prv.should.have.length(64);
|
|
107
|
+
});
|
|
108
|
+
it('should generate a key pair from seed', function () {
|
|
109
|
+
const seed = Buffer.alloc(32, 1);
|
|
110
|
+
const kp = kaspa.generateKeyPair(seed);
|
|
111
|
+
should.exist(kp.pub);
|
|
112
|
+
should.exist(kp.prv);
|
|
113
|
+
});
|
|
114
|
+
it('should generate consistent keys from same seed', function () {
|
|
115
|
+
const seed = Buffer.alloc(32, 42);
|
|
116
|
+
const kp1 = kaspa.generateKeyPair(seed);
|
|
117
|
+
const kp2 = kaspa.generateKeyPair(seed);
|
|
118
|
+
kp1.pub.should.equal(kp2.pub);
|
|
119
|
+
kp1.prv.should.equal(kp2.prv);
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
describe('Address Validation', function () {
|
|
123
|
+
it('should validate a mainnet address', function () {
|
|
124
|
+
const kp = new keyPair_1.KeyPair();
|
|
125
|
+
const address = kp.getAddress('mainnet');
|
|
126
|
+
kaspa.isValidAddress(address).should.be.true();
|
|
127
|
+
});
|
|
128
|
+
it('should reject an invalid address', function () {
|
|
129
|
+
kaspa.isValidAddress('not-an-address').should.be.false();
|
|
130
|
+
});
|
|
131
|
+
it('should reject empty address', function () {
|
|
132
|
+
kaspa.isValidAddress('').should.be.false();
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe('isWalletAddress', function () {
|
|
136
|
+
it('should return true when address matches derived address from keychains[0]', async function () {
|
|
137
|
+
const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
|
|
138
|
+
const address = kp.getAddress('mainnet');
|
|
139
|
+
const keychains = [{ pub: kaspa_fixtures_1.KEYS.pub }, { pub: kaspa_fixtures_1.KEYS.pub }, { pub: kaspa_fixtures_1.KEYS.pub }];
|
|
140
|
+
const result = await kaspa.isWalletAddress({ address, keychains });
|
|
141
|
+
result.should.be.true();
|
|
142
|
+
});
|
|
143
|
+
it('should throw on invalid address', async function () {
|
|
144
|
+
await kaspa
|
|
145
|
+
.isWalletAddress({ address: 'not-an-address', keychains: [] })
|
|
146
|
+
.should.be.rejectedWith(/invalid address/);
|
|
147
|
+
});
|
|
148
|
+
it('should throw when keychains count is not 3', async function () {
|
|
149
|
+
const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
|
|
150
|
+
const address = kp.getAddress('mainnet');
|
|
151
|
+
await kaspa
|
|
152
|
+
.isWalletAddress({ address, keychains: [{ pub: kaspa_fixtures_1.KEYS.pub }] })
|
|
153
|
+
.should.be.rejectedWith(/Invalid keychains/);
|
|
154
|
+
});
|
|
155
|
+
it('should throw when derived address does not match', async function () {
|
|
156
|
+
const other = new keyPair_1.KeyPair().getKeys();
|
|
157
|
+
const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
|
|
158
|
+
const address = kp.getAddress('mainnet');
|
|
159
|
+
const keychains = [{ pub: other.pub }, { pub: other.pub }, { pub: other.pub }];
|
|
160
|
+
await kaspa.isWalletAddress({ address, keychains }).should.be.rejectedWith(/address validation failure/);
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('parseTransaction', function () {
|
|
164
|
+
it('should return empty object when no txHex is provided', async function () {
|
|
165
|
+
const parsed = await kaspa.parseTransaction({});
|
|
166
|
+
parsed.should.deepEqual({});
|
|
167
|
+
});
|
|
168
|
+
it('should return inputs and outputs for a valid txHex', async function () {
|
|
169
|
+
const txHex = await buildUnsignedTxHex('kaspa');
|
|
170
|
+
const parsed = (await kaspa.parseTransaction({ txHex }));
|
|
171
|
+
parsed.inputs.should.have.length(1);
|
|
172
|
+
parsed.inputs[0].amount.should.equal(kaspa_fixtures_1.UTXOS.simple.amount);
|
|
173
|
+
parsed.inputs[0].coin.should.equal('kaspa');
|
|
174
|
+
parsed.outputs.should.have.length(1);
|
|
175
|
+
parsed.outputs[0].amount.should.equal('99998000');
|
|
176
|
+
parsed.outputs[0].address.should.equal(kaspa_fixtures_1.ADDRESSES.recipient);
|
|
177
|
+
parsed.outputs[0].coin.should.equal('kaspa');
|
|
178
|
+
});
|
|
179
|
+
it('should throw on invalid txHex', async function () {
|
|
180
|
+
await kaspa.parseTransaction({ txHex: 'notvalidhex!!' }).should.be.rejectedWith(/Invalid transaction/);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
describe('explainTransaction', function () {
|
|
184
|
+
it('should explain a valid transaction', async function () {
|
|
185
|
+
const txHex = await buildUnsignedTxHex('kaspa');
|
|
186
|
+
const explained = await kaspa.explainTransaction({ txHex });
|
|
187
|
+
explained.outputs.should.have.length(1);
|
|
188
|
+
explained.outputs[0].amount.should.equal('99998000');
|
|
189
|
+
});
|
|
190
|
+
it('should throw when txHex is missing', async function () {
|
|
191
|
+
await kaspa.explainTransaction({}).should.be.rejectedWith(/missing transaction hex/);
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
describe('signTransaction', function () {
|
|
195
|
+
it('should sign a prebuilt transaction', async function () {
|
|
196
|
+
const txHex = await buildUnsignedTxHex('kaspa');
|
|
197
|
+
const result = (await kaspa.signTransaction({
|
|
198
|
+
txPrebuild: { txHex },
|
|
199
|
+
prv: kaspa_fixtures_1.KEYS.prv,
|
|
200
|
+
}));
|
|
201
|
+
result.txHex.should.be.a.String();
|
|
202
|
+
const signed = transaction_1.Transaction.fromHex('kaspa', result.txHex);
|
|
203
|
+
signed.signature[0].should.have.length(130);
|
|
204
|
+
});
|
|
205
|
+
it('should throw when txHex is missing', async function () {
|
|
206
|
+
await kaspa.signTransaction({ txPrebuild: {}, prv: kaspa_fixtures_1.KEYS.prv }).should.be.rejectedWith(/missing txHex/);
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
describe('verifyTransaction', function () {
|
|
210
|
+
it('should verify a valid transaction', async function () {
|
|
211
|
+
const txHex = await buildSignedTxHex('kaspa');
|
|
212
|
+
const result = await kaspa.verifyTransaction({
|
|
213
|
+
txPrebuild: { txHex },
|
|
214
|
+
txParams: { recipients: [{ address: kaspa_fixtures_1.ADDRESSES.recipient, amount: '99998000' }] },
|
|
215
|
+
});
|
|
216
|
+
result.should.be.true();
|
|
217
|
+
});
|
|
218
|
+
it('should throw when txHex is missing', async function () {
|
|
219
|
+
await kaspa
|
|
220
|
+
.verifyTransaction({ txPrebuild: {}, txParams: {} })
|
|
221
|
+
.should.be.rejectedWith(/missing required tx prebuild property txHex/);
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29pbi50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2NvaW4udGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxpREFBNEM7QUFDNUMsbUNBQWtDO0FBQ2xDLG1EQUFnRDtBQUNoRCx5RUFBc0U7QUFDdEUsMkRBQXdEO0FBQ3hELCtEQUFvRTtBQUVwRSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsUUFBZ0I7SUFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSx1Q0FBa0IsQ0FBQyxlQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDNUQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxzQkFBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQywwQkFBUyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDL0UsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBZ0IsQ0FBQztJQUNsRCxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUJBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNwQixDQUFDO0FBRUQsS0FBSyxVQUFVLGtCQUFrQixDQUFDLFFBQWdCO0lBQ2hELE1BQU0sT0FBTyxHQUFHLElBQUksdUNBQWtCLENBQUMsZUFBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzVELE9BQU8sQ0FBQyxRQUFRLENBQUMsc0JBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsMEJBQVMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0s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TCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNob3VsZCBmcm9tICdzaG91bGQnO1xuaW1wb3J0IHsgY29pbnMgfSBmcm9tICdAYml0Z28tYmV0YS9zdGF0aWNzJztcbmltcG9ydCB7IEthc3BhIH0gZnJvbSAnLi4vLi4vc3JjJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL2tleVBhaXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgVHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IEFERFJFU1NFUywgS0VZUywgVVRYT1MgfSBmcm9tICcuLi9maXh0dXJlcy9rYXNwYS5maXh0dXJlcyc7XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2lnbmVkVHhIZXgoY29pbk5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldChjb2luTmFtZSkpO1xuICBidWlsZGVyLmFkZElucHV0KFVUWE9TLnNpbXBsZSkudG8oQUREUkVTU0VTLnJlY2lwaWVudCwgJzk5OTk4MDAwJykuZmVlKCcyMDAwJyk7XG4gIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gIHR4LnNpZ24oQnVmZmVyLmZyb20oS0VZUy5wcnYsICdoZXgnKSk7XG4gIHJldHVybiB0eC50b0hleCgpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBidWlsZFVuc2lnbmVkVHhIZXgoY29pbk5hbWU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJ1aWxkZXIgPSBuZXcgVHJhbnNhY3Rpb25CdWlsZGVyKGNvaW5zLmdldChjb2luTmFtZSkpO1xuICBidWlsZGVyLmFkZElucHV0KFVUWE9TLnNpbXBsZSkudG8oQUREUkVTU0VTLnJlY2lwaWVudCwgJzk5OTk4MDAwJykuZmVlKCcyMDAwJyk7XG4gIGNvbnN0IHR4ID0gKGF3YWl0IGJ1aWxkZXIuYnVpbGQoKSkgYXMgVHJhbnNhY3Rpb247XG4gIHJldHVybiB0eC50b0hleCgpO1xufVxuXG5kZXNjcmliZSgnS2FzcGEgKEtBU1BBKScsIGZ1bmN0aW9uICgpIHtcbiAgbGV0IGthc3BhOiBLYXNwYTtcbiAgbGV0IHRrYXNwYTogS2FzcGE7XG5cbiAgYmVmb3JlKGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBtb2NrQml0Z28gPSB7XG4gICAgICB1cmw6ICgpID0+ICcnLFxuICAgICAgbWljcm9zZXJ2aWNlc1VybDogKCkgPT4gJycsXG4gICAgICBwb3N0OiAoKSA9PiAoeyByZXN1bHQ6ICgpID0+IFByb21pc2UucmVzb2x2ZSh7fSkgfSksXG4gICAgICBnZXQ6ICgpID0+ICh7IHJlc3VsdDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKHt9KSB9KSxcbiAgICB9IGFzIGFueTtcbiAgICBrYXNwYSA9IG5ldyBLYXNwYShtb2NrQml0Z28sIGNvaW5zLmdldCgna2FzcGEnKSk7XG4gICAgdGthc3BhID0gbmV3IEthc3BhKG1vY2tCaXRnbywgY29pbnMuZ2V0KCd0a2FzcGEnKSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDb2luIFByb3BlcnRpZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSBjb3JyZWN0IGNoYWluIG5hbWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBrYXNwYS5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgna2FzcGEnKTtcbiAgICAgIHRrYXNwYS5nZXRDaGFpbigpLnNob3VsZC5lcXVhbCgndGthc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgZmFtaWx5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuZ2V0RmFtaWx5KCkuc2hvdWxkLmVxdWFsKCdrYXNwYScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIHRoZSBjb3JyZWN0IGZ1bGwgbmFtZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdLYXNwYScpO1xuICAgICAgdGthc3BhLmdldEZ1bGxOYW1lKCkuc2hvdWxkLmVxdWFsKCdUZXN0bmV0IEthc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhdmUgdGhlIGNvcnJlY3QgYmFzZSBmYWN0b3IgKDEwXjgpJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuZ2V0QmFzZUZhY3RvcigpLnNob3VsZC5lcXVhbCgxMDAwMDAwMDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzdXBwb3J0IFRTUyAoRUNEU0EgTVBDKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLnN1cHBvcnRzVHNzKCkuc2hvdWxkLmJlLnRydWUoKTtcbiAgICAgIGthc3BhLmdldE1QQ0FsZ29yaXRobSgpLnNob3VsZC5lcXVhbCgnZWNkc2EnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0tleSBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgYSB2YWxpZCBwdWJsaWMga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZFB1YignMDI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4Jykuc2hvdWxkLmJlLnRydWUoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IGFuIGludmFsaWQgcHVibGljIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGthc3BhLmlzVmFsaWRQdWIoJ25vdC1hLWtleScpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIHZhbGlkIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZFBydignYTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMmMzZDRlNWY2YTFiMicpLnNob3VsZC5iZS50cnVlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdLZXkgR2VuZXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEga2V5IHBhaXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IGthc3BhLmdlbmVyYXRlS2V5UGFpcigpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtwLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa3AucHJ2KTtcbiAgICAgIGtwLnB1YiEuc2hvdWxkLmhhdmUubGVuZ3RoKDY2KTtcbiAgICAgIGtwLnBydiEuc2hvdWxkLmhhdmUubGVuZ3RoKDY0KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSBrZXkgcGFpciBmcm9tIHNlZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBzZWVkID0gQnVmZmVyLmFsbG9jKDMyLCAxKTtcbiAgICAgIGNvbnN0IGtwID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGtwLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa3AucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZ2VuZXJhdGUgY29uc2lzdGVudCBrZXlzIGZyb20gc2FtZSBzZWVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc2VlZCA9IEJ1ZmZlci5hbGxvYygzMiwgNDIpO1xuICAgICAgY29uc3Qga3AxID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAgY29uc3Qga3AyID0ga2FzcGEuZ2VuZXJhdGVLZXlQYWlyKHNlZWQpO1xuICAgICAga3AxLnB1YiEuc2hvdWxkLmVxdWFsKGtwMi5wdWIhKTtcbiAgICAgIGtwMS5wcnYhLnNob3VsZC5lcXVhbChrcDIucHJ2ISk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBZGRyZXNzIFZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBhIG1haW5uZXQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0Jyk7XG4gICAgICBrYXNwYS5pc1ZhbGlkQWRkcmVzcyhhZGRyZXNzKS5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZWplY3QgYW4gaW52YWxpZCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZEFkZHJlc3MoJ25vdC1hbi1hZGRyZXNzJykuc2hvdWxkLmJlLmZhbHNlKCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBlbXB0eSBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAga2FzcGEuaXNWYWxpZEFkZHJlc3MoJycpLnNob3VsZC5iZS5mYWxzZSgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnaXNXYWxsZXRBZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBhZGRyZXNzIG1hdGNoZXMgZGVyaXZlZCBhZGRyZXNzIGZyb20ga2V5Y2hhaW5zWzBdJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygnbWFpbm5ldCcpO1xuICAgICAgY29uc3Qga2V5Y2hhaW5zID0gW3sgcHViOiBLRVlTLnB1YiB9LCB7IHB1YjogS0VZUy5wdWIgfSwgeyBwdWI6IEtFWVMucHViIH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQga2FzcGEuaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzcywga2V5Y2hhaW5zIH0gYXMgYW55KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBpbnZhbGlkIGFkZHJlc3MnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYVxuICAgICAgICAuaXNXYWxsZXRBZGRyZXNzKHsgYWRkcmVzczogJ25vdC1hbi1hZGRyZXNzJywga2V5Y2hhaW5zOiBbXSB9IGFzIGFueSlcbiAgICAgICAgLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2ludmFsaWQgYWRkcmVzcy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGtleWNoYWlucyBjb3VudCBpcyBub3QgMycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGF3YWl0IGthc3BhXG4gICAgICAgIC5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzLCBrZXljaGFpbnM6IFt7IHB1YjogS0VZUy5wdWIgfV0gfSBhcyBhbnkpXG4gICAgICAgIC5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIGtleWNoYWlucy8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIGRlcml2ZWQgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG90aGVyID0gbmV3IEtleVBhaXIoKS5nZXRLZXlzKCk7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHJ2OiBLRVlTLnBydiB9KTtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBrcC5nZXRBZGRyZXNzKCdtYWlubmV0Jyk7XG4gICAgICBjb25zdCBrZXljaGFpbnMgPSBbeyBwdWI6IG90aGVyLnB1YiB9LCB7IHB1Yjogb3RoZXIucHViIH0sIHsgcHViOiBvdGhlci5wdWIgfV07XG4gICAgICBhd2FpdCBrYXNwYS5pc1dhbGxldEFkZHJlc3MoeyBhZGRyZXNzLCBrZXljaGFpbnMgfSBhcyBhbnkpLnNob3VsZC5iZS5yZWplY3RlZFdpdGgoL2FkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdwYXJzZVRyYW5zYWN0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGVtcHR5IG9iamVjdCB3aGVuIG5vIHR4SGV4IGlzIHByb3ZpZGVkJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyc2VkID0gYXdhaXQga2FzcGEucGFyc2VUcmFuc2FjdGlvbih7fSk7XG4gICAgICBwYXJzZWQuc2hvdWxkLmRlZXBFcXVhbCh7fSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBpbnB1dHMgYW5kIG91dHB1dHMgZm9yIGEgdmFsaWQgdHhIZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IHBhcnNlZCA9IChhd2FpdCBrYXNwYS5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXggfSkpIGFzIHtcbiAgICAgICAgaW5wdXRzOiB7IGFtb3VudDogc3RyaW5nOyBjb2luOiBzdHJpbmcgfVtdO1xuICAgICAgICBvdXRwdXRzOiB7IGFkZHJlc3M6IHN0cmluZzsgYW1vdW50OiBzdHJpbmc7IGNvaW46IHN0cmluZyB9W107XG4gICAgICB9O1xuICAgICAgcGFyc2VkLmlucHV0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgICBwYXJzZWQuaW5wdXRzWzBdLmFtb3VudC5zaG91bGQuZXF1YWwoVVRYT1Muc2ltcGxlLmFtb3VudCk7XG4gICAgICBwYXJzZWQuaW5wdXRzWzBdLmNvaW4uc2hvdWxkLmVxdWFsKCdrYXNwYScpO1xuICAgICAgcGFyc2VkLm91dHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgcGFyc2VkLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnOTk5OTgwMDAnKTtcbiAgICAgIHBhcnNlZC5vdXRwdXRzWzBdLmFkZHJlc3Muc2hvdWxkLmVxdWFsKEFERFJFU1NFUy5yZWNpcGllbnQpO1xuICAgICAgcGFyc2VkLm91dHB1dHNbMF0uY29pbi5zaG91bGQuZXF1YWwoJ2thc3BhJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IG9uIGludmFsaWQgdHhIZXgnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYS5wYXJzZVRyYW5zYWN0aW9uKHsgdHhIZXg6ICdub3R2YWxpZGhleCEhJyB9KS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKC9JbnZhbGlkIHRyYW5zYWN0aW9uLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHBsYWluVHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHBsYWluIGEgdmFsaWQgdHJhbnNhY3Rpb24nLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB0eEhleCA9IGF3YWl0IGJ1aWxkVW5zaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IGV4cGxhaW5lZCA9IGF3YWl0IGthc3BhLmV4cGxhaW5UcmFuc2FjdGlvbih7IHR4SGV4IH0pO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHMuc2hvdWxkLmhhdmUubGVuZ3RoKDEpO1xuICAgICAgZXhwbGFpbmVkLm91dHB1dHNbMF0uYW1vdW50LnNob3VsZC5lcXVhbCgnOTk5OTgwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgd2hlbiB0eEhleCBpcyBtaXNzaW5nJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgYXdhaXQga2FzcGEuZXhwbGFpblRyYW5zYWN0aW9uKHt9IGFzIGFueSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyB0cmFuc2FjdGlvbiBoZXgvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NpZ25UcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHNpZ24gYSBwcmVidWlsdCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRVbnNpZ25lZFR4SGV4KCdrYXNwYScpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gKGF3YWl0IGthc3BhLnNpZ25UcmFuc2FjdGlvbih7XG4gICAgICAgIHR4UHJlYnVpbGQ6IHsgdHhIZXggfSxcbiAgICAgICAgcHJ2OiBLRVlTLnBydixcbiAgICAgIH0gYXMgYW55KSkgYXMgeyB0eEhleDogc3RyaW5nIH07XG4gICAgICByZXN1bHQudHhIZXguc2hvdWxkLmJlLmEuU3RyaW5nKCk7XG4gICAgICBjb25zdCBzaWduZWQgPSBUcmFuc2FjdGlvbi5mcm9tSGV4KCdrYXNwYScsIHJlc3VsdC50eEhleCk7XG4gICAgICBzaWduZWQuc2lnbmF0dXJlWzBdLnNob3VsZC5oYXZlLmxlbmd0aCgxMzApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYS5zaWduVHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7fSwgcHJ2OiBLRVlTLnBydiB9IGFzIGFueSkuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyB0eEhleC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndmVyaWZ5VHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgYSB2YWxpZCB0cmFuc2FjdGlvbicsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHR4SGV4ID0gYXdhaXQgYnVpbGRTaWduZWRUeEhleCgna2FzcGEnKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGthc3BhLnZlcmlmeVRyYW5zYWN0aW9uKHtcbiAgICAgICAgdHhQcmVidWlsZDogeyB0eEhleCB9LFxuICAgICAgICB0eFBhcmFtczogeyByZWNpcGllbnRzOiBbeyBhZGRyZXNzOiBBRERSRVNTRVMucmVjaXBpZW50LCBhbW91bnQ6ICc5OTk5ODAwMCcgfV0gfSxcbiAgICAgIH0gYXMgYW55KTtcbiAgICAgIHJlc3VsdC5zaG91bGQuYmUudHJ1ZSgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyB3aGVuIHR4SGV4IGlzIG1pc3NpbmcnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBhd2FpdCBrYXNwYVxuICAgICAgICAudmVyaWZ5VHJhbnNhY3Rpb24oeyB0eFByZWJ1aWxkOiB7fSwgdHhQYXJhbXM6IHt9IH0gYXMgYW55KVxuICAgICAgICAuc2hvdWxkLmJlLnJlamVjdGVkV2l0aCgvbWlzc2luZyByZXF1aXJlZCB0eCBwcmVidWlsZCBwcm9wZXJ0eSB0eEhleC8pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.test.d.ts","sourceRoot":"","sources":["../../../test/unit/keyPair.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const should = __importStar(require("should"));
|
|
37
|
+
const keyPair_1 = require("../../src/lib/keyPair");
|
|
38
|
+
const kaspa_fixtures_1 = require("../fixtures/kaspa.fixtures");
|
|
39
|
+
describe('Kaspa KeyPair', function () {
|
|
40
|
+
describe('Key Generation', function () {
|
|
41
|
+
it('should generate a random key pair', function () {
|
|
42
|
+
const kp = new keyPair_1.KeyPair();
|
|
43
|
+
const keys = kp.getKeys();
|
|
44
|
+
should.exist(keys.pub);
|
|
45
|
+
should.exist(keys.prv);
|
|
46
|
+
keys.pub.should.have.length(66); // compressed secp256k1 public key
|
|
47
|
+
keys.prv.should.have.length(64); // 32-byte private key in hex
|
|
48
|
+
});
|
|
49
|
+
it('should create a key pair from a private key', function () {
|
|
50
|
+
const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
|
|
51
|
+
const keys = kp.getKeys();
|
|
52
|
+
keys.pub.should.equal(kaspa_fixtures_1.KEYS.pub);
|
|
53
|
+
keys.prv.should.equal(kaspa_fixtures_1.KEYS.prv);
|
|
54
|
+
});
|
|
55
|
+
it('should create a key pair from a public key', function () {
|
|
56
|
+
const kp = new keyPair_1.KeyPair({ pub: kaspa_fixtures_1.KEYS.pub });
|
|
57
|
+
const keys = kp.getKeys();
|
|
58
|
+
keys.pub.should.equal(kaspa_fixtures_1.KEYS.pub);
|
|
59
|
+
should.not.exist(keys.prv);
|
|
60
|
+
});
|
|
61
|
+
it('should throw for an invalid private key', function () {
|
|
62
|
+
(() => new keyPair_1.KeyPair({ prv: 'invalid-prv' })).should.throw();
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe('Address Derivation', function () {
|
|
66
|
+
it('should derive a mainnet address', function () {
|
|
67
|
+
const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
|
|
68
|
+
const address = kp.getAddress('mainnet');
|
|
69
|
+
address.should.startWith('kaspa');
|
|
70
|
+
address.should.containEql(':');
|
|
71
|
+
});
|
|
72
|
+
it('should derive a testnet address', function () {
|
|
73
|
+
const kp = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
|
|
74
|
+
const address = kp.getAddress('testnet');
|
|
75
|
+
address.should.startWith('kaspatest');
|
|
76
|
+
address.should.containEql(':');
|
|
77
|
+
});
|
|
78
|
+
it('should derive consistent addresses for the same key', function () {
|
|
79
|
+
const kp1 = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
|
|
80
|
+
const kp2 = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
|
|
81
|
+
kp1.getAddress('mainnet').should.equal(kp2.getAddress('mainnet'));
|
|
82
|
+
});
|
|
83
|
+
it('should derive different addresses for different keys', function () {
|
|
84
|
+
const kp1 = new keyPair_1.KeyPair({ prv: kaspa_fixtures_1.KEYS.prv });
|
|
85
|
+
const kp2 = new keyPair_1.KeyPair();
|
|
86
|
+
kp1.getAddress('mainnet').should.not.equal(kp2.getAddress('mainnet'));
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2tleVBhaXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxtREFBZ0Q7QUFDaEQsK0RBQWtEO0FBRWxELFFBQVEsQ0FBQyxlQUFlLEVBQUU7SUFDeEIsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRTtZQUN0QyxNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztZQUNuRSxJQUFJLENBQUMsR0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFO1lBQ2hELE1BQU0sRUFBRSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxxQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FB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QUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL2tleVBhaXInO1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4uL2ZpeHR1cmVzL2thc3BhLmZpeHR1cmVzJztcblxuZGVzY3JpYmUoJ0thc3BhIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdLZXkgR2VuZXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgcmFuZG9tIGtleSBwYWlyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcigpO1xuICAgICAgY29uc3Qga2V5cyA9IGtwLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlzLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5cy5wcnYpO1xuICAgICAga2V5cy5wdWIuc2hvdWxkLmhhdmUubGVuZ3RoKDY2KTsgLy8gY29tcHJlc3NlZCBzZWNwMjU2azEgcHVibGljIGtleVxuICAgICAga2V5cy5wcnYhLnNob3VsZC5oYXZlLmxlbmd0aCg2NCk7IC8vIDMyLWJ5dGUgcHJpdmF0ZSBrZXkgaW4gaGV4XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIGtleSBwYWlyIGZyb20gYSBwcml2YXRlIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtwLmdldEtleXMoKTtcbiAgICAgIGtleXMucHViLnNob3VsZC5lcXVhbChLRVlTLnB1Yik7XG4gICAgICBrZXlzLnBydiEuc2hvdWxkLmVxdWFsKEtFWVMucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEga2V5IHBhaXIgZnJvbSBhIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHViOiBLRVlTLnB1YiB9KTtcbiAgICAgIGNvbnN0IGtleXMgPSBrcC5nZXRLZXlzKCk7XG4gICAgICBrZXlzLnB1Yi5zaG91bGQuZXF1YWwoS0VZUy5wdWIpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChrZXlzLnBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBhbiBpbnZhbGlkIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IG5ldyBLZXlQYWlyKHsgcHJ2OiAnaW52YWxpZC1wcnYnIH0pKS5zaG91bGQudGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgRGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGRlcml2ZSBhIG1haW5uZXQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLnN0YXJ0V2l0aCgna2FzcGEnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmNvbnRhaW5FcWwoJzonKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGEgdGVzdG5ldCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygndGVzdG5ldCcpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuc3RhcnRXaXRoKCdrYXNwYXRlc3QnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmNvbnRhaW5FcWwoJzonKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGNvbnNpc3RlbnQgYWRkcmVzc2VzIGZvciB0aGUgc2FtZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcDEgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBrcDEuZ2V0QWRkcmVzcygnbWFpbm5ldCcpLnNob3VsZC5lcXVhbChrcDIuZ2V0QWRkcmVzcygnbWFpbm5ldCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGRpZmZlcmVudCBhZGRyZXNzZXMgZm9yIGRpZmZlcmVudCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AxID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3Qga3AyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGtwMS5nZXRBZGRyZXNzKCdtYWlubmV0Jykuc2hvdWxkLm5vdC5lcXVhbChrcDIuZ2V0QWRkcmVzcygnbWFpbm5ldCcpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.test.d.ts","sourceRoot":"","sources":["../../../test/unit/transaction.test.ts"],"names":[],"mappings":""}
|