@totemsdk/core 1.2.3 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/MiniNumber.d.ts +47 -0
- package/dist/MiniNumber.js +300 -0
- package/dist/bip39.js +12 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.js +4 -1
- package/dist/wots.d.ts +1 -1
- package/dist/wots.js +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**The cryptographic engine — every other package depends on this.**
|
|
4
4
|
|
|
5
|
-
Zero production dependencies (only `@noble/hashes` as a peer). Provides
|
|
5
|
+
Zero production dependencies (only `@noble/hashes` as a peer). Provides WOTS (Winternitz) signatures, hierarchical TreeKey address derivation, BIP39 seed phrases, Merkle Mountain Range proofs, and byte-exact Minima Java-compatible transaction serialization.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export declare class MiniNumber {
|
|
2
|
+
readonly unscaled: bigint;
|
|
3
|
+
readonly scale: number;
|
|
4
|
+
static readonly ZERO: MiniNumber;
|
|
5
|
+
static readonly ONE: MiniNumber;
|
|
6
|
+
static readonly TWO: MiniNumber;
|
|
7
|
+
static readonly THREE: MiniNumber;
|
|
8
|
+
static readonly FOUR: MiniNumber;
|
|
9
|
+
static readonly EIGHT: MiniNumber;
|
|
10
|
+
static readonly TWELVE: MiniNumber;
|
|
11
|
+
static readonly SIXTEEN: MiniNumber;
|
|
12
|
+
static readonly TWENTY: MiniNumber;
|
|
13
|
+
static readonly THIRTYTWO: MiniNumber;
|
|
14
|
+
static readonly FIFTY: MiniNumber;
|
|
15
|
+
static readonly SIXTYFOUR: MiniNumber;
|
|
16
|
+
static readonly TWOFIVESIX: MiniNumber;
|
|
17
|
+
static readonly FIVEONE12: MiniNumber;
|
|
18
|
+
static readonly THOUSAND24: MiniNumber;
|
|
19
|
+
static readonly MINUSONE: MiniNumber;
|
|
20
|
+
constructor(value: string | number | bigint | MiniNumber);
|
|
21
|
+
getAsBigDecimal(): string;
|
|
22
|
+
getAsBigInteger(): string;
|
|
23
|
+
toNumber(): number;
|
|
24
|
+
toString(): string;
|
|
25
|
+
private assertSameScale;
|
|
26
|
+
add(other: MiniNumber): MiniNumber;
|
|
27
|
+
sub(other: MiniNumber): MiniNumber;
|
|
28
|
+
mult(other: MiniNumber): MiniNumber;
|
|
29
|
+
div(other: MiniNumber): MiniNumber;
|
|
30
|
+
modulo(other: MiniNumber): MiniNumber;
|
|
31
|
+
pow(n: number): MiniNumber;
|
|
32
|
+
sqrt(): MiniNumber;
|
|
33
|
+
floor(): MiniNumber;
|
|
34
|
+
ceil(): MiniNumber;
|
|
35
|
+
abs(): MiniNumber;
|
|
36
|
+
negate(): MiniNumber;
|
|
37
|
+
increment(): MiniNumber;
|
|
38
|
+
decrement(): MiniNumber;
|
|
39
|
+
compareTo(other: MiniNumber): number;
|
|
40
|
+
isEqual(other: MiniNumber): boolean;
|
|
41
|
+
isLess(other: MiniNumber): boolean;
|
|
42
|
+
isLessEqual(other: MiniNumber): boolean;
|
|
43
|
+
isMore(other: MiniNumber): boolean;
|
|
44
|
+
isMoreEqual(other: MiniNumber): boolean;
|
|
45
|
+
setSignificantDigits(d: number): MiniNumber;
|
|
46
|
+
decimalPlaces(): number;
|
|
47
|
+
}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Matching Java's `org.minima.objects.base.MiniNumber` backed by `BigDecimal`
|
|
3
|
+
// with MathContext(64, RoundingMode.DOWN).
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.MiniNumber = void 0;
|
|
6
|
+
const MAX_DIGITS = 64;
|
|
7
|
+
const MAX_DECIMAL_PLACES = MAX_DIGITS - 20;
|
|
8
|
+
const MAX_VALUE_BIG = (1n << 64n) - 1n; // 2^64 - 1
|
|
9
|
+
function checkLimits(unscaled, scale) {
|
|
10
|
+
if (scale > MAX_DECIMAL_PLACES) {
|
|
11
|
+
const diff = scale - MAX_DECIMAL_PLACES;
|
|
12
|
+
const divisor = 10n ** BigInt(diff);
|
|
13
|
+
unscaled = unscaled / divisor;
|
|
14
|
+
scale = MAX_DECIMAL_PLACES;
|
|
15
|
+
}
|
|
16
|
+
const abs = unscaled < 0n ? -unscaled : unscaled;
|
|
17
|
+
const factor = 10n ** BigInt(scale);
|
|
18
|
+
const intPart = abs / factor;
|
|
19
|
+
const rem = abs % factor;
|
|
20
|
+
if (intPart > MAX_VALUE_BIG || (intPart === MAX_VALUE_BIG && rem > 0n)) {
|
|
21
|
+
throw new RangeError(`MiniNumber too large: ${unscaled}E${-scale}`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function digits(v) {
|
|
25
|
+
if (v === 0n)
|
|
26
|
+
return 0;
|
|
27
|
+
return v.toString().replace('-', '').length;
|
|
28
|
+
}
|
|
29
|
+
function roundToDigits(unscaled, scale, digits_target) {
|
|
30
|
+
let u = unscaled;
|
|
31
|
+
let s = scale;
|
|
32
|
+
const currentDigits = digits(u);
|
|
33
|
+
if (currentDigits > digits_target) {
|
|
34
|
+
const drop = currentDigits - digits_target;
|
|
35
|
+
const divisor = 10n ** BigInt(drop);
|
|
36
|
+
u = u / divisor;
|
|
37
|
+
s = s - drop;
|
|
38
|
+
}
|
|
39
|
+
if (s > MAX_DECIMAL_PLACES) {
|
|
40
|
+
const diff = s - MAX_DECIMAL_PLACES;
|
|
41
|
+
const divisor = 10n ** BigInt(diff);
|
|
42
|
+
u = u / divisor;
|
|
43
|
+
s = s - diff;
|
|
44
|
+
}
|
|
45
|
+
while (s > 0 && u % 10n === 0n) {
|
|
46
|
+
u = u / 10n;
|
|
47
|
+
s--;
|
|
48
|
+
}
|
|
49
|
+
return { unscaled: u, scale: s };
|
|
50
|
+
}
|
|
51
|
+
class MiniNumber {
|
|
52
|
+
constructor(value) {
|
|
53
|
+
if (value instanceof MiniNumber) {
|
|
54
|
+
this.unscaled = value.unscaled;
|
|
55
|
+
this.scale = value.scale;
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
if (typeof value === 'bigint') {
|
|
59
|
+
this.unscaled = value;
|
|
60
|
+
this.scale = 0;
|
|
61
|
+
if (value !== 0n) {
|
|
62
|
+
const r = roundToDigits(this.unscaled, this.scale, MAX_DIGITS);
|
|
63
|
+
this.unscaled = r.unscaled;
|
|
64
|
+
this.scale = r.scale;
|
|
65
|
+
checkLimits(this.unscaled, this.scale);
|
|
66
|
+
}
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
if (typeof value === 'number') {
|
|
70
|
+
const s = Number.isInteger(value) ? value.toFixed(0) : value.toExponential(20);
|
|
71
|
+
const parsed = parseDecimal(s);
|
|
72
|
+
this.unscaled = parsed.unscaled;
|
|
73
|
+
this.scale = parsed.scale;
|
|
74
|
+
if (this.unscaled !== 0n) {
|
|
75
|
+
const r = roundToDigits(this.unscaled, this.scale, MAX_DIGITS);
|
|
76
|
+
this.unscaled = r.unscaled;
|
|
77
|
+
this.scale = r.scale;
|
|
78
|
+
checkLimits(this.unscaled, this.scale);
|
|
79
|
+
}
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const parsed = parseDecimal(value);
|
|
83
|
+
this.unscaled = parsed.unscaled;
|
|
84
|
+
this.scale = parsed.scale;
|
|
85
|
+
if (this.unscaled !== 0n) {
|
|
86
|
+
const r = roundToDigits(this.unscaled, this.scale, MAX_DIGITS);
|
|
87
|
+
this.unscaled = r.unscaled;
|
|
88
|
+
this.scale = r.scale;
|
|
89
|
+
checkLimits(this.unscaled, this.scale);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
getAsBigDecimal() {
|
|
93
|
+
return this.toString();
|
|
94
|
+
}
|
|
95
|
+
getAsBigInteger() {
|
|
96
|
+
const s = this.toString();
|
|
97
|
+
const dot = s.indexOf('.');
|
|
98
|
+
return dot === -1 ? s : s.slice(0, dot);
|
|
99
|
+
}
|
|
100
|
+
toNumber() {
|
|
101
|
+
return Number(this.toString());
|
|
102
|
+
}
|
|
103
|
+
toString() {
|
|
104
|
+
if (this.unscaled === 0n)
|
|
105
|
+
return '0';
|
|
106
|
+
const neg = this.unscaled < 0n;
|
|
107
|
+
const abs = neg ? -this.unscaled : this.unscaled;
|
|
108
|
+
let s = abs.toString();
|
|
109
|
+
if (s.length <= this.scale) {
|
|
110
|
+
s = s.padStart(this.scale + 1, '0');
|
|
111
|
+
s = s.slice(0, s.length - this.scale) + '.' + s.slice(s.length - this.scale);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
s = s.slice(0, s.length - this.scale) + '.' + s.slice(s.length - this.scale);
|
|
115
|
+
}
|
|
116
|
+
s = s.replace(/(\.[0-9]*?)0+$/, '$1').replace(/\.$/, '');
|
|
117
|
+
return neg ? '-' + s : s;
|
|
118
|
+
}
|
|
119
|
+
assertSameScale(other) {
|
|
120
|
+
if (this.scale === other.scale)
|
|
121
|
+
return { a: this.unscaled, b: other.unscaled, outScale: this.scale };
|
|
122
|
+
if (this.scale > other.scale) {
|
|
123
|
+
const diff = this.scale - other.scale;
|
|
124
|
+
return { a: this.unscaled, b: other.unscaled * 10n ** BigInt(diff), outScale: this.scale };
|
|
125
|
+
}
|
|
126
|
+
const diff = other.scale - this.scale;
|
|
127
|
+
return { a: this.unscaled * 10n ** BigInt(diff), b: other.unscaled, outScale: other.scale };
|
|
128
|
+
}
|
|
129
|
+
add(other) {
|
|
130
|
+
const { a, b, outScale } = this.assertSameScale(other);
|
|
131
|
+
const result = a + b;
|
|
132
|
+
const r = roundToDigits(result, outScale, MAX_DIGITS);
|
|
133
|
+
return new MiniNumber(r.unscaled.toString() + 'e' + (-r.scale));
|
|
134
|
+
}
|
|
135
|
+
sub(other) {
|
|
136
|
+
const { a, b, outScale } = this.assertSameScale(other);
|
|
137
|
+
const result = a - b;
|
|
138
|
+
const r = roundToDigits(result, outScale, MAX_DIGITS);
|
|
139
|
+
return new MiniNumber(r.unscaled.toString() + 'e' + (-r.scale));
|
|
140
|
+
}
|
|
141
|
+
mult(other) {
|
|
142
|
+
const result = this.unscaled * other.unscaled;
|
|
143
|
+
const outScale = this.scale + other.scale;
|
|
144
|
+
const r = roundToDigits(result, outScale, MAX_DIGITS);
|
|
145
|
+
return new MiniNumber(r.unscaled.toString() + 'e' + (-r.scale));
|
|
146
|
+
}
|
|
147
|
+
div(other) {
|
|
148
|
+
if (other.unscaled === 0n)
|
|
149
|
+
throw new Error('Division by zero');
|
|
150
|
+
const extraScale = MAX_DIGITS;
|
|
151
|
+
const scaledThis = this.unscaled * 10n ** BigInt(extraScale);
|
|
152
|
+
const result = scaledThis / other.unscaled;
|
|
153
|
+
const outScale = this.scale + extraScale - other.scale;
|
|
154
|
+
const r = roundToDigits(result, outScale, MAX_DIGITS);
|
|
155
|
+
return new MiniNumber(r.unscaled.toString() + 'e' + (-r.scale));
|
|
156
|
+
}
|
|
157
|
+
modulo(other) {
|
|
158
|
+
if (other.unscaled === 0n)
|
|
159
|
+
throw new Error('Modulo by zero');
|
|
160
|
+
const { a, b, outScale } = this.assertSameScale(other);
|
|
161
|
+
const result = a % b;
|
|
162
|
+
return new MiniNumber(result.toString() + 'e' + (-outScale));
|
|
163
|
+
}
|
|
164
|
+
pow(n) {
|
|
165
|
+
if (n < 0)
|
|
166
|
+
throw new Error('Negative power not supported');
|
|
167
|
+
let result = MiniNumber.ONE;
|
|
168
|
+
for (let i = 0; i < n; i++)
|
|
169
|
+
result = result.mult(this);
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
sqrt() {
|
|
173
|
+
if (this.unscaled < 0n)
|
|
174
|
+
throw new Error('Square root of negative number');
|
|
175
|
+
if (this.unscaled === 0n)
|
|
176
|
+
return MiniNumber.ZERO;
|
|
177
|
+
const extra = MAX_DIGITS * 2;
|
|
178
|
+
const scaled = this.unscaled * 10n ** BigInt(extra);
|
|
179
|
+
const s = scaled / 10n ** BigInt(extra / 2);
|
|
180
|
+
let x = s;
|
|
181
|
+
const two = 2n;
|
|
182
|
+
for (let i = 0; i < 100; i++) {
|
|
183
|
+
const next = (x + scaled / x) / two;
|
|
184
|
+
if (next === x)
|
|
185
|
+
break;
|
|
186
|
+
x = next;
|
|
187
|
+
}
|
|
188
|
+
const outScale = (this.scale + extra) / 2;
|
|
189
|
+
const r = roundToDigits(x, outScale, MAX_DIGITS);
|
|
190
|
+
return new MiniNumber(r.unscaled.toString() + 'e' + (-r.scale));
|
|
191
|
+
}
|
|
192
|
+
floor() {
|
|
193
|
+
if (this.scale === 0)
|
|
194
|
+
return new MiniNumber(this);
|
|
195
|
+
const divisor = 10n ** BigInt(this.scale);
|
|
196
|
+
const q = this.unscaled / divisor;
|
|
197
|
+
const rem = this.unscaled % divisor;
|
|
198
|
+
if (this.unscaled < 0n && rem !== 0n) {
|
|
199
|
+
return new MiniNumber((q - 1n).toString());
|
|
200
|
+
}
|
|
201
|
+
return new MiniNumber(q.toString());
|
|
202
|
+
}
|
|
203
|
+
ceil() {
|
|
204
|
+
if (this.scale === 0)
|
|
205
|
+
return new MiniNumber(this);
|
|
206
|
+
const divisor = 10n ** BigInt(this.scale);
|
|
207
|
+
const q = this.unscaled / divisor;
|
|
208
|
+
const rem = this.unscaled % divisor;
|
|
209
|
+
if (this.unscaled > 0n && rem !== 0n) {
|
|
210
|
+
return new MiniNumber((q + 1n).toString());
|
|
211
|
+
}
|
|
212
|
+
return new MiniNumber(q.toString());
|
|
213
|
+
}
|
|
214
|
+
abs() {
|
|
215
|
+
if (this.unscaled >= 0n)
|
|
216
|
+
return new MiniNumber(this);
|
|
217
|
+
return new MiniNumber((-this.unscaled).toString() + 'e' + (-this.scale));
|
|
218
|
+
}
|
|
219
|
+
negate() {
|
|
220
|
+
return new MiniNumber((-this.unscaled).toString() + 'e' + (-this.scale));
|
|
221
|
+
}
|
|
222
|
+
increment() {
|
|
223
|
+
return this.add(MiniNumber.ONE);
|
|
224
|
+
}
|
|
225
|
+
decrement() {
|
|
226
|
+
return this.sub(MiniNumber.ONE);
|
|
227
|
+
}
|
|
228
|
+
compareTo(other) {
|
|
229
|
+
const { a, b } = this.assertSameScale(other);
|
|
230
|
+
if (a < b)
|
|
231
|
+
return -1;
|
|
232
|
+
if (a > b)
|
|
233
|
+
return 1;
|
|
234
|
+
return 0;
|
|
235
|
+
}
|
|
236
|
+
isEqual(other) { return this.compareTo(other) === 0; }
|
|
237
|
+
isLess(other) { return this.compareTo(other) < 0; }
|
|
238
|
+
isLessEqual(other) { return this.compareTo(other) <= 0; }
|
|
239
|
+
isMore(other) { return this.compareTo(other) > 0; }
|
|
240
|
+
isMoreEqual(other) { return this.compareTo(other) >= 0; }
|
|
241
|
+
setSignificantDigits(d) {
|
|
242
|
+
if (d > MAX_DIGITS)
|
|
243
|
+
throw new Error(`Cannot specify this many significant digits ${d}`);
|
|
244
|
+
if (d < 0)
|
|
245
|
+
throw new Error(`Cannot specify negative significant digits ${d}`);
|
|
246
|
+
const currentDigits = digits(this.unscaled);
|
|
247
|
+
if (currentDigits <= d)
|
|
248
|
+
return new MiniNumber(this);
|
|
249
|
+
const drop = currentDigits - d;
|
|
250
|
+
const divisor = 10n ** BigInt(drop);
|
|
251
|
+
const newUnscaled = this.unscaled / divisor;
|
|
252
|
+
return new MiniNumber(newUnscaled.toString() + 'e' + (-(this.scale - drop)));
|
|
253
|
+
}
|
|
254
|
+
decimalPlaces() {
|
|
255
|
+
return this.scale;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
exports.MiniNumber = MiniNumber;
|
|
259
|
+
MiniNumber.ZERO = new MiniNumber(0);
|
|
260
|
+
MiniNumber.ONE = new MiniNumber(1);
|
|
261
|
+
MiniNumber.TWO = new MiniNumber(2);
|
|
262
|
+
MiniNumber.THREE = new MiniNumber(3);
|
|
263
|
+
MiniNumber.FOUR = new MiniNumber(4);
|
|
264
|
+
MiniNumber.EIGHT = new MiniNumber(8);
|
|
265
|
+
MiniNumber.TWELVE = new MiniNumber(12);
|
|
266
|
+
MiniNumber.SIXTEEN = new MiniNumber(16);
|
|
267
|
+
MiniNumber.TWENTY = new MiniNumber(20);
|
|
268
|
+
MiniNumber.THIRTYTWO = new MiniNumber(32);
|
|
269
|
+
MiniNumber.FIFTY = new MiniNumber(50);
|
|
270
|
+
MiniNumber.SIXTYFOUR = new MiniNumber(64);
|
|
271
|
+
MiniNumber.TWOFIVESIX = new MiniNumber(256);
|
|
272
|
+
MiniNumber.FIVEONE12 = new MiniNumber(512);
|
|
273
|
+
MiniNumber.THOUSAND24 = new MiniNumber(1024);
|
|
274
|
+
MiniNumber.MINUSONE = new MiniNumber(-1);
|
|
275
|
+
function parseDecimal(s) {
|
|
276
|
+
s = s.trim();
|
|
277
|
+
const ePos = s.toLowerCase().indexOf('e');
|
|
278
|
+
if (ePos !== -1) {
|
|
279
|
+
const mantissa = s.slice(0, ePos);
|
|
280
|
+
const exponent = parseInt(s.slice(ePos + 1), 10);
|
|
281
|
+
const { unscaled, scale } = parseDecimal(mantissa);
|
|
282
|
+
const newScale = scale - exponent;
|
|
283
|
+
if (newScale < 0) {
|
|
284
|
+
const factor = 10n ** BigInt(-newScale);
|
|
285
|
+
return { unscaled: unscaled * factor, scale: 0 };
|
|
286
|
+
}
|
|
287
|
+
return { unscaled, scale: newScale };
|
|
288
|
+
}
|
|
289
|
+
const neg = s.startsWith('-');
|
|
290
|
+
const abs = neg ? s.slice(1) : s;
|
|
291
|
+
const dot = abs.indexOf('.');
|
|
292
|
+
if (dot === -1) {
|
|
293
|
+
return { unscaled: BigInt(neg ? '-' + abs : abs), scale: 0 };
|
|
294
|
+
}
|
|
295
|
+
const intPart = abs.slice(0, dot) || '0';
|
|
296
|
+
const fracPart = abs.slice(dot + 1);
|
|
297
|
+
const full = intPart + fracPart;
|
|
298
|
+
const scale = fracPart.length;
|
|
299
|
+
return { unscaled: BigInt(neg ? '-' + full : full), scale };
|
|
300
|
+
}
|
package/dist/bip39.js
CHANGED
|
@@ -402,14 +402,23 @@ function phraseToSeed(rawPhrase) {
|
|
|
402
402
|
* @returns Array of 24 random BIP39 words (lowercase)
|
|
403
403
|
*/
|
|
404
404
|
function generateWordList() {
|
|
405
|
-
|
|
405
|
+
const randomValues = new Uint32Array(24);
|
|
406
|
+
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
407
|
+
crypto.getRandomValues(randomValues);
|
|
408
|
+
}
|
|
409
|
+
else if (typeof process !== 'undefined' && process.versions?.node) {
|
|
410
|
+
const nodeCrypto = Function('return require')()('crypto');
|
|
411
|
+
const bytes = nodeCrypto.randomBytes(96);
|
|
412
|
+
for (let i = 0; i < 24; i++) {
|
|
413
|
+
randomValues[i] = bytes.readUInt32BE(i * 4);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
else {
|
|
406
417
|
throw new Error('generateWordList: no cryptographically secure random source available. ' +
|
|
407
418
|
'Seed generation requires crypto.getRandomValues (browser/Node 19+) or node:crypto.randomBytes (Node). ' +
|
|
408
419
|
'Math.random() is not acceptable for key material.');
|
|
409
420
|
}
|
|
410
421
|
const words = [];
|
|
411
|
-
const randomValues = new Uint32Array(24);
|
|
412
|
-
crypto.getRandomValues(randomValues);
|
|
413
422
|
for (let i = 0; i < 24; i++) {
|
|
414
423
|
const index = randomValues[i] % exports.WORD_LIST.length;
|
|
415
424
|
words.push(exports.WORD_LIST[index]);
|
package/dist/index.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ export * from './mmr.js';
|
|
|
26
26
|
export * from './scripts/index.js';
|
|
27
27
|
export { scriptToAddress, addressToRoot } from './derive.js';
|
|
28
28
|
export { WORD_LIST, convertStringToSeed, convertWordListToSeed, generateSeedPhrase, } from './bip39.js';
|
|
29
|
+
export { MiniNumber } from './MiniNumber.js';
|
|
29
30
|
export { type MinimaTransaction, type MinimaCoin, type ParsedMiniNumber, type MinimaToken, type StateVariable, type RawStateVariable, type CoinProofData, type SpendableCoinInput, type TransactionBuildResult, parseDecimalToMiniNumber, serializeCoin, createDefaultTransaction, buildMinimaCoin, } from './transaction.js';
|
|
30
31
|
export { verifySignature, verifySignatureDetailed, verifyTreeSignatureDetailed, deriveAddressFromPublicKey, normalizeHex, type VerificationResult, } from './verify.js';
|
|
31
32
|
export { writeMiniByte, writeMMREntryNumber, concat, bigIntToByteArray, type Bytes, } from './Streamable.js';
|
package/dist/index.js
CHANGED
|
@@ -22,7 +22,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
22
22
|
};
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
24
|
exports.validateChallenge = exports.createChallenge = exports.timingSafeEqual = exports.computeTransactionDigest = exports.serializeTransaction = exports.wotsAddressFromKeypair = exports.parseMxAddress = exports.makeMxAddress = exports.cleanSeedPhrase = exports.validatePhrase = exports.generateWordList = exports.phraseToSeed = exports.verifyMMRProof = exports.mmrRootFromPublicKeys = exports.verifyTreeSignature = exports.deriveUnifiedAddressPublicKey = exports.createUnifiedRootTreeKey = exports.createUnifiedChildTreeKey = exports.precomputeTransactionCoinID = exports.writeMiniString = exports.writeMiniData = exports.writeMiniNumber = exports.deriveRootPrivSeed = exports.derivePerAddressSeed = exports.deriveChainSeedJava = exports.wotsKeypairFromSeed = exports.wotsPublicKeyFromSeed = exports.wotsPkFromSig = exports.wotsVerifyDigest = exports.wotsVerify = exports.wotsSign = exports.deriveFullPublicKey = exports.derivePKdigest = exports.hashChain = exports.expandPrivateKey = exports.sha3_256 = exports.concatBytes = exports.hexToBytes = exports.bytesToHex = exports.TransactionReceiptStore = exports.WatermarkExhaustedError = exports.TransactionLifecycleError = exports.TransactionLifecycle = exports.TransactionService = exports.flatIndexFromLanes = exports.finalizeLease = exports.prepareLease = exports.LeaseMonitor = exports.WatermarkStore = exports.LeaseStore = void 0;
|
|
25
|
-
exports.MINIMA_CONSTANTS = exports.createPerAddressTreeKeyAsync = exports.createPerAddressTreeKey = exports.createUnifiedChildTreeKeyAsync = exports.DEFAULT_LEVELS = exports.DEFAULT_KEYS_PER_LEVEL = exports.getRootPublicKey = exports.deserializeTreeSignature = exports.serializeTreeSignature = exports.TreeKeyNode = exports.TreeKey = exports.serializeMMREntry = exports.serializeMMRData = exports.serializeMMREntryNumber = exports.createMMREntryNumber = exports.deriveUnifiedChildSeed = exports.indexToMiniDataBytes = exports.javaHashAllObjects = exports.writeHashToStream = exports.serializeMiniNumberONE = exports.serializeMiniNumberZERO = exports.hashObject = exports.deriveChildTreeSeedJava = exports.hashAllObjects = exports.serializeMiniData = exports.serializeMiniNumber = exports.bigIntToByteArray = exports.concat = exports.writeMMREntryNumber = exports.writeMiniByte = exports.normalizeHex = exports.deriveAddressFromPublicKey = exports.verifyTreeSignatureDetailed = exports.verifySignatureDetailed = exports.verifySignature = exports.buildMinimaCoin = exports.createDefaultTransaction = exports.serializeCoin = exports.parseDecimalToMiniNumber = exports.generateSeedPhrase = exports.convertWordListToSeed = exports.convertStringToSeed = exports.WORD_LIST = exports.addressToRoot = exports.scriptToAddress = exports.decodeMx = exports.encodeMx = exports.scriptFromWotsPk = void 0;
|
|
25
|
+
exports.MINIMA_CONSTANTS = exports.createPerAddressTreeKeyAsync = exports.createPerAddressTreeKey = exports.createUnifiedChildTreeKeyAsync = exports.DEFAULT_LEVELS = exports.DEFAULT_KEYS_PER_LEVEL = exports.getRootPublicKey = exports.deserializeTreeSignature = exports.serializeTreeSignature = exports.TreeKeyNode = exports.TreeKey = exports.serializeMMREntry = exports.serializeMMRData = exports.serializeMMREntryNumber = exports.createMMREntryNumber = exports.deriveUnifiedChildSeed = exports.indexToMiniDataBytes = exports.javaHashAllObjects = exports.writeHashToStream = exports.serializeMiniNumberONE = exports.serializeMiniNumberZERO = exports.hashObject = exports.deriveChildTreeSeedJava = exports.hashAllObjects = exports.serializeMiniData = exports.serializeMiniNumber = exports.bigIntToByteArray = exports.concat = exports.writeMMREntryNumber = exports.writeMiniByte = exports.normalizeHex = exports.deriveAddressFromPublicKey = exports.verifyTreeSignatureDetailed = exports.verifySignatureDetailed = exports.verifySignature = exports.buildMinimaCoin = exports.createDefaultTransaction = exports.serializeCoin = exports.parseDecimalToMiniNumber = exports.MiniNumber = exports.generateSeedPhrase = exports.convertWordListToSeed = exports.convertStringToSeed = exports.WORD_LIST = exports.addressToRoot = exports.scriptToAddress = exports.decodeMx = exports.encodeMx = exports.scriptFromWotsPk = void 0;
|
|
26
26
|
// Version information for bundle duplication detection
|
|
27
27
|
__exportStar(require("./version.js"), exports);
|
|
28
28
|
// Platform-agnostic Adapters (SDK Upgrade)
|
|
@@ -128,6 +128,9 @@ Object.defineProperty(exports, "WORD_LIST", { enumerable: true, get: function ()
|
|
|
128
128
|
Object.defineProperty(exports, "convertStringToSeed", { enumerable: true, get: function () { return bip39_js_1.convertStringToSeed; } });
|
|
129
129
|
Object.defineProperty(exports, "convertWordListToSeed", { enumerable: true, get: function () { return bip39_js_1.convertWordListToSeed; } });
|
|
130
130
|
Object.defineProperty(exports, "generateSeedPhrase", { enumerable: true, get: function () { return bip39_js_1.generateSeedPhrase; } });
|
|
131
|
+
// MiniNumber class (matches Java MiniNumber/BigDecimal semantics)
|
|
132
|
+
var MiniNumber_js_1 = require("./MiniNumber.js");
|
|
133
|
+
Object.defineProperty(exports, "MiniNumber", { enumerable: true, get: function () { return MiniNumber_js_1.MiniNumber; } });
|
|
131
134
|
// Transaction types (from JS)
|
|
132
135
|
var transaction_js_1 = require("./transaction.js");
|
|
133
136
|
Object.defineProperty(exports, "parseDecimalToMiniNumber", { enumerable: true, get: function () { return transaction_js_1.parseDecimalToMiniNumber; } });
|
package/dist/wots.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This implementation matches BouncyCastle's WinternitzOTSignature exactly,
|
|
5
5
|
* which is used by Minima's Winternitz.java class.
|
|
6
6
|
*
|
|
7
|
-
* Key differences from standard WOTS
|
|
7
|
+
* Key differences from standard WOTS (Winternitz):
|
|
8
8
|
* - w=8 means 8 BITS per digit (not base-8), so each byte is one digit (0-255)
|
|
9
9
|
* - Stateful PRNG (GMSSRandom) for chain seed derivation, not stateless H(i||seed)
|
|
10
10
|
* - 34 total chains (32 message + 2 checksum), not 89
|
package/dist/wots.js
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* This implementation matches BouncyCastle's WinternitzOTSignature exactly,
|
|
6
6
|
* which is used by Minima's Winternitz.java class.
|
|
7
7
|
*
|
|
8
|
-
* Key differences from standard WOTS
|
|
8
|
+
* Key differences from standard WOTS (Winternitz):
|
|
9
9
|
* - w=8 means 8 BITS per digit (not base-8), so each byte is one digit (0-255)
|
|
10
10
|
* - Stateful PRNG (GMSSRandom) for chain seed derivation, not stateless H(i||seed)
|
|
11
11
|
* - 34 total chains (32 message + 2 checksum), not 89
|