ecash-lib 3.0.0 → 3.2.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 (100) hide show
  1. package/README.md +2 -0
  2. package/dist/ecc.d.ts +18 -1
  3. package/dist/ecc.d.ts.map +1 -1
  4. package/dist/ecc.js +29 -0
  5. package/dist/ecc.js.map +1 -1
  6. package/dist/ffi/ecash_lib_wasm_bg_browser.js +1743 -1679
  7. package/dist/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
  8. package/dist/ffi/ecash_lib_wasm_bg_browser.wasm.d.ts +13 -11
  9. package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
  10. package/dist/ffi/ecash_lib_wasm_bg_nodejs.wasm.d.ts +13 -11
  11. package/dist/ffi/ecash_lib_wasm_browser.d.ts +27 -11
  12. package/dist/ffi/ecash_lib_wasm_browser.js +64 -14
  13. package/dist/ffi/ecash_lib_wasm_nodejs.d.ts +14 -0
  14. package/dist/ffi/ecash_lib_wasm_nodejs.js +64 -14
  15. package/dist/hdwallet.d.ts.map +1 -1
  16. package/dist/hdwallet.js +1 -0
  17. package/dist/hdwallet.js.map +1 -1
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +17 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/io/bytes.d.ts +2 -0
  23. package/dist/io/bytes.d.ts.map +1 -1
  24. package/dist/io/bytes.js +10 -2
  25. package/dist/io/bytes.js.map +1 -1
  26. package/dist/messages.d.ts +32 -0
  27. package/dist/messages.d.ts.map +1 -0
  28. package/dist/messages.js +102 -0
  29. package/dist/messages.js.map +1 -0
  30. package/dist/op.d.ts.map +1 -1
  31. package/dist/op.js +4 -3
  32. package/dist/op.js.map +1 -1
  33. package/dist/payment/asn1.d.ts +61 -0
  34. package/dist/payment/asn1.d.ts.map +1 -0
  35. package/dist/payment/asn1.js +322 -0
  36. package/dist/payment/asn1.js.map +1 -0
  37. package/dist/payment/index.d.ts +3 -0
  38. package/dist/payment/index.d.ts.map +1 -0
  39. package/dist/payment/index.js +32 -0
  40. package/dist/payment/index.js.map +1 -0
  41. package/dist/payment/x509.d.ts +11 -0
  42. package/dist/payment/x509.d.ts.map +1 -0
  43. package/dist/payment/x509.js +17 -0
  44. package/dist/payment/x509.js.map +1 -0
  45. package/dist/sigHashType.js.map +1 -1
  46. package/dist/token/alp.d.ts +6 -0
  47. package/dist/token/alp.d.ts.map +1 -1
  48. package/dist/token/alp.js +6 -2
  49. package/dist/token/alp.js.map +1 -1
  50. package/dist/token/alp.parse.d.ts +73 -0
  51. package/dist/token/alp.parse.d.ts.map +1 -0
  52. package/dist/token/alp.parse.js +168 -0
  53. package/dist/token/alp.parse.js.map +1 -0
  54. package/dist/token/common.d.ts +18 -0
  55. package/dist/token/common.d.ts.map +1 -1
  56. package/dist/token/common.js +23 -5
  57. package/dist/token/common.js.map +1 -1
  58. package/dist/token/empp.d.ts +10 -0
  59. package/dist/token/empp.d.ts.map +1 -1
  60. package/dist/token/empp.js +38 -1
  61. package/dist/token/empp.js.map +1 -1
  62. package/dist/token/slp.d.ts +12 -0
  63. package/dist/token/slp.d.ts.map +1 -1
  64. package/dist/token/slp.js +12 -2
  65. package/dist/token/slp.js.map +1 -1
  66. package/dist/token/slp.parse.d.ts +91 -0
  67. package/dist/token/slp.parse.d.ts.map +1 -0
  68. package/dist/token/slp.parse.js +251 -0
  69. package/dist/token/slp.parse.js.map +1 -0
  70. package/dist/txBuilder.js +1 -1
  71. package/dist/txBuilder.js.map +1 -1
  72. package/package.json +5 -7
  73. package/src/ecc.ts +54 -2
  74. package/src/ffi/ecash_lib_wasm_bg_browser.js +1743 -1679
  75. package/src/ffi/ecash_lib_wasm_bg_browser.wasm +0 -0
  76. package/src/ffi/ecash_lib_wasm_bg_browser.wasm.d.ts +13 -11
  77. package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm +0 -0
  78. package/src/ffi/ecash_lib_wasm_bg_nodejs.wasm.d.ts +13 -11
  79. package/src/ffi/ecash_lib_wasm_browser.d.ts +27 -11
  80. package/src/ffi/ecash_lib_wasm_browser.js +64 -14
  81. package/src/ffi/ecash_lib_wasm_nodejs.d.ts +14 -0
  82. package/src/ffi/ecash_lib_wasm_nodejs.js +64 -14
  83. package/src/hdwallet.ts +1 -0
  84. package/src/index.ts +5 -0
  85. package/src/io/bytes.ts +11 -2
  86. package/src/messages.ts +125 -0
  87. package/src/op.ts +5 -3
  88. package/src/payment/asn1.ts +440 -0
  89. package/src/payment/index.ts +6 -0
  90. package/src/payment/x509.ts +15 -0
  91. package/src/sigHashType.ts +2 -2
  92. package/src/token/alp.parse.ts +258 -0
  93. package/src/token/alp.ts +10 -1
  94. package/src/token/common.ts +28 -4
  95. package/src/token/empp.ts +42 -1
  96. package/src/token/slp.parse.ts +383 -0
  97. package/src/token/slp.ts +22 -1
  98. package/src/txBuilder.ts +1 -1
  99. package/.eslintignore +0 -8
  100. package/eslint.config.js +0 -16
@@ -0,0 +1,91 @@
1
+ import { Script } from '../script.js';
2
+ import { BURN_STR, GENESIS_STR, GenesisInfo, MINT_STR, SEND_STR, UNKNOWN_STR } from './common.js';
3
+ import { SLP_FUNGIBLE, SLP_MINT_VAULT, SLP_NFT1_GROUP, SlpTokenType } from './slp.js';
4
+ /** Parsed SLP GENESIS OP_RETURN Script */
5
+ export interface SlpGenesis {
6
+ /** "GENESIS" */
7
+ txType: typeof GENESIS_STR;
8
+ /** Token type of the token to create */
9
+ tokenType: SlpTokenType;
10
+ /** Info about the token */
11
+ genesisInfo: GenesisInfo;
12
+ /** Number of token atoms to initially mint to out_idx=1 */
13
+ initialAtoms: bigint;
14
+ /** Output index to send the mint baton to, or undefined if none */
15
+ mintBatonOutIdx?: number;
16
+ }
17
+ /**
18
+ * Parsed SLP MINT (token type 0x01 and 0x81) OP_RETURN Script.
19
+ * Note: Token type 0x41 has no mint batons.
20
+ **/
21
+ export interface SlpMintClassic {
22
+ /** "MINT" */
23
+ txType: typeof MINT_STR;
24
+ /** Token type of the token to mint */
25
+ tokenType: typeof SLP_FUNGIBLE | typeof SLP_NFT1_GROUP;
26
+ /** Token ID of the token to mint */
27
+ tokenId: string;
28
+ /** Number of token atoms to mint to out_idx=1 */
29
+ additionalAtoms: bigint;
30
+ /** Output index to send the mint baton to, or undefined to destroy it */
31
+ mintBatonOutIdx?: number;
32
+ }
33
+ /** Parsed SLP MINT (token type 0x02) OP_RETURN Script */
34
+ export interface SlpMintVault {
35
+ /** "MINT" */
36
+ txType: typeof MINT_STR;
37
+ /** Token type of the token to mint (0x02) */
38
+ tokenType: typeof SLP_MINT_VAULT;
39
+ /** Token ID of the token to mint */
40
+ tokenId: string;
41
+ /** Array of the number of token atoms to mint to the outputs at 1 to N */
42
+ additionalAtomsArray: bigint[];
43
+ }
44
+ /** Parsed SLP MINT OP_RETURN Script */
45
+ export type SlpMint = SlpMintClassic | SlpMintVault;
46
+ /** Parsed SLP SEND OP_RETURN Script */
47
+ export interface SlpSend {
48
+ /** "SEND" */
49
+ txType: typeof SEND_STR;
50
+ /** Token type of the token to send */
51
+ tokenType: SlpTokenType;
52
+ /** Token ID of the token to send */
53
+ tokenId: string;
54
+ /** Array of the number of token atoms to send to the outputs at 1 to N */
55
+ sendAtomsArray: bigint[];
56
+ }
57
+ /** Parsed SLP BURN OP_RETURN Script */
58
+ export interface SlpBurn {
59
+ /** "BURN" */
60
+ txType: typeof BURN_STR;
61
+ /** Token type of the token to burn */
62
+ tokenType: SlpTokenType;
63
+ /** Token ID of the token to burn */
64
+ tokenId: string;
65
+ /** How many tokens should be burned */
66
+ burnAtoms: bigint;
67
+ }
68
+ /** New unknown SLP token type or tx type */
69
+ export interface SlpUnknown {
70
+ /** Placeholder for unknown token type or tx type */
71
+ txType: typeof UNKNOWN_STR;
72
+ /** Token type number */
73
+ tokenType: number;
74
+ }
75
+ /** Parsed SLP OP_RETURN Script */
76
+ export type SlpData = SlpGenesis | SlpMint | SlpSend | SlpBurn | SlpUnknown;
77
+ /**
78
+ * Parse the given SLP OP_RETURN Script.
79
+ *
80
+ * For data that's clearly not SLP it will return `undefined`.
81
+ * For example, if the OP_RETURN or LOKAD ID is missing.
82
+ *
83
+ * For an unknown token type, it'll return SlpUnknown.
84
+ *
85
+ * For a known token type, it'll parse the remaining data, or throw an error if
86
+ * the format is invalid or if there's an unknown tx type.
87
+ *
88
+ * This behavior mirrors that of Chronik for consistency.
89
+ **/
90
+ export declare function parseSlp(opreturnScript: Script): SlpData | undefined;
91
+ //# sourceMappingURL=slp.parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slp.parse.d.ts","sourceRoot":"","sources":["../../src/token/slp.parse.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAgB,MAAM,cAAc,CAAC;AACpD,OAAO,EACH,QAAQ,EACR,WAAW,EACX,WAAW,EAEX,QAAQ,EACR,QAAQ,EAER,WAAW,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAEH,YAAY,EAIZ,cAAc,EAGd,cAAc,EACd,YAAY,EACf,MAAM,UAAU,CAAC;AAElB,0CAA0C;AAC1C,MAAM,WAAW,UAAU;IACvB,gBAAgB;IAChB,MAAM,EAAE,OAAO,WAAW,CAAC;IAC3B,wCAAwC;IACxC,SAAS,EAAE,YAAY,CAAC;IACxB,2BAA2B;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;IAGI;AACJ,MAAM,WAAW,cAAc;IAC3B,aAAa;IACb,MAAM,EAAE,OAAO,QAAQ,CAAC;IACxB,sCAAsC;IACtC,SAAS,EAAE,OAAO,YAAY,GAAG,OAAO,cAAc,CAAC;IACvD,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,yDAAyD;AACzD,MAAM,WAAW,YAAY;IACzB,aAAa;IACb,MAAM,EAAE,OAAO,QAAQ,CAAC;IACxB,6CAA6C;IAC7C,SAAS,EAAE,OAAO,cAAc,CAAC;IACjC,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAClC;AAED,uCAAuC;AACvC,MAAM,MAAM,OAAO,GAAG,cAAc,GAAG,YAAY,CAAC;AAEpD,uCAAuC;AACvC,MAAM,WAAW,OAAO;IACpB,aAAa;IACb,MAAM,EAAE,OAAO,QAAQ,CAAC;IACxB,sCAAsC;IACtC,SAAS,EAAE,YAAY,CAAC;IACxB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,cAAc,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,uCAAuC;AACvC,MAAM,WAAW,OAAO;IACpB,aAAa;IACb,MAAM,EAAE,OAAO,QAAQ,CAAC;IACxB,sCAAsC;IACtC,SAAS,EAAE,YAAY,CAAC;IACxB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,4CAA4C;AAC5C,MAAM,WAAW,UAAU;IACvB,oDAAoD;IACpD,MAAM,EAAE,OAAO,WAAW,CAAC;IAC3B,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,kCAAkC;AAClC,MAAM,MAAM,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;AAE5E;;;;;;;;;;;;IAYI;AACJ,wBAAgB,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAgEpE"}
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ // Copyright (c) 2025 The Bitcoin developers
3
+ // Distributed under the MIT software license, see the accompanying
4
+ // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseSlp = void 0;
7
+ const str_js_1 = require("../io/str.js");
8
+ const hex_js_1 = require("../io/hex.js");
9
+ const opcode_js_1 = require("../opcode.js");
10
+ const op_js_1 = require("../op.js");
11
+ const common_js_1 = require("./common.js");
12
+ const slp_js_1 = require("./slp.js");
13
+ /**
14
+ * Parse the given SLP OP_RETURN Script.
15
+ *
16
+ * For data that's clearly not SLP it will return `undefined`.
17
+ * For example, if the OP_RETURN or LOKAD ID is missing.
18
+ *
19
+ * For an unknown token type, it'll return SlpUnknown.
20
+ *
21
+ * For a known token type, it'll parse the remaining data, or throw an error if
22
+ * the format is invalid or if there's an unknown tx type.
23
+ *
24
+ * This behavior mirrors that of Chronik for consistency.
25
+ **/
26
+ function parseSlp(opreturnScript) {
27
+ const ops = opreturnScript.ops();
28
+ const opreturnOp = ops.next();
29
+ // Return undefined if not OP_RETURN
30
+ if (opreturnOp === undefined ||
31
+ (0, op_js_1.isPushOp)(opreturnOp) ||
32
+ opreturnOp !== opcode_js_1.OP_RETURN) {
33
+ return undefined;
34
+ }
35
+ // Return undefined if LOKAD ID is not "SLP\0"
36
+ const lokadId = ops.next();
37
+ if (lokadId === undefined || !(0, op_js_1.isPushOp)(lokadId)) {
38
+ return undefined;
39
+ }
40
+ if ((0, str_js_1.bytesToStr)(lokadId.data) !== slp_js_1.SLP_LOKAD_ID_STR) {
41
+ return undefined;
42
+ }
43
+ // Parse token type
44
+ const tokenTypeBytes = nextBytes(ops);
45
+ if (tokenTypeBytes === undefined) {
46
+ throw new Error('Missing tokenType');
47
+ }
48
+ if (tokenTypeBytes.length !== 1) {
49
+ throw new Error('tokenType must be exactly 1 byte');
50
+ }
51
+ const tokenType = tokenTypeBytes[0];
52
+ if (tokenType !== slp_js_1.SLP_FUNGIBLE &&
53
+ tokenType !== slp_js_1.SLP_MINT_VAULT &&
54
+ tokenType !== slp_js_1.SLP_NFT1_GROUP &&
55
+ tokenType !== slp_js_1.SLP_NFT1_CHILD) {
56
+ return {
57
+ txType: common_js_1.UNKNOWN_STR,
58
+ tokenType,
59
+ };
60
+ }
61
+ // Parse tx type (GENESIS, MINT, SEND, BURN)
62
+ const txTypeBytes = nextBytes(ops);
63
+ if (txTypeBytes === undefined) {
64
+ throw new Error('Missing txType');
65
+ }
66
+ const txType = (0, str_js_1.bytesToStr)(txTypeBytes);
67
+ // Handle tx type specific parsing.
68
+ // Advances the `ops` Script iterator
69
+ switch (txType) {
70
+ case common_js_1.GENESIS_STR:
71
+ return nextGenesis(ops, tokenType);
72
+ case common_js_1.MINT_STR:
73
+ return nextMint(ops, tokenType);
74
+ case common_js_1.SEND_STR:
75
+ return nextSend(ops, tokenType);
76
+ case common_js_1.BURN_STR:
77
+ return nextBurn(ops, tokenType);
78
+ default:
79
+ throw new Error('Unknown txType');
80
+ }
81
+ }
82
+ exports.parseSlp = parseSlp;
83
+ function nextGenesis(ops, tokenType) {
84
+ // Parse genesis info
85
+ const tokenTicker = (0, str_js_1.bytesToStr)(nextBytesRequired(ops, 'tokenTicker'));
86
+ const tokenName = (0, str_js_1.bytesToStr)(nextBytesRequired(ops, 'tokenName'));
87
+ const url = (0, str_js_1.bytesToStr)(nextBytesRequired(ops, 'url'));
88
+ const hash = nextBytesRequired(ops, 'hash');
89
+ if (hash.length !== 0 && hash.length !== slp_js_1.SLP_GENESIS_HASH_NUM_BYTES) {
90
+ throw new Error(`hash must be either 0 or ${slp_js_1.SLP_GENESIS_HASH_NUM_BYTES} bytes`);
91
+ }
92
+ const decimalsBytes = nextBytesRequired(ops, 'decimals');
93
+ if (decimalsBytes.length !== 1) {
94
+ throw new Error('decimals must be exactly 1 byte');
95
+ }
96
+ const decimals = decimalsBytes[0];
97
+ if (decimals > common_js_1.MAX_DECIMALS) {
98
+ throw new Error(`decimals must be at most ${common_js_1.MAX_DECIMALS}`);
99
+ }
100
+ // Parse mint data
101
+ let mintVaultScripthash = undefined;
102
+ let mintBatonOutIdx = undefined;
103
+ if (tokenType === slp_js_1.SLP_MINT_VAULT) {
104
+ const scripthashBytes = nextBytesRequired(ops, 'mintVaultScripthash');
105
+ if (scripthashBytes.length !== slp_js_1.SLP_MINT_VAULT_SCRIPTHASH_NUM_BYTES) {
106
+ throw new Error(`mintVaultScripthash must be exactly ${slp_js_1.SLP_MINT_VAULT_SCRIPTHASH_NUM_BYTES} ` +
107
+ 'bytes long');
108
+ }
109
+ mintVaultScripthash = (0, hex_js_1.toHex)(scripthashBytes);
110
+ }
111
+ else {
112
+ mintBatonOutIdx = nextMintOutIdx(ops, tokenType);
113
+ }
114
+ const initialAtoms = parseSlpAtoms(nextBytesRequired(ops, 'initialAtoms'));
115
+ nextEnd(ops, 'GENESIS');
116
+ return {
117
+ txType: common_js_1.GENESIS_STR,
118
+ tokenType,
119
+ genesisInfo: {
120
+ tokenTicker,
121
+ tokenName,
122
+ url,
123
+ hash: hash.length !== 0 ? (0, hex_js_1.toHex)(hash) : undefined,
124
+ mintVaultScripthash,
125
+ decimals,
126
+ },
127
+ initialAtoms,
128
+ mintBatonOutIdx,
129
+ };
130
+ }
131
+ function nextMint(ops, tokenType) {
132
+ const tokenId = nextTokenId(ops);
133
+ if (tokenType === slp_js_1.SLP_MINT_VAULT) {
134
+ const additionalAtomsArray = nextSlpAtomsArray(ops);
135
+ return {
136
+ txType: common_js_1.MINT_STR,
137
+ tokenType,
138
+ tokenId,
139
+ additionalAtomsArray,
140
+ };
141
+ }
142
+ else if (tokenType === slp_js_1.SLP_NFT1_CHILD) {
143
+ throw new Error('SLP_NFT1_CHILD cannot have MINT transactions');
144
+ }
145
+ else {
146
+ const mintBatonOutIdx = nextMintOutIdx(ops, tokenType);
147
+ const additionalAtoms = parseSlpAtoms(nextBytesRequired(ops, 'additionalAtoms'));
148
+ nextEnd(ops, 'MINT');
149
+ return {
150
+ txType: common_js_1.MINT_STR,
151
+ tokenType,
152
+ tokenId,
153
+ additionalAtoms,
154
+ mintBatonOutIdx,
155
+ };
156
+ }
157
+ }
158
+ function nextSend(ops, tokenType) {
159
+ const tokenId = nextTokenId(ops);
160
+ const sendAtomsArray = nextSlpAtomsArray(ops);
161
+ return {
162
+ txType: common_js_1.SEND_STR,
163
+ tokenType,
164
+ tokenId,
165
+ sendAtomsArray,
166
+ };
167
+ }
168
+ function nextBurn(ops, tokenType) {
169
+ const tokenId = nextTokenId(ops);
170
+ const burnAtoms = parseSlpAtoms(nextBytesRequired(ops, 'burnAtoms'));
171
+ nextEnd(ops, 'BURN');
172
+ return {
173
+ txType: common_js_1.BURN_STR,
174
+ tokenType,
175
+ tokenId,
176
+ burnAtoms,
177
+ };
178
+ }
179
+ function nextBytes(iter) {
180
+ const op = iter.next();
181
+ if (op === undefined) {
182
+ return undefined;
183
+ }
184
+ if (!(0, op_js_1.isPushOp)(op)) {
185
+ throw new Error('SLP only supports push-ops');
186
+ }
187
+ return op.data;
188
+ }
189
+ function nextBytesRequired(iter, name) {
190
+ const bytes = nextBytes(iter);
191
+ if (bytes === undefined) {
192
+ throw new Error('Missing ' + name);
193
+ }
194
+ return bytes;
195
+ }
196
+ function nextMintOutIdx(iter, tokenType) {
197
+ const outIdxBytes = nextBytesRequired(iter, 'mintBatonOutIdx');
198
+ if (outIdxBytes.length > 1) {
199
+ throw new Error('mintBatonOutIdx must be at most 1 byte long');
200
+ }
201
+ if (outIdxBytes.length === 1) {
202
+ if (tokenType === slp_js_1.SLP_NFT1_CHILD) {
203
+ throw new Error('SLP_NFT1_CHILD cannot have a mint baton');
204
+ }
205
+ const mintBatonOutIdx = outIdxBytes[0];
206
+ if (mintBatonOutIdx < 2) {
207
+ throw new Error('mintBatonOutIdx must be at least 2');
208
+ }
209
+ return mintBatonOutIdx;
210
+ }
211
+ return undefined;
212
+ }
213
+ function nextTokenId(iter) {
214
+ const tokenIdBytes = nextBytesRequired(iter, 'tokenId');
215
+ if (tokenIdBytes.length !== common_js_1.TOKEN_ID_NUM_BYTES) {
216
+ throw new Error(`tokenId must be exactly ${common_js_1.TOKEN_ID_NUM_BYTES} bytes long`);
217
+ }
218
+ // Note: SLP token ID endianness is big-endian
219
+ return (0, hex_js_1.toHex)(tokenIdBytes);
220
+ }
221
+ function nextSlpAtomsArray(iter) {
222
+ const atomsArray = [];
223
+ let bytes = undefined;
224
+ while ((bytes = nextBytes(iter)) !== undefined) {
225
+ atomsArray.push(parseSlpAtoms(bytes));
226
+ }
227
+ if (atomsArray.length === 0) {
228
+ throw new Error('atomsArray cannot be empty');
229
+ }
230
+ if (atomsArray.length > slp_js_1.SLP_MAX_SEND_OUTPUTS) {
231
+ throw new Error(`atomsArray can at most be ${slp_js_1.SLP_MAX_SEND_OUTPUTS} items long`);
232
+ }
233
+ return atomsArray;
234
+ }
235
+ function nextEnd(iter, txType) {
236
+ if (iter.next() !== undefined) {
237
+ throw new Error(`Superfluous ${txType} bytes`);
238
+ }
239
+ }
240
+ function parseSlpAtoms(bytes) {
241
+ if (bytes.length !== slp_js_1.SLP_ATOMS_NUM_BYTES) {
242
+ throw new Error(`SLP atoms must be exactly ${slp_js_1.SLP_ATOMS_NUM_BYTES} bytes long`);
243
+ }
244
+ let number = 0n;
245
+ for (let i = 0; i < slp_js_1.SLP_ATOMS_NUM_BYTES; ++i) {
246
+ number <<= 8n;
247
+ number |= BigInt(bytes[i]);
248
+ }
249
+ return number;
250
+ }
251
+ //# sourceMappingURL=slp.parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slp.parse.js","sourceRoot":"","sources":["../../src/token/slp.parse.ts"],"names":[],"mappings":"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"}
package/dist/txBuilder.js CHANGED
@@ -34,7 +34,7 @@ class TxBuilder {
34
34
  prepareOutputs() {
35
35
  let fixedOutputSum = 0n;
36
36
  let leftoverIdx = undefined;
37
- let outputs = new Array(this.outputs.length);
37
+ const outputs = new Array(this.outputs.length);
38
38
  for (let idx = 0; idx < this.outputs.length; ++idx) {
39
39
  const builderOutput = this.outputs[idx];
40
40
  if ('bytecode' in builderOutput) {
@@ -1 +1 @@
1
- {"version":3,"file":"txBuilder.js","sourceRoot":"","sources":["../src/txBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"txBuilder.js","sourceRoot":"","sources":["../src/txBuilder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "ecash-lib",
3
- "version": "3.0.0",
3
+ "version": "3.2.0",
4
4
  "description": "Library for eCash transaction building",
5
5
  "main": "./dist/indexNodeJs.js",
6
6
  "browser": "./dist/indexBrowser.js",
7
7
  "scripts": {
8
8
  "build": "tsc && tsc -p ./tsconfig.build.json && cp -r ./src/ffi ./dist",
9
- "test": "mocha --forbid-only --import=tsx ./src/*.test.ts ./src/**/*.test.ts",
10
- "integration-tests": "mocha --forbid-only --import=tsx ./tests/*.test.ts --timeout 60000",
9
+ "test": "mocha --import=tsx ./src/*.test.ts ./src/**/*.test.ts",
10
+ "integration-tests": "mocha --import=tsx ./tests/*.test.ts --timeout 60000",
11
11
  "coverage": "nyc npm run test",
12
12
  "junit": "npm run test --reporter mocha-junit-reporter"
13
13
  },
@@ -33,8 +33,7 @@
33
33
  "@types/mocha": "^10.0.6",
34
34
  "@types/node": "^20.12.7",
35
35
  "chai": "^5.1.0",
36
- "chronik-client": "^3.0.0",
37
- "eslint-plugin-header": "^3.1.1",
36
+ "chronik-client": "^3.1.1",
38
37
  "mocha": "^10.4.0",
39
38
  "mocha-junit-reporter": "^2.2.1",
40
39
  "nyc": "^15.1.0",
@@ -42,8 +41,7 @@
42
41
  "source-map-support": "^0.5.21",
43
42
  "ts-node": "^10.9.2",
44
43
  "tsx": "^4.7.2",
45
- "typescript": "^5.4.3",
46
- "typescript-eslint": "^7.6.0"
44
+ "typescript": "^5.4.3"
47
45
  },
48
46
  "dependencies": {
49
47
  "b58-ts": "^0.1.0",
package/src/ecc.ts CHANGED
@@ -3,6 +3,7 @@
3
3
  // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
4
 
5
5
  /** Interface to abstract over Elliptic Curve Cryptography */
6
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
6
7
  export interface Ecc {
7
8
  /** Derive a public key from secret key. */
8
9
  derivePubkey(seckey: Uint8Array): Uint8Array;
@@ -10,9 +11,21 @@ export interface Ecc {
10
11
  /** Sign an ECDSA signature. msg needs to be a 32-byte hash */
11
12
  ecdsaSign(seckey: Uint8Array, msg: Uint8Array): Uint8Array;
12
13
 
14
+ /**
15
+ * Verify an ECDSA signature. msg needs to be a 32-byte hash.
16
+ * Throws an exception if the signature is invalid.
17
+ **/
18
+ ecdsaVerify(sig: Uint8Array, msg: Uint8Array, pk: Uint8Array): void;
19
+
13
20
  /** Sign a Schnorr signature. msg needs to be a 32-byte hash */
14
21
  schnorrSign(seckey: Uint8Array, msg: Uint8Array): Uint8Array;
15
22
 
23
+ /**
24
+ * Verify a Schnorr signature. msg needs to be a 32-byte hash.
25
+ * Throws an exception if the signature is invalid.
26
+ **/
27
+ schnorrVerify(sig: Uint8Array, msg: Uint8Array, pk: Uint8Array): void;
28
+
16
29
  /**
17
30
  * Return whether the given secret key is valid, i.e. whether is of correct
18
31
  * length (32 bytes) and is on the curve.
@@ -30,6 +43,9 @@ export interface Ecc {
30
43
 
31
44
  /** Recover the public key of an ECDSA signed signature (with recovery ID) */
32
45
  recoverSig(sig: Uint8Array, msg: Uint8Array): Uint8Array;
46
+
47
+ /** Compress an uncompressed public key (must start with 0x04) */
48
+ compressPk(pk: Uint8Array): Uint8Array;
33
49
  }
34
50
 
35
51
  /** Dummy Ecc impl that always returns 0, useful for measuring tx size */
@@ -42,10 +58,14 @@ export class EccDummy implements Ecc {
42
58
  return new Uint8Array(73);
43
59
  }
44
60
 
61
+ ecdsaVerify(_sig: Uint8Array, _msg: Uint8Array, _pk: Uint8Array): void {}
62
+
45
63
  schnorrSign(_seckey: Uint8Array, _msg: Uint8Array): Uint8Array {
46
64
  return new Uint8Array(64);
47
65
  }
48
66
 
67
+ schnorrVerify(_sig: Uint8Array, _msg: Uint8Array, _pk: Uint8Array): void {}
68
+
49
69
  isValidSeckey(_seckey: Uint8Array): boolean {
50
70
  return false;
51
71
  }
@@ -65,14 +85,20 @@ export class EccDummy implements Ecc {
65
85
  recoverSig(_sig: Uint8Array, _msg: Uint8Array): Uint8Array {
66
86
  return new Uint8Array(33);
67
87
  }
88
+
89
+ compressPk(_pk: Uint8Array): Uint8Array {
90
+ return new Uint8Array(33);
91
+ }
68
92
  }
69
93
 
70
- const ECC: { ecc?: Ecc } = {};
94
+ type FfiEcc = Omit<Ecc, 'compressPk'>;
95
+ const ECC: { ecc?: FfiEcc } = {};
71
96
 
72
- export function __setEcc(ecc: Ecc) {
97
+ export function __setEcc(ecc: FfiEcc) {
73
98
  ECC.ecc = ecc;
74
99
  }
75
100
 
101
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-declaration-merging
76
102
  export class Ecc implements Ecc {
77
103
  /** Derive a public key from secret key. */
78
104
  derivePubkey(seckey: Uint8Array): Uint8Array {
@@ -84,11 +110,27 @@ export class Ecc implements Ecc {
84
110
  return ECC.ecc!.ecdsaSign(seckey, msg);
85
111
  }
86
112
 
113
+ /**
114
+ * Verify an ECDSA signature. msg needs to be a 32-byte hash.
115
+ * Throws an exception if the signature is invalid.
116
+ **/
117
+ ecdsaVerify(sig: Uint8Array, msg: Uint8Array, pk: Uint8Array): void {
118
+ ECC.ecc?.ecdsaVerify(sig, msg, pk);
119
+ }
120
+
87
121
  /** Sign a Schnorr signature. msg needs to be a 32-byte hash */
88
122
  schnorrSign(seckey: Uint8Array, msg: Uint8Array): Uint8Array {
89
123
  return ECC.ecc!.schnorrSign(seckey, msg);
90
124
  }
91
125
 
126
+ /**
127
+ * Verify a Schnorr signature. msg needs to be a 32-byte hash.
128
+ * Throws an exception if the signature is invalid.
129
+ **/
130
+ schnorrVerify(sig: Uint8Array, msg: Uint8Array, pk: Uint8Array): void {
131
+ ECC.ecc?.schnorrVerify(sig, msg, pk);
132
+ }
133
+
92
134
  /**
93
135
  * Return whether the given secret key is valid, i.e. whether is of correct
94
136
  * length (32 bytes) and is on the curve.
@@ -114,4 +156,14 @@ export class Ecc implements Ecc {
114
156
  recoverSig(sig: Uint8Array, msg: Uint8Array): Uint8Array {
115
157
  return ECC.ecc!.recoverSig(sig, msg);
116
158
  }
159
+
160
+ compressPk(pk: Uint8Array): Uint8Array {
161
+ if (pk[0] != 0x04) {
162
+ throw new Error('Uncompressed pubkey must start with 0x04');
163
+ }
164
+ const compressedPk = new Uint8Array(33);
165
+ compressedPk[0] = 0x02 | (pk[64] & 0x01);
166
+ compressedPk.set(pk.slice(1, 33), 1);
167
+ return compressedPk;
168
+ }
117
169
  }