@bitgo-beta/sdk-coin-kaspa 0.0.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +126 -0
  3. package/dist/src/index.d.ts +5 -0
  4. package/dist/src/index.d.ts.map +1 -0
  5. package/dist/src/index.js +44 -0
  6. package/dist/src/kaspa.d.ts +64 -0
  7. package/dist/src/kaspa.d.ts.map +1 -0
  8. package/dist/src/kaspa.js +246 -0
  9. package/dist/src/lib/constants.d.ts +12 -0
  10. package/dist/src/lib/constants.d.ts.map +1 -0
  11. package/dist/src/lib/constants.js +18 -0
  12. package/dist/src/lib/iface.d.ts +109 -0
  13. package/dist/src/lib/iface.d.ts.map +1 -0
  14. package/dist/src/lib/iface.js +3 -0
  15. package/dist/src/lib/index.d.ts +10 -0
  16. package/dist/src/lib/index.d.ts.map +1 -0
  17. package/dist/src/lib/index.js +36 -0
  18. package/dist/src/lib/keyPair.d.ts +22 -0
  19. package/dist/src/lib/keyPair.d.ts.map +1 -0
  20. package/dist/src/lib/keyPair.js +61 -0
  21. package/dist/src/lib/sighash.d.ts +25 -0
  22. package/dist/src/lib/sighash.d.ts.map +1 -0
  23. package/dist/src/lib/sighash.js +191 -0
  24. package/dist/src/lib/transaction.d.ts +53 -0
  25. package/dist/src/lib/transaction.d.ts.map +1 -0
  26. package/dist/src/lib/transaction.js +133 -0
  27. package/dist/src/lib/transactionBuilder.d.ts +58 -0
  28. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  29. package/dist/src/lib/transactionBuilder.js +139 -0
  30. package/dist/src/lib/transactionBuilderFactory.d.ts +15 -0
  31. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  32. package/dist/src/lib/transactionBuilderFactory.js +25 -0
  33. package/dist/src/lib/utils.d.ts +43 -0
  34. package/dist/src/lib/utils.d.ts.map +1 -0
  35. package/dist/src/lib/utils.js +236 -0
  36. package/dist/src/register.d.ts +3 -0
  37. package/dist/src/register.d.ts.map +1 -0
  38. package/dist/src/register.js +10 -0
  39. package/dist/test/fixtures/kaspa.fixtures.d.ts +29 -0
  40. package/dist/test/fixtures/kaspa.fixtures.d.ts.map +1 -0
  41. package/dist/test/fixtures/kaspa.fixtures.js +90 -0
  42. package/dist/test/unit/coin.test.d.ts +2 -0
  43. package/dist/test/unit/coin.test.d.ts.map +1 -0
  44. package/dist/test/unit/coin.test.js +225 -0
  45. package/dist/test/unit/keyPair.test.d.ts +2 -0
  46. package/dist/test/unit/keyPair.test.d.ts.map +1 -0
  47. package/dist/test/unit/keyPair.test.js +90 -0
  48. package/dist/test/unit/transaction.test.d.ts +2 -0
  49. package/dist/test/unit/transaction.test.d.ts.map +1 -0
  50. package/dist/test/unit/transaction.test.js +206 -0
  51. package/dist/test/unit/transactionBuilder.test.d.ts +2 -0
  52. package/dist/test/unit/transactionBuilder.test.d.ts.map +1 -0
  53. package/dist/test/unit/transactionBuilder.test.js +220 -0
  54. package/dist/test/unit/transactionFlow.test.d.ts +8 -0
  55. package/dist/test/unit/transactionFlow.test.d.ts.map +1 -0
  56. package/dist/test/unit/transactionFlow.test.js +105 -0
  57. package/dist/test/unit/utils.test.d.ts +2 -0
  58. package/dist/test/unit/utils.test.d.ts.map +1 -0
  59. package/dist/test/unit/utils.test.js +159 -0
  60. package/dist/tsconfig.tsbuildinfo +1 -0
  61. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=coin.test.d.ts.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keyPair.test.d.ts.map
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGVzdC91bml0L2tleVBhaXIudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpQztBQUNqQyxtREFBZ0Q7QUFDaEQsK0RBQWtEO0FBRWxELFFBQVEsQ0FBQyxlQUFlLEVBQUU7SUFDeEIsUUFBUSxDQUFDLGdCQUFnQixFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxtQ0FBbUMsRUFBRTtZQUN0QyxNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztZQUN6QixNQUFNLElBQUksR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDdkIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGtDQUFrQztZQUNuRSxJQUFJLENBQUMsR0FBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1FBQ2pFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDZDQUE2QyxFQUFFO1lBQ2hELE1BQU0sRUFBRSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxxQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxHQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDRDQUE0QyxFQUFFO1lBQy9DLE1BQU0sRUFBRSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxxQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxxQkFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtZQUM1QyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsb0JBQW9CLEVBQUU7UUFDN0IsRUFBRSxDQUFDLGlDQUFpQyxFQUFFO1lBQ3BDLE1BQU0sRUFBRSxHQUFHLElBQUksaUJBQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxxQkFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDMUMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNsQyxPQUFPLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtZQUNwQyxNQUFNLEVBQUUsR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUscUJBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDekMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUU7WUFDeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLHFCQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUscUJBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUU7WUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxpQkFBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLHFCQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFPLEVBQUUsQ0FBQztZQUMxQixHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuLi8uLi9zcmMvbGliL2tleVBhaXInO1xuaW1wb3J0IHsgS0VZUyB9IGZyb20gJy4uL2ZpeHR1cmVzL2thc3BhLmZpeHR1cmVzJztcblxuZGVzY3JpYmUoJ0thc3BhIEtleVBhaXInLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdLZXkgR2VuZXJhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgcmFuZG9tIGtleSBwYWlyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcigpO1xuICAgICAgY29uc3Qga2V5cyA9IGtwLmdldEtleXMoKTtcbiAgICAgIHNob3VsZC5leGlzdChrZXlzLnB1Yik7XG4gICAgICBzaG91bGQuZXhpc3Qoa2V5cy5wcnYpO1xuICAgICAga2V5cy5wdWIuc2hvdWxkLmhhdmUubGVuZ3RoKDY2KTsgLy8gY29tcHJlc3NlZCBzZWNwMjU2azEgcHVibGljIGtleVxuICAgICAga2V5cy5wcnYhLnNob3VsZC5oYXZlLmxlbmd0aCg2NCk7IC8vIDMyLWJ5dGUgcHJpdmF0ZSBrZXkgaW4gaGV4XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNyZWF0ZSBhIGtleSBwYWlyIGZyb20gYSBwcml2YXRlIGtleScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3Qga2V5cyA9IGtwLmdldEtleXMoKTtcbiAgICAgIGtleXMucHViLnNob3VsZC5lcXVhbChLRVlTLnB1Yik7XG4gICAgICBrZXlzLnBydiEuc2hvdWxkLmVxdWFsKEtFWVMucHJ2KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY3JlYXRlIGEga2V5IHBhaXIgZnJvbSBhIHB1YmxpYyBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcCA9IG5ldyBLZXlQYWlyKHsgcHViOiBLRVlTLnB1YiB9KTtcbiAgICAgIGNvbnN0IGtleXMgPSBrcC5nZXRLZXlzKCk7XG4gICAgICBrZXlzLnB1Yi5zaG91bGQuZXF1YWwoS0VZUy5wdWIpO1xuICAgICAgc2hvdWxkLm5vdC5leGlzdChrZXlzLnBydik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGZvciBhbiBpbnZhbGlkIHByaXZhdGUga2V5JywgZnVuY3Rpb24gKCkge1xuICAgICAgKCgpID0+IG5ldyBLZXlQYWlyKHsgcHJ2OiAnaW52YWxpZC1wcnYnIH0pKS5zaG91bGQudGhyb3coKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0FkZHJlc3MgRGVyaXZhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGRlcml2ZSBhIG1haW5uZXQgYWRkcmVzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGtwID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3QgYWRkcmVzcyA9IGtwLmdldEFkZHJlc3MoJ21haW5uZXQnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLnN0YXJ0V2l0aCgna2FzcGEnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmNvbnRhaW5FcWwoJzonKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGEgdGVzdG5ldCBhZGRyZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBhZGRyZXNzID0ga3AuZ2V0QWRkcmVzcygndGVzdG5ldCcpO1xuICAgICAgYWRkcmVzcy5zaG91bGQuc3RhcnRXaXRoKCdrYXNwYXRlc3QnKTtcbiAgICAgIGFkZHJlc3Muc2hvdWxkLmNvbnRhaW5FcWwoJzonKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGNvbnNpc3RlbnQgYWRkcmVzc2VzIGZvciB0aGUgc2FtZSBrZXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBrcDEgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBjb25zdCBrcDIgPSBuZXcgS2V5UGFpcih7IHBydjogS0VZUy5wcnYgfSk7XG4gICAgICBrcDEuZ2V0QWRkcmVzcygnbWFpbm5ldCcpLnNob3VsZC5lcXVhbChrcDIuZ2V0QWRkcmVzcygnbWFpbm5ldCcpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZGVyaXZlIGRpZmZlcmVudCBhZGRyZXNzZXMgZm9yIGRpZmZlcmVudCBrZXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qga3AxID0gbmV3IEtleVBhaXIoeyBwcnY6IEtFWVMucHJ2IH0pO1xuICAgICAgY29uc3Qga3AyID0gbmV3IEtleVBhaXIoKTtcbiAgICAgIGtwMS5nZXRBZGRyZXNzKCdtYWlubmV0Jykuc2hvdWxkLm5vdC5lcXVhbChrcDIuZ2V0QWRkcmVzcygnbWFpbm5ldCcpKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transaction.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.test.d.ts","sourceRoot":"","sources":["../../../test/unit/transaction.test.ts"],"names":[],"mappings":""}