@leofcoin/peernet 1.1.55 → 1.1.57
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/exports/browser/browser-store.js +4 -3
- package/exports/browser/identity.d.ts +7 -4
- package/exports/browser/{index-ba1b3977.js → index-329e0324.js} +1 -1
- package/exports/browser/messages/chat.d.ts +1 -1
- package/exports/browser/messages/data-response.d.ts +1 -1
- package/exports/browser/messages/dht-response.d.ts +1 -1
- package/exports/browser/messages/dht.d.ts +1 -1
- package/exports/browser/messages/peer-response.d.ts +1 -1
- package/exports/browser/messages/peer.d.ts +1 -1
- package/exports/browser/messages/peernet.d.ts +1 -1
- package/exports/browser/messages/ps.d.ts +1 -1
- package/exports/browser/messages/request.d.ts +1 -1
- package/exports/browser/messages/response.d.ts +1 -1
- package/exports/browser/{messages-dd1ad11c.js → messages-000b7f84.js} +1 -1
- package/exports/browser/{peernet-d5023a29.js → peernet-bfbe6fff.js} +943 -884
- package/exports/browser/peernet.d.ts +32 -14
- package/exports/browser/peernet.js +1 -1
- package/exports/peernet.js +26 -12
- package/exports/store.js +11 -9
- package/exports/types/identity.d.ts +7 -4
- package/exports/types/messages/chat.d.ts +1 -1
- package/exports/types/messages/data-response.d.ts +1 -1
- package/exports/types/messages/dht-response.d.ts +1 -1
- package/exports/types/messages/dht.d.ts +1 -1
- package/exports/types/messages/peer-response.d.ts +1 -1
- package/exports/types/messages/peer.d.ts +1 -1
- package/exports/types/messages/peernet.d.ts +1 -1
- package/exports/types/messages/ps.d.ts +1 -1
- package/exports/types/messages/request.d.ts +1 -1
- package/exports/types/messages/response.d.ts +1 -1
- package/exports/types/peernet.d.ts +32 -14
- package/package.json +4 -3
- package/src/identity.ts +21 -10
- package/src/peernet.ts +26 -3
- package/tsconfig.json +1 -1
|
@@ -209,16 +209,16 @@ const ALPHABET$3 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
|
|
|
209
209
|
const ALPHABET_HEX$1 = '0123456789ABCDEFGHIJKLMNOPQRSTUV';
|
|
210
210
|
const base32 = base$1(ALPHABET$3);
|
|
211
211
|
const base32Hex = base$1(ALPHABET_HEX$1);
|
|
212
|
-
const decode$
|
|
212
|
+
const decode$9 = base32.decode;
|
|
213
213
|
const decodeHex$2 = base32Hex.decode;
|
|
214
|
-
const encode$
|
|
214
|
+
const encode$8 = base32.encode;
|
|
215
215
|
const encodeHex$2 = base32Hex.encode;
|
|
216
216
|
const isBase32 = (string, hex = false) => {
|
|
217
217
|
try {
|
|
218
218
|
if (hex)
|
|
219
219
|
decodeHex$2(string);
|
|
220
220
|
else
|
|
221
|
-
decode$
|
|
221
|
+
decode$9(string);
|
|
222
222
|
return true;
|
|
223
223
|
}
|
|
224
224
|
catch (e) {
|
|
@@ -228,9 +228,9 @@ const isBase32 = (string, hex = false) => {
|
|
|
228
228
|
const isBase32Hex = (string) => {
|
|
229
229
|
return isBase32(string, true);
|
|
230
230
|
};
|
|
231
|
-
var index$
|
|
232
|
-
encode: encode$
|
|
233
|
-
decode: decode$
|
|
231
|
+
var index$9 = {
|
|
232
|
+
encode: encode$8,
|
|
233
|
+
decode: decode$9,
|
|
234
234
|
encodeHex: encodeHex$2,
|
|
235
235
|
decodeHex: decodeHex$2,
|
|
236
236
|
isBase32,
|
|
@@ -241,13 +241,13 @@ var ALPHABET$2 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
|
241
241
|
var ALPHABET_HEX = '0123456789ABCDEFGHJKLMNPQRSTUVabcdefghijklmnopqrstuv';
|
|
242
242
|
var base58 = base$1(ALPHABET$2);
|
|
243
243
|
var base58Hex = base$1(ALPHABET_HEX);
|
|
244
|
-
var encode$
|
|
245
|
-
var decode$
|
|
244
|
+
var encode$7 = base58.encode;
|
|
245
|
+
var decode$8 = base58.decode;
|
|
246
246
|
var encodeHex$1 = base58Hex.encode;
|
|
247
247
|
var decodeHex$1 = base58Hex.decode;
|
|
248
248
|
var isBase58 = function (string) {
|
|
249
249
|
try {
|
|
250
|
-
decode$
|
|
250
|
+
decode$8(string);
|
|
251
251
|
return true;
|
|
252
252
|
}
|
|
253
253
|
catch (e) {
|
|
@@ -265,7 +265,7 @@ var isBase58Hex = function (string) {
|
|
|
265
265
|
};
|
|
266
266
|
var whatType = function (string) {
|
|
267
267
|
try {
|
|
268
|
-
decode$
|
|
268
|
+
decode$8(string);
|
|
269
269
|
return 'base58';
|
|
270
270
|
}
|
|
271
271
|
catch (e) {
|
|
@@ -278,36 +278,42 @@ var whatType = function (string) {
|
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
280
|
};
|
|
281
|
-
var base58$1 = { encode: encode$
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
281
|
+
var base58$1 = { encode: encode$7, decode: decode$8, isBase58: isBase58, isBase58Hex: isBase58Hex, encodeHex: encodeHex$1, decodeHex: decodeHex$1, whatType: whatType };
|
|
282
|
+
|
|
283
|
+
var isHex = string => /^[A-F0-9]+$/i.test(
|
|
284
|
+
string.startsWith('0x') ?
|
|
285
|
+
string.slice(2) :
|
|
286
|
+
string
|
|
287
|
+
);
|
|
288
|
+
|
|
289
|
+
const MSB$3 = 0x80;
|
|
290
|
+
const REST$3 = 0x7F;
|
|
291
|
+
const MSBALL$1 = ~REST$3;
|
|
292
|
+
const INT$1 = Math.pow(2, 31);
|
|
293
|
+
const encode$6 = (num, out, offset) => {
|
|
288
294
|
if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {
|
|
289
|
-
encode$
|
|
295
|
+
encode$6.bytes = 0;
|
|
290
296
|
throw new RangeError('Could not encode varint');
|
|
291
297
|
}
|
|
292
298
|
out = out || [];
|
|
293
299
|
offset = offset || 0;
|
|
294
300
|
const oldOffset = offset;
|
|
295
|
-
while (num >= INT) {
|
|
296
|
-
out[offset++] = (num & 0xFF) | MSB$
|
|
301
|
+
while (num >= INT$1) {
|
|
302
|
+
out[offset++] = (num & 0xFF) | MSB$3;
|
|
297
303
|
num /= 128;
|
|
298
304
|
}
|
|
299
|
-
while (num & MSBALL) {
|
|
300
|
-
out[offset++] = (num & 0xFF) | MSB$
|
|
305
|
+
while (num & MSBALL$1) {
|
|
306
|
+
out[offset++] = (num & 0xFF) | MSB$3;
|
|
301
307
|
num >>>= 7;
|
|
302
308
|
}
|
|
303
309
|
out[offset] = num | 0;
|
|
304
|
-
encode$
|
|
310
|
+
encode$6.bytes = offset - oldOffset + 1;
|
|
305
311
|
return out;
|
|
306
312
|
};
|
|
307
313
|
|
|
308
|
-
const MSB = 0x80;
|
|
309
|
-
const REST = 0x7F;
|
|
310
|
-
const decode$
|
|
314
|
+
const MSB$2 = 0x80;
|
|
315
|
+
const REST$2 = 0x7F;
|
|
316
|
+
const decode$7 = (buf, offset) => {
|
|
311
317
|
offset = offset || 0;
|
|
312
318
|
const l = buf.length;
|
|
313
319
|
let counter = offset;
|
|
@@ -316,49 +322,49 @@ const decode$6 = (buf, offset) => {
|
|
|
316
322
|
let b;
|
|
317
323
|
do {
|
|
318
324
|
if (counter >= l || shift > 49) {
|
|
319
|
-
decode$
|
|
325
|
+
decode$7.bytes = 0;
|
|
320
326
|
throw new RangeError('Could not decode varint');
|
|
321
327
|
}
|
|
322
328
|
b = buf[counter++];
|
|
323
329
|
result += shift < 28
|
|
324
|
-
? (b & REST) << shift
|
|
325
|
-
: (b & REST) * Math.pow(2, shift);
|
|
330
|
+
? (b & REST$2) << shift
|
|
331
|
+
: (b & REST$2) * Math.pow(2, shift);
|
|
326
332
|
shift += 7;
|
|
327
|
-
} while (b >= MSB);
|
|
328
|
-
decode$
|
|
333
|
+
} while (b >= MSB$2);
|
|
334
|
+
decode$7.bytes = counter - offset;
|
|
329
335
|
return result;
|
|
330
336
|
};
|
|
331
337
|
|
|
332
|
-
const N1 = Math.pow(2, 7);
|
|
333
|
-
const N2 = Math.pow(2, 14);
|
|
334
|
-
const N3 = Math.pow(2, 21);
|
|
335
|
-
const N4 = Math.pow(2, 28);
|
|
336
|
-
const N5 = Math.pow(2, 35);
|
|
337
|
-
const N6 = Math.pow(2, 42);
|
|
338
|
-
const N7 = Math.pow(2, 49);
|
|
339
|
-
const N8 = Math.pow(2, 56);
|
|
340
|
-
const N9 = Math.pow(2, 63);
|
|
341
|
-
var encodingLength = (value) => (value < N1 ? 1
|
|
342
|
-
: value < N2 ? 2
|
|
343
|
-
: value < N3 ? 3
|
|
344
|
-
: value < N4 ? 4
|
|
345
|
-
: value < N5 ? 5
|
|
346
|
-
: value < N6 ? 6
|
|
347
|
-
: value < N7 ? 7
|
|
348
|
-
: value < N8 ? 8
|
|
349
|
-
: value < N9 ? 9
|
|
338
|
+
const N1$1 = Math.pow(2, 7);
|
|
339
|
+
const N2$1 = Math.pow(2, 14);
|
|
340
|
+
const N3$1 = Math.pow(2, 21);
|
|
341
|
+
const N4$1 = Math.pow(2, 28);
|
|
342
|
+
const N5$1 = Math.pow(2, 35);
|
|
343
|
+
const N6$1 = Math.pow(2, 42);
|
|
344
|
+
const N7$1 = Math.pow(2, 49);
|
|
345
|
+
const N8$1 = Math.pow(2, 56);
|
|
346
|
+
const N9$1 = Math.pow(2, 63);
|
|
347
|
+
var encodingLength$1 = (value) => (value < N1$1 ? 1
|
|
348
|
+
: value < N2$1 ? 2
|
|
349
|
+
: value < N3$1 ? 3
|
|
350
|
+
: value < N4$1 ? 4
|
|
351
|
+
: value < N5$1 ? 5
|
|
352
|
+
: value < N6$1 ? 6
|
|
353
|
+
: value < N7$1 ? 7
|
|
354
|
+
: value < N8$1 ? 8
|
|
355
|
+
: value < N9$1 ? 9
|
|
350
356
|
: 10);
|
|
351
357
|
|
|
352
|
-
var index$
|
|
353
|
-
encode: encode$
|
|
354
|
-
decode: decode$
|
|
355
|
-
encodingLength
|
|
358
|
+
var index$8 = {
|
|
359
|
+
encode: encode$6,
|
|
360
|
+
decode: decode$7,
|
|
361
|
+
encodingLength: encodingLength$1
|
|
356
362
|
};
|
|
357
363
|
|
|
358
|
-
var index$
|
|
364
|
+
var index$7 = (input, prefix) => {
|
|
359
365
|
const encodedArray = [];
|
|
360
366
|
const length = input.reduce((total, current) => {
|
|
361
|
-
const encoded = index$
|
|
367
|
+
const encoded = index$8.encode(current.length);
|
|
362
368
|
encodedArray.push(encoded);
|
|
363
369
|
total += current.length + encoded.length;
|
|
364
370
|
return total;
|
|
@@ -380,14 +386,14 @@ var index$6 = (input, prefix) => {
|
|
|
380
386
|
return typedArray;
|
|
381
387
|
};
|
|
382
388
|
|
|
383
|
-
var index$
|
|
389
|
+
var index$6 = (typedArray, prefix) => {
|
|
384
390
|
const set = [];
|
|
385
391
|
if (prefix)
|
|
386
392
|
typedArray = typedArray.subarray(prefix.length);
|
|
387
393
|
const varintAndSub = (typedArray) => {
|
|
388
|
-
const length = index$
|
|
394
|
+
const length = index$8.decode(typedArray);
|
|
389
395
|
// remove length
|
|
390
|
-
typedArray = typedArray.subarray(index$
|
|
396
|
+
typedArray = typedArray.subarray(index$8.decode.bytes);
|
|
391
397
|
// push value
|
|
392
398
|
set.push(typedArray.subarray(0, length));
|
|
393
399
|
// remove value
|
|
@@ -401,39 +407,39 @@ var index$5 = (typedArray, prefix) => {
|
|
|
401
407
|
|
|
402
408
|
const ALPHABET$1 = '0123456789ABCDEF';
|
|
403
409
|
const base16 = base$1(ALPHABET$1);
|
|
404
|
-
const decode$
|
|
405
|
-
const encode$
|
|
410
|
+
const decode$6 = base16.decode;
|
|
411
|
+
const encode$5 = base16.encode;
|
|
406
412
|
const isBase16 = (string) => {
|
|
407
413
|
try {
|
|
408
|
-
decode$
|
|
414
|
+
decode$6(string);
|
|
409
415
|
return true;
|
|
410
416
|
}
|
|
411
417
|
catch (e) {
|
|
412
418
|
return false;
|
|
413
419
|
}
|
|
414
420
|
};
|
|
415
|
-
var index$
|
|
416
|
-
encode: encode$
|
|
417
|
-
decode: decode$
|
|
421
|
+
var index$5 = {
|
|
422
|
+
encode: encode$5,
|
|
423
|
+
decode: decode$6,
|
|
418
424
|
isBase16
|
|
419
425
|
};
|
|
420
426
|
|
|
421
427
|
const ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
|
|
422
428
|
const base64 = base$1(ALPHABET);
|
|
423
|
-
const decode$
|
|
424
|
-
const encode$
|
|
429
|
+
const decode$5 = base64.decode;
|
|
430
|
+
const encode$4 = base64.encode;
|
|
425
431
|
const isBase64 = (string) => {
|
|
426
432
|
try {
|
|
427
|
-
decode$
|
|
433
|
+
decode$5(string);
|
|
428
434
|
return true;
|
|
429
435
|
}
|
|
430
436
|
catch (e) {
|
|
431
437
|
return false;
|
|
432
438
|
}
|
|
433
439
|
};
|
|
434
|
-
var index$
|
|
435
|
-
encode: encode$
|
|
436
|
-
decode: decode$
|
|
440
|
+
var index$4 = {
|
|
441
|
+
encode: encode$4,
|
|
442
|
+
decode: decode$5,
|
|
437
443
|
isBase64
|
|
438
444
|
};
|
|
439
445
|
|
|
@@ -519,26 +525,26 @@ const fromObject = (object) => new TextEncoder().encode(JSON.stringify(object));
|
|
|
519
525
|
const toObject = (uint8Array) => JSON.parse(new TextDecoder().decode(uint8Array));
|
|
520
526
|
const fromBinary = (string) => fromHex(parseInt(string, 2).toString(16).toUpperCase());
|
|
521
527
|
const toBinary = (uint8Array) => hexToBinary(toHex$2(uint8Array));
|
|
522
|
-
const toBase64 = (uint8Array) => index$
|
|
523
|
-
const fromBase64 = (string) => index$
|
|
528
|
+
const toBase64 = (uint8Array) => index$4.encode(uint8Array);
|
|
529
|
+
const fromBase64 = (string) => index$4.decode(string);
|
|
524
530
|
const toBase58 = (uint8Array) => base58$1.encode(uint8Array);
|
|
525
531
|
const fromBase58 = (string) => base58$1.decode(string);
|
|
526
|
-
const toBase32 = (uint8Array) => index$
|
|
527
|
-
const fromBase32 = (string) => index$
|
|
528
|
-
const toBase16 = (uint8Array) => index$
|
|
529
|
-
const fromBase16 = (string) => index$
|
|
532
|
+
const toBase32 = (uint8Array) => index$9.encode(uint8Array);
|
|
533
|
+
const fromBase32 = (string) => index$9.decode(string);
|
|
534
|
+
const toBase16 = (uint8Array) => index$5.encode(uint8Array);
|
|
535
|
+
const fromBase16 = (string) => index$5.decode(string);
|
|
530
536
|
let FormatInterface$2 = class FormatInterface {
|
|
531
537
|
encoded;
|
|
532
538
|
decoded;
|
|
533
539
|
constructor(input) {
|
|
534
540
|
if (input) {
|
|
535
|
-
if (index$
|
|
541
|
+
if (index$5.isBase16(input))
|
|
536
542
|
this.encoded = this.fromBase16(input);
|
|
537
|
-
else if (index$
|
|
543
|
+
else if (index$9.isBase32(input))
|
|
538
544
|
this.encoded = this.fromBase32(input);
|
|
539
545
|
else if (base58$1.isBase58(input))
|
|
540
546
|
this.encoded = this.fromBase58(input);
|
|
541
|
-
else if (index$
|
|
547
|
+
else if (index$4.isBase64(input))
|
|
542
548
|
this.encoded = this.fromBase64(input);
|
|
543
549
|
else if (typeof input === 'string') {
|
|
544
550
|
let isCompatible = isTypedArrayCompatible(input);
|
|
@@ -607,16 +613,16 @@ let FormatInterface$2 = class FormatInterface {
|
|
|
607
613
|
toBinary = (uint8Array) => this.decoded = hexToBinary(toHex$2(uint8Array));
|
|
608
614
|
fromBinary = (binary) => this.encoded = fromBinary(binary);
|
|
609
615
|
toObject = (uint8Array) => this.decoded = toObject(uint8Array);
|
|
610
|
-
toBase64 = (uint8Array) => this.decoded = index$
|
|
611
|
-
fromBase64 = (string) => this.encoded = index$
|
|
616
|
+
toBase64 = (uint8Array) => this.decoded = index$4.encode(uint8Array);
|
|
617
|
+
fromBase64 = (string) => this.encoded = index$4.decode(string);
|
|
612
618
|
toBase58 = (uint8Array) => this.decoded = base58$1.encode(uint8Array);
|
|
613
619
|
fromBase58 = (string) => this.encoded = base58$1.decode(string);
|
|
614
|
-
toBase32 = (uint8Array) => this.decoded = index$
|
|
615
|
-
fromBase32 = (string) => this.encoded = index$
|
|
616
|
-
toBase16 = (uint8Array) => this.decoded = index$
|
|
617
|
-
fromBase16 = (string) => this.decoded = index$
|
|
620
|
+
toBase32 = (uint8Array) => this.decoded = index$9.encode(uint8Array);
|
|
621
|
+
fromBase32 = (string) => this.encoded = index$9.decode(string);
|
|
622
|
+
toBase16 = (uint8Array) => this.decoded = index$5.encode(uint8Array);
|
|
623
|
+
fromBase16 = (string) => this.decoded = index$5.decode(string);
|
|
618
624
|
};
|
|
619
|
-
var index$
|
|
625
|
+
var index$3 = {
|
|
620
626
|
fromString: fromString$1,
|
|
621
627
|
toString: toString$1,
|
|
622
628
|
fromHex,
|
|
@@ -4768,7 +4774,7 @@ function throwFault(fault, operation, value) {
|
|
|
4768
4774
|
return logger.throwError(fault, Logger.errors.NUMERIC_FAULT, params);
|
|
4769
4775
|
}
|
|
4770
4776
|
|
|
4771
|
-
const { fromString, toString } = index$
|
|
4777
|
+
const { fromString, toString } = index$3;
|
|
4772
4778
|
const isJson = (type) => type === 'object' || 'array';
|
|
4773
4779
|
const isString = (type) => type === 'string';
|
|
4774
4780
|
const isNumber = (type) => type === 'number';
|
|
@@ -4809,7 +4815,7 @@ const toType = (data) => {
|
|
|
4809
4815
|
return new TextEncoder().encode(data.toString());
|
|
4810
4816
|
throw new Error(`unsuported type ${typeof data || data}`);
|
|
4811
4817
|
};
|
|
4812
|
-
const encode$
|
|
4818
|
+
const encode$3 = (proto, input, compress) => {
|
|
4813
4819
|
const keys = Object.keys(proto);
|
|
4814
4820
|
const values = Object.values(proto);
|
|
4815
4821
|
const set = [];
|
|
@@ -4824,10 +4830,10 @@ const encode$2 = (proto, input, compress) => {
|
|
|
4824
4830
|
// when data is undefined push the default value of the proto
|
|
4825
4831
|
set.push(toType(data || values[i]));
|
|
4826
4832
|
}
|
|
4827
|
-
return index$
|
|
4833
|
+
return index$7(set);
|
|
4828
4834
|
};
|
|
4829
|
-
const decode$
|
|
4830
|
-
let deconcated = index$
|
|
4835
|
+
const decode$4 = (proto, uint8Array, compressed) => {
|
|
4836
|
+
let deconcated = index$6(uint8Array);
|
|
4831
4837
|
const output = {};
|
|
4832
4838
|
const keys = Object.keys(proto);
|
|
4833
4839
|
const values = Object.values(proto);
|
|
@@ -4856,18 +4862,112 @@ const decode$3 = (proto, uint8Array, compressed) => {
|
|
|
4856
4862
|
}
|
|
4857
4863
|
return output;
|
|
4858
4864
|
};
|
|
4859
|
-
var index$
|
|
4860
|
-
encode: encode$
|
|
4861
|
-
decode: decode$
|
|
4865
|
+
var index$2 = {
|
|
4866
|
+
encode: encode$3,
|
|
4867
|
+
decode: decode$4
|
|
4862
4868
|
};
|
|
4863
4869
|
|
|
4870
|
+
class BasicInterface {
|
|
4871
|
+
encoded;
|
|
4872
|
+
decoded;
|
|
4873
|
+
keys;
|
|
4874
|
+
name;
|
|
4875
|
+
#proto;
|
|
4876
|
+
set proto(value) {
|
|
4877
|
+
this.#proto = value;
|
|
4878
|
+
this.keys = Object.keys(value);
|
|
4879
|
+
}
|
|
4880
|
+
get proto() {
|
|
4881
|
+
return this.#proto;
|
|
4882
|
+
}
|
|
4883
|
+
decode(encoded) {
|
|
4884
|
+
encoded = encoded || this.encoded;
|
|
4885
|
+
return new Object();
|
|
4886
|
+
}
|
|
4887
|
+
encode(decoded) {
|
|
4888
|
+
decoded = decoded || this.decoded;
|
|
4889
|
+
return new Uint8Array();
|
|
4890
|
+
}
|
|
4891
|
+
// get Codec(): Codec {}
|
|
4892
|
+
protoEncode(data) {
|
|
4893
|
+
// check schema
|
|
4894
|
+
return index$2.encode(this.proto, data, false);
|
|
4895
|
+
}
|
|
4896
|
+
protoDecode(data) {
|
|
4897
|
+
// check schema
|
|
4898
|
+
return index$2.decode(this.proto, data, false);
|
|
4899
|
+
}
|
|
4900
|
+
isHex(string) {
|
|
4901
|
+
return isHex(string);
|
|
4902
|
+
}
|
|
4903
|
+
isBase32(string) {
|
|
4904
|
+
return index$9.isBase32(string);
|
|
4905
|
+
}
|
|
4906
|
+
isBase58(string) {
|
|
4907
|
+
return base58$1.isBase58(string);
|
|
4908
|
+
}
|
|
4909
|
+
fromBs32(encoded) {
|
|
4910
|
+
return this.decode(index$9.decode(encoded));
|
|
4911
|
+
}
|
|
4912
|
+
fromBs58(encoded) {
|
|
4913
|
+
return this.decode(fromBase58(encoded));
|
|
4914
|
+
}
|
|
4915
|
+
async toArray() {
|
|
4916
|
+
const array = [];
|
|
4917
|
+
for await (const value of this.encoded.values()) {
|
|
4918
|
+
array.push(value);
|
|
4919
|
+
}
|
|
4920
|
+
return array;
|
|
4921
|
+
}
|
|
4922
|
+
fromString(string) {
|
|
4923
|
+
const array = string.split(',');
|
|
4924
|
+
const arrayLike = array.map(string => Number(string));
|
|
4925
|
+
return this.decode(Uint8Array.from(arrayLike));
|
|
4926
|
+
}
|
|
4927
|
+
fromHex(string) {
|
|
4928
|
+
return this.decode(fromHex(string));
|
|
4929
|
+
}
|
|
4930
|
+
fromArray(array) {
|
|
4931
|
+
return this.decode(Uint8Array.from([...array]));
|
|
4932
|
+
}
|
|
4933
|
+
fromEncoded(encoded) {
|
|
4934
|
+
return this.decode(encoded);
|
|
4935
|
+
}
|
|
4936
|
+
toString() {
|
|
4937
|
+
if (!this.encoded)
|
|
4938
|
+
this.encode();
|
|
4939
|
+
return this.encoded.toString();
|
|
4940
|
+
}
|
|
4941
|
+
toHex() {
|
|
4942
|
+
if (!this.encoded)
|
|
4943
|
+
this.encode();
|
|
4944
|
+
return toHex$2(this.encoded);
|
|
4945
|
+
}
|
|
4946
|
+
/**
|
|
4947
|
+
* @return {String} encoded
|
|
4948
|
+
*/
|
|
4949
|
+
toBs32() {
|
|
4950
|
+
if (!this.encoded)
|
|
4951
|
+
this.encode();
|
|
4952
|
+
return toBase32(this.encoded);
|
|
4953
|
+
}
|
|
4954
|
+
/**
|
|
4955
|
+
* @return {String} encoded
|
|
4956
|
+
*/
|
|
4957
|
+
toBs58() {
|
|
4958
|
+
if (!this.encoded)
|
|
4959
|
+
this.encode();
|
|
4960
|
+
return toBase58(this.encoded);
|
|
4961
|
+
}
|
|
4962
|
+
}
|
|
4963
|
+
|
|
4864
4964
|
/*!
|
|
4865
4965
|
* hash-wasm (https://www.npmjs.com/package/hash-wasm)
|
|
4866
4966
|
* (c) Dani Biro
|
|
4867
4967
|
* @license MIT
|
|
4868
4968
|
*/
|
|
4869
4969
|
|
|
4870
|
-
|
|
4970
|
+
/******************************************************************************
|
|
4871
4971
|
Copyright (c) Microsoft Corporation.
|
|
4872
4972
|
|
|
4873
4973
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
@@ -4881,6 +4981,8 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
4881
4981
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
4882
4982
|
PERFORMANCE OF THIS SOFTWARE.
|
|
4883
4983
|
***************************************************************************** */
|
|
4984
|
+
/* global Reflect, Promise, SuppressedError, Symbol */
|
|
4985
|
+
|
|
4884
4986
|
|
|
4885
4987
|
function __awaiter(thisArg, _arguments, P, generator) {
|
|
4886
4988
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
@@ -4890,7 +4992,12 @@ function __awaiter(thisArg, _arguments, P, generator) {
|
|
|
4890
4992
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
4891
4993
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
4892
4994
|
});
|
|
4893
|
-
}
|
|
4995
|
+
}
|
|
4996
|
+
|
|
4997
|
+
typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
|
|
4998
|
+
var e = new Error(message);
|
|
4999
|
+
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
5000
|
+
};
|
|
4894
5001
|
|
|
4895
5002
|
class Mutex {
|
|
4896
5003
|
constructor() {
|
|
@@ -5228,8 +5335,8 @@ new Mutex();
|
|
|
5228
5335
|
new Mutex();
|
|
5229
5336
|
|
|
5230
5337
|
var name$b = "sha3";
|
|
5231
|
-
var data$b = "
|
|
5232
|
-
var hash$b = "
|
|
5338
|
+
var data$b = "AGFzbQEAAAABFARgAAF/YAF/AGACf38AYAN/f38AAwgHAAEBAgEAAwUEAQECAgYOAn8BQZCNBQt/AEGACAsHcAgGbWVtb3J5AgAOSGFzaF9HZXRCdWZmZXIAAAlIYXNoX0luaXQAAQtIYXNoX1VwZGF0ZQACCkhhc2hfRmluYWwABA1IYXNoX0dldFN0YXRlAAUOSGFzaF9DYWxjdWxhdGUABgpTVEFURV9TSVpFAwEKqBwHBQBBgAoL1wMAQQBCADcDgI0BQQBCADcD+IwBQQBCADcD8IwBQQBCADcD6IwBQQBCADcD4IwBQQBCADcD2IwBQQBCADcD0IwBQQBCADcDyIwBQQBCADcDwIwBQQBCADcDuIwBQQBCADcDsIwBQQBCADcDqIwBQQBCADcDoIwBQQBCADcDmIwBQQBCADcDkIwBQQBCADcDiIwBQQBCADcDgIwBQQBCADcD+IsBQQBCADcD8IsBQQBCADcD6IsBQQBCADcD4IsBQQBCADcD2IsBQQBCADcD0IsBQQBCADcDyIsBQQBCADcDwIsBQQBCADcDuIsBQQBCADcDsIsBQQBCADcDqIsBQQBCADcDoIsBQQBCADcDmIsBQQBCADcDkIsBQQBCADcDiIsBQQBCADcDgIsBQQBCADcD+IoBQQBCADcD8IoBQQBCADcD6IoBQQBCADcD4IoBQQBCADcD2IoBQQBCADcD0IoBQQBCADcDyIoBQQBCADcDwIoBQQBCADcDuIoBQQBCADcDsIoBQQBCADcDqIoBQQBCADcDoIoBQQBCADcDmIoBQQBCADcDkIoBQQBCADcDiIoBQQBCADcDgIoBQQBBwAwgAEEBdGtBA3Y2AoyNAUEAQQA2AoiNAQuMAwEIfwJAQQAoAoiNASIBQQBIDQBBACABIABqQQAoAoyNASICcDYCiI0BAkACQCABDQBBgAohAwwBCwJAIAIgAWsiBCAAIAQgAEkbIgNFDQAgA0EDcSEFQQAhBgJAIANBBEkNACABQYCKAWohByADQXxxIQhBACEGA0AgByAGaiIDQcgBaiAGQYAKai0AADoAACADQckBaiAGQYEKai0AADoAACADQcoBaiAGQYIKai0AADoAACADQcsBaiAGQYMKai0AADoAACAIIAZBBGoiBkcNAAsLIAVFDQAgAUHIiwFqIQMDQCADIAZqIAZBgApqLQAAOgAAIAZBAWohBiAFQX9qIgUNAAsLIAQgAEsNAUHIiwEgAhADIAAgBGshACAEQYAKaiEDCwJAIAAgAkkNAANAIAMgAhADIAMgAmohAyAAIAJrIgAgAk8NAAsLIABFDQBBACECQcgBIQYDQCAGQYCKAWogAyAGakG4fmotAAA6AAAgBkEBaiEGIAAgAkEBaiICQf8BcUsNAAsLC+QLAS1+IAApA0AhAkEAKQPAigEhAyAAKQM4IQRBACkDuIoBIQUgACkDMCEGQQApA7CKASEHIAApAyghCEEAKQOoigEhCSAAKQMgIQpBACkDoIoBIQsgACkDGCEMQQApA5iKASENIAApAxAhDkEAKQOQigEhDyAAKQMIIRBBACkDiIoBIREgACkDACESQQApA4CKASETQQApA8iKASEUAkACQCABQcgASw0AQQApA9CKASEVQQApA+CKASEWQQApA9iKASEXDAELQQApA+CKASAAKQNghSEWQQApA9iKASAAKQNYhSEXQQApA9CKASAAKQNQhSEVIBQgACkDSIUhFCABQekASQ0AQQBBACkD6IoBIAApA2iFNwPoigFBAEEAKQPwigEgACkDcIU3A/CKAUEAQQApA/iKASAAKQN4hTcD+IoBQQBBACkDgIsBIAApA4ABhTcDgIsBIAFBiQFJDQBBAEEAKQOIiwEgACkDiAGFNwOIiwELIAMgAoUhGCAFIASFIRkgByAGhSEHIAkgCIUhCCALIAqFIRogDSAMhSEJIA8gDoUhCiARIBCFIQsgEyAShSEMQQApA7iLASESQQApA5CLASETQQApA+iKASEbQQApA6CLASEcQQApA/iKASENQQApA7CLASEdQQApA4iLASEOQQApA8CLASEPQQApA5iLASEeQQApA/CKASEQQQApA6iLASERQQApA4CLASEfQcB+IQADQCAaIAcgC4UgF4UgH4UgEYVCAYmFIBSFIBCFIB6FIA+FIQIgDCAZIAqFIBaFIA6FIB2FQgGJhSAIhSAVhSANhSAchSIDIAeFISAgCSAIIAyFIBWFIA2FIByFQgGJhSAYhSAbhSAThSAShSIEIA+FISEgGCAKIBQgGoUgEIUgHoUgD4VCAYmFIBmFIBaFIA6FIB2FIgWFQjeJIiIgCyAYIAmFIBuFIBOFIBKFQgGJhSAHhSAXhSAfhSARhSIGIAqFQj6JIiNCf4WDIAMgEYVCAokiJIUhDyANIAKFQimJIiUgBCAQhUIniSImQn+FgyAihSERIBIgBYVCOIkiEiAGIA6FQg+JIidCf4WDIAMgF4VCCokiKIUhDiAEIBqFQhuJIikgKCAIIAKFQiSJIipCf4WDhSENIAYgGYVCBokiKyADIAuFQgGJIixCf4WDIBwgAoVCEokiLYUhECArIAQgHoVCCIkiLiAbIAWFQhmJIhtCf4WDhSEXIAYgHYVCPYkiGSAEIBSFQhSJIgQgCSAFhUIciSIIQn+Fg4UhFCAIIBlCf4WDIAMgH4VCLYkiA4UhGCAZIANCf4WDIBUgAoVCA4kiCYUhGSAEIAMgCUJ/hYOFIQcgCSAEQn+FgyAIhSEIIAwgAoUiAiAhQg6JIgNCf4WDIBMgBYVCFYkiBIUhCSAGIBaFQiuJIgUgAyAEQn+Fg4UhCiAEIAVCf4WDICBCLIkiBIUhCyAAQdAJaikDACAFIARCf4WDhSAChSEMICcgKEJ/hYMgKoUiBSEfIAMgBCACQn+Fg4UiAiEaICogKUJ/hYMgEoUiAyEeIC0gLkJ/hYMgG4UiBCEWICYgJCAlQn+Fg4UiBiEdIBsgK0J/hYMgLIUiKCEVICMgJiAiQn+Fg4UiIiEcIC4gLCAtQn+Fg4UiJiEbICcgKSASQn+Fg4UiJyETICMgJEJ/hYMgJYUiIyESIABBCGoiAA0AC0EAIBE3A6iLAUEAIAU3A4CLAUEAIBc3A9iKAUEAIAc3A7CKAUEAIAs3A4iKAUEAIA83A8CLAUEAIAM3A5iLAUEAIBA3A/CKAUEAIBQ3A8iKAUEAIAI3A6CKAUEAIAY3A7CLAUEAIA43A4iLAUEAIAQ3A+CKAUEAIBk3A7iKAUEAIAo3A5CKAUEAICI3A6CLAUEAIA03A/iKAUEAICg3A9CKAUEAIAg3A6iKAUEAIAw3A4CKAUEAICM3A7iLAUEAICc3A5CLAUEAICY3A+iKAUEAIBg3A8CKAUEAIAk3A5iKAQv4AgEFf0HkAEEAKAKMjQEiAUEBdmshAgJAQQAoAoiNASIDQQBIDQAgASEEAkAgASADRg0AIANByIsBaiEFQQAhAwNAIAUgA2pBADoAACADQQFqIgMgAUEAKAKIjQEiBGtJDQALCyAEQciLAWoiAyADLQAAIAByOgAAIAFBx4sBaiIDIAMtAABBgAFyOgAAQciLASABEANBAEGAgICAeDYCiI0BCwJAIAJBBEkNACACQQJ2IgNBA3EhBUEAIQQCQCADQX9qQQNJDQAgA0H8////A3EhAUEAIQNBACEEA0AgA0GACmogA0GAigFqKAIANgIAIANBhApqIANBhIoBaigCADYCACADQYgKaiADQYiKAWooAgA2AgAgA0GMCmogA0GMigFqKAIANgIAIANBEGohAyABIARBBGoiBEcNAAsLIAVFDQAgBUECdCEBIARBAnQhAwNAIANBgApqIANBgIoBaigCADYCACADQQRqIQMgAUF8aiIBDQALCwsGAEGAigEL0QYBA39BAEIANwOAjQFBAEIANwP4jAFBAEIANwPwjAFBAEIANwPojAFBAEIANwPgjAFBAEIANwPYjAFBAEIANwPQjAFBAEIANwPIjAFBAEIANwPAjAFBAEIANwO4jAFBAEIANwOwjAFBAEIANwOojAFBAEIANwOgjAFBAEIANwOYjAFBAEIANwOQjAFBAEIANwOIjAFBAEIANwOAjAFBAEIANwP4iwFBAEIANwPwiwFBAEIANwPoiwFBAEIANwPgiwFBAEIANwPYiwFBAEIANwPQiwFBAEIANwPIiwFBAEIANwPAiwFBAEIANwO4iwFBAEIANwOwiwFBAEIANwOoiwFBAEIANwOgiwFBAEIANwOYiwFBAEIANwOQiwFBAEIANwOIiwFBAEIANwOAiwFBAEIANwP4igFBAEIANwPwigFBAEIANwPoigFBAEIANwPgigFBAEIANwPYigFBAEIANwPQigFBAEIANwPIigFBAEIANwPAigFBAEIANwO4igFBAEIANwOwigFBAEIANwOoigFBAEIANwOgigFBAEIANwOYigFBAEIANwOQigFBAEIANwOIigFBAEIANwOAigFBAEHADCABQQF0a0EDdjYCjI0BQQBBADYCiI0BIAAQAkHkAEEAKAKMjQEiAEEBdmshAwJAQQAoAoiNASIBQQBIDQAgACEEAkAgACABRg0AIAFByIsBaiEFQQAhAQNAIAUgAWpBADoAACABQQFqIgEgAEEAKAKIjQEiBGtJDQALCyAEQciLAWoiASABLQAAIAJyOgAAIABBx4sBaiIBIAEtAABBgAFyOgAAQciLASAAEANBAEGAgICAeDYCiI0BCwJAIANBBEkNACADQQJ2IgFBA3EhBUEAIQQCQCABQX9qQQNJDQAgAUH8////A3EhAEEAIQFBACEEA0AgAUGACmogAUGAigFqKAIANgIAIAFBhApqIAFBhIoBaigCADYCACABQYgKaiABQYiKAWooAgA2AgAgAUGMCmogAUGMigFqKAIANgIAIAFBEGohASAAIARBBGoiBEcNAAsLIAVFDQAgBUECdCEAIARBAnQhAQNAIAFBgApqIAFBgIoBaigCADYCACABQQRqIQEgAEF8aiIADQALCwsL2AEBAEGACAvQAZABAAAAAAAAAAAAAAAAAAABAAAAAAAAAIKAAAAAAAAAioAAAAAAAIAAgACAAAAAgIuAAAAAAAAAAQAAgAAAAACBgACAAAAAgAmAAAAAAACAigAAAAAAAACIAAAAAAAAAAmAAIAAAAAACgAAgAAAAACLgACAAAAAAIsAAAAAAACAiYAAAAAAAIADgAAAAAAAgAKAAAAAAACAgAAAAAAAAIAKgAAAAAAAAAoAAIAAAACAgYAAgAAAAICAgAAAAAAAgAEAAIAAAAAACIAAgAAAAIA=";
|
|
5339
|
+
var hash$b = "f2f6f5b2";
|
|
5233
5340
|
var wasmJson$b = {
|
|
5234
5341
|
name: name$b,
|
|
5235
5342
|
data: data$b,
|
|
@@ -5274,8 +5381,8 @@ new Mutex();
|
|
|
5274
5381
|
new Mutex();
|
|
5275
5382
|
|
|
5276
5383
|
var name$9 = "sha512";
|
|
5277
|
-
var data$9 = "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";
|
|
5278
|
-
var hash$9 = "
|
|
5384
|
+
var data$9 = "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";
|
|
5385
|
+
var hash$9 = "cdd57f6a";
|
|
5279
5386
|
var wasmJson$9 = {
|
|
5280
5387
|
name: name$9,
|
|
5281
5388
|
data: data$9,
|
|
@@ -5313,8 +5420,8 @@ new Mutex();
|
|
|
5313
5420
|
new Mutex();
|
|
5314
5421
|
|
|
5315
5422
|
var name$4 = "ripemd160";
|
|
5316
|
-
var data$4 = "AGFzbQEAAAABEQRgAAF/YAAAYAF/
|
|
5317
|
-
var hash$4 = "
|
|
5423
|
+
var data$4 = "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";
|
|
5424
|
+
var hash$4 = "c089a7ca";
|
|
5318
5425
|
var wasmJson$4 = {
|
|
5319
5426
|
name: name$4,
|
|
5320
5427
|
data: data$4,
|
|
@@ -5600,106 +5707,7 @@ var utils$p = {
|
|
|
5600
5707
|
codecs: globalThis.peernetCodecs
|
|
5601
5708
|
};
|
|
5602
5709
|
|
|
5603
|
-
|
|
5604
|
-
* @param {string}
|
|
5605
|
-
*/
|
|
5606
|
-
var isHex = (function (string) { return /^[A-F0-9]+$/i.test(string); });
|
|
5607
|
-
|
|
5608
|
-
let BasicInterface$1 = class BasicInterface {
|
|
5609
|
-
encoded;
|
|
5610
|
-
decoded;
|
|
5611
|
-
keys;
|
|
5612
|
-
name;
|
|
5613
|
-
#proto;
|
|
5614
|
-
set proto(value) {
|
|
5615
|
-
this.#proto = value;
|
|
5616
|
-
this.keys = Object.keys(value);
|
|
5617
|
-
}
|
|
5618
|
-
get proto() {
|
|
5619
|
-
return this.#proto;
|
|
5620
|
-
}
|
|
5621
|
-
decode(encoded) {
|
|
5622
|
-
encoded = encoded || this.encoded;
|
|
5623
|
-
return new Object();
|
|
5624
|
-
}
|
|
5625
|
-
encode(decoded) {
|
|
5626
|
-
decoded = decoded || this.decoded;
|
|
5627
|
-
return new Uint8Array();
|
|
5628
|
-
}
|
|
5629
|
-
// get Codec(): Codec {}
|
|
5630
|
-
protoEncode(data) {
|
|
5631
|
-
// check schema
|
|
5632
|
-
return index$1.encode(this.proto, data, false);
|
|
5633
|
-
}
|
|
5634
|
-
protoDecode(data) {
|
|
5635
|
-
// check schema
|
|
5636
|
-
return index$1.decode(this.proto, data, false);
|
|
5637
|
-
}
|
|
5638
|
-
isHex(string) {
|
|
5639
|
-
return isHex(string);
|
|
5640
|
-
}
|
|
5641
|
-
isBase32(string) {
|
|
5642
|
-
return index$8.isBase32(string);
|
|
5643
|
-
}
|
|
5644
|
-
isBase58(string) {
|
|
5645
|
-
return base58$1.isBase58(string);
|
|
5646
|
-
}
|
|
5647
|
-
fromBs32(encoded) {
|
|
5648
|
-
return this.decode(index$8.decode(encoded));
|
|
5649
|
-
}
|
|
5650
|
-
fromBs58(encoded) {
|
|
5651
|
-
return this.decode(fromBase58(encoded));
|
|
5652
|
-
}
|
|
5653
|
-
async toArray() {
|
|
5654
|
-
const array = [];
|
|
5655
|
-
for await (const value of this.encoded.values()) {
|
|
5656
|
-
array.push(value);
|
|
5657
|
-
}
|
|
5658
|
-
return array;
|
|
5659
|
-
}
|
|
5660
|
-
fromString(string) {
|
|
5661
|
-
const array = string.split(',');
|
|
5662
|
-
const arrayLike = array.map(string => Number(string));
|
|
5663
|
-
return this.decode(Uint8Array.from(arrayLike));
|
|
5664
|
-
}
|
|
5665
|
-
fromHex(string) {
|
|
5666
|
-
return this.decode(fromHex(string));
|
|
5667
|
-
}
|
|
5668
|
-
fromArray(array) {
|
|
5669
|
-
return this.decode(Uint8Array.from([...array]));
|
|
5670
|
-
}
|
|
5671
|
-
fromEncoded(encoded) {
|
|
5672
|
-
return this.decode(encoded);
|
|
5673
|
-
}
|
|
5674
|
-
toString() {
|
|
5675
|
-
if (!this.encoded)
|
|
5676
|
-
this.encode();
|
|
5677
|
-
return this.encoded.toString();
|
|
5678
|
-
}
|
|
5679
|
-
toHex() {
|
|
5680
|
-
if (!this.encoded)
|
|
5681
|
-
this.encode();
|
|
5682
|
-
return toHex$2(this.encoded.toString().split(',').map(number => Number(number)));
|
|
5683
|
-
}
|
|
5684
|
-
/**
|
|
5685
|
-
* @return {String} encoded
|
|
5686
|
-
*/
|
|
5687
|
-
toBs32() {
|
|
5688
|
-
if (!this.encoded)
|
|
5689
|
-
this.encode();
|
|
5690
|
-
return toBase32(this.encoded);
|
|
5691
|
-
}
|
|
5692
|
-
/**
|
|
5693
|
-
* @return {String} encoded
|
|
5694
|
-
*/
|
|
5695
|
-
toBs58() {
|
|
5696
|
-
if (!this.encoded)
|
|
5697
|
-
this.encode();
|
|
5698
|
-
return toBase58(this.encoded);
|
|
5699
|
-
}
|
|
5700
|
-
};
|
|
5701
|
-
|
|
5702
|
-
let Codec$1 = class Codec extends BasicInterface$1 {
|
|
5710
|
+
let Codec$1 = class Codec extends BasicInterface {
|
|
5703
5711
|
codecBuffer;
|
|
5704
5712
|
codec;
|
|
5705
5713
|
hashAlg;
|
|
@@ -5707,7 +5715,7 @@ let Codec$1 = class Codec extends BasicInterface$1 {
|
|
|
5707
5715
|
super();
|
|
5708
5716
|
if (buffer) {
|
|
5709
5717
|
if (buffer instanceof Uint8Array) {
|
|
5710
|
-
const codec = index$
|
|
5718
|
+
const codec = index$8.decode(buffer);
|
|
5711
5719
|
const name = this.getCodecName(codec);
|
|
5712
5720
|
if (name) {
|
|
5713
5721
|
this.name = name;
|
|
@@ -5719,7 +5727,7 @@ let Codec$1 = class Codec extends BasicInterface$1 {
|
|
|
5719
5727
|
}
|
|
5720
5728
|
}
|
|
5721
5729
|
else if (buffer instanceof ArrayBuffer) {
|
|
5722
|
-
const codec = index$
|
|
5730
|
+
const codec = index$8.decode(new Uint8Array(buffer));
|
|
5723
5731
|
const name = this.getCodecName(codec);
|
|
5724
5732
|
if (name) {
|
|
5725
5733
|
this.name = name;
|
|
@@ -5747,7 +5755,7 @@ let Codec$1 = class Codec extends BasicInterface$1 {
|
|
|
5747
5755
|
}
|
|
5748
5756
|
}
|
|
5749
5757
|
fromEncoded(encoded) {
|
|
5750
|
-
const codec = index$
|
|
5758
|
+
const codec = index$8.decode(encoded);
|
|
5751
5759
|
const name = this.getCodecName(codec);
|
|
5752
5760
|
this.name = name;
|
|
5753
5761
|
this.encoded = encoded;
|
|
@@ -5766,29 +5774,29 @@ let Codec$1 = class Codec extends BasicInterface$1 {
|
|
|
5766
5774
|
this.name = this.getCodecName(codec);
|
|
5767
5775
|
this.hashAlg = this.getHashAlg(this.name);
|
|
5768
5776
|
this.codec = this.getCodec(this.name);
|
|
5769
|
-
this.codecBuffer = index$
|
|
5777
|
+
this.codecBuffer = index$8.encode(this.codec);
|
|
5770
5778
|
}
|
|
5771
5779
|
fromName(name) {
|
|
5772
5780
|
const codec = this.getCodec(name);
|
|
5773
5781
|
this.name = name;
|
|
5774
5782
|
this.codec = codec;
|
|
5775
5783
|
this.hashAlg = this.getHashAlg(name);
|
|
5776
|
-
this.codecBuffer = index$
|
|
5784
|
+
this.codecBuffer = index$8.encode(this.codec);
|
|
5777
5785
|
}
|
|
5778
5786
|
decode(encoded) {
|
|
5779
5787
|
encoded = encoded || this.encoded;
|
|
5780
|
-
const codec = index$
|
|
5788
|
+
const codec = index$8.decode(encoded);
|
|
5781
5789
|
this.fromCodec(codec);
|
|
5782
5790
|
return this.decoded;
|
|
5783
5791
|
}
|
|
5784
5792
|
encode(codec) {
|
|
5785
5793
|
codec = codec || this.codec;
|
|
5786
|
-
this.encoded = index$
|
|
5794
|
+
this.encoded = index$8.encode(codec);
|
|
5787
5795
|
return this.encoded;
|
|
5788
5796
|
}
|
|
5789
5797
|
};
|
|
5790
5798
|
|
|
5791
|
-
|
|
5799
|
+
class CodecHash extends BasicInterface {
|
|
5792
5800
|
codec;
|
|
5793
5801
|
codecs;
|
|
5794
5802
|
digest;
|
|
@@ -5801,6 +5809,7 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
|
5801
5809
|
this.name = 'disco-hash';
|
|
5802
5810
|
if (options.codecs)
|
|
5803
5811
|
this.codecs = options.codecs;
|
|
5812
|
+
// @ts-ignore
|
|
5804
5813
|
return this.init(buffer);
|
|
5805
5814
|
}
|
|
5806
5815
|
async init(uint8Array) {
|
|
@@ -5839,7 +5848,7 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
|
5839
5848
|
return uint8Array;
|
|
5840
5849
|
}
|
|
5841
5850
|
get length() {
|
|
5842
|
-
return index$
|
|
5851
|
+
return index$8.encode(this.size);
|
|
5843
5852
|
}
|
|
5844
5853
|
get buffer() {
|
|
5845
5854
|
return this.encoded;
|
|
@@ -5879,7 +5888,7 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
|
5879
5888
|
}
|
|
5880
5889
|
async validate(buffer) {
|
|
5881
5890
|
if (Buffer.isBuffer(buffer)) {
|
|
5882
|
-
const codec = index$
|
|
5891
|
+
const codec = index$8.decode(buffer);
|
|
5883
5892
|
if (this.codecs[codec]) {
|
|
5884
5893
|
this.decode(buffer);
|
|
5885
5894
|
}
|
|
@@ -5896,14 +5905,14 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
|
5896
5905
|
if (typeof buffer === 'object')
|
|
5897
5906
|
this.fromJSON(buffer);
|
|
5898
5907
|
}
|
|
5899
|
-
decode(
|
|
5900
|
-
this.encoded =
|
|
5901
|
-
const codec = index$
|
|
5908
|
+
decode(encoded) {
|
|
5909
|
+
this.encoded = encoded;
|
|
5910
|
+
const codec = index$8.decode(encoded);
|
|
5902
5911
|
this.codec = new Codec$1(codec);
|
|
5903
5912
|
// TODO: validate codec
|
|
5904
|
-
|
|
5905
|
-
this.size = index$
|
|
5906
|
-
this.digest =
|
|
5913
|
+
encoded = encoded.slice(index$8.decode.bytes);
|
|
5914
|
+
this.size = index$8.decode(encoded);
|
|
5915
|
+
this.digest = encoded.slice(index$8.decode.bytes);
|
|
5907
5916
|
if (this.digest.length !== this.size) {
|
|
5908
5917
|
throw new Error(`hash length inconsistent: ${this.encoded.toString()}`);
|
|
5909
5918
|
}
|
|
@@ -5918,9 +5927,9 @@ let CodecHash$1 = class CodecHash extends BasicInterface$1 {
|
|
|
5918
5927
|
digest: this.digest,
|
|
5919
5928
|
};
|
|
5920
5929
|
}
|
|
5921
|
-
}
|
|
5930
|
+
}
|
|
5922
5931
|
|
|
5923
|
-
let FormatInterface$1 = class FormatInterface extends BasicInterface
|
|
5932
|
+
let FormatInterface$1 = class FormatInterface extends BasicInterface {
|
|
5924
5933
|
hashFormat;
|
|
5925
5934
|
init(buffer) {
|
|
5926
5935
|
if (buffer instanceof Uint8Array)
|
|
@@ -6005,7 +6014,7 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
|
|
|
6005
6014
|
* @return {PeernetHash}
|
|
6006
6015
|
*/
|
|
6007
6016
|
get peernetHash() {
|
|
6008
|
-
return new CodecHash
|
|
6017
|
+
return new CodecHash(this.decoded, { name: this.name });
|
|
6009
6018
|
}
|
|
6010
6019
|
/**
|
|
6011
6020
|
* @return {peernetHash}
|
|
@@ -6037,6 +6046,7 @@ let FormatInterface$1 = class FormatInterface extends BasicInterface$1 {
|
|
|
6037
6046
|
}
|
|
6038
6047
|
}
|
|
6039
6048
|
};
|
|
6049
|
+
|
|
6040
6050
|
const FormatInterface = FormatInterface$1;
|
|
6041
6051
|
const Codec = Codec$1;
|
|
6042
6052
|
|
|
@@ -6399,6 +6409,7 @@ let LeofcoinStorage$1 = class LeofcoinStorage {
|
|
|
6399
6409
|
let size = 0;
|
|
6400
6410
|
const query = await this.db.iterate();
|
|
6401
6411
|
for await (const item of query) {
|
|
6412
|
+
// @ts-ignore
|
|
6402
6413
|
size += item.value ? item.value.length : item[1].length;
|
|
6403
6414
|
}
|
|
6404
6415
|
return size;
|
|
@@ -6459,66 +6470,6 @@ const pbkdf2 = async (password, salt, iterations = 4096, length = 64, hash = 'SH
|
|
|
6459
6470
|
}, key, length)
|
|
6460
6471
|
};
|
|
6461
6472
|
|
|
6462
|
-
const generateAesKey = async (length = 256) => {
|
|
6463
|
-
const key = await subtle.generateKey({
|
|
6464
|
-
name: 'AES-CBC',
|
|
6465
|
-
length
|
|
6466
|
-
}, true, ['encrypt', 'decrypt']);
|
|
6467
|
-
|
|
6468
|
-
return key;
|
|
6469
|
-
};
|
|
6470
|
-
|
|
6471
|
-
const importAesKey = async (exported, format = 'raw', length = 256) => {
|
|
6472
|
-
return await subtle.importKey(format, exported, {
|
|
6473
|
-
name: 'AES-CBC',
|
|
6474
|
-
length
|
|
6475
|
-
}, true, ['encrypt', 'decrypt'])
|
|
6476
|
-
};
|
|
6477
|
-
|
|
6478
|
-
const exportAesKey = async (key, format = 'raw') => {
|
|
6479
|
-
return await subtle.exportKey(format, key)
|
|
6480
|
-
};
|
|
6481
|
-
|
|
6482
|
-
const encryptAes = async (uint8Array, key, iv) => subtle.encrypt({
|
|
6483
|
-
name: 'AES-CBC',
|
|
6484
|
-
iv,
|
|
6485
|
-
}, key, uint8Array);
|
|
6486
|
-
|
|
6487
|
-
const decryptAes = async (uint8Array, key, iv) => subtle.decrypt({
|
|
6488
|
-
name: 'AES-CBC',
|
|
6489
|
-
iv,
|
|
6490
|
-
}, key, uint8Array);
|
|
6491
|
-
|
|
6492
|
-
const uint8ArrayToHex = uint8Array =>
|
|
6493
|
-
[...uint8Array].map(x => x.toString(16).padStart(2, '0')).join('');
|
|
6494
|
-
|
|
6495
|
-
const arrayBufferToHex = arrayBuffer =>
|
|
6496
|
-
uint8ArrayToHex(new Uint8Array(arrayBuffer));
|
|
6497
|
-
|
|
6498
|
-
const hexToUint8Array = hex =>
|
|
6499
|
-
new Uint8Array(hex.match(/[\da-f]{2}/gi).map(x => parseInt(x, 16)));
|
|
6500
|
-
|
|
6501
|
-
const encrypt$1 = async string => {
|
|
6502
|
-
const key = await generateAesKey();
|
|
6503
|
-
const iv = randombytes(16);
|
|
6504
|
-
const ciphertext = await encryptAes(new TextEncoder().encode(string), key, iv);
|
|
6505
|
-
const exported = await exportAesKey(key);
|
|
6506
|
-
return {
|
|
6507
|
-
key: arrayBufferToHex(exported),
|
|
6508
|
-
iv: uint8ArrayToHex(iv),
|
|
6509
|
-
cipher: arrayBufferToHex(ciphertext)
|
|
6510
|
-
}
|
|
6511
|
-
};
|
|
6512
|
-
|
|
6513
|
-
const decrypt$1 = async ({cipher, key, iv}) => {
|
|
6514
|
-
if (!key.type) key = await importAesKey(hexToUint8Array(key));
|
|
6515
|
-
cipher = new Uint8Array(hexToUint8Array(cipher));
|
|
6516
|
-
iv = new Uint8Array(hexToUint8Array(iv));
|
|
6517
|
-
|
|
6518
|
-
const plaintext = await decryptAes(cipher, key, iv);
|
|
6519
|
-
return new TextDecoder().decode(plaintext);
|
|
6520
|
-
};
|
|
6521
|
-
|
|
6522
6473
|
var typedArrayConcat = (input, options = {length: undefined, seperator: undefined}) => {
|
|
6523
6474
|
if (!options) options = {};
|
|
6524
6475
|
|
|
@@ -6552,7 +6503,7 @@ const concatAndDoubleHash = async (input) => {
|
|
|
6552
6503
|
return new Uint8Array(await createDoubleHash(typedArrayConcat(input), 'SHA-256'));
|
|
6553
6504
|
};
|
|
6554
6505
|
|
|
6555
|
-
const encode$
|
|
6506
|
+
const encode$2 = async (source, prefix = new TextEncoder().encode('00'), hex) => {
|
|
6556
6507
|
if (!(source instanceof Uint8Array) || !(prefix instanceof Uint8Array)) {
|
|
6557
6508
|
throw new TypeError('Expected Uint8Array');
|
|
6558
6509
|
}
|
|
@@ -6569,7 +6520,7 @@ const encode$1 = async (source, prefix = new TextEncoder().encode('00'), hex) =>
|
|
|
6569
6520
|
return base58$1.encodeHex(uint8Array);
|
|
6570
6521
|
return base58$1.encode(uint8Array);
|
|
6571
6522
|
};
|
|
6572
|
-
const decode$
|
|
6523
|
+
const decode$3 = async (string, hex) => {
|
|
6573
6524
|
let uint8Array = hex ? base58$1.decodeHex(string) : base58$1.decode(string);
|
|
6574
6525
|
const prefix = uint8Array.subarray(0, 2);
|
|
6575
6526
|
const source = uint8Array.subarray(2, -4);
|
|
@@ -6589,21 +6540,21 @@ const decode$2 = async (string, hex) => {
|
|
|
6589
6540
|
};
|
|
6590
6541
|
const isBase58check = (string, hex) => {
|
|
6591
6542
|
try {
|
|
6592
|
-
hex ? decode$
|
|
6543
|
+
hex ? decode$3(string, true) : decode$3(string);
|
|
6593
6544
|
return true;
|
|
6594
6545
|
}
|
|
6595
6546
|
catch (e) {
|
|
6596
6547
|
return false;
|
|
6597
6548
|
}
|
|
6598
6549
|
};
|
|
6599
|
-
const encodeHex = (uint8Array, prefix = new TextEncoder().encode('00')) => encode$
|
|
6600
|
-
const decodeHex = (string) => decode$
|
|
6550
|
+
const encodeHex = (uint8Array, prefix = new TextEncoder().encode('00')) => encode$2(uint8Array, prefix, true);
|
|
6551
|
+
const decodeHex = (string) => decode$3(string, true);
|
|
6601
6552
|
const isBase58checkHex = (string) => isBase58check(string, true);
|
|
6602
|
-
var base58check = { encode: encode$
|
|
6553
|
+
var base58check = { encode: encode$2, decode: decode$3, encodeHex, decodeHex, isBase58check, isBase58checkHex };
|
|
6603
6554
|
|
|
6604
|
-
const decode$
|
|
6555
|
+
const decode$2 = (multiWif, expectedVersion, expectedCodec) => {
|
|
6605
6556
|
const decoded = base58$1.decode(multiWif);
|
|
6606
|
-
let [version, codec, privateKey] = index$
|
|
6557
|
+
let [version, codec, privateKey] = index$6(decoded);
|
|
6607
6558
|
version = Number(new TextDecoder().decode(version));
|
|
6608
6559
|
codec = Number(new TextDecoder().decode(codec));
|
|
6609
6560
|
if (expectedVersion && version !== expectedVersion)
|
|
@@ -6612,18 +6563,18 @@ const decode$1 = (multiWif, expectedVersion, expectedCodec) => {
|
|
|
6612
6563
|
throw new Error(`invalid codec: expected ${expectedCodec} but got ${codec}`);
|
|
6613
6564
|
return { version, codec, privateKey };
|
|
6614
6565
|
};
|
|
6615
|
-
var index = {
|
|
6566
|
+
var index$1 = {
|
|
6616
6567
|
encode: (version, codec, privateKey) => {
|
|
6617
|
-
return base58$1.encode(index$
|
|
6568
|
+
return base58$1.encode(index$7([
|
|
6618
6569
|
new TextEncoder().encode(version.toString()),
|
|
6619
6570
|
new TextEncoder().encode(codec.toString()),
|
|
6620
6571
|
privateKey
|
|
6621
6572
|
]));
|
|
6622
6573
|
},
|
|
6623
|
-
decode: decode$
|
|
6574
|
+
decode: decode$2,
|
|
6624
6575
|
isMultiWif: (multiWif) => {
|
|
6625
6576
|
try {
|
|
6626
|
-
const { version, codec, privateKey } = decode$
|
|
6577
|
+
const { version, codec, privateKey } = decode$2(multiWif);
|
|
6627
6578
|
if (version === undefined)
|
|
6628
6579
|
return false;
|
|
6629
6580
|
if (codec === undefined)
|
|
@@ -16285,110 +16236,113 @@ var elliptic = lib(elliptic$1);
|
|
|
16285
16236
|
|
|
16286
16237
|
var secp256k1 = /*@__PURE__*/getDefaultExportFromCjs(elliptic);
|
|
16287
16238
|
|
|
16288
|
-
const leofcoinOlivia = {
|
|
16289
|
-
messagePrefix: '\u0019Leofcoin Signed Message:',
|
|
16290
|
-
version: 1,
|
|
16291
|
-
pubKeyHash: 0x73,
|
|
16292
|
-
scriptHash: 0x76,
|
|
16293
|
-
multiTxHash: 0x8b4125,
|
|
16294
|
-
payments: {
|
|
16295
|
-
version: 0,
|
|
16296
|
-
unspent: 0x1fa443d7 // ounsp
|
|
16297
|
-
},
|
|
16298
|
-
wif: 0x7D,
|
|
16299
|
-
multiCodec: 0x7c4,
|
|
16300
|
-
bip32: { public: 0x13BBF2D5, private: 0x13BBCBC5 }
|
|
16301
|
-
};
|
|
16302
|
-
const bitcoinTestnet = {
|
|
16303
|
-
messagePrefix: '\x18Bitcoin Signed Message:\n',
|
|
16304
|
-
version: 1,
|
|
16305
|
-
bech32: 'tb',
|
|
16306
|
-
pubKeyHash: 0x6f,
|
|
16307
|
-
scriptHash: 0xc4,
|
|
16308
|
-
wif: 0xef,
|
|
16309
|
-
bip32: {
|
|
16310
|
-
public: 0x043587cf,
|
|
16311
|
-
private: 0x04358394
|
|
16312
|
-
},
|
|
16313
|
-
multiCodec: 0
|
|
16314
|
-
};
|
|
16315
|
-
var testnets = {
|
|
16316
|
-
'leofcoin:olivia': leofcoinOlivia,
|
|
16317
|
-
'bitcoin:testnet': bitcoinTestnet
|
|
16239
|
+
const leofcoinOlivia = {
|
|
16240
|
+
messagePrefix: '\u0019Leofcoin Signed Message:',
|
|
16241
|
+
version: 1,
|
|
16242
|
+
pubKeyHash: 0x73,
|
|
16243
|
+
scriptHash: 0x76,
|
|
16244
|
+
multiTxHash: 0x8b4125,
|
|
16245
|
+
payments: {
|
|
16246
|
+
version: 0,
|
|
16247
|
+
unspent: 0x1fa443d7 // ounsp
|
|
16248
|
+
},
|
|
16249
|
+
wif: 0x7D,
|
|
16250
|
+
multiCodec: 0x7c4,
|
|
16251
|
+
bip32: { public: 0x13BBF2D5, private: 0x13BBCBC5 }
|
|
16252
|
+
};
|
|
16253
|
+
const bitcoinTestnet = {
|
|
16254
|
+
messagePrefix: '\x18Bitcoin Signed Message:\n',
|
|
16255
|
+
version: 1,
|
|
16256
|
+
bech32: 'tb',
|
|
16257
|
+
pubKeyHash: 0x6f,
|
|
16258
|
+
scriptHash: 0xc4,
|
|
16259
|
+
wif: 0xef,
|
|
16260
|
+
bip32: {
|
|
16261
|
+
public: 0x043587cf,
|
|
16262
|
+
private: 0x04358394
|
|
16263
|
+
},
|
|
16264
|
+
multiCodec: 0
|
|
16265
|
+
};
|
|
16266
|
+
var testnets = {
|
|
16267
|
+
'leofcoin:olivia': leofcoinOlivia,
|
|
16268
|
+
'bitcoin:testnet': bitcoinTestnet
|
|
16318
16269
|
};
|
|
16319
16270
|
|
|
16320
|
-
// https://en.bitcoin.it/wiki/List_of_address_prefixes
|
|
16321
|
-
|
|
16322
|
-
|
|
16323
|
-
|
|
16324
|
-
|
|
16325
|
-
|
|
16326
|
-
|
|
16327
|
-
|
|
16328
|
-
|
|
16329
|
-
|
|
16330
|
-
|
|
16331
|
-
|
|
16332
|
-
|
|
16333
|
-
|
|
16334
|
-
|
|
16335
|
-
|
|
16336
|
-
|
|
16337
|
-
|
|
16338
|
-
|
|
16339
|
-
|
|
16340
|
-
|
|
16341
|
-
|
|
16342
|
-
|
|
16343
|
-
|
|
16344
|
-
|
|
16345
|
-
|
|
16346
|
-
|
|
16347
|
-
|
|
16348
|
-
|
|
16349
|
-
|
|
16350
|
-
|
|
16351
|
-
|
|
16352
|
-
|
|
16353
|
-
|
|
16354
|
-
|
|
16355
|
-
|
|
16356
|
-
|
|
16357
|
-
|
|
16358
|
-
|
|
16359
|
-
|
|
16360
|
-
|
|
16361
|
-
|
|
16362
|
-
|
|
16363
|
-
|
|
16364
|
-
|
|
16365
|
-
|
|
16366
|
-
|
|
16367
|
-
}
|
|
16368
|
-
|
|
16369
|
-
|
|
16370
|
-
|
|
16371
|
-
|
|
16372
|
-
|
|
16373
|
-
|
|
16374
|
-
|
|
16375
|
-
|
|
16376
|
-
|
|
16377
|
-
|
|
16378
|
-
|
|
16379
|
-
|
|
16380
|
-
|
|
16381
|
-
|
|
16382
|
-
|
|
16383
|
-
|
|
16384
|
-
|
|
16385
|
-
|
|
16386
|
-
|
|
16387
|
-
|
|
16388
|
-
|
|
16271
|
+
// https://en.bitcoin.it/wiki/List_of_address_prefixes
|
|
16272
|
+
// usage:
|
|
16273
|
+
// networks['bitcoin']['testnet']
|
|
16274
|
+
// networks.bitcoin.testnet
|
|
16275
|
+
/**
|
|
16276
|
+
* Main network
|
|
16277
|
+
* @return {messagePrefix, pubKeyHash, scriptHash, wif, bip32}
|
|
16278
|
+
*/
|
|
16279
|
+
const leofcoin = {
|
|
16280
|
+
messagePrefix: '\u0019Leofcoin Signed Message:',
|
|
16281
|
+
version: 1,
|
|
16282
|
+
pubKeyHash: 0x30,
|
|
16283
|
+
scriptHash: 0x37,
|
|
16284
|
+
multiTxHash: 0x3adeed,
|
|
16285
|
+
payments: {
|
|
16286
|
+
version: 0,
|
|
16287
|
+
unspent: 0x0d6e0327 // Lunsp
|
|
16288
|
+
},
|
|
16289
|
+
coin_type: 640,
|
|
16290
|
+
wif: 0x3F,
|
|
16291
|
+
multiCodec: 0x3c4,
|
|
16292
|
+
bip32: { public: 0x13BBF2D4, private: 0x13BBCBC4 },
|
|
16293
|
+
testnet: testnets['leofcoin:olivia']
|
|
16294
|
+
};
|
|
16295
|
+
const bitcoin = {
|
|
16296
|
+
messagePrefix: '\x18Bitcoin Signed Message:\n',
|
|
16297
|
+
version: 1,
|
|
16298
|
+
bech32: 'bc',
|
|
16299
|
+
pubKeyHash: 0x00,
|
|
16300
|
+
multiCodec: 0x00,
|
|
16301
|
+
scriptHash: 0x05,
|
|
16302
|
+
wif: 0x80,
|
|
16303
|
+
coin_type: 0,
|
|
16304
|
+
bip32: {
|
|
16305
|
+
public: 0x0488b21e, private: 0x0488ade4
|
|
16306
|
+
},
|
|
16307
|
+
testnet: testnets['bitcoin:testnet']
|
|
16308
|
+
};
|
|
16309
|
+
const litecoin = {
|
|
16310
|
+
messagePrefix: '\x19Litecoin Signed Message:\n',
|
|
16311
|
+
version: 1,
|
|
16312
|
+
pubKeyHash: 0x30,
|
|
16313
|
+
scriptHash: 0x32,
|
|
16314
|
+
wif: 0xb0,
|
|
16315
|
+
bip32: {
|
|
16316
|
+
public: 0x019da462,
|
|
16317
|
+
private: 0x019d9cfe
|
|
16318
|
+
},
|
|
16319
|
+
bech32: '',
|
|
16320
|
+
multiCodec: 0
|
|
16321
|
+
};
|
|
16322
|
+
const ethereum = {
|
|
16323
|
+
messagePrefix: '\x19Ethereum Signed Message:\n',
|
|
16324
|
+
version: 1,
|
|
16325
|
+
pubKeyHash: 0x30,
|
|
16326
|
+
scriptHash: 0x32,
|
|
16327
|
+
bip32: {
|
|
16328
|
+
private: 0x0488ADE4, public: 0x0488B21E
|
|
16329
|
+
},
|
|
16330
|
+
coin_type: 60,
|
|
16331
|
+
wif: 0x45,
|
|
16332
|
+
multiCodec: 0x3c5
|
|
16333
|
+
};
|
|
16334
|
+
/**
|
|
16335
|
+
* Our & supported networks
|
|
16336
|
+
* @return {leofcoin, olivia}
|
|
16337
|
+
*/
|
|
16338
|
+
var networks = {
|
|
16339
|
+
leofcoin,
|
|
16340
|
+
bitcoin,
|
|
16341
|
+
litecoin,
|
|
16342
|
+
ethereum
|
|
16389
16343
|
};
|
|
16390
16344
|
|
|
16391
|
-
const encode = (version, privateKey, compressed) => {
|
|
16345
|
+
const encode$1 = (version, privateKey, compressed) => {
|
|
16392
16346
|
if (privateKey.length !== 32)
|
|
16393
16347
|
throw new TypeError(`Invalid privateKey length: expected 32 got ${privateKey.length}`);
|
|
16394
16348
|
const uint8Array = new Uint8Array(compressed ? 34 : 33);
|
|
@@ -16399,7 +16353,7 @@ const encode = (version, privateKey, compressed) => {
|
|
|
16399
16353
|
}
|
|
16400
16354
|
return base58check.encode(uint8Array);
|
|
16401
16355
|
};
|
|
16402
|
-
const decode = async (wif, version) => {
|
|
16356
|
+
const decode$1 = async (wif, version) => {
|
|
16403
16357
|
wif = (await base58check.decode(wif)).data;
|
|
16404
16358
|
if (version && wif[0] !== version)
|
|
16405
16359
|
throw new Error('Invalid network version');
|
|
@@ -16414,207 +16368,216 @@ const decode = async (wif, version) => {
|
|
|
16414
16368
|
compressed: wif.length === 33 ? false : true
|
|
16415
16369
|
};
|
|
16416
16370
|
};
|
|
16417
|
-
var wif = { encode, decode };
|
|
16418
|
-
|
|
16419
|
-
const HIGHEST_BIT = 0x80000000;
|
|
16420
|
-
const { publicKeyCreate, publicKeyVerify, privateKeyVerify, privateKeyTweakAdd, ecdh } = secp256k1;
|
|
16421
|
-
class HdNode {
|
|
16422
|
-
#privateKey;
|
|
16423
|
-
#publicKey;
|
|
16424
|
-
#chainCode;
|
|
16425
|
-
#network;
|
|
16426
|
-
#depth;
|
|
16427
|
-
#index;
|
|
16428
|
-
#parentFingerprint;
|
|
16429
|
-
constructor(privateKey, publicKey, chainCode, network, depth = 0, index = 0, parentFingerprint = 0x00000000) {
|
|
16430
|
-
this.init(privateKey, publicKey, chainCode, network, depth, index, parentFingerprint);
|
|
16431
|
-
}
|
|
16432
|
-
init(privateKey, publicKey, chainCode, network, depth = 0, index = 0, parentFingerprint = 0x00000000) {
|
|
16433
|
-
this.#privateKey = privateKey;
|
|
16434
|
-
this.#publicKey = publicKey;
|
|
16435
|
-
this.#chainCode = chainCode;
|
|
16436
|
-
|
|
16437
|
-
this.#
|
|
16438
|
-
this.#
|
|
16439
|
-
this.#
|
|
16440
|
-
|
|
16441
|
-
|
|
16442
|
-
|
|
16443
|
-
|
|
16444
|
-
|
|
16445
|
-
|
|
16446
|
-
|
|
16447
|
-
|
|
16448
|
-
|
|
16449
|
-
|
|
16450
|
-
|
|
16451
|
-
|
|
16452
|
-
|
|
16453
|
-
|
|
16454
|
-
|
|
16455
|
-
|
|
16456
|
-
|
|
16457
|
-
|
|
16458
|
-
|
|
16459
|
-
|
|
16460
|
-
|
|
16461
|
-
|
|
16462
|
-
|
|
16463
|
-
|
|
16464
|
-
|
|
16465
|
-
|
|
16466
|
-
|
|
16467
|
-
|
|
16468
|
-
|
|
16469
|
-
|
|
16470
|
-
|
|
16471
|
-
|
|
16472
|
-
|
|
16473
|
-
|
|
16474
|
-
|
|
16475
|
-
|
|
16476
|
-
|
|
16477
|
-
|
|
16478
|
-
|
|
16479
|
-
|
|
16480
|
-
|
|
16481
|
-
if (seed.length
|
|
16482
|
-
throw new TypeError('Seed should be at
|
|
16483
|
-
|
|
16484
|
-
|
|
16485
|
-
|
|
16486
|
-
|
|
16487
|
-
|
|
16488
|
-
|
|
16489
|
-
|
|
16490
|
-
|
|
16491
|
-
|
|
16492
|
-
|
|
16493
|
-
|
|
16494
|
-
|
|
16495
|
-
|
|
16496
|
-
|
|
16497
|
-
|
|
16498
|
-
new TextEncoder().encode(
|
|
16499
|
-
new TextEncoder().encode(this.#
|
|
16500
|
-
this.#
|
|
16501
|
-
|
|
16502
|
-
|
|
16503
|
-
|
|
16504
|
-
|
|
16505
|
-
|
|
16506
|
-
|
|
16507
|
-
|
|
16508
|
-
|
|
16509
|
-
|
|
16510
|
-
|
|
16511
|
-
|
|
16512
|
-
|
|
16513
|
-
|
|
16514
|
-
|
|
16515
|
-
|
|
16516
|
-
|
|
16517
|
-
|
|
16518
|
-
|
|
16519
|
-
|
|
16520
|
-
|
|
16521
|
-
|
|
16522
|
-
|
|
16523
|
-
|
|
16524
|
-
|
|
16525
|
-
|
|
16526
|
-
|
|
16527
|
-
|
|
16528
|
-
new TextEncoder().encode(
|
|
16529
|
-
|
|
16530
|
-
|
|
16531
|
-
|
|
16532
|
-
|
|
16533
|
-
|
|
16534
|
-
|
|
16535
|
-
|
|
16536
|
-
|
|
16537
|
-
|
|
16538
|
-
|
|
16539
|
-
|
|
16540
|
-
|
|
16541
|
-
|
|
16542
|
-
|
|
16543
|
-
|
|
16544
|
-
|
|
16545
|
-
|
|
16546
|
-
|
|
16547
|
-
|
|
16548
|
-
|
|
16549
|
-
//
|
|
16550
|
-
|
|
16551
|
-
|
|
16552
|
-
|
|
16553
|
-
|
|
16554
|
-
|
|
16555
|
-
|
|
16556
|
-
|
|
16557
|
-
pubKey
|
|
16558
|
-
|
|
16559
|
-
|
|
16560
|
-
|
|
16561
|
-
|
|
16562
|
-
|
|
16563
|
-
|
|
16564
|
-
|
|
16565
|
-
|
|
16566
|
-
|
|
16567
|
-
|
|
16568
|
-
|
|
16569
|
-
|
|
16570
|
-
|
|
16571
|
-
|
|
16572
|
-
|
|
16573
|
-
|
|
16574
|
-
|
|
16575
|
-
|
|
16576
|
-
|
|
16577
|
-
|
|
16578
|
-
|
|
16579
|
-
|
|
16580
|
-
|
|
16581
|
-
|
|
16582
|
-
|
|
16583
|
-
|
|
16584
|
-
|
|
16585
|
-
|
|
16586
|
-
|
|
16587
|
-
|
|
16588
|
-
|
|
16589
|
-
|
|
16590
|
-
|
|
16591
|
-
|
|
16592
|
-
|
|
16593
|
-
|
|
16594
|
-
|
|
16595
|
-
|
|
16596
|
-
|
|
16597
|
-
|
|
16598
|
-
|
|
16599
|
-
|
|
16600
|
-
index =
|
|
16601
|
-
|
|
16602
|
-
|
|
16603
|
-
|
|
16604
|
-
|
|
16605
|
-
|
|
16606
|
-
|
|
16607
|
-
|
|
16608
|
-
|
|
16609
|
-
|
|
16610
|
-
|
|
16611
|
-
|
|
16612
|
-
|
|
16613
|
-
|
|
16614
|
-
|
|
16615
|
-
|
|
16616
|
-
|
|
16617
|
-
|
|
16371
|
+
var wif = { encode: encode$1, decode: decode$1 };
|
|
16372
|
+
|
|
16373
|
+
const HIGHEST_BIT = 0x80000000;
|
|
16374
|
+
const { publicKeyCreate, publicKeyVerify, privateKeyVerify, privateKeyTweakAdd, ecdh } = secp256k1;
|
|
16375
|
+
class HdNode {
|
|
16376
|
+
#privateKey;
|
|
16377
|
+
#publicKey;
|
|
16378
|
+
#chainCode;
|
|
16379
|
+
#network;
|
|
16380
|
+
#depth;
|
|
16381
|
+
#index;
|
|
16382
|
+
#parentFingerprint;
|
|
16383
|
+
constructor(privateKey, publicKey, chainCode, network, depth = 0, index = 0, parentFingerprint = 0x00000000) {
|
|
16384
|
+
this.init(privateKey, publicKey, chainCode, network, depth, index, parentFingerprint);
|
|
16385
|
+
}
|
|
16386
|
+
init(privateKey, publicKey, chainCode, network, depth = 0, index = 0, parentFingerprint = 0x00000000) {
|
|
16387
|
+
this.#privateKey = privateKey;
|
|
16388
|
+
this.#publicKey = publicKey;
|
|
16389
|
+
this.#chainCode = chainCode;
|
|
16390
|
+
// @ts-ignore
|
|
16391
|
+
this.#network = network || networks.leofcoin;
|
|
16392
|
+
this.#depth = depth;
|
|
16393
|
+
this.#index = index;
|
|
16394
|
+
this.#parentFingerprint = parentFingerprint;
|
|
16395
|
+
}
|
|
16396
|
+
get network() {
|
|
16397
|
+
return this.#network;
|
|
16398
|
+
}
|
|
16399
|
+
get publicKey() {
|
|
16400
|
+
this.#publicKey = this.#publicKey || publicKeyCreate(this.#privateKey, true);
|
|
16401
|
+
return this.#publicKey;
|
|
16402
|
+
}
|
|
16403
|
+
get privateKey() {
|
|
16404
|
+
return this.#privateKey;
|
|
16405
|
+
}
|
|
16406
|
+
get identifier() {
|
|
16407
|
+
return this.hash160(this.publicKey);
|
|
16408
|
+
}
|
|
16409
|
+
get fingerprint() {
|
|
16410
|
+
return (async () => (await this.identifier).subarray(0, 4))();
|
|
16411
|
+
}
|
|
16412
|
+
async hash160(data) {
|
|
16413
|
+
const hash = await createHash(data, 'SHA-256');
|
|
16414
|
+
return (await createRIPEMD160()).update(new Uint8Array(hash)).digest('binary');
|
|
16415
|
+
}
|
|
16416
|
+
get isNeutered() {
|
|
16417
|
+
return this.#privateKey === undefined;
|
|
16418
|
+
}
|
|
16419
|
+
get neutered() {
|
|
16420
|
+
return new HdNode(undefined, this.#publicKey, this.#chainCode, this.#network, this.#depth, this.#index, this.#parentFingerprint);
|
|
16421
|
+
}
|
|
16422
|
+
fromPrivateKey(privateKey, chainCode, network) {
|
|
16423
|
+
if (!privateKeyVerify(privateKey))
|
|
16424
|
+
throw new TypeError('Private key not in range [1, n)');
|
|
16425
|
+
const publicKey = publicKeyCreate(privateKey, true);
|
|
16426
|
+
return new HdNode(privateKey, publicKey, publicKey.slice(1), network);
|
|
16427
|
+
}
|
|
16428
|
+
fromPublicKey(publicKey, chainCode, network) {
|
|
16429
|
+
// verify the X coordinate is a point on the curve
|
|
16430
|
+
if (!publicKeyVerify(publicKey))
|
|
16431
|
+
throw new TypeError('Point is not on the curve');
|
|
16432
|
+
return new HdNode(undefined, publicKey, chainCode, network);
|
|
16433
|
+
}
|
|
16434
|
+
async fromSeed(seed, network) {
|
|
16435
|
+
if (seed.length < 16)
|
|
16436
|
+
throw new TypeError('Seed should be at least 128 bits');
|
|
16437
|
+
if (seed.length > 64)
|
|
16438
|
+
throw new TypeError('Seed should be at most 512 bits');
|
|
16439
|
+
let hash = (await createHMAC(createSHA512(), new TextEncoder().encode('Bitcoin seed')))
|
|
16440
|
+
.update(seed)
|
|
16441
|
+
.digest('binary');
|
|
16442
|
+
const privateKey = hash.subarray(0, 32);
|
|
16443
|
+
const chainCode = hash.subarray(32);
|
|
16444
|
+
return this.fromPrivateKey(privateKey, chainCode, network);
|
|
16445
|
+
}
|
|
16446
|
+
async toBase58() {
|
|
16447
|
+
const network = this.#network || networks.leofcoin;
|
|
16448
|
+
let version = !this.isNeutered
|
|
16449
|
+
? network.bip32.private
|
|
16450
|
+
: network.bip32.public;
|
|
16451
|
+
const set = [
|
|
16452
|
+
new TextEncoder().encode(version.toString()),
|
|
16453
|
+
new TextEncoder().encode(this.#depth.toString()),
|
|
16454
|
+
new TextEncoder().encode(this.#parentFingerprint.toString()),
|
|
16455
|
+
new TextEncoder().encode(this.#index.toString()),
|
|
16456
|
+
this.#chainCode
|
|
16457
|
+
];
|
|
16458
|
+
if (!this.isNeutered) {
|
|
16459
|
+
set.push(new TextEncoder().encode('0'));
|
|
16460
|
+
set.push(new Uint8Array(this.privateKey));
|
|
16461
|
+
}
|
|
16462
|
+
else {
|
|
16463
|
+
set.push(new Uint8Array(this.publicKey));
|
|
16464
|
+
}
|
|
16465
|
+
return base58check.encode(index$7(set));
|
|
16466
|
+
}
|
|
16467
|
+
toWIF() {
|
|
16468
|
+
if (!this.#privateKey)
|
|
16469
|
+
throw new TypeError('Missing private key');
|
|
16470
|
+
return wif.encode(this.#network.wif, this.#privateKey, true);
|
|
16471
|
+
}
|
|
16472
|
+
// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
|
|
16473
|
+
async derive(index) {
|
|
16474
|
+
const isHardened = index >= HIGHEST_BIT;
|
|
16475
|
+
let data;
|
|
16476
|
+
// Hardened child
|
|
16477
|
+
if (isHardened) {
|
|
16478
|
+
if (this.isNeutered)
|
|
16479
|
+
throw new TypeError('Missing private key for hardened child key');
|
|
16480
|
+
// data = 0x00 || ser256(kpar) || ser32(index)
|
|
16481
|
+
data = index$7([
|
|
16482
|
+
new TextEncoder().encode('0'),
|
|
16483
|
+
this.privateKey,
|
|
16484
|
+
new TextEncoder().encode(index.toString())
|
|
16485
|
+
]);
|
|
16486
|
+
}
|
|
16487
|
+
else {
|
|
16488
|
+
data = index$7([
|
|
16489
|
+
this.publicKey,
|
|
16490
|
+
new TextEncoder().encode(index.toString())
|
|
16491
|
+
]);
|
|
16492
|
+
}
|
|
16493
|
+
const hash = (await createHMAC(createSHA512(), this.#chainCode))
|
|
16494
|
+
.update(data)
|
|
16495
|
+
.digest('binary');
|
|
16496
|
+
const privateKey = hash.subarray(0, 32);
|
|
16497
|
+
const chainCode = hash.subarray(32);
|
|
16498
|
+
// if parse256(privateKey) >= n, proceed with the next value for i
|
|
16499
|
+
if (!privateKeyVerify(privateKey))
|
|
16500
|
+
return this.derive(index + 1);
|
|
16501
|
+
// Private parent key -> private child key
|
|
16502
|
+
if (!this.isNeutered) {
|
|
16503
|
+
// ki = parse256(privateKey) + kpar (mod n)
|
|
16504
|
+
const ki = privateKeyTweakAdd(this.privateKey, privateKey);
|
|
16505
|
+
// In case ki == 0, proceed with the next value for i
|
|
16506
|
+
if (ki == null)
|
|
16507
|
+
return this.derive(index + 1);
|
|
16508
|
+
return new HdNode(ki, null, chainCode, this.#network, this.#depth + 1, index, (await this.fingerprint)[0]);
|
|
16509
|
+
}
|
|
16510
|
+
function hashfn(x, y) {
|
|
16511
|
+
const pubKey = new Uint8Array(33);
|
|
16512
|
+
pubKey[0] = (y[31] & 1) === 0 ? 0x02 : 0x03;
|
|
16513
|
+
pubKey.set(x, 1);
|
|
16514
|
+
return pubKey;
|
|
16515
|
+
}
|
|
16516
|
+
const Ki = ecdh(this.publicKey, chainCode, { hashfn }, new Uint8Array(33));
|
|
16517
|
+
// const Ki = new Uint8Array(ecc.pointAddScalar(this.publicKey, IL, true));
|
|
16518
|
+
// In case Ki is the point at infinity, proceed with the next value for i
|
|
16519
|
+
if (Ki === null)
|
|
16520
|
+
return this.derive(index + 1);
|
|
16521
|
+
return new HdNode(undefined, Ki, chainCode, this.#network, this.#depth + 1, index, (await this.fingerprint)[0]);
|
|
16522
|
+
}
|
|
16523
|
+
deriveHardened(index) {
|
|
16524
|
+
// Only derives hardened private keys by default
|
|
16525
|
+
return this.derive(index + HIGHEST_BIT);
|
|
16526
|
+
}
|
|
16527
|
+
async derivePath(path) {
|
|
16528
|
+
let splitPath = path.split('/');
|
|
16529
|
+
if (splitPath[0] === 'm') {
|
|
16530
|
+
if (this.#parentFingerprint)
|
|
16531
|
+
throw new TypeError('Expected master, got child');
|
|
16532
|
+
splitPath = splitPath.slice(1);
|
|
16533
|
+
}
|
|
16534
|
+
let prevHd = this;
|
|
16535
|
+
for (const indexString of splitPath) {
|
|
16536
|
+
let index;
|
|
16537
|
+
if (indexString.slice(-1) === `'`) {
|
|
16538
|
+
index = parseInt(indexString.slice(0, -1), 10);
|
|
16539
|
+
// @ts-ignore
|
|
16540
|
+
prevHd = await prevHd.deriveHardened(index);
|
|
16541
|
+
}
|
|
16542
|
+
else {
|
|
16543
|
+
index = parseInt(indexString, 10);
|
|
16544
|
+
// @ts-ignore
|
|
16545
|
+
prevHd = await prevHd.derive(index);
|
|
16546
|
+
}
|
|
16547
|
+
}
|
|
16548
|
+
return prevHd;
|
|
16549
|
+
}
|
|
16550
|
+
async fromBase58(string, network) {
|
|
16551
|
+
let buffer = (await base58check.decode(string)).data;
|
|
16552
|
+
// @ts-ignore
|
|
16553
|
+
network = network || networks.leofcoin;
|
|
16554
|
+
let [version, depth, parentFingerprint, index, chainCode, k, privateKey] = index$6(buffer);
|
|
16555
|
+
// @ts-ignore
|
|
16556
|
+
version = Number(new TextDecoder().decode(version));
|
|
16557
|
+
// @ts-ignore
|
|
16558
|
+
depth = Number(new TextDecoder().decode(depth));
|
|
16559
|
+
// @ts-ignore
|
|
16560
|
+
parentFingerprint = Number(new TextDecoder().decode(parentFingerprint));
|
|
16561
|
+
// @ts-ignore
|
|
16562
|
+
index = Number(new TextDecoder().decode(index));
|
|
16563
|
+
// @ts-ignore
|
|
16564
|
+
k = privateKey ? 0 : k;
|
|
16565
|
+
if (version !== network.bip32.private && version !== network.bip32.public)
|
|
16566
|
+
throw new TypeError('Invalid network version');
|
|
16567
|
+
if (depth === 0) {
|
|
16568
|
+
if (parentFingerprint !== 0)
|
|
16569
|
+
throw new TypeError('Invalid parent fingerprint');
|
|
16570
|
+
}
|
|
16571
|
+
if (depth === 0 && index !== 0)
|
|
16572
|
+
throw new TypeError('Invalid index');
|
|
16573
|
+
if (version === network.bip32.private) {
|
|
16574
|
+
if (k !== 0x00)
|
|
16575
|
+
throw new TypeError('Invalid private key');
|
|
16576
|
+
return new HdNode(privateKey, undefined, chainCode, network, depth, index, parentFingerprint);
|
|
16577
|
+
}
|
|
16578
|
+
this.init(undefined, k, chainCode, network, depth, index, parentFingerprint);
|
|
16579
|
+
return new HdNode(undefined, k, chainCode, network, depth, index, parentFingerprint);
|
|
16580
|
+
}
|
|
16618
16581
|
}
|
|
16619
16582
|
|
|
16620
16583
|
// see https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
|
|
@@ -16667,144 +16630,145 @@ class Mnemonic {
|
|
|
16667
16630
|
}
|
|
16668
16631
|
}
|
|
16669
16632
|
|
|
16670
|
-
const fromNetworkString = network => {
|
|
16671
|
-
const parts = network.split(':');
|
|
16672
|
-
network = networks[parts[0]];
|
|
16673
|
-
if (parts[1]) {
|
|
16674
|
-
if (network[parts[1]])
|
|
16675
|
-
network = network[parts[1]];
|
|
16676
|
-
network.coin_type = 1;
|
|
16677
|
-
}
|
|
16678
|
-
return network;
|
|
16679
|
-
};
|
|
16680
|
-
const publicKeyToEthereumAddress = async (publicKeyBuffer) => {
|
|
16681
|
-
const hasher = await createKeccak(256);
|
|
16682
|
-
hasher.update(publicKeyBuffer);
|
|
16683
|
-
const hash = hasher.digest();
|
|
16684
|
-
return `0x${hash.slice(-40).toString()}`;
|
|
16685
|
-
};
|
|
16686
|
-
class HDWallet {
|
|
16687
|
-
hdnode;
|
|
16688
|
-
networkName;
|
|
16689
|
-
version;
|
|
16690
|
-
locked;
|
|
16691
|
-
network;
|
|
16692
|
-
multiCodec;
|
|
16693
|
-
get privateKey() {
|
|
16694
|
-
return this.ifNotLocked(() => this.hdnode.privateKey);
|
|
16695
|
-
}
|
|
16696
|
-
get publicKey() {
|
|
16697
|
-
return this.hdnode.publicKey;
|
|
16698
|
-
}
|
|
16699
|
-
async ethereumAddress() {
|
|
16700
|
-
const address = await publicKeyToEthereumAddress(this.publicKey);
|
|
16701
|
-
return address;
|
|
16702
|
-
}
|
|
16703
|
-
leofcoinAddress() {
|
|
16704
|
-
return base58check.encode(this.publicKey);
|
|
16705
|
-
}
|
|
16706
|
-
get address() {
|
|
16707
|
-
return this.getAddressForCoin();
|
|
16708
|
-
}
|
|
16709
|
-
async getAddressForCoin(coin_type) {
|
|
16710
|
-
if (!coin_type)
|
|
16711
|
-
coin_type = this.network.coin_type;
|
|
16712
|
-
if (coin_type === 1) {
|
|
16713
|
-
if (this.networkName?.split(':')[0] === 'ethereum')
|
|
16714
|
-
coin_type = 60;
|
|
16715
|
-
if (this.networkName?.split(':')[0] === 'leofcoin')
|
|
16716
|
-
coin_type = 640;
|
|
16717
|
-
}
|
|
16718
|
-
// if (coin_type === 0) return this.bitcoinAddress
|
|
16719
|
-
if (coin_type === 60)
|
|
16720
|
-
return this.ethereumAddress();
|
|
16721
|
-
if (coin_type === 640)
|
|
16722
|
-
return this.leofcoinAddress();
|
|
16723
|
-
|
|
16724
|
-
|
|
16725
|
-
|
|
16726
|
-
|
|
16727
|
-
|
|
16728
|
-
|
|
16729
|
-
|
|
16730
|
-
|
|
16731
|
-
|
|
16732
|
-
|
|
16733
|
-
this.
|
|
16734
|
-
|
|
16735
|
-
|
|
16736
|
-
|
|
16737
|
-
|
|
16738
|
-
this.
|
|
16739
|
-
|
|
16740
|
-
|
|
16741
|
-
|
|
16742
|
-
|
|
16743
|
-
|
|
16744
|
-
|
|
16745
|
-
|
|
16746
|
-
|
|
16747
|
-
|
|
16748
|
-
|
|
16749
|
-
|
|
16750
|
-
|
|
16751
|
-
|
|
16752
|
-
|
|
16753
|
-
|
|
16754
|
-
|
|
16755
|
-
|
|
16756
|
-
|
|
16757
|
-
|
|
16758
|
-
|
|
16759
|
-
|
|
16760
|
-
|
|
16761
|
-
|
|
16762
|
-
|
|
16763
|
-
|
|
16764
|
-
|
|
16765
|
-
|
|
16766
|
-
|
|
16767
|
-
|
|
16768
|
-
const
|
|
16769
|
-
|
|
16770
|
-
|
|
16771
|
-
|
|
16772
|
-
|
|
16773
|
-
|
|
16774
|
-
|
|
16775
|
-
|
|
16776
|
-
|
|
16777
|
-
|
|
16778
|
-
|
|
16779
|
-
node =
|
|
16780
|
-
|
|
16781
|
-
|
|
16782
|
-
|
|
16783
|
-
|
|
16784
|
-
|
|
16785
|
-
|
|
16786
|
-
|
|
16787
|
-
|
|
16788
|
-
|
|
16789
|
-
|
|
16790
|
-
|
|
16791
|
-
|
|
16792
|
-
|
|
16793
|
-
|
|
16794
|
-
|
|
16795
|
-
|
|
16796
|
-
|
|
16797
|
-
|
|
16798
|
-
|
|
16799
|
-
|
|
16800
|
-
|
|
16801
|
-
node =
|
|
16802
|
-
await
|
|
16803
|
-
|
|
16804
|
-
|
|
16805
|
-
|
|
16806
|
-
|
|
16807
|
-
|
|
16633
|
+
const fromNetworkString = network => {
|
|
16634
|
+
const parts = network.split(':');
|
|
16635
|
+
network = networks[parts[0]];
|
|
16636
|
+
if (parts[1]) {
|
|
16637
|
+
if (network[parts[1]])
|
|
16638
|
+
network = network[parts[1]];
|
|
16639
|
+
network.coin_type = 1;
|
|
16640
|
+
}
|
|
16641
|
+
return network;
|
|
16642
|
+
};
|
|
16643
|
+
const publicKeyToEthereumAddress = async (publicKeyBuffer) => {
|
|
16644
|
+
const hasher = await createKeccak(256);
|
|
16645
|
+
hasher.update(publicKeyBuffer);
|
|
16646
|
+
const hash = hasher.digest();
|
|
16647
|
+
return `0x${hash.slice(-40).toString()}`;
|
|
16648
|
+
};
|
|
16649
|
+
class HDWallet {
|
|
16650
|
+
hdnode;
|
|
16651
|
+
networkName;
|
|
16652
|
+
version;
|
|
16653
|
+
locked;
|
|
16654
|
+
network;
|
|
16655
|
+
multiCodec;
|
|
16656
|
+
get privateKey() {
|
|
16657
|
+
return this.ifNotLocked(() => this.hdnode.privateKey);
|
|
16658
|
+
}
|
|
16659
|
+
get publicKey() {
|
|
16660
|
+
return this.hdnode.publicKey;
|
|
16661
|
+
}
|
|
16662
|
+
async ethereumAddress() {
|
|
16663
|
+
const address = await publicKeyToEthereumAddress(this.publicKey);
|
|
16664
|
+
return address;
|
|
16665
|
+
}
|
|
16666
|
+
leofcoinAddress() {
|
|
16667
|
+
return base58check.encode(this.publicKey);
|
|
16668
|
+
}
|
|
16669
|
+
get address() {
|
|
16670
|
+
return this.getAddressForCoin();
|
|
16671
|
+
}
|
|
16672
|
+
async getAddressForCoin(coin_type) {
|
|
16673
|
+
if (!coin_type)
|
|
16674
|
+
coin_type = this.network.coin_type;
|
|
16675
|
+
if (coin_type === 1) {
|
|
16676
|
+
if (this.networkName?.split(':')[0] === 'ethereum')
|
|
16677
|
+
coin_type = 60;
|
|
16678
|
+
if (this.networkName?.split(':')[0] === 'leofcoin')
|
|
16679
|
+
coin_type = 640;
|
|
16680
|
+
}
|
|
16681
|
+
// if (coin_type === 0) return this.bitcoinAddress
|
|
16682
|
+
if (coin_type === 60)
|
|
16683
|
+
return this.ethereumAddress();
|
|
16684
|
+
if (coin_type === 640)
|
|
16685
|
+
return this.leofcoinAddress();
|
|
16686
|
+
// if (coin_type === 0) return this.bitcoinAddress()
|
|
16687
|
+
}
|
|
16688
|
+
get accountAddress() {
|
|
16689
|
+
return this.ifNotLocked(async () => base58check.encode(this.hdnode.publicKey));
|
|
16690
|
+
}
|
|
16691
|
+
get isTestnet() {
|
|
16692
|
+
return this.network.coin_type === 1;
|
|
16693
|
+
}
|
|
16694
|
+
constructor(network, hdnode) {
|
|
16695
|
+
if (typeof network === 'string') {
|
|
16696
|
+
this.networkName = network;
|
|
16697
|
+
this.network = fromNetworkString(network);
|
|
16698
|
+
}
|
|
16699
|
+
else if (typeof network === 'object')
|
|
16700
|
+
this.network = network;
|
|
16701
|
+
this.multiCodec = this.network.multiCodec;
|
|
16702
|
+
this.version = 0x00;
|
|
16703
|
+
if (hdnode)
|
|
16704
|
+
this.defineHDNode(hdnode);
|
|
16705
|
+
}
|
|
16706
|
+
ifNotLocked(fn, params) {
|
|
16707
|
+
if (this.locked)
|
|
16708
|
+
return;
|
|
16709
|
+
return params ? fn(...params) : fn();
|
|
16710
|
+
}
|
|
16711
|
+
async defineHDNode(value) {
|
|
16712
|
+
Object.defineProperty(this, 'hdnode', {
|
|
16713
|
+
configurable: false,
|
|
16714
|
+
writable: false,
|
|
16715
|
+
value: await value
|
|
16716
|
+
});
|
|
16717
|
+
}
|
|
16718
|
+
validateNetwork(network) {
|
|
16719
|
+
if (!network && !this.network)
|
|
16720
|
+
return console.error(`expected network to be defined`);
|
|
16721
|
+
if (!network && this.network)
|
|
16722
|
+
network = this.network;
|
|
16723
|
+
if (typeof network === 'string')
|
|
16724
|
+
network = fromNetworkString(network);
|
|
16725
|
+
if (typeof network !== 'object')
|
|
16726
|
+
return console.error('network not found');
|
|
16727
|
+
return network;
|
|
16728
|
+
}
|
|
16729
|
+
async generate(password, network) {
|
|
16730
|
+
network = this.validateNetwork(network);
|
|
16731
|
+
const mnemonic = await new Mnemonic().generate(512);
|
|
16732
|
+
const seed = await new Mnemonic().seedFromMnemonic(mnemonic, password, 512);
|
|
16733
|
+
await this.defineHDNode(await (new HdNode()).fromSeed(new Uint8Array(seed), network));
|
|
16734
|
+
return mnemonic;
|
|
16735
|
+
}
|
|
16736
|
+
/**
|
|
16737
|
+
* recover using mnemonic (recovery word list)
|
|
16738
|
+
*/
|
|
16739
|
+
async recover(mnemonic, password, network) {
|
|
16740
|
+
network = this.validateNetwork(network || password);
|
|
16741
|
+
const seed = await new Mnemonic().seedFromMnemonic(mnemonic, password, 512);
|
|
16742
|
+
let node = new HdNode();
|
|
16743
|
+
node = await node.fromSeed(new Uint8Array(seed), network);
|
|
16744
|
+
await this.defineHDNode(await node.fromSeed(new Uint8Array(seed), network));
|
|
16745
|
+
}
|
|
16746
|
+
async load(base58, network) {
|
|
16747
|
+
network = this.validateNetwork(network);
|
|
16748
|
+
await this.defineHDNode(await (new HdNode()).fromBase58(base58, network));
|
|
16749
|
+
}
|
|
16750
|
+
save() {
|
|
16751
|
+
return this.hdnode.toBase58();
|
|
16752
|
+
}
|
|
16753
|
+
async fromAddress(address, chainCode, network) {
|
|
16754
|
+
network = this.validateNetwork(network);
|
|
16755
|
+
address = (await base58check.decode(address)).data;
|
|
16756
|
+
if (!chainCode || chainCode && !Buffer.isBuffer(chainCode))
|
|
16757
|
+
chainCode = address.slice(1);
|
|
16758
|
+
await this.defineHDNode(await (new HdNode()).fromPublicKey(address, chainCode, network));
|
|
16759
|
+
}
|
|
16760
|
+
async fromPublicKey(hex, chainCode, network) {
|
|
16761
|
+
network = this.validateNetwork(network);
|
|
16762
|
+
if (!chainCode || chainCode)
|
|
16763
|
+
chainCode = hex.slice(1);
|
|
16764
|
+
let node = new HdNode();
|
|
16765
|
+
node = await node.fromPublicKey(hex, chainCode, network);
|
|
16766
|
+
await this.defineHDNode(node);
|
|
16767
|
+
return this;
|
|
16768
|
+
}
|
|
16769
|
+
async fromPrivateKey(privateKey, chainCode, network) {
|
|
16770
|
+
await this.defineHDNode(await (new HdNode()).fromPrivateKey(privateKey, chainCode, network));
|
|
16771
|
+
}
|
|
16808
16772
|
}
|
|
16809
16773
|
|
|
16810
16774
|
class MultiSignature {
|
|
@@ -16862,8 +16826,8 @@ class MultiSignature {
|
|
|
16862
16826
|
if (!signature)
|
|
16863
16827
|
throw ReferenceError('signature undefined');
|
|
16864
16828
|
this.#multiSignature = typedArrayConcat([
|
|
16865
|
-
index$
|
|
16866
|
-
index$
|
|
16829
|
+
index$8.encode(this.version),
|
|
16830
|
+
index$8.encode(this.multiCodec),
|
|
16867
16831
|
signature
|
|
16868
16832
|
]);
|
|
16869
16833
|
return this.multiSignature;
|
|
@@ -16879,10 +16843,10 @@ class MultiSignature {
|
|
|
16879
16843
|
if (!this.multiSignature)
|
|
16880
16844
|
throw ReferenceError('multiSignature undefined');
|
|
16881
16845
|
let buffer = this.multiSignature;
|
|
16882
|
-
const version = index$
|
|
16883
|
-
buffer = buffer.subarray(index$
|
|
16884
|
-
const codec = index$
|
|
16885
|
-
buffer = buffer.subarray(index$
|
|
16846
|
+
const version = index$8.decode(buffer);
|
|
16847
|
+
buffer = buffer.subarray(index$8.decode.bytes);
|
|
16848
|
+
const codec = index$8.decode(buffer);
|
|
16849
|
+
buffer = buffer.subarray(index$8.decode.bytes);
|
|
16886
16850
|
const signature = buffer.subarray(0, buffer.length);
|
|
16887
16851
|
if (version !== this.version)
|
|
16888
16852
|
throw TypeError('Invalid version');
|
|
@@ -16908,16 +16872,16 @@ class MultiSignature {
|
|
|
16908
16872
|
return this.decode(base58$1.decode(string));
|
|
16909
16873
|
}
|
|
16910
16874
|
toBs32() {
|
|
16911
|
-
return index$
|
|
16875
|
+
return index$9.encode(this.multiSignature);
|
|
16912
16876
|
}
|
|
16913
16877
|
fromBs32(string) {
|
|
16914
|
-
return this.decode(index$
|
|
16878
|
+
return this.decode(index$9.decode(string));
|
|
16915
16879
|
}
|
|
16916
16880
|
toBs32Hex() {
|
|
16917
|
-
return index$
|
|
16881
|
+
return index$9.encodeHex(this.multiSignature);
|
|
16918
16882
|
}
|
|
16919
16883
|
fromBs32Hex(string) {
|
|
16920
|
-
return this.decode(index$
|
|
16884
|
+
return this.decode(index$9.decodeHex(string));
|
|
16921
16885
|
}
|
|
16922
16886
|
toBs58Hex() {
|
|
16923
16887
|
return base58$1.encodeHex(this.multiSignature);
|
|
@@ -16927,132 +16891,6 @@ class MultiSignature {
|
|
|
16927
16891
|
}
|
|
16928
16892
|
}
|
|
16929
16893
|
|
|
16930
|
-
class MultiHDNode extends HDWallet {
|
|
16931
|
-
#encrypted;
|
|
16932
|
-
constructor(network, hdnode) {
|
|
16933
|
-
super(network, hdnode);
|
|
16934
|
-
}
|
|
16935
|
-
get id() {
|
|
16936
|
-
return base58check.encode(index$6([
|
|
16937
|
-
new TextEncoder().encode(this.version.toString()),
|
|
16938
|
-
this.account(0).hdnode.neutered.publicKey
|
|
16939
|
-
]));
|
|
16940
|
-
}
|
|
16941
|
-
get multiWIF() {
|
|
16942
|
-
return this.toMultiWif();
|
|
16943
|
-
}
|
|
16944
|
-
async fromId(id) {
|
|
16945
|
-
let buffer = (await base58check.decode(id)).data;
|
|
16946
|
-
index$7.decode(buffer);
|
|
16947
|
-
buffer = buffer.slice(index$7.decode.bytes);
|
|
16948
|
-
this.fromPublicKey(buffer, null, this.networkName);
|
|
16949
|
-
}
|
|
16950
|
-
async lock(multiWIF) {
|
|
16951
|
-
if (!multiWIF)
|
|
16952
|
-
multiWIF = this.multiWIF;
|
|
16953
|
-
this.#encrypted = await encrypt$1(multiWIF);
|
|
16954
|
-
this.locked = true;
|
|
16955
|
-
return this.#encrypted;
|
|
16956
|
-
}
|
|
16957
|
-
async unlock({ key, iv, cipher }) {
|
|
16958
|
-
const decrypted = await decrypt$1({ cipher, key, iv });
|
|
16959
|
-
await this.fromMultiWif(new TextDecoder().decode(decrypted));
|
|
16960
|
-
this.locked = false;
|
|
16961
|
-
}
|
|
16962
|
-
fromMultiWif(string) {
|
|
16963
|
-
const { version, codec, privateKey } = index.decode(string);
|
|
16964
|
-
this.network = Object.values(networks).reduce((p, c) => {
|
|
16965
|
-
if (c.multiCodec === codec)
|
|
16966
|
-
return c;
|
|
16967
|
-
else if (c.testnet && c.testnet.multiCodec === codec)
|
|
16968
|
-
return c.testnet;
|
|
16969
|
-
else
|
|
16970
|
-
return p;
|
|
16971
|
-
}, networks['leofcoin']);
|
|
16972
|
-
if (version !== this.network.version)
|
|
16973
|
-
throw new Error('invalid version');
|
|
16974
|
-
return this.fromPrivateKey(privateKey, undefined, this.network);
|
|
16975
|
-
}
|
|
16976
|
-
toMultiWif() {
|
|
16977
|
-
return index.encode(this.network.version, this.network.multiCodec, this.privateKey);
|
|
16978
|
-
}
|
|
16979
|
-
sign(hash) {
|
|
16980
|
-
return new MultiSignature(this.version, this.network.multiCodec)
|
|
16981
|
-
.sign(hash, this.privateKey);
|
|
16982
|
-
}
|
|
16983
|
-
verify(multiSignature, hash) {
|
|
16984
|
-
return new MultiSignature(this.version, this.network.multiCodec)
|
|
16985
|
-
.verify(multiSignature, hash, this.publicKey);
|
|
16986
|
-
}
|
|
16987
|
-
}
|
|
16988
|
-
|
|
16989
|
-
class HDAccount extends MultiHDNode {
|
|
16990
|
-
/**
|
|
16991
|
-
* @param {number} depth - acount depth
|
|
16992
|
-
*/
|
|
16993
|
-
constructor(network, hdnode, depth = 0) {
|
|
16994
|
-
super(network, hdnode);
|
|
16995
|
-
this.hdnode = hdnode;
|
|
16996
|
-
this.depth = depth;
|
|
16997
|
-
this._prefix = `m/44'/${hdnode.network.coin_type}'/${depth}'/`;
|
|
16998
|
-
}
|
|
16999
|
-
get neutered() {
|
|
17000
|
-
return this.hdnode.neutered;
|
|
17001
|
-
}
|
|
17002
|
-
/**
|
|
17003
|
-
* @param {number} index - address index
|
|
17004
|
-
*/
|
|
17005
|
-
async internal(index = 0) {
|
|
17006
|
-
return this.hdnode.derivePath(`${this._prefix}1/${index}`);
|
|
17007
|
-
}
|
|
17008
|
-
/**
|
|
17009
|
-
* @param {number} index - address index
|
|
17010
|
-
*/
|
|
17011
|
-
async external(index = 0) {
|
|
17012
|
-
return this.hdnode.derivePath(`${this._prefix}0/${index}`);
|
|
17013
|
-
}
|
|
17014
|
-
}
|
|
17015
|
-
|
|
17016
|
-
class MultiWallet extends MultiHDNode {
|
|
17017
|
-
constructor(network, hdnode) {
|
|
17018
|
-
super(network, hdnode);
|
|
17019
|
-
}
|
|
17020
|
-
get id() {
|
|
17021
|
-
return base58check.encode(index$6([
|
|
17022
|
-
new TextEncoder().encode(this.version.toString()),
|
|
17023
|
-
this.account(0).hdnode.neutered.publicKey
|
|
17024
|
-
]));
|
|
17025
|
-
}
|
|
17026
|
-
get multiWIF() {
|
|
17027
|
-
return this.toMultiWif();
|
|
17028
|
-
}
|
|
17029
|
-
get neutered() {
|
|
17030
|
-
return new HDAccount(this.networkName, this, this.hdnode.depth);
|
|
17031
|
-
}
|
|
17032
|
-
/**
|
|
17033
|
-
* @param {number} account - account to return chain for
|
|
17034
|
-
* @return internal(addressIndex), external(addressIndex)
|
|
17035
|
-
*/
|
|
17036
|
-
account(index) {
|
|
17037
|
-
return new HDAccount(this.networkName, this, index);
|
|
17038
|
-
}
|
|
17039
|
-
async fromAccount(privateKey, depth, network) {
|
|
17040
|
-
const node = await new MultiWallet(network).fromPrivateKey(privateKey);
|
|
17041
|
-
return new HDAccount(node, depth);
|
|
17042
|
-
}
|
|
17043
|
-
/**
|
|
17044
|
-
* m / purpose' / coin_type' / account' / change / aadress_index
|
|
17045
|
-
*
|
|
17046
|
-
* see https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
|
|
17047
|
-
*/
|
|
17048
|
-
async derivePath(path) {
|
|
17049
|
-
return new MultiWallet(this.networkName, await this.hdnode.derivePath(path));
|
|
17050
|
-
}
|
|
17051
|
-
async derive(index) {
|
|
17052
|
-
return new MultiWallet(this.networkName, await this.hdnode.derive(index));
|
|
17053
|
-
}
|
|
17054
|
-
}
|
|
17055
|
-
|
|
17056
16894
|
var passwordToKey = (password) => globalThis.crypto.subtle.importKey('raw', new TextEncoder().encode(password), 'PBKDF2', false, ['deriveKey']);
|
|
17057
16895
|
|
|
17058
16896
|
var deriveKey = (key, salt, iterations = 250000, hashAlgorithm = 'SHA-512') => globalThis.crypto.subtle.deriveKey({
|
|
@@ -17074,11 +16912,11 @@ var encrypt = async (password, data, version = new TextEncoder().encode('1')) =>
|
|
|
17074
16912
|
name: 'AES-GCM',
|
|
17075
16913
|
iv
|
|
17076
16914
|
}, key, new TextEncoder().encode(data));
|
|
17077
|
-
return index$
|
|
16915
|
+
return index$7([version, salt, iv, new Uint8Array(encrypted)]);
|
|
17078
16916
|
};
|
|
17079
16917
|
|
|
17080
16918
|
var decrypt = async (password, concatecated) => {
|
|
17081
|
-
const [version, salt, iv, cipher] = index$
|
|
16919
|
+
const [version, salt, iv, cipher] = index$6(concatecated);
|
|
17082
16920
|
let iterations;
|
|
17083
16921
|
if (new TextDecoder().decode(version) === '1') {
|
|
17084
16922
|
iterations = 250000;
|
|
@@ -17092,6 +16930,213 @@ var decrypt = async (password, concatecated) => {
|
|
|
17092
16930
|
return new TextDecoder().decode(decrypted);
|
|
17093
16931
|
};
|
|
17094
16932
|
|
|
16933
|
+
const MSB$1 = 0x80;
|
|
16934
|
+
const REST$1 = 0x7F;
|
|
16935
|
+
const MSBALL = ~REST$1;
|
|
16936
|
+
const INT = Math.pow(2, 31);
|
|
16937
|
+
const encode = (num, out, offset) => {
|
|
16938
|
+
if (Number.MAX_SAFE_INTEGER && num > Number.MAX_SAFE_INTEGER) {
|
|
16939
|
+
encode.bytes = 0;
|
|
16940
|
+
throw new RangeError('Could not encode varint');
|
|
16941
|
+
}
|
|
16942
|
+
out = out || [];
|
|
16943
|
+
offset = offset || 0;
|
|
16944
|
+
const oldOffset = offset;
|
|
16945
|
+
while (num >= INT) {
|
|
16946
|
+
out[offset++] = (num & 0xFF) | MSB$1;
|
|
16947
|
+
num /= 128;
|
|
16948
|
+
}
|
|
16949
|
+
while (num & MSBALL) {
|
|
16950
|
+
out[offset++] = (num & 0xFF) | MSB$1;
|
|
16951
|
+
num >>>= 7;
|
|
16952
|
+
}
|
|
16953
|
+
out[offset] = num | 0;
|
|
16954
|
+
encode.bytes = offset - oldOffset + 1;
|
|
16955
|
+
return out;
|
|
16956
|
+
};
|
|
16957
|
+
|
|
16958
|
+
const MSB = 0x80;
|
|
16959
|
+
const REST = 0x7F;
|
|
16960
|
+
const decode = (buf, offset) => {
|
|
16961
|
+
offset = offset || 0;
|
|
16962
|
+
const l = buf.length;
|
|
16963
|
+
let counter = offset;
|
|
16964
|
+
let result = 0;
|
|
16965
|
+
let shift = 0;
|
|
16966
|
+
let b;
|
|
16967
|
+
do {
|
|
16968
|
+
if (counter >= l || shift > 49) {
|
|
16969
|
+
decode.bytes = 0;
|
|
16970
|
+
throw new RangeError('Could not decode varint');
|
|
16971
|
+
}
|
|
16972
|
+
b = buf[counter++];
|
|
16973
|
+
result += shift < 28
|
|
16974
|
+
? (b & REST) << shift
|
|
16975
|
+
: (b & REST) * Math.pow(2, shift);
|
|
16976
|
+
shift += 7;
|
|
16977
|
+
} while (b >= MSB);
|
|
16978
|
+
decode.bytes = counter - offset;
|
|
16979
|
+
return result;
|
|
16980
|
+
};
|
|
16981
|
+
|
|
16982
|
+
const N1 = Math.pow(2, 7);
|
|
16983
|
+
const N2 = Math.pow(2, 14);
|
|
16984
|
+
const N3 = Math.pow(2, 21);
|
|
16985
|
+
const N4 = Math.pow(2, 28);
|
|
16986
|
+
const N5 = Math.pow(2, 35);
|
|
16987
|
+
const N6 = Math.pow(2, 42);
|
|
16988
|
+
const N7 = Math.pow(2, 49);
|
|
16989
|
+
const N8 = Math.pow(2, 56);
|
|
16990
|
+
const N9 = Math.pow(2, 63);
|
|
16991
|
+
var encodingLength = (value) => (value < N1 ? 1
|
|
16992
|
+
: value < N2 ? 2
|
|
16993
|
+
: value < N3 ? 3
|
|
16994
|
+
: value < N4 ? 4
|
|
16995
|
+
: value < N5 ? 5
|
|
16996
|
+
: value < N6 ? 6
|
|
16997
|
+
: value < N7 ? 7
|
|
16998
|
+
: value < N8 ? 8
|
|
16999
|
+
: value < N9 ? 9
|
|
17000
|
+
: 10);
|
|
17001
|
+
|
|
17002
|
+
var index = {
|
|
17003
|
+
encode,
|
|
17004
|
+
decode,
|
|
17005
|
+
encodingLength
|
|
17006
|
+
};
|
|
17007
|
+
|
|
17008
|
+
class MultiHDNode extends HDWallet {
|
|
17009
|
+
#encrypted;
|
|
17010
|
+
constructor(network, hdnode) {
|
|
17011
|
+
super(network, hdnode);
|
|
17012
|
+
}
|
|
17013
|
+
get id() {
|
|
17014
|
+
return base58check.encode(index$7([
|
|
17015
|
+
new TextEncoder().encode(this.version.toString()),
|
|
17016
|
+
this.account(0).hdnode.neutered.publicKey
|
|
17017
|
+
]));
|
|
17018
|
+
}
|
|
17019
|
+
get multiWIF() {
|
|
17020
|
+
return this.toMultiWif();
|
|
17021
|
+
}
|
|
17022
|
+
async fromId(id) {
|
|
17023
|
+
let buffer = (await base58check.decode(id)).data;
|
|
17024
|
+
index.decode(buffer);
|
|
17025
|
+
buffer = buffer.slice(index.decode.bytes);
|
|
17026
|
+
this.fromPublicKey(buffer, null, this.networkName);
|
|
17027
|
+
}
|
|
17028
|
+
async import(password, encrypted) {
|
|
17029
|
+
const { prefix, data } = await base58check.decode(encrypted);
|
|
17030
|
+
const decrypted = await decrypt(password, data);
|
|
17031
|
+
await this.fromMultiWif(decrypted);
|
|
17032
|
+
}
|
|
17033
|
+
async export(password) {
|
|
17034
|
+
return base58check.encode(await encrypt(password, await this.toMultiWif()));
|
|
17035
|
+
}
|
|
17036
|
+
async lock(password) {
|
|
17037
|
+
// todo redefine hdnode
|
|
17038
|
+
this.#encrypted = await this.export(password);
|
|
17039
|
+
this.locked = true;
|
|
17040
|
+
}
|
|
17041
|
+
async unlock(password) {
|
|
17042
|
+
const { prefix, data } = await base58check.decode(this.#encrypted);
|
|
17043
|
+
await decrypt(password, data);
|
|
17044
|
+
this.locked = false;
|
|
17045
|
+
}
|
|
17046
|
+
fromMultiWif(string) {
|
|
17047
|
+
const { version, codec, privateKey } = index$1.decode(string);
|
|
17048
|
+
this.network = Object.values(networks).reduce((p, c) => {
|
|
17049
|
+
if (c.multiCodec === codec)
|
|
17050
|
+
return c;
|
|
17051
|
+
else if (c.testnet && c.testnet.multiCodec === codec)
|
|
17052
|
+
return c.testnet;
|
|
17053
|
+
else
|
|
17054
|
+
return p;
|
|
17055
|
+
}, networks['leofcoin']);
|
|
17056
|
+
if (version !== this.network.version)
|
|
17057
|
+
throw new Error('invalid version');
|
|
17058
|
+
return this.fromPrivateKey(privateKey, undefined, this.network);
|
|
17059
|
+
}
|
|
17060
|
+
toMultiWif() {
|
|
17061
|
+
return index$1.encode(this.network.version, this.network.multiCodec, this.privateKey);
|
|
17062
|
+
}
|
|
17063
|
+
sign(hash) {
|
|
17064
|
+
return new MultiSignature(this.version, this.network.multiCodec)
|
|
17065
|
+
.sign(hash, this.privateKey);
|
|
17066
|
+
}
|
|
17067
|
+
verify(multiSignature, hash) {
|
|
17068
|
+
return new MultiSignature(this.version, this.network.multiCodec)
|
|
17069
|
+
.verify(multiSignature, hash, this.publicKey);
|
|
17070
|
+
}
|
|
17071
|
+
}
|
|
17072
|
+
|
|
17073
|
+
class HDAccount extends MultiHDNode {
|
|
17074
|
+
/**
|
|
17075
|
+
* @param {number} depth - acount depth
|
|
17076
|
+
*/
|
|
17077
|
+
constructor(network, hdnode, depth = 0) {
|
|
17078
|
+
super(network, hdnode);
|
|
17079
|
+
this.hdnode = hdnode;
|
|
17080
|
+
this.depth = depth;
|
|
17081
|
+
this._prefix = `m/44'/${hdnode.network.coin_type}'/${depth}'/`;
|
|
17082
|
+
}
|
|
17083
|
+
get neutered() {
|
|
17084
|
+
return this.hdnode.neutered;
|
|
17085
|
+
}
|
|
17086
|
+
/**
|
|
17087
|
+
* @param {number} index - address index
|
|
17088
|
+
*/
|
|
17089
|
+
async internal(index = 0) {
|
|
17090
|
+
return this.hdnode.derivePath(`${this._prefix}1/${index}`);
|
|
17091
|
+
}
|
|
17092
|
+
/**
|
|
17093
|
+
* @param {number} index - address index
|
|
17094
|
+
*/
|
|
17095
|
+
async external(index = 0) {
|
|
17096
|
+
return this.hdnode.derivePath(`${this._prefix}0/${index}`);
|
|
17097
|
+
}
|
|
17098
|
+
}
|
|
17099
|
+
|
|
17100
|
+
class MultiWallet extends MultiHDNode {
|
|
17101
|
+
constructor(network, hdnode) {
|
|
17102
|
+
super(network, hdnode);
|
|
17103
|
+
}
|
|
17104
|
+
get id() {
|
|
17105
|
+
return base58check.encode(index$7([
|
|
17106
|
+
new TextEncoder().encode(this.version.toString()),
|
|
17107
|
+
this.account(0).hdnode.neutered.publicKey
|
|
17108
|
+
]));
|
|
17109
|
+
}
|
|
17110
|
+
get multiWIF() {
|
|
17111
|
+
return this.toMultiWif();
|
|
17112
|
+
}
|
|
17113
|
+
get neutered() {
|
|
17114
|
+
return new HDAccount(this.networkName, this, this.hdnode.depth);
|
|
17115
|
+
}
|
|
17116
|
+
/**
|
|
17117
|
+
* @param {number} account - account to return chain for
|
|
17118
|
+
* @return internal(addressIndex), external(addressIndex)
|
|
17119
|
+
*/
|
|
17120
|
+
account(index) {
|
|
17121
|
+
return new HDAccount(this.networkName, this, index);
|
|
17122
|
+
}
|
|
17123
|
+
async fromAccount(privateKey, depth, network) {
|
|
17124
|
+
const node = await new MultiWallet(network).fromPrivateKey(privateKey);
|
|
17125
|
+
return new HDAccount(node, depth);
|
|
17126
|
+
}
|
|
17127
|
+
/**
|
|
17128
|
+
* m / purpose' / coin_type' / account' / change / aadress_index
|
|
17129
|
+
*
|
|
17130
|
+
* see https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
|
|
17131
|
+
*/
|
|
17132
|
+
async derivePath(path) {
|
|
17133
|
+
return new MultiWallet(this.networkName, await this.hdnode.derivePath(path));
|
|
17134
|
+
}
|
|
17135
|
+
async derive(index) {
|
|
17136
|
+
return new MultiWallet(this.networkName, await this.hdnode.derive(index));
|
|
17137
|
+
}
|
|
17138
|
+
}
|
|
17139
|
+
|
|
17095
17140
|
class e{constructor(a,b,c,d,f){this._legacyCanvasSize=e.DEFAULT_CANVAS_SIZE;this._preferredCamera="environment";this._maxScansPerSecond=25;this._lastScanTimestamp=-1;this._destroyed=this._flashOn=this._paused=this._active=!1;this.$video=a;this.$canvas=document.createElement("canvas");c&&"object"===typeof c?this._onDecode=b:(c||d||f?console.warn("You're using a deprecated version of the QrScanner constructor which will be removed in the future"):console.warn("Note that the type of the scan result passed to onDecode will change in the future. To already switch to the new api today, you can pass returnDetailedScanResult: true."),
|
|
17096
17141
|
this._legacyOnDecode=b);b="object"===typeof c?c:{};this._onDecodeError=b.onDecodeError||("function"===typeof c?c:this._onDecodeError);this._calculateScanRegion=b.calculateScanRegion||("function"===typeof d?d:this._calculateScanRegion);this._preferredCamera=b.preferredCamera||f||this._preferredCamera;this._legacyCanvasSize="number"===typeof c?c:"number"===typeof d?d:this._legacyCanvasSize;this._maxScansPerSecond=b.maxScansPerSecond||this._maxScansPerSecond;this._onPlay=this._onPlay.bind(this);this._onLoadedMetaData=
|
|
17097
17142
|
this._onLoadedMetaData.bind(this);this._onVisibilityChange=this._onVisibilityChange.bind(this);this._updateOverlay=this._updateOverlay.bind(this);a.disablePictureInPicture=!0;a.playsInline=!0;a.muted=!0;let h=!1;a.hidden&&(a.hidden=!1,h=!0);document.body.contains(a)||(document.body.appendChild(a),h=!0);c=a.parentElement;if(b.highlightScanRegion||b.highlightCodeOutline){d=!!b.overlay;this.$overlay=b.overlay||document.createElement("div");f=this.$overlay.style;f.position="absolute";f.display="none";
|
|
@@ -20048,6 +20093,7 @@ class Identity {
|
|
|
20048
20093
|
#wallet;
|
|
20049
20094
|
network;
|
|
20050
20095
|
id;
|
|
20096
|
+
selectedAccount;
|
|
20051
20097
|
constructor(network) {
|
|
20052
20098
|
this.network = network;
|
|
20053
20099
|
}
|
|
@@ -20070,6 +20116,7 @@ class Identity {
|
|
|
20070
20116
|
}
|
|
20071
20117
|
}
|
|
20072
20118
|
if (!password) {
|
|
20119
|
+
// @ts-ignore
|
|
20073
20120
|
const importee = await import('./src/prompts/password.js');
|
|
20074
20121
|
password = await importee.default();
|
|
20075
20122
|
}
|
|
@@ -20078,17 +20125,17 @@ class Identity {
|
|
|
20078
20125
|
const pub = await globalThis.accountStore.get('public');
|
|
20079
20126
|
this.id = JSON.parse(new TextDecoder().decode(pub)).walletId;
|
|
20080
20127
|
const selected = await globalThis.walletStore.get('selected-account');
|
|
20081
|
-
|
|
20128
|
+
this.selectedAccount = new TextDecoder().decode(selected);
|
|
20082
20129
|
}
|
|
20083
20130
|
else {
|
|
20084
|
-
const importee = await import(/* webpackChunkName: "generate-account" */ './index-
|
|
20131
|
+
const importee = await import(/* webpackChunkName: "generate-account" */ './index-329e0324.js');
|
|
20085
20132
|
const { identity, accounts } = await importee.default(password, this.network);
|
|
20086
20133
|
await globalThis.accountStore.put('public', JSON.stringify({ walletId: identity.walletId }));
|
|
20087
20134
|
await globalThis.walletStore.put('version', String(1));
|
|
20088
20135
|
await globalThis.walletStore.put('accounts', JSON.stringify(accounts));
|
|
20089
20136
|
await globalThis.walletStore.put('selected-account', accounts[0][1]);
|
|
20090
20137
|
await globalThis.walletStore.put('identity', JSON.stringify(identity));
|
|
20091
|
-
|
|
20138
|
+
this.selectedAccount = accounts[0][1];
|
|
20092
20139
|
this.id = identity.walletId;
|
|
20093
20140
|
}
|
|
20094
20141
|
const identity = JSON.parse(new TextDecoder().decode(await globalThis.walletStore.get('identity')));
|
|
@@ -20096,25 +20143,31 @@ class Identity {
|
|
|
20096
20143
|
const multiWIF = await decrypt(password, base58$1.decode(identity.multiWIF));
|
|
20097
20144
|
await this.#wallet.fromMultiWif(multiWIF);
|
|
20098
20145
|
}
|
|
20146
|
+
selectAccount(account) {
|
|
20147
|
+
this.selectedAccount = account;
|
|
20148
|
+
return walletStore.put('selected-account', account);
|
|
20149
|
+
}
|
|
20099
20150
|
sign(hash) {
|
|
20100
20151
|
return this.#wallet.sign(hash.subarray(0, 32));
|
|
20101
20152
|
}
|
|
20153
|
+
lock(password) {
|
|
20154
|
+
this.#wallet.lock(password);
|
|
20155
|
+
}
|
|
20156
|
+
unlock(password) {
|
|
20157
|
+
this.#wallet.unlock(password);
|
|
20158
|
+
}
|
|
20102
20159
|
async export(password) {
|
|
20103
|
-
|
|
20104
|
-
const encypted = await encrypt(password, multiWIF);
|
|
20105
|
-
return base58$1.encode(encypted);
|
|
20160
|
+
return this.#wallet.export(password);
|
|
20106
20161
|
}
|
|
20107
20162
|
async import(password, encrypted) {
|
|
20108
|
-
this.#wallet
|
|
20109
|
-
const decrypted = await decrypt(password, base58$1.decode(encrypted));
|
|
20110
|
-
await this.#wallet.fromMultiWif(decrypted);
|
|
20163
|
+
await this.#wallet.import(password, encrypted);
|
|
20111
20164
|
}
|
|
20112
20165
|
async exportQR(password) {
|
|
20113
20166
|
const exported = await this.export(password);
|
|
20114
20167
|
return globalThis.navigator ? await browser.toDataURL(exported) : await browser.toString(exported, { type: 'terminal' });
|
|
20115
20168
|
}
|
|
20116
20169
|
async importQR(image, password) {
|
|
20117
|
-
const multiWIF = e.scanImage(image);
|
|
20170
|
+
const multiWIF = await e.default.scanImage(image);
|
|
20118
20171
|
return this.import(password, multiWIF);
|
|
20119
20172
|
}
|
|
20120
20173
|
}
|
|
@@ -20194,12 +20247,18 @@ class Peernet {
|
|
|
20194
20247
|
get id() {
|
|
20195
20248
|
return this.identity.id;
|
|
20196
20249
|
}
|
|
20250
|
+
get selectedAccount() {
|
|
20251
|
+
return this.identity.selectedAccount;
|
|
20252
|
+
}
|
|
20197
20253
|
get accounts() {
|
|
20198
20254
|
return this.identity.accounts;
|
|
20199
20255
|
}
|
|
20200
20256
|
get defaultStores() {
|
|
20201
20257
|
return ['account', 'wallet', 'block', 'transaction', 'chain', 'data', 'message'];
|
|
20202
20258
|
}
|
|
20259
|
+
selectAccount(account) {
|
|
20260
|
+
return this.identity.selectAccount(account);
|
|
20261
|
+
}
|
|
20203
20262
|
addProto(name, proto) {
|
|
20204
20263
|
if (!globalThis.peernet.protos[name])
|
|
20205
20264
|
globalThis.peernet.protos[name] = proto;
|
|
@@ -20245,7 +20304,7 @@ class Peernet {
|
|
|
20245
20304
|
* @return {String} id - peerId
|
|
20246
20305
|
*/
|
|
20247
20306
|
getConnection(id) {
|
|
20248
|
-
return this.
|
|
20307
|
+
return this.connections[id];
|
|
20249
20308
|
}
|
|
20250
20309
|
/**
|
|
20251
20310
|
* @private
|
|
@@ -20260,7 +20319,7 @@ class Peernet {
|
|
|
20260
20319
|
this.root = options.root;
|
|
20261
20320
|
const { RequestMessage, ResponseMessage, PeerMessage, PeerMessageResponse, PeernetMessage, DHTMessage, DHTMessageResponse, DataMessage, DataMessageResponse, PsMessage, ChatMessage, PeernetFile
|
|
20262
20321
|
// FolderMessageResponse
|
|
20263
|
-
} = await import(/* webpackChunkName: "messages" */ './messages-
|
|
20322
|
+
} = await import(/* webpackChunkName: "messages" */ './messages-000b7f84.js');
|
|
20264
20323
|
/**
|
|
20265
20324
|
* proto Object containing protos
|
|
20266
20325
|
* @type {Object}
|
|
@@ -20497,7 +20556,7 @@ class Peernet {
|
|
|
20497
20556
|
return;
|
|
20498
20557
|
return await blockStore.put(hash, data);
|
|
20499
20558
|
},
|
|
20500
|
-
has: async (hash) => await blockStore.has(hash
|
|
20559
|
+
has: async (hash) => await blockStore.has(hash),
|
|
20501
20560
|
};
|
|
20502
20561
|
}
|
|
20503
20562
|
get transaction() {
|