@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,246 @@
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
+ exports.Kaspa = void 0;
37
+ const statics_1 = require("@bitgo-beta/statics");
38
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
39
+ const KaspaLib = __importStar(require("./lib"));
40
+ const utils_1 = require("./lib/utils");
41
+ class Kaspa extends sdk_core_1.BaseCoin {
42
+ constructor(bitgo, staticsCoin) {
43
+ super(bitgo);
44
+ if (!staticsCoin) {
45
+ throw new Error('missing required constructor parameter staticsCoin');
46
+ }
47
+ this._staticsCoin = staticsCoin;
48
+ }
49
+ static createInstance(bitgo, staticsCoin) {
50
+ return new Kaspa(bitgo, staticsCoin);
51
+ }
52
+ getChain() {
53
+ return this._staticsCoin.name;
54
+ }
55
+ getFamily() {
56
+ return this._staticsCoin.family;
57
+ }
58
+ getFullName() {
59
+ return this._staticsCoin.fullName;
60
+ }
61
+ /**
62
+ * Return the base factor (sompi per KASPA).
63
+ * 1 KASPA = 100,000,000 sompi (8 decimal places)
64
+ */
65
+ getBaseFactor() {
66
+ return Math.pow(10, this._staticsCoin.decimalPlaces);
67
+ }
68
+ /** @inheritDoc */
69
+ getDefaultMultisigType() {
70
+ return sdk_core_1.multisigTypes.onchain;
71
+ }
72
+ /**
73
+ * Validate a Kaspa address.
74
+ */
75
+ isValidAddress(address) {
76
+ return (0, utils_1.isValidKaspaAddress)(address);
77
+ }
78
+ /**
79
+ * Validate a public key (secp256k1 compressed or uncompressed).
80
+ */
81
+ isValidPub(pub) {
82
+ try {
83
+ new KaspaLib.KeyPair({ pub });
84
+ return true;
85
+ }
86
+ catch {
87
+ return false;
88
+ }
89
+ }
90
+ /**
91
+ * Validate a private key.
92
+ */
93
+ isValidPrv(prv) {
94
+ try {
95
+ new KaspaLib.KeyPair({ prv });
96
+ return true;
97
+ }
98
+ catch {
99
+ return false;
100
+ }
101
+ }
102
+ /**
103
+ * Generate a Kaspa key pair.
104
+ */
105
+ generateKeyPair(seed) {
106
+ const keyPair = seed ? new KaspaLib.KeyPair({ seed }) : new KaspaLib.KeyPair();
107
+ const keys = keyPair.getKeys();
108
+ if (!keys.prv) {
109
+ throw new Error('Missing prv in key generation.');
110
+ }
111
+ return {
112
+ pub: keys.pub,
113
+ prv: keys.prv,
114
+ };
115
+ }
116
+ /**
117
+ * Check if address belongs to wallet by deriving from keychains.
118
+ */
119
+ async isWalletAddress(params) {
120
+ const { address, keychains } = params;
121
+ if (!this.isValidAddress(address)) {
122
+ throw new sdk_core_1.InvalidAddressError(`invalid address: ${address}`);
123
+ }
124
+ if (!keychains || keychains.length !== 3) {
125
+ throw new Error('Invalid keychains');
126
+ }
127
+ const networkType = this._staticsCoin.network.type;
128
+ const derivedAddress = new KaspaLib.KeyPair({ pub: keychains[0].pub }).getAddress(networkType);
129
+ if (derivedAddress !== address) {
130
+ throw new sdk_core_1.UnexpectedAddressError(`address validation failure: ${address} is not of this wallet`);
131
+ }
132
+ return true;
133
+ }
134
+ getBuilder() {
135
+ return new KaspaLib.TransactionBuilderFactory(statics_1.coins.get(this.getChain()));
136
+ }
137
+ /**
138
+ * Parse a Kaspa transaction from prebuild.
139
+ */
140
+ async parseTransaction(params) {
141
+ const txHex = (params.txHex || params.halfSigned?.txHex);
142
+ if (!txHex) {
143
+ return {};
144
+ }
145
+ let tx;
146
+ try {
147
+ const txBuilder = this.getBuilder().from(txHex);
148
+ tx = (await txBuilder.build());
149
+ }
150
+ catch (e) {
151
+ throw new sdk_core_1.InvalidTransactionError(`Invalid transaction: ${e.message}`);
152
+ }
153
+ const coin = this.getChain();
154
+ return {
155
+ inputs: tx.txData.inputs.map((input) => ({
156
+ amount: input.amount,
157
+ coin,
158
+ })),
159
+ outputs: tx.txData.outputs.map((output) => ({
160
+ address: output.address,
161
+ amount: output.amount,
162
+ coin,
163
+ })),
164
+ };
165
+ }
166
+ /**
167
+ * Verify a Kaspa transaction against expected params.
168
+ */
169
+ async verifyTransaction(params) {
170
+ const txHex = params.txPrebuild?.txHex;
171
+ if (!txHex) {
172
+ throw new Error('missing required tx prebuild property txHex');
173
+ }
174
+ let tx;
175
+ try {
176
+ const txBuilder = this.getBuilder().from(txHex);
177
+ tx = (await txBuilder.build());
178
+ }
179
+ catch (error) {
180
+ throw new sdk_core_1.InvalidTransactionError(`Invalid transaction: ${error.message}`);
181
+ }
182
+ const explainedTx = tx.explainTransaction();
183
+ if (params.txParams.recipients) {
184
+ const recipientCount = params.txParams.recipients.length;
185
+ if (explainedTx.outputs.length < recipientCount) {
186
+ throw new Error(`Expected at least ${recipientCount} outputs, transaction had ${explainedTx.outputs.length}`);
187
+ }
188
+ }
189
+ return true;
190
+ }
191
+ /**
192
+ * Explain a Kaspa transaction.
193
+ */
194
+ async explainTransaction(params) {
195
+ const txHex = params.txHex ?? params?.halfSigned?.txHex;
196
+ if (!txHex) {
197
+ throw new Error('missing transaction hex');
198
+ }
199
+ try {
200
+ const txBuilder = this.getBuilder().from(txHex);
201
+ const tx = (await txBuilder.build());
202
+ return tx.explainTransaction();
203
+ }
204
+ catch (e) {
205
+ throw new sdk_core_1.InvalidTransactionError(`Invalid transaction: ${e.message}`);
206
+ }
207
+ }
208
+ /**
209
+ * Sign a Kaspa transaction using secp256k1 Schnorr signatures.
210
+ */
211
+ async signTransaction(params) {
212
+ const txHex = params.txPrebuild.txHex;
213
+ if (!txHex) {
214
+ throw new sdk_core_1.InvalidTransactionError('missing txHex in txPrebuild');
215
+ }
216
+ const txBuilder = this.getBuilder().from(txHex);
217
+ const tx = (await txBuilder.build());
218
+ if (params.prv) {
219
+ const privKeyHex = params.prv.slice(0, 64);
220
+ const privKeyBuffer = Buffer.from(privKeyHex, 'hex');
221
+ tx.sign(privKeyBuffer);
222
+ }
223
+ const signedHex = tx.toHex();
224
+ const inputCount = tx.txData.inputs.length;
225
+ const sigCount = tx.signature.filter((s) => s.length > 0).length;
226
+ return inputCount > 0 && sigCount >= inputCount ? { txHex: signedHex } : { halfSigned: { txHex: signedHex } };
227
+ }
228
+ async signMessage(key, message) {
229
+ throw new sdk_core_1.MethodNotImplementedError();
230
+ }
231
+ /** @inheritDoc */
232
+ auditDecryptedKey(params) {
233
+ throw new sdk_core_1.MethodNotImplementedError();
234
+ }
235
+ /**
236
+ * MPC support: Kaspa uses secp256k1 (Schnorr variant).
237
+ */
238
+ supportsTss() {
239
+ return true;
240
+ }
241
+ getMPCAlgorithm() {
242
+ return 'ecdsa';
243
+ }
244
+ }
245
+ exports.Kaspa = Kaspa;
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2FzcGEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMva2FzcGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsaURBQXFGO0FBQ3JGLG1EQWdCOEI7QUFDOUIsZ0RBQWtDO0FBT2xDLHVDQUFrRDtBQUVsRCxNQUFhLEtBQU0sU0FBUSxtQkFBUTtJQUdqQyxZQUFZLEtBQWdCLEVBQUUsV0FBdUM7UUFDbkUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUN4RSxDQUFDO1FBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBZ0IsRUFBRSxXQUF1QztRQUM3RSxPQUFPLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLHNCQUFzQjtRQUNwQixPQUFPLHdCQUFhLENBQUMsT0FBTyxDQUFDO0lBQy9CLENBQUM7SUFFRDs7T0FFRztJQUNILGNBQWMsQ0FBQyxPQUFl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QyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBRWpFLE9BQU8sVUFBVSxHQUFHLENBQUMsSUFBSSxRQUFRLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQztJQUNoSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFhLEVBQUUsT0FBd0I7UUFDdkQsTUFBTSxJQUFJLG9DQUF5QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVELGtCQUFrQjtJQUNsQixpQkFBaUIsQ0FBQyxNQUErQjtRQUMvQyxNQUFNLElBQUksb0NBQXlCLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQS9PRCxzQkErT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBTdGF0aWNzQmFzZUNvaW4sIENvaW5GYW1pbHksIGNvaW5zIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQge1xuICBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyxcbiAgQmFzZUNvaW4sXG4gIEJpdEdvQmFzZSxcbiAgSW52YWxpZEFkZHJlc3NFcnJvcixcbiAgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IsXG4gIEtleVBhaXIgYXMgSUtleVBhaXIsXG4gIE1ldGhvZE5vdEltcGxlbWVudGVkRXJyb3IsXG4gIE1QQ0FsZ29yaXRobSxcbiAgTXVsdGlzaWdUeXBlLFxuICBtdWx0aXNpZ1R5cGVzLFxuICBQYXJzZWRUcmFuc2FjdGlvbixcbiAgUGFyc2VUcmFuc2FjdGlvbk9wdGlvbnMsXG4gIFNpZ25lZFRyYW5zYWN0aW9uLFxuICBVbmV4cGVjdGVkQWRkcmVzc0Vycm9yLFxuICBWZXJpZnlBZGRyZXNzT3B0aW9ucyxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0ICogYXMgS2FzcGFMaWIgZnJvbSAnLi9saWInO1xuaW1wb3J0IHtcbiAgS2FzcGFFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zLFxuICBLYXNwYVNpZ25UcmFuc2FjdGlvbk9wdGlvbnMsXG4gIEthc3BhVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxufSBmcm9tICcuL2xpYi9pZmFjZSc7XG5pbXBvcnQgeyBpc1ZhbGlkS2FzcGFBZGRyZXNzIH0gZnJvbSAnLi9saWIvdXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgS2FzcGEgZXh0ZW5kcyBCYXNlQ29pbiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhdGljc0NvaW46IFJlYWRvbmx5PFN0YXRpY3NCYXNlQ29pbj47XG5cbiAgY29uc3RydWN0b3IoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KSB7XG4gICAgc3VwZXIoYml0Z28pO1xuXG4gICAgaWYgKCFzdGF0aWNzQ29pbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIHJlcXVpcmVkIGNvbnN0cnVjdG9yIHBhcmFtZXRlciBzdGF0aWNzQ29pbicpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXRpY3NDb2luID0gc3RhdGljc0NvaW47XG4gIH1cblxuICBzdGF0aWMgY3JlYXRlSW5zdGFuY2UoYml0Z286IEJpdEdvQmFzZSwgc3RhdGljc0NvaW4/OiBSZWFkb25seTxTdGF0aWNzQmFzZUNvaW4+KTogQmFzZUNvaW4ge1xuICAgIHJldHVybiBuZXcgS2FzcGEoYml0Z28sIHN0YXRpY3NDb2luKTtcbiAgfVxuXG4gIGdldENoYWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLm5hbWU7XG4gIH1cblxuICBnZXRGYW1pbHkoKTogQ29pbkZhbWlseSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZhbWlseTtcbiAgfVxuXG4gIGdldEZ1bGxOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRpY3NDb2luLmZ1bGxOYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgYmFzZSBmYWN0b3IgKHNvbXBpIHBlciBLQVNQQSkuXG4gICAqIDEgS0FTUEEgPSAxMDAsMDAwLDAwMCBzb21waSAoOCBkZWNpbWFsIHBsYWNlcylcbiAgICovXG4gIGdldEJhc2VGYWN0b3IoKTogc3RyaW5nIHwgbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC5wb3coMTAsIHRoaXMuX3N0YXRpY3NDb2luLmRlY2ltYWxQbGFjZXMpO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0RG9jICovXG4gIGdldERlZmF1bHRNdWx0aXNpZ1R5cGUoKTogTXVsdGlzaWdUeXBlIHtcbiAgICByZXR1cm4gbXVsdGlzaWdUeXBlcy5vbmNoYWluO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgS2FzcGEgYWRkcmVzcy5cbiAgICovXG4gIGlzVmFsaWRBZGRyZXNzKGFkZHJlc3M6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1ZhbGlkS2FzcGFBZGRyZXNzKGFkZHJlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIGEgcHVibGljIGtleSAoc2VjcDI1NmsxIGNvbXByZXNzZWQgb3IgdW5jb21wcmVzc2VkKS5cbiAgICovXG4gIGlzVmFsaWRQdWIocHViOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEthc3BhTGliLktleVBhaXIoeyBwdWIgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgYSBwcml2YXRlIGtleS5cbiAgICovXG4gIGlzVmFsaWRQcnYocHJ2OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgbmV3IEthc3BhTGliLktleVBhaXIoeyBwcnYgfSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgYSBLYXNwYSBrZXkgcGFpci5cbiAgICovXG4gIGdlbmVyYXRlS2V5UGFpcihzZWVkPzogQnVmZmVyKTogSUtleVBhaXIge1xuICAgIGNvbnN0IGtleVBhaXIgPSBzZWVkID8gbmV3IEthc3BhTGliLktleVBhaXIoeyBzZWVkIH0pIDogbmV3IEthc3BhTGliLktleVBhaXIoKTtcbiAgICBjb25zdCBrZXlzID0ga2V5UGFpci5nZXRLZXlzKCk7XG5cbiAgICBpZiAoIWtleXMucHJ2KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcHJ2IGluIGtleSBnZW5lcmF0aW9uLicpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwdWI6IGtleXMucHViLFxuICAgICAgcHJ2OiBrZXlzLnBydixcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFkZHJlc3MgYmVsb25ncyB0byB3YWxsZXQgYnkgZGVyaXZpbmcgZnJvbSBrZXljaGFpbnMuXG4gICAqL1xuICBhc3luYyBpc1dhbGxldEFkZHJlc3MocGFyYW1zOiBWZXJpZnlBZGRyZXNzT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHsgYWRkcmVzcywga2V5Y2hhaW5zIH0gPSBwYXJhbXM7XG5cbiAgICBpZiAoIXRoaXMuaXNWYWxpZEFkZHJlc3MoYWRkcmVzcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQWRkcmVzc0Vycm9yKGBpbnZhbGlkIGFkZHJlc3M6ICR7YWRkcmVzc31gKTtcbiAgICB9XG5cbiAgICBpZiAoIWtleWNoYWlucyB8fCBrZXljaGFpbnMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQga2V5Y2hhaW5zJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV0d29ya1R5cGUgPSB0aGlzLl9zdGF0aWNzQ29pbi5uZXR3b3JrLnR5cGU7XG4gICAgY29uc3QgZGVyaXZlZEFkZHJlc3MgPSBuZXcgS2FzcGFMaWIuS2V5UGFpcih7IHB1Yjoga2V5Y2hhaW5zWzBdLnB1YiB9KS5nZXRBZGRyZXNzKG5ldHdvcmtUeXBlKTtcblxuICAgIGlmIChkZXJpdmVkQWRkcmVzcyAhPT0gYWRkcmVzcykge1xuICAgICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRBZGRyZXNzRXJyb3IoYGFkZHJlc3MgdmFsaWRhdGlvbiBmYWlsdXJlOiAke2FkZHJlc3N9IGlzIG5vdCBvZiB0aGlzIHdhbGxldGApO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCdWlsZGVyKCk6IEthc3BhTGliLlRyYW5zYWN0aW9uQnVpbGRlckZhY3Rvcnkge1xuICAgIHJldHVybiBuZXcgS2FzcGFMaWIuVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeShjb2lucy5nZXQodGhpcy5nZXRDaGFpbigpKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgYSBLYXNwYSB0cmFuc2FjdGlvbiBmcm9tIHByZWJ1aWxkLlxuICAgKi9cbiAgYXN5bmMgcGFyc2VUcmFuc2FjdGlvbihwYXJhbXM6IFBhcnNlVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxQYXJzZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gKHBhcmFtcy50eEhleCB8fCAocGFyYW1zIGFzIHsgaGFsZlNpZ25lZD86IHsgdHhIZXg/OiBzdHJpbmcgfSB9KS5oYWxmU2lnbmVkPy50eEhleCkgYXNcbiAgICAgIHwgc3RyaW5nXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGxldCB0eDogS2FzcGFMaWIuVHJhbnNhY3Rpb247XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR4QnVpbGRlciA9IHRoaXMuZ2V0QnVpbGRlcigpLmZyb20odHhIZXgpO1xuICAgICAgdHggPSAoYXdhaXQgdHhCdWlsZGVyLmJ1aWxkKCkpIGFzIEthc3BhTGliLlRyYW5zYWN0aW9uO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcihgSW52YWxpZCB0cmFuc2FjdGlvbjogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gICAgY29uc3QgY29pbiA9IHRoaXMuZ2V0Q2hhaW4oKTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXRzOiB0eC50eERhdGEuaW5wdXRzLm1hcCgoaW5wdXQpID0+ICh7XG4gICAgICAgIGFtb3VudDogaW5wdXQuYW1vdW50LFxuICAgICAgICBjb2luLFxuICAgICAgfSkpLFxuICAgICAgb3V0cHV0czogdHgudHhEYXRhLm91dHB1dHMubWFwKChvdXRwdXQpID0+ICh7XG4gICAgICAgIGFkZHJlc3M6IG91dHB1dC5hZGRyZXNzLFxuICAgICAgICBhbW91bnQ6IG91dHB1dC5hbW91bnQsXG4gICAgICAgIGNvaW4sXG4gICAgICB9KSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZnkgYSBLYXNwYSB0cmFuc2FjdGlvbiBhZ2FpbnN0IGV4cGVjdGVkIHBhcmFtcy5cbiAgICovXG4gIGFzeW5jIHZlcmlmeVRyYW5zYWN0aW9uKHBhcmFtczogS2FzcGFWZXJpZnlUcmFuc2FjdGlvbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0eEhleCA9IHBhcmFtcy50eFByZWJ1aWxkPy50eEhleDtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgcmVxdWlyZWQgdHggcHJlYnVpbGQgcHJvcGVydHkgdHhIZXgnKTtcbiAgICB9XG5cbiAgICBsZXQgdHg6IEthc3BhTGliLlRyYW5zYWN0aW9uO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIoKS5mcm9tKHR4SGV4KTtcbiAgICAgIHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBLYXNwYUxpYi5UcmFuc2FjdGlvbjtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKGBJbnZhbGlkIHRyYW5zYWN0aW9uOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBsYWluZWRUeCA9IHR4LmV4cGxhaW5UcmFuc2FjdGlvbigpO1xuXG4gICAgaWYgKHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzKSB7XG4gICAgICBjb25zdCByZWNpcGllbnRDb3VudCA9IHBhcmFtcy50eFBhcmFtcy5yZWNpcGllbnRzLmxlbmd0aDtcbiAgICAgIGlmIChleHBsYWluZWRUeC5vdXRwdXRzLmxlbmd0aCA8IHJlY2lwaWVudENvdW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgYXQgbGVhc3QgJHtyZWNpcGllbnRDb3VudH0gb3V0cHV0cywgdHJhbnNhY3Rpb24gaGFkICR7ZXhwbGFpbmVkVHgub3V0cHV0cy5sZW5ndGh9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGFpbiBhIEthc3BhIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgYXN5bmMgZXhwbGFpblRyYW5zYWN0aW9uKHBhcmFtczogS2FzcGFFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxUcmFuc2FjdGlvbkV4cGxhbmF0aW9uPiB7XG4gICAgY29uc3QgdHhIZXggPSBwYXJhbXMudHhIZXggPz8gcGFyYW1zPy5oYWxmU2lnbmVkPy50eEhleDtcbiAgICBpZiAoIXR4SGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdHJhbnNhY3Rpb24gaGV4Jyk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIoKS5mcm9tKHR4SGV4KTtcbiAgICAgIGNvbnN0IHR4ID0gKGF3YWl0IHR4QnVpbGRlci5idWlsZCgpKSBhcyBLYXNwYUxpYi5UcmFuc2FjdGlvbjtcbiAgICAgIHJldHVybiB0eC5leHBsYWluVHJhbnNhY3Rpb24oKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFRyYW5zYWN0aW9uRXJyb3IoYEludmFsaWQgdHJhbnNhY3Rpb246ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNpZ24gYSBLYXNwYSB0cmFuc2FjdGlvbiB1c2luZyBzZWNwMjU2azEgU2Nobm9yciBzaWduYXR1cmVzLlxuICAgKi9cbiAgYXN5bmMgc2lnblRyYW5zYWN0aW9uKHBhcmFtczogS2FzcGFTaWduVHJhbnNhY3Rpb25PcHRpb25zKTogUHJvbWlzZTxTaWduZWRUcmFuc2FjdGlvbj4ge1xuICAgIGNvbnN0IHR4SGV4ID0gcGFyYW1zLnR4UHJlYnVpbGQudHhIZXg7XG4gICAgaWYgKCF0eEhleCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdtaXNzaW5nIHR4SGV4IGluIHR4UHJlYnVpbGQnKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eEJ1aWxkZXIgPSB0aGlzLmdldEJ1aWxkZXIoKS5mcm9tKHR4SGV4KTtcbiAgICBjb25zdCB0eCA9IChhd2FpdCB0eEJ1aWxkZXIuYnVpbGQoKSkgYXMgS2FzcGFMaWIuVHJhbnNhY3Rpb247XG5cbiAgICBpZiAocGFyYW1zLnBydikge1xuICAgICAgY29uc3QgcHJpdktleUhleCA9IHBhcmFtcy5wcnYuc2xpY2UoMCwgNjQpO1xuICAgICAgY29uc3QgcHJpdktleUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKHByaXZLZXlIZXgsICdoZXgnKTtcbiAgICAgIHR4LnNpZ24ocHJpdktleUJ1ZmZlcik7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmVkSGV4ID0gdHgudG9IZXgoKTtcbiAgICBjb25zdCBpbnB1dENvdW50ID0gdHgudHhEYXRhLmlucHV0cy5sZW5ndGg7XG4gICAgY29uc3Qgc2lnQ291bnQgPSB0eC5zaWduYXR1cmUuZmlsdGVyKChzKSA9PiBzLmxlbmd0aCA+IDApLmxlbmd0aDtcblxuICAgIHJldHVybiBpbnB1dENvdW50ID4gMCAmJiBzaWdDb3VudCA+PSBpbnB1dENvdW50ID8geyB0eEhleDogc2lnbmVkSGV4IH0gOiB7IGhhbGZTaWduZWQ6IHsgdHhIZXg6IHNpZ25lZEhleCB9IH07XG4gIH1cblxuICBhc3luYyBzaWduTWVzc2FnZShrZXk6IElLZXlQYWlyLCBtZXNzYWdlOiBzdHJpbmcgfCBCdWZmZXIpOiBQcm9taXNlPEJ1ZmZlcj4ge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICAvKiogQGluaGVyaXREb2MgKi9cbiAgYXVkaXREZWNyeXB0ZWRLZXkocGFyYW1zOiBBdWRpdERlY3J5cHRlZEtleVBhcmFtcyk6IHZvaWQge1xuICAgIHRocm93IG5ldyBNZXRob2ROb3RJbXBsZW1lbnRlZEVycm9yKCk7XG4gIH1cblxuICAvKipcbiAgICogTVBDIHN1cHBvcnQ6IEthc3BhIHVzZXMgc2VjcDI1NmsxIChTY2hub3JyIHZhcmlhbnQpLlxuICAgKi9cbiAgc3VwcG9ydHNUc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRNUENBbGdvcml0aG0oKTogTVBDQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gJ2VjZHNhJztcbiAgfVxufVxuIl19
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Kaspa (KASPA) Constants
3
+ *
4
+ * References:
5
+ * - https://kaspa.org/
6
+ * - https://kaspa.aspectron.org/docs/
7
+ */
8
+ export declare const MAINNET_PREFIX = "kaspa";
9
+ export declare const TESTNET_PREFIX = "kaspatest";
10
+ export declare const DEFAULT_FEE = "1000";
11
+ export declare const TX_VERSION = 0;
12
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,eAAO,MAAM,cAAc,UAAU,CAAC;AACtC,eAAO,MAAM,cAAc,cAAc,CAAC;AAG1C,eAAO,MAAM,WAAW,SAAS,CAAC;AAGlC,eAAO,MAAM,UAAU,IAAI,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ /**
3
+ * Kaspa (KASPA) Constants
4
+ *
5
+ * References:
6
+ * - https://kaspa.org/
7
+ * - https://kaspa.aspectron.org/docs/
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.TX_VERSION = exports.DEFAULT_FEE = exports.TESTNET_PREFIX = exports.MAINNET_PREFIX = void 0;
11
+ // Address format
12
+ exports.MAINNET_PREFIX = 'kaspa';
13
+ exports.TESTNET_PREFIX = 'kaspatest';
14
+ // Default transaction fee (minimum relay fee in sompi)
15
+ exports.DEFAULT_FEE = '1000'; // 0.00001 KASPA minimum
16
+ // Kaspa transaction version
17
+ exports.TX_VERSION = 0;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBRUgsaUJBQWlCO0FBQ0osUUFBQSxjQUFjLEdBQUcsT0FBTyxDQUFDO0FBQ3pCLFFBQUEsY0FBYyxHQUFHLFdBQVcsQ0FBQztBQUUxQyx1REFBdUQ7QUFDMUMsUUFBQSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsd0JBQXdCO0FBRTNELDRCQUE0QjtBQUNmLFFBQUEsVUFBVSxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogS2FzcGEgKEtBU1BBKSBDb25zdGFudHNcbiAqXG4gKiBSZWZlcmVuY2VzOlxuICogLSBodHRwczovL2thc3BhLm9yZy9cbiAqIC0gaHR0cHM6Ly9rYXNwYS5hc3BlY3Ryb24ub3JnL2RvY3MvXG4gKi9cblxuLy8gQWRkcmVzcyBmb3JtYXRcbmV4cG9ydCBjb25zdCBNQUlOTkVUX1BSRUZJWCA9ICdrYXNwYSc7XG5leHBvcnQgY29uc3QgVEVTVE5FVF9QUkVGSVggPSAna2FzcGF0ZXN0JztcblxuLy8gRGVmYXVsdCB0cmFuc2FjdGlvbiBmZWUgKG1pbmltdW0gcmVsYXkgZmVlIGluIHNvbXBpKVxuZXhwb3J0IGNvbnN0IERFRkFVTFRfRkVFID0gJzEwMDAnOyAvLyAwLjAwMDAxIEtBU1BBIG1pbmltdW1cblxuLy8gS2FzcGEgdHJhbnNhY3Rpb24gdmVyc2lvblxuZXhwb3J0IGNvbnN0IFRYX1ZFUlNJT04gPSAwO1xuIl19
@@ -0,0 +1,109 @@
1
+ import { TransactionExplanation as BaseTransactionExplanation, TransactionPrebuild as BaseTransactionPrebuild, SignTransactionOptions, TransactionParams, TransactionRecipient, TransactionType, VerifyTransactionOptions } from '@bitgo-beta/sdk-core';
2
+ /**
3
+ * Kaspa UTXO input (reference to a previous transaction output)
4
+ */
5
+ export interface KaspaUtxoInput {
6
+ /** Previous transaction ID (hex string) */
7
+ transactionId: string;
8
+ /** Output index in the previous transaction */
9
+ transactionIndex: number;
10
+ /** Amount in sompi */
11
+ amount: string;
12
+ /** Script public key of the UTXO */
13
+ scriptPublicKey: string;
14
+ /** Sequence number */
15
+ sequence?: string;
16
+ /** Signature operation count */
17
+ sigOpCount?: number;
18
+ /** Signature script — hex-encoded (65 bytes: 64-byte Schnorr sig + 1-byte sighash type) */
19
+ signatureScript?: string;
20
+ }
21
+ /**
22
+ * Kaspa transaction output
23
+ */
24
+ export interface KaspaTransactionOutput {
25
+ /** Recipient address */
26
+ address: string;
27
+ /** Amount in sompi */
28
+ amount: string;
29
+ /** Script public key */
30
+ scriptPublicKey?: string;
31
+ }
32
+ /**
33
+ * Kaspa transaction data structure
34
+ */
35
+ export interface KaspaTransactionData {
36
+ /** Transaction version */
37
+ version: number;
38
+ /** Transaction inputs (UTXOs being spent) */
39
+ inputs: KaspaUtxoInput[];
40
+ /** Transaction outputs */
41
+ outputs: KaspaTransactionOutput[];
42
+ /** Lock time */
43
+ lockTime?: string;
44
+ /** Subnetwork ID (all-zeros for native KASPA transfers) */
45
+ subnetworkId?: string;
46
+ /** Transaction payload (empty for native transfers) */
47
+ payload?: string;
48
+ /** Fee in sompi */
49
+ fee?: string;
50
+ /** Transaction ID (computed) */
51
+ id?: string;
52
+ }
53
+ /**
54
+ * Kaspa transaction explanation for users
55
+ */
56
+ export interface TransactionExplanation extends BaseTransactionExplanation {
57
+ type: TransactionType;
58
+ inputs: KaspaUtxoInput[];
59
+ }
60
+ /**
61
+ * Kaspa transaction prebuild for signing
62
+ */
63
+ export interface TransactionPrebuild extends BaseTransactionPrebuild {
64
+ /** Serialized transaction as hex or JSON string */
65
+ txHex: string;
66
+ txInfo: KaspaTxInfo;
67
+ source: string;
68
+ }
69
+ export interface KaspaTxInfo {
70
+ recipients: TransactionRecipient[];
71
+ from: string;
72
+ utxos?: KaspaUtxoInput[];
73
+ }
74
+ /**
75
+ * Kaspa sign transaction options
76
+ */
77
+ export interface KaspaSignTransactionOptions extends SignTransactionOptions {
78
+ txPrebuild: TransactionPrebuild;
79
+ prv: string;
80
+ }
81
+ /**
82
+ * Kaspa transaction params
83
+ */
84
+ export interface KaspaTransactionParams extends TransactionParams {
85
+ type?: string;
86
+ unspents?: KaspaUtxoInput[];
87
+ }
88
+ /**
89
+ * Kaspa explain transaction options
90
+ */
91
+ export interface KaspaExplainTransactionOptions {
92
+ txHex?: string;
93
+ halfSigned?: {
94
+ txHex: string;
95
+ };
96
+ }
97
+ /**
98
+ * Kaspa verify transaction options
99
+ */
100
+ export interface KaspaVerifyTransactionOptions extends VerifyTransactionOptions {
101
+ txParams: KaspaTransactionParams;
102
+ }
103
+ /**
104
+ * Kaspa transaction fee info
105
+ */
106
+ export interface KaspaTransactionFee {
107
+ fee: string;
108
+ }
109
+ //# sourceMappingURL=iface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,IAAI,0BAA0B,EACpD,mBAAmB,IAAI,uBAAuB,EAC9C,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,aAAa,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,0BAA0B;IAC1B,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,gBAAgB;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,uBAAuB;IAClE,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA4B,SAAQ,sBAAsB;IACzE,UAAU,EAAE,mBAAmB,CAAC;IAChC,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,6BAA8B,SAAQ,wBAAwB;IAC7E,QAAQ,EAAE,sBAAsB,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;CACb"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLFxuICBUcmFuc2FjdGlvblByZWJ1aWxkIGFzIEJhc2VUcmFuc2FjdGlvblByZWJ1aWxkLFxuICBTaWduVHJhbnNhY3Rpb25PcHRpb25zLFxuICBUcmFuc2FjdGlvblBhcmFtcyxcbiAgVHJhbnNhY3Rpb25SZWNpcGllbnQsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbiAgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zLFxufSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5cbi8qKlxuICogS2FzcGEgVVRYTyBpbnB1dCAocmVmZXJlbmNlIHRvIGEgcHJldmlvdXMgdHJhbnNhY3Rpb24gb3V0cHV0KVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthc3BhVXR4b0lucHV0IHtcbiAgLyoqIFByZXZpb3VzIHRyYW5zYWN0aW9uIElEIChoZXggc3RyaW5nKSAqL1xuICB0cmFuc2FjdGlvbklkOiBzdHJpbmc7XG4gIC8qKiBPdXRwdXQgaW5kZXggaW4gdGhlIHByZXZpb3VzIHRyYW5zYWN0aW9uICovXG4gIHRyYW5zYWN0aW9uSW5kZXg6IG51bWJlcjtcbiAgLyoqIEFtb3VudCBpbiBzb21waSAqL1xuICBhbW91bnQ6IHN0cmluZztcbiAgLyoqIFNjcmlwdCBwdWJsaWMga2V5IG9mIHRoZSBVVFhPICovXG4gIHNjcmlwdFB1YmxpY0tleTogc3RyaW5nO1xuICAvKiogU2VxdWVuY2UgbnVtYmVyICovXG4gIHNlcXVlbmNlPzogc3RyaW5nO1xuICAvKiogU2lnbmF0dXJlIG9wZXJhdGlvbiBjb3VudCAqL1xuICBzaWdPcENvdW50PzogbnVtYmVyO1xuICAvKiogU2lnbmF0dXJlIHNjcmlwdCDigJQgaGV4LWVuY29kZWQgKDY1IGJ5dGVzOiA2NC1ieXRlIFNjaG5vcnIgc2lnICsgMS1ieXRlIHNpZ2hhc2ggdHlwZSkgKi9cbiAgc2lnbmF0dXJlU2NyaXB0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEthc3BhIHRyYW5zYWN0aW9uIG91dHB1dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEthc3BhVHJhbnNhY3Rpb25PdXRwdXQge1xuICAvKiogUmVjaXBpZW50IGFkZHJlc3MgKi9cbiAgYWRkcmVzczogc3RyaW5nO1xuICAvKiogQW1vdW50IGluIHNvbXBpICovXG4gIGFtb3VudDogc3RyaW5nO1xuICAvKiogU2NyaXB0IHB1YmxpYyBrZXkgKi9cbiAgc2NyaXB0UHVibGljS2V5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEthc3BhIHRyYW5zYWN0aW9uIGRhdGEgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2FzcGFUcmFuc2FjdGlvbkRhdGEge1xuICAvKiogVHJhbnNhY3Rpb24gdmVyc2lvbiAqL1xuICB2ZXJzaW9uOiBudW1iZXI7XG4gIC8qKiBUcmFuc2FjdGlvbiBpbnB1dHMgKFVUWE9zIGJlaW5nIHNwZW50KSAqL1xuICBpbnB1dHM6IEthc3BhVXR4b0lucHV0W107XG4gIC8qKiBUcmFuc2FjdGlvbiBvdXRwdXRzICovXG4gIG91dHB1dHM6IEthc3BhVHJhbnNhY3Rpb25PdXRwdXRbXTtcbiAgLyoqIExvY2sgdGltZSAqL1xuICBsb2NrVGltZT86IHN0cmluZztcbiAgLyoqIFN1Ym5ldHdvcmsgSUQgKGFsbC16ZXJvcyBmb3IgbmF0aXZlIEtBU1BBIHRyYW5zZmVycykgKi9cbiAgc3VibmV0d29ya0lkPzogc3RyaW5nO1xuICAvKiogVHJhbnNhY3Rpb24gcGF5bG9hZCAoZW1wdHkgZm9yIG5hdGl2ZSB0cmFuc2ZlcnMpICovXG4gIHBheWxvYWQ/OiBzdHJpbmc7XG4gIC8qKiBGZWUgaW4gc29tcGkgKi9cbiAgZmVlPzogc3RyaW5nO1xuICAvKiogVHJhbnNhY3Rpb24gSUQgKGNvbXB1dGVkKSAqL1xuICBpZD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBLYXNwYSB0cmFuc2FjdGlvbiBleHBsYW5hdGlvbiBmb3IgdXNlcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICB0eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIGlucHV0czogS2FzcGFVdHhvSW5wdXRbXTtcbn1cblxuLyoqXG4gKiBLYXNwYSB0cmFuc2FjdGlvbiBwcmVidWlsZCBmb3Igc2lnbmluZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uUHJlYnVpbGQgZXh0ZW5kcyBCYXNlVHJhbnNhY3Rpb25QcmVidWlsZCB7XG4gIC8qKiBTZXJpYWxpemVkIHRyYW5zYWN0aW9uIGFzIGhleCBvciBKU09OIHN0cmluZyAqL1xuICB0eEhleDogc3RyaW5nO1xuICB0eEluZm86IEthc3BhVHhJbmZvO1xuICBzb3VyY2U6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLYXNwYVR4SW5mbyB7XG4gIHJlY2lwaWVudHM6IFRyYW5zYWN0aW9uUmVjaXBpZW50W107XG4gIGZyb206IHN0cmluZztcbiAgdXR4b3M/OiBLYXNwYVV0eG9JbnB1dFtdO1xufVxuXG4vKipcbiAqIEthc3BhIHNpZ24gdHJhbnNhY3Rpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEthc3BhU2lnblRyYW5zYWN0aW9uT3B0aW9ucyBleHRlbmRzIFNpZ25UcmFuc2FjdGlvbk9wdGlvbnMge1xuICB0eFByZWJ1aWxkOiBUcmFuc2FjdGlvblByZWJ1aWxkO1xuICBwcnY6IHN0cmluZztcbn1cblxuLyoqXG4gKiBLYXNwYSB0cmFuc2FjdGlvbiBwYXJhbXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYXNwYVRyYW5zYWN0aW9uUGFyYW1zIGV4dGVuZHMgVHJhbnNhY3Rpb25QYXJhbXMge1xuICB0eXBlPzogc3RyaW5nO1xuICB1bnNwZW50cz86IEthc3BhVXR4b0lucHV0W107XG59XG5cbi8qKlxuICogS2FzcGEgZXhwbGFpbiB0cmFuc2FjdGlvbiBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgS2FzcGFFeHBsYWluVHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhIZXg/OiBzdHJpbmc7XG4gIGhhbGZTaWduZWQ/OiB7XG4gICAgdHhIZXg6IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBLYXNwYSB2ZXJpZnkgdHJhbnNhY3Rpb24gb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEthc3BhVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIGV4dGVuZHMgVmVyaWZ5VHJhbnNhY3Rpb25PcHRpb25zIHtcbiAgdHhQYXJhbXM6IEthc3BhVHJhbnNhY3Rpb25QYXJhbXM7XG59XG5cbi8qKlxuICogS2FzcGEgdHJhbnNhY3Rpb24gZmVlIGluZm9cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBLYXNwYVRyYW5zYWN0aW9uRmVlIHtcbiAgZmVlOiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,10 @@
1
+ export { KeyPair } from './keyPair';
2
+ export { Transaction } from './transaction';
3
+ export { TransactionBuilder } from './transactionBuilder';
4
+ export { TransactionBuilderFactory } from './transactionBuilderFactory';
5
+ export * from './iface';
6
+ export * from './constants';
7
+ export * from './utils';
8
+ export * from './sighash';
9
+ export { default as Utils, Utils as KaspaUtils } from './utils';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1,36 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __importDefault = (this && this.__importDefault) || function (mod) {
17
+ return (mod && mod.__esModule) ? mod : { "default": mod };
18
+ };
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.KaspaUtils = exports.Utils = exports.TransactionBuilderFactory = exports.TransactionBuilder = exports.Transaction = exports.KeyPair = void 0;
21
+ var keyPair_1 = require("./keyPair");
22
+ Object.defineProperty(exports, "KeyPair", { enumerable: true, get: function () { return keyPair_1.KeyPair; } });
23
+ var transaction_1 = require("./transaction");
24
+ Object.defineProperty(exports, "Transaction", { enumerable: true, get: function () { return transaction_1.Transaction; } });
25
+ var transactionBuilder_1 = require("./transactionBuilder");
26
+ Object.defineProperty(exports, "TransactionBuilder", { enumerable: true, get: function () { return transactionBuilder_1.TransactionBuilder; } });
27
+ var transactionBuilderFactory_1 = require("./transactionBuilderFactory");
28
+ Object.defineProperty(exports, "TransactionBuilderFactory", { enumerable: true, get: function () { return transactionBuilderFactory_1.TransactionBuilderFactory; } });
29
+ __exportStar(require("./iface"), exports);
30
+ __exportStar(require("./constants"), exports);
31
+ __exportStar(require("./utils"), exports);
32
+ __exportStar(require("./sighash"), exports);
33
+ var utils_1 = require("./utils");
34
+ Object.defineProperty(exports, "Utils", { enumerable: true, get: function () { return __importDefault(utils_1).default; } });
35
+ Object.defineProperty(exports, "KaspaUtils", { enumerable: true, get: function () { return utils_1.Utils; } });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscUNBQW9DO0FBQTNCLGtHQUFBLE9BQU8sT0FBQTtBQUNoQiw2Q0FBNEM7QUFBbkMsMEdBQUEsV0FBVyxPQUFBO0FBQ3BCLDJEQUEwRDtBQUFqRCx3SEFBQSxrQkFBa0IsT0FBQTtBQUMzQix5RUFBd0U7QUFBL0Qsc0lBQUEseUJBQXlCLE9BQUE7QUFDbEMsMENBQXdCO0FBQ3hCLDhDQUE0QjtBQUM1QiwwQ0FBd0I7QUFDeEIsNENBQTBCO0FBQzFCLGlDQUFnRTtBQUF2RCwrR0FBQSxPQUFPLE9BQVM7QUFBRSxtR0FBQSxLQUFLLE9BQWMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBLZXlQYWlyIH0gZnJvbSAnLi9rZXlQYWlyJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi90cmFuc2FjdGlvbic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXIgfSBmcm9tICcuL3RyYW5zYWN0aW9uQnVpbGRlcic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5IH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXJGYWN0b3J5JztcbmV4cG9ydCAqIGZyb20gJy4vaWZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdGFudHMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NpZ2hhc2gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVdGlscywgVXRpbHMgYXMgS2FzcGFVdGlscyB9IGZyb20gJy4vdXRpbHMnO1xuIl19
@@ -0,0 +1,22 @@
1
+ import { DefaultKeys, KeyPairOptions, Secp256k1ExtendedKeyPair } from '@bitgo-beta/sdk-core';
2
+ export declare class KeyPair extends Secp256k1ExtendedKeyPair {
3
+ /**
4
+ * Public constructor. By default, creates a key pair with a random master seed.
5
+ *
6
+ * @param { KeyPairOptions } source Either a master seed, a private key, or a public key
7
+ */
8
+ constructor(source?: KeyPairOptions);
9
+ /**
10
+ * Default keys format is a pair of hex keys.
11
+ *
12
+ * @returns { DefaultKeys } The keys in the defined format
13
+ */
14
+ getKeys(): DefaultKeys;
15
+ /**
16
+ * Get a Kaspa address from this key pair.
17
+ *
18
+ * @returns {string} The bech32-encoded Kaspa address
19
+ */
20
+ getAddress(network?: string): string;
21
+ }
22
+ //# sourceMappingURL=keyPair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../src/lib/keyPair.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EAIX,cAAc,EACd,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAQ9B,qBAAa,OAAQ,SAAQ,wBAAwB;IACnD;;;;OAIG;gBACS,MAAM,CAAC,EAAE,cAAc;IAoBnC;;;;OAIG;IACH,OAAO,IAAI,WAAW;IAOtB;;;;OAIG;IACH,UAAU,CAAC,OAAO,SAAY,GAAG,MAAM;CAKxC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KeyPair = void 0;
4
+ const sdk_core_1 = require("@bitgo-beta/sdk-core");
5
+ const secp256k1_1 = require("@bitgo-beta/secp256k1");
6
+ const crypto_1 = require("crypto");
7
+ const utils_1 = require("./utils");
8
+ const constants_1 = require("./constants");
9
+ const DEFAULT_SEED_SIZE_BYTES = 16;
10
+ class KeyPair extends sdk_core_1.Secp256k1ExtendedKeyPair {
11
+ /**
12
+ * Public constructor. By default, creates a key pair with a random master seed.
13
+ *
14
+ * @param { KeyPairOptions } source Either a master seed, a private key, or a public key
15
+ */
16
+ constructor(source) {
17
+ super(source);
18
+ if (!source) {
19
+ const seed = (0, crypto_1.randomBytes)(DEFAULT_SEED_SIZE_BYTES);
20
+ this.hdNode = secp256k1_1.bip32.fromSeed(seed);
21
+ }
22
+ else if ((0, sdk_core_1.isSeed)(source)) {
23
+ this.hdNode = secp256k1_1.bip32.fromSeed(source.seed);
24
+ }
25
+ else if ((0, sdk_core_1.isPrivateKey)(source)) {
26
+ this.recordKeysFromPrivateKey(source.prv);
27
+ }
28
+ else if ((0, sdk_core_1.isPublicKey)(source)) {
29
+ this.recordKeysFromPublicKey(source.pub);
30
+ }
31
+ else {
32
+ throw new Error('Invalid key pair options');
33
+ }
34
+ if (this.hdNode) {
35
+ this.keyPair = sdk_core_1.Secp256k1ExtendedKeyPair.toKeyPair(this.hdNode);
36
+ }
37
+ }
38
+ /**
39
+ * Default keys format is a pair of hex keys.
40
+ *
41
+ * @returns { DefaultKeys } The keys in the defined format
42
+ */
43
+ getKeys() {
44
+ return {
45
+ pub: this.getPublicKey({ compressed: true }).toString('hex'),
46
+ prv: this.getPrivateKey()?.toString('hex'),
47
+ };
48
+ }
49
+ /**
50
+ * Get a Kaspa address from this key pair.
51
+ *
52
+ * @returns {string} The bech32-encoded Kaspa address
53
+ */
54
+ getAddress(network = 'mainnet') {
55
+ const hrp = network === 'testnet' ? constants_1.TESTNET_PREFIX : constants_1.MAINNET_PREFIX;
56
+ const compressedPub = this.getPublicKey({ compressed: true });
57
+ return (0, utils_1.pubKeyToKaspaAddress)(compressedPub, hrp);
58
+ }
59
+ }
60
+ exports.KeyPair = KeyPair;
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5UGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIva2V5UGFpci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFPOEI7QUFDOUIscURBQThDO0FBQzlDLG1DQUFxQztBQUNyQyxtQ0FBK0M7QUFDL0MsMkNBQTZEO0FBRTdELE1BQU0sdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0FBRW5DLE1BQWEsT0FBUSxTQUFRLG1DQUF3QjtJQUNuRDs7OztPQUlHO0lBQ0gsWUFBWSxNQUF1QjtRQUNqQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLElBQUksR0FBRyxJQUFBLG9CQUFXLEVBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsTUFBTSxHQUFHLGlCQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLENBQUM7YUFBTSxJQUFJLElBQUEsaUJBQU0sRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxNQUFNLEdBQUcsaUJBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLENBQUM7YUFBTSxJQUFJLElBQUEsdUJBQVksRUFBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUMsQ0FBQzthQUFNLElBQUksSUFBQSxzQkFBVyxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxtQ0FBd0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU87UUFDTCxPQUFPO1lBQ0wsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzVELEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQztTQUMzQyxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsT0FBTyxHQUFHLFNBQVM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsMEJBQWMsQ0FBQyxDQUFDLENBQUMsMEJBQWMsQ0FBQztRQUNwRSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDOUQsT0FBTyxJQUFBLDRCQUFvQixFQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFoREQsMEJBZ0RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGVmYXVsdEtleXMsXG4gIGlzUHJpdmF0ZUtleSxcbiAgaXNQdWJsaWNLZXksXG4gIGlzU2VlZCxcbiAgS2V5UGFpck9wdGlvbnMsXG4gIFNlY3AyNTZrMUV4dGVuZGVkS2V5UGFpcixcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgYmlwMzIgfSBmcm9tICdAYml0Z28tYmV0YS9zZWNwMjU2azEnO1xuaW1wb3J0IHsgcmFuZG9tQnl0ZXMgfSBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IHsgcHViS2V5VG9LYXNwYUFkZHJlc3MgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IE1BSU5ORVRfUFJFRklYLCBURVNUTkVUX1BSRUZJWCB9IGZyb20gJy4vY29uc3RhbnRzJztcblxuY29uc3QgREVGQVVMVF9TRUVEX1NJWkVfQllURVMgPSAxNjtcblxuZXhwb3J0IGNsYXNzIEtleVBhaXIgZXh0ZW5kcyBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIge1xuICAvKipcbiAgICogUHVibGljIGNvbnN0cnVjdG9yLiBCeSBkZWZhdWx0LCBjcmVhdGVzIGEga2V5IHBhaXIgd2l0aCBhIHJhbmRvbSBtYXN0ZXIgc2VlZC5cbiAgICpcbiAgICogQHBhcmFtIHsgS2V5UGFpck9wdGlvbnMgfSBzb3VyY2UgRWl0aGVyIGEgbWFzdGVyIHNlZWQsIGEgcHJpdmF0ZSBrZXksIG9yIGEgcHVibGljIGtleVxuICAgKi9cbiAgY29uc3RydWN0b3Ioc291cmNlPzogS2V5UGFpck9wdGlvbnMpIHtcbiAgICBzdXBlcihzb3VyY2UpO1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICBjb25zdCBzZWVkID0gcmFuZG9tQnl0ZXMoREVGQVVMVF9TRUVEX1NJWkVfQllURVMpO1xuICAgICAgdGhpcy5oZE5vZGUgPSBiaXAzMi5mcm9tU2VlZChzZWVkKTtcbiAgICB9IGVsc2UgaWYgKGlzU2VlZChzb3VyY2UpKSB7XG4gICAgICB0aGlzLmhkTm9kZSA9IGJpcDMyLmZyb21TZWVkKHNvdXJjZS5zZWVkKTtcbiAgICB9IGVsc2UgaWYgKGlzUHJpdmF0ZUtleShzb3VyY2UpKSB7XG4gICAgICB0aGlzLnJlY29yZEtleXNGcm9tUHJpdmF0ZUtleShzb3VyY2UucHJ2KTtcbiAgICB9IGVsc2UgaWYgKGlzUHVibGljS2V5KHNvdXJjZSkpIHtcbiAgICAgIHRoaXMucmVjb3JkS2V5c0Zyb21QdWJsaWNLZXkoc291cmNlLnB1Yik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBrZXkgcGFpciBvcHRpb25zJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGROb2RlKSB7XG4gICAgICB0aGlzLmtleVBhaXIgPSBTZWNwMjU2azFFeHRlbmRlZEtleVBhaXIudG9LZXlQYWlyKHRoaXMuaGROb2RlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBrZXlzIGZvcm1hdCBpcyBhIHBhaXIgb2YgaGV4IGtleXMuXG4gICAqXG4gICAqIEByZXR1cm5zIHsgRGVmYXVsdEtleXMgfSBUaGUga2V5cyBpbiB0aGUgZGVmaW5lZCBmb3JtYXRcbiAgICovXG4gIGdldEtleXMoKTogRGVmYXVsdEtleXMge1xuICAgIHJldHVybiB7XG4gICAgICBwdWI6IHRoaXMuZ2V0UHVibGljS2V5KHsgY29tcHJlc3NlZDogdHJ1ZSB9KS50b1N0cmluZygnaGV4JyksXG4gICAgICBwcnY6IHRoaXMuZ2V0UHJpdmF0ZUtleSgpPy50b1N0cmluZygnaGV4JyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBLYXNwYSBhZGRyZXNzIGZyb20gdGhpcyBrZXkgcGFpci5cbiAgICpcbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIGJlY2gzMi1lbmNvZGVkIEthc3BhIGFkZHJlc3NcbiAgICovXG4gIGdldEFkZHJlc3MobmV0d29yayA9ICdtYWlubmV0Jyk6IHN0cmluZyB7XG4gICAgY29uc3QgaHJwID0gbmV0d29yayA9PT0gJ3Rlc3RuZXQnID8gVEVTVE5FVF9QUkVGSVggOiBNQUlOTkVUX1BSRUZJWDtcbiAgICBjb25zdCBjb21wcmVzc2VkUHViID0gdGhpcy5nZXRQdWJsaWNLZXkoeyBjb21wcmVzc2VkOiB0cnVlIH0pO1xuICAgIHJldHVybiBwdWJLZXlUb0thc3BhQWRkcmVzcyhjb21wcmVzc2VkUHViLCBocnApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,25 @@
1
+ import { KaspaTransactionData } from './iface';
2
+ export declare const SIGHASH_ALL = 1;
3
+ export declare const SIGHASH_NONE = 2;
4
+ export declare const SIGHASH_SINGLE = 4;
5
+ export declare const SIGHASH_ANYONECANPAY = 128;
6
+ export declare const OP_CHECKSIG_SCHNORR = 171;
7
+ export declare const SCRIPT_PUBLIC_KEY_VERSION = 0;
8
+ /**
9
+ * Build P2PK Schnorr scriptPublicKey from a 32-byte x-only public key.
10
+ * Format: DATA_32(0x20) + xOnlyPubKey(32 bytes) + OP_CHECKSIG_SCHNORR(0xAB)
11
+ */
12
+ export declare function buildP2PKScriptPublicKey(xOnlyPubKey: Buffer): Buffer;
13
+ /**
14
+ * Derive x-only public key from 33-byte compressed public key.
15
+ */
16
+ export declare function compressedToXOnly(compressedPubKey: Buffer): Buffer;
17
+ /**
18
+ * Compute the Kaspa sighash for a specific input.
19
+ *
20
+ * @param tx Full transaction data
21
+ * @param inputIndex Index of the input being signed
22
+ * @param sigHashType SigHash type flags (use SIGHASH_ALL = 0x01 for standard)
23
+ */
24
+ export declare function computeKaspaSigningHash(tx: KaspaTransactionData, inputIndex: number, sigHashType?: number): Buffer;
25
+ //# sourceMappingURL=sighash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sighash.d.ts","sourceRoot":"","sources":["../../../src/lib/sighash.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,oBAAoB,EAA0C,MAAM,SAAS,CAAC;AAGvF,eAAO,MAAM,WAAW,IAAO,CAAC;AAChC,eAAO,MAAM,YAAY,IAAO,CAAC;AACjC,eAAO,MAAM,cAAc,IAAO,CAAC;AACnC,eAAO,MAAM,oBAAoB,MAAO,CAAC;AAGzC,eAAO,MAAM,mBAAmB,MAAO,CAAC;AACxC,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAM3C;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAKlE;AAoED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,EAAE,EAAE,oBAAoB,EACxB,UAAU,EAAE,MAAM,EAClB,WAAW,GAAE,MAAoB,GAChC,MAAM,CAsGR"}