@orbinum/sdk 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-Y6LNYJAJ.mjs → chunk-A2ZRMEYW.mjs} +147 -13
- package/dist/{index-JYVjYJtf.d.mts → index-V5Z9igEN.d.mts} +41 -1
- package/dist/{index-JYVjYJtf.d.ts → index-V5Z9igEN.d.ts} +41 -1
- package/dist/index.d.mts +220 -4
- package/dist/index.d.ts +220 -4
- package/dist/index.js +333 -35
- package/dist/index.mjs +179 -14
- package/dist/wallet/worker/index.d.mts +1 -1
- package/dist/wallet/worker/index.d.ts +1 -1
- package/dist/wallet/worker/index.js +1 -0
- package/dist/wallet/worker/index.mjs +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
LEAVES_PER_TREE,
|
|
16
16
|
MAX_WORKERS,
|
|
17
17
|
NoteBuilder,
|
|
18
|
+
OVK_BLOB_SIZE,
|
|
18
19
|
PAIRWISE_EPH_WINDOW,
|
|
19
20
|
SELF_EPH_WINDOW,
|
|
20
21
|
WORKER_CRASHED,
|
|
@@ -38,6 +39,8 @@ import {
|
|
|
38
39
|
createWorkerPool,
|
|
39
40
|
decodeNoteDisclosureKey,
|
|
40
41
|
decryptHintBatch,
|
|
42
|
+
deriveOutgoingCipherKey,
|
|
43
|
+
deriveOutgoingViewingKey,
|
|
41
44
|
deriveOwnerPk,
|
|
42
45
|
derivePairwiseEphSk,
|
|
43
46
|
derivePairwiseSharedSecret,
|
|
@@ -59,18 +62,22 @@ import {
|
|
|
59
62
|
isSpendable,
|
|
60
63
|
isValidLeafIndex,
|
|
61
64
|
leHexToBigint,
|
|
65
|
+
openOutgoingBlob,
|
|
62
66
|
pairwiseEphWindow,
|
|
67
|
+
randomOutgoingBlob,
|
|
63
68
|
recoverOwnerPkPoint,
|
|
64
69
|
scalarToHex,
|
|
65
70
|
scanAbortError,
|
|
71
|
+
sealOutgoingBlob,
|
|
66
72
|
selectNotes,
|
|
67
73
|
selfEphWindow,
|
|
68
74
|
serializeMemo,
|
|
69
75
|
toHex,
|
|
70
76
|
treeIdOf,
|
|
71
77
|
tryDecryptNote,
|
|
72
|
-
tryDecryptNoteVerbose
|
|
73
|
-
|
|
78
|
+
tryDecryptNoteVerbose,
|
|
79
|
+
tryRecoverOutgoing
|
|
80
|
+
} from "./chunk-A2ZRMEYW.mjs";
|
|
74
81
|
|
|
75
82
|
// src/foundation/encoding/base64.ts
|
|
76
83
|
var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
@@ -365,6 +372,101 @@ function addressToFieldElement(address) {
|
|
|
365
372
|
return bytesToBigintLE(bytes) % BN254_R;
|
|
366
373
|
}
|
|
367
374
|
|
|
375
|
+
// src/protocol/memo/PaymentSlip.ts
|
|
376
|
+
import { chacha20poly1305 } from "@noble/ciphers/chacha.js";
|
|
377
|
+
import { randomBytes } from "@noble/ciphers/utils.js";
|
|
378
|
+
import { hkdf } from "@noble/hashes/hkdf.js";
|
|
379
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
380
|
+
import { packPoint, unpackPoint } from "@zk-kit/baby-jubjub";
|
|
381
|
+
var SLIP_DOMAIN = new TextEncoder().encode("orbinum-payment-slip-v1");
|
|
382
|
+
var NONCE_PREFIX = new TextEncoder().encode("SLP1");
|
|
383
|
+
var EPH_PK_SIZE = 32;
|
|
384
|
+
var NONCE_SUFFIX_SIZE = 8;
|
|
385
|
+
function deriveSlipKey(sharedSecret) {
|
|
386
|
+
return hkdf(sha256, sharedSecret, void 0, SLIP_DOMAIN, 32);
|
|
387
|
+
}
|
|
388
|
+
function buildNonce(suffix) {
|
|
389
|
+
const nonce = new Uint8Array(12);
|
|
390
|
+
nonce.set(NONCE_PREFIX, 0);
|
|
391
|
+
nonce.set(suffix, 4);
|
|
392
|
+
return nonce;
|
|
393
|
+
}
|
|
394
|
+
function sealPaymentSlip(recipientIvkPacked, fields) {
|
|
395
|
+
if (recipientIvkPacked.length !== 32) {
|
|
396
|
+
throw new Error(
|
|
397
|
+
`PaymentSlip: recipientIvk must be 32 bytes, got ${recipientIvkPacked.length}`
|
|
398
|
+
);
|
|
399
|
+
}
|
|
400
|
+
const ivkPoint = unpackPoint(bytesToBigintLE(recipientIvkPacked));
|
|
401
|
+
if (!ivkPoint) throw new Error("PaymentSlip: invalid recipient viewing public key");
|
|
402
|
+
const ephSkScalar = bytesToBjjScalar(randomBytes(32));
|
|
403
|
+
const ephPkPacked = bigintTo32Le(packPoint(fastMulBase(ephSkScalar)));
|
|
404
|
+
const sharedPoint = fastMulPoint(ivkPoint, ephSkScalar);
|
|
405
|
+
const sharedSecret = bigintTo32Le(sharedPoint[0]);
|
|
406
|
+
const slipKey = deriveSlipKey(sharedSecret);
|
|
407
|
+
const suffix = randomBytes(NONCE_SUFFIX_SIZE);
|
|
408
|
+
const cipher = chacha20poly1305(slipKey, buildNonce(suffix));
|
|
409
|
+
const plaintext = new TextEncoder().encode(JSON.stringify(fields));
|
|
410
|
+
const sealed = cipher.encrypt(plaintext);
|
|
411
|
+
const envelope = new Uint8Array(EPH_PK_SIZE + NONCE_SUFFIX_SIZE + sealed.length);
|
|
412
|
+
envelope.set(ephPkPacked, 0);
|
|
413
|
+
envelope.set(suffix, EPH_PK_SIZE);
|
|
414
|
+
envelope.set(sealed, EPH_PK_SIZE + NONCE_SUFFIX_SIZE);
|
|
415
|
+
return envelope;
|
|
416
|
+
}
|
|
417
|
+
function openPaymentSlip(recipientIvsk, envelope) {
|
|
418
|
+
if (envelope.length < EPH_PK_SIZE + NONCE_SUFFIX_SIZE + 16) return null;
|
|
419
|
+
try {
|
|
420
|
+
const ephPkPacked = envelope.subarray(0, EPH_PK_SIZE);
|
|
421
|
+
const ephPkPoint = unpackPoint(bytesToBigintLE(ephPkPacked));
|
|
422
|
+
if (!ephPkPoint) return null;
|
|
423
|
+
const ivskScalar = bytesToBjjScalar(recipientIvsk);
|
|
424
|
+
const sharedSecret = bigintTo32Le(fastMulPoint(ephPkPoint, ivskScalar)[0]);
|
|
425
|
+
const slipKey = deriveSlipKey(sharedSecret);
|
|
426
|
+
const suffix = envelope.subarray(EPH_PK_SIZE, EPH_PK_SIZE + NONCE_SUFFIX_SIZE);
|
|
427
|
+
const sealed = envelope.subarray(EPH_PK_SIZE + NONCE_SUFFIX_SIZE);
|
|
428
|
+
const cipher = chacha20poly1305(slipKey, buildNonce(suffix));
|
|
429
|
+
const plaintext = cipher.decrypt(sealed);
|
|
430
|
+
const fields = JSON.parse(new TextDecoder().decode(plaintext));
|
|
431
|
+
if (typeof fields.commitmentHex !== "string" || typeof fields.encryptedMemo !== "string") {
|
|
432
|
+
return null;
|
|
433
|
+
}
|
|
434
|
+
return fields;
|
|
435
|
+
} catch {
|
|
436
|
+
return null;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
var PAYMENT_SLIP_SCHEME = "orbslip1:";
|
|
440
|
+
function slipChecksum(payload) {
|
|
441
|
+
const digest = sha256(new TextEncoder().encode(PAYMENT_SLIP_SCHEME + payload));
|
|
442
|
+
return toHex(digest.slice(0, 4)).slice(2);
|
|
443
|
+
}
|
|
444
|
+
function encodePaymentSlip(envelope) {
|
|
445
|
+
const payload = base64UrlEncode(toHex(envelope));
|
|
446
|
+
return `${PAYMENT_SLIP_SCHEME}${payload}:${slipChecksum(payload)}`;
|
|
447
|
+
}
|
|
448
|
+
function decodePaymentSlip(text) {
|
|
449
|
+
if (!text.startsWith(PAYMENT_SLIP_SCHEME)) return null;
|
|
450
|
+
const rest = text.slice(PAYMENT_SLIP_SCHEME.length);
|
|
451
|
+
const sep = rest.lastIndexOf(":");
|
|
452
|
+
if (sep < 0) return null;
|
|
453
|
+
const payload = rest.slice(0, sep);
|
|
454
|
+
const checksum = rest.slice(sep + 1);
|
|
455
|
+
if (slipChecksum(payload) !== checksum) return null;
|
|
456
|
+
try {
|
|
457
|
+
const hex = base64UrlDecode(payload);
|
|
458
|
+
const clean = hex.startsWith("0x") ? hex.slice(2) : hex;
|
|
459
|
+
if (clean.length % 2 !== 0) return null;
|
|
460
|
+
const bytes = new Uint8Array(clean.length / 2);
|
|
461
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
462
|
+
bytes[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);
|
|
463
|
+
}
|
|
464
|
+
return bytes;
|
|
465
|
+
} catch {
|
|
466
|
+
return null;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
|
|
368
470
|
// src/chain/evm/precompiles/addresses.ts
|
|
369
471
|
var PRECOMPILE_ADDR = {
|
|
370
472
|
// ── Ethereum standard (EIP) ─────────────────────────────────────────────
|
|
@@ -463,10 +565,10 @@ ${canonicalAccountId(address)}`;
|
|
|
463
565
|
}
|
|
464
566
|
|
|
465
567
|
// src/protocol/keys/PrivacyKeyManager.ts
|
|
466
|
-
import { sha256 } from "@noble/hashes/sha2.js";
|
|
568
|
+
import { sha256 as sha2562 } from "@noble/hashes/sha2.js";
|
|
467
569
|
function privacyAddressChecksum(ownerPkHex, ivkHex) {
|
|
468
570
|
const body = `orbpriv2:${ownerPkHex}:${ivkHex}`;
|
|
469
|
-
const digest =
|
|
571
|
+
const digest = sha2562(new TextEncoder().encode(body));
|
|
470
572
|
return toHex(digest.slice(0, 4)).slice(2);
|
|
471
573
|
}
|
|
472
574
|
var PrivacyKeyManager = class {
|
|
@@ -475,7 +577,8 @@ var PrivacyKeyManager = class {
|
|
|
475
577
|
masterBytes: null,
|
|
476
578
|
viewingSecretKey: null,
|
|
477
579
|
viewingPublicKeyPacked: null,
|
|
478
|
-
ownerPk: null
|
|
580
|
+
ownerPk: null,
|
|
581
|
+
outgoingViewingKey: null
|
|
479
582
|
};
|
|
480
583
|
/**
|
|
481
584
|
* Load a spending key and its corresponding master bytes into the in-memory session.
|
|
@@ -490,12 +593,14 @@ var PrivacyKeyManager = class {
|
|
|
490
593
|
const viewingSecretKey = deriveViewingSecretKey(spendingKey);
|
|
491
594
|
const viewingPublicKeyPacked = deriveViewingPublicKey(viewingSecretKey);
|
|
492
595
|
const ownerPk = deriveOwnerPk(spendingKey);
|
|
596
|
+
const outgoingViewingKey = deriveOutgoingViewingKey(masterBytes);
|
|
493
597
|
this._state = {
|
|
494
598
|
spendingKey,
|
|
495
599
|
masterBytes,
|
|
496
600
|
viewingSecretKey,
|
|
497
601
|
viewingPublicKeyPacked,
|
|
498
|
-
ownerPk
|
|
602
|
+
ownerPk,
|
|
603
|
+
outgoingViewingKey
|
|
499
604
|
};
|
|
500
605
|
}
|
|
501
606
|
/** Clear all key material from memory. Call on vault lock / sign-out. */
|
|
@@ -505,7 +610,8 @@ var PrivacyKeyManager = class {
|
|
|
505
610
|
masterBytes: null,
|
|
506
611
|
viewingSecretKey: null,
|
|
507
612
|
viewingPublicKeyPacked: null,
|
|
508
|
-
ownerPk: null
|
|
613
|
+
ownerPk: null,
|
|
614
|
+
outgoingViewingKey: null
|
|
509
615
|
};
|
|
510
616
|
}
|
|
511
617
|
/** Returns true if a spending key has been loaded. */
|
|
@@ -550,6 +656,16 @@ var PrivacyKeyManager = class {
|
|
|
550
656
|
}
|
|
551
657
|
return this._state.ownerPk;
|
|
552
658
|
}
|
|
659
|
+
/**
|
|
660
|
+
* Returns the 32-byte outgoing viewing key (ovk). Throws if not loaded.
|
|
661
|
+
* Used to seal/open the outgoing blob that lets the sender recover a transfer.
|
|
662
|
+
*/
|
|
663
|
+
getOutgoingViewingKey() {
|
|
664
|
+
if (this._state.outgoingViewingKey === null) {
|
|
665
|
+
throw new Error("PrivacyKeyManager: no key loaded. Call load() first.");
|
|
666
|
+
}
|
|
667
|
+
return this._state.outgoingViewingKey;
|
|
668
|
+
}
|
|
553
669
|
/** Returns the spending key as a 32-byte little-endian Uint8Array. Throws if not loaded. */
|
|
554
670
|
getSpendingKeyBytes() {
|
|
555
671
|
return bigintTo32Le(this.getSpendingKey());
|
|
@@ -651,8 +767,8 @@ var PrivacyKeyManager = class {
|
|
|
651
767
|
};
|
|
652
768
|
|
|
653
769
|
// src/protocol/keys/spendingKeyDerivation.ts
|
|
654
|
-
import { hkdf } from "@noble/hashes/hkdf.js";
|
|
655
|
-
import { sha256 as
|
|
770
|
+
import { hkdf as hkdf2 } from "@noble/hashes/hkdf.js";
|
|
771
|
+
import { sha256 as sha2563 } from "@noble/hashes/sha2.js";
|
|
656
772
|
var MIN_SIGNATURE_BYTES = 32;
|
|
657
773
|
var MIN_DISTINCT_BYTES = 8;
|
|
658
774
|
function assertUsableSignature(sigBytes) {
|
|
@@ -674,7 +790,7 @@ async function deriveMasterKeyBytes(signatureHex, chainId, address) {
|
|
|
674
790
|
const info = new TextEncoder().encode(
|
|
675
791
|
`orbinum-sk-${KEY_VERSION}:${chainId}:${canonicalAccountId(address)}`
|
|
676
792
|
);
|
|
677
|
-
return
|
|
793
|
+
return hkdf2(sha2563, sigBytes, new Uint8Array(0), info, 32);
|
|
678
794
|
}
|
|
679
795
|
async function deriveSpendingKeyFromSignature(signatureHex, chainId, address) {
|
|
680
796
|
return deriveSpendingKeyFromMaster(await deriveMasterKeyBytes(signatureHex, chainId, address));
|
|
@@ -686,7 +802,7 @@ import {
|
|
|
686
802
|
generateProof,
|
|
687
803
|
WebArtifactProvider
|
|
688
804
|
} from "@orbinum/proof-generator";
|
|
689
|
-
import { randomBytes } from "@noble/ciphers/utils.js";
|
|
805
|
+
import { randomBytes as randomBytes2 } from "@noble/ciphers/utils.js";
|
|
690
806
|
import { mulPointEscalar, Base8 } from "@zk-kit/baby-jubjub";
|
|
691
807
|
import { poseidon4 } from "poseidon-lite";
|
|
692
808
|
|
|
@@ -720,7 +836,7 @@ async function generateUnshieldProof(inputs, options = {}) {
|
|
|
720
836
|
throw new Error("changeValue must be >= 0.");
|
|
721
837
|
}
|
|
722
838
|
const changeOwnerPubkey = inputs.changeOwnerPubkey ?? mulPointEscalar(Base8, inputs.spendingKey)[0];
|
|
723
|
-
const changeBlinding = inputs.changeBlinding ?? (changeValue > 0n ? bytesToBigintLE(
|
|
839
|
+
const changeBlinding = inputs.changeBlinding ?? (changeValue > 0n ? bytesToBigintLE(randomBytes2(32)) : 0n);
|
|
724
840
|
const changeCommitment = changeValue > 0n ? poseidon4([changeValue, inputs.assetId, changeOwnerPubkey, changeBlinding]) : 0n;
|
|
725
841
|
const circuitInputs = {
|
|
726
842
|
merkle_root: leHexToBigint(inputs.merkleRoot).toString(),
|
|
@@ -5232,7 +5348,9 @@ function noteToBackupEntry(note) {
|
|
|
5232
5348
|
return {
|
|
5233
5349
|
commitmentHex: note.commitmentHex,
|
|
5234
5350
|
encryptedMemo: toHex(Uint8Array.from(note.memo)),
|
|
5235
|
-
...note.leafIndex !== void 0 ? { leafIndex: note.leafIndex } : {}
|
|
5351
|
+
...note.leafIndex !== void 0 ? { leafIndex: note.leafIndex } : {},
|
|
5352
|
+
spent: note.spent,
|
|
5353
|
+
spentAt: note.spentAt
|
|
5236
5354
|
};
|
|
5237
5355
|
}
|
|
5238
5356
|
function encodeNoteBackup(notes, options = {}) {
|
|
@@ -5277,7 +5395,13 @@ function importNotesFromBackup(entries, keys) {
|
|
|
5277
5395
|
keys.spendingKey,
|
|
5278
5396
|
keys.ownerPk
|
|
5279
5397
|
);
|
|
5280
|
-
if (note)
|
|
5398
|
+
if (note) {
|
|
5399
|
+
out.push({
|
|
5400
|
+
...note,
|
|
5401
|
+
spent: entry.spent ?? false,
|
|
5402
|
+
spentAt: entry.spentAt ?? null
|
|
5403
|
+
});
|
|
5404
|
+
}
|
|
5281
5405
|
}
|
|
5282
5406
|
return out;
|
|
5283
5407
|
}
|
|
@@ -5292,6 +5416,22 @@ function isEntry2(value) {
|
|
|
5292
5416
|
return true;
|
|
5293
5417
|
}
|
|
5294
5418
|
|
|
5419
|
+
// src/wallet/ops/notes/paymentSlipImport.ts
|
|
5420
|
+
function importPaymentSlip(slip, keys) {
|
|
5421
|
+
const envelope = typeof slip === "string" ? decodePaymentSlip(slip) : slip;
|
|
5422
|
+
if (!envelope) return null;
|
|
5423
|
+
const fields = openPaymentSlip(keys.viewingSecretKey, envelope);
|
|
5424
|
+
if (!fields) return null;
|
|
5425
|
+
const commitment = {
|
|
5426
|
+
commitmentHex: fields.commitmentHex,
|
|
5427
|
+
leafIndex: fields.leafIndex ?? -1,
|
|
5428
|
+
encryptedMemo: fields.encryptedMemo
|
|
5429
|
+
};
|
|
5430
|
+
const note = tryDecryptNote(commitment, keys.viewingSecretKey, keys.spendingKey, keys.ownerPk);
|
|
5431
|
+
if (!note) return null;
|
|
5432
|
+
return fields.txHash ? stampCreatedTxHash(note, fields.txHash) : note;
|
|
5433
|
+
}
|
|
5434
|
+
|
|
5295
5435
|
// src/wallet/ops/spend/transfer.ts
|
|
5296
5436
|
import { CircuitType as CircuitType5 } from "@orbinum/proof-generator";
|
|
5297
5437
|
|
|
@@ -5501,6 +5641,18 @@ async function transferNotes(deps, params, onProgress) {
|
|
|
5501
5641
|
await deps.vault.save(stampCreatedTxHash(selfNote, txResult.txHash, txKind));
|
|
5502
5642
|
}
|
|
5503
5643
|
}
|
|
5644
|
+
const isSelf = deps.selfOwnerPk !== null && recipientPk === deps.selfOwnerPk;
|
|
5645
|
+
if (recipientViewingPublicKey !== void 0 && !isSelf) {
|
|
5646
|
+
try {
|
|
5647
|
+
const envelope = sealPaymentSlip(recipientViewingPublicKey, {
|
|
5648
|
+
commitmentHex: recipientNote.commitmentHex,
|
|
5649
|
+
encryptedMemo: toHex(Uint8Array.from(recipientNote.memo)),
|
|
5650
|
+
...txResult.txHash ? { txHash: txResult.txHash } : {}
|
|
5651
|
+
});
|
|
5652
|
+
return { ...txResult, paymentSlip: encodePaymentSlip(envelope) };
|
|
5653
|
+
} catch {
|
|
5654
|
+
}
|
|
5655
|
+
}
|
|
5504
5656
|
}
|
|
5505
5657
|
return txResult;
|
|
5506
5658
|
}
|
|
@@ -6106,11 +6258,13 @@ export {
|
|
|
6106
6258
|
NOTE_BIGINT_FIELDS,
|
|
6107
6259
|
NOTE_TRANSFER_URI_SCHEME,
|
|
6108
6260
|
NoteBuilder,
|
|
6261
|
+
OVK_BLOB_SIZE,
|
|
6109
6262
|
OrbinumClient,
|
|
6110
6263
|
OrbinumClientProvider,
|
|
6111
6264
|
OrbinumWallet,
|
|
6112
6265
|
PAGE_SIZE,
|
|
6113
6266
|
PAIRWISE_EPH_WINDOW,
|
|
6267
|
+
PAYMENT_SLIP_SCHEME,
|
|
6114
6268
|
PRECOMPILE_ADDR,
|
|
6115
6269
|
PrivacyKeyManager,
|
|
6116
6270
|
PrivacyModule,
|
|
@@ -6181,11 +6335,14 @@ export {
|
|
|
6181
6335
|
decodeNoteBackup,
|
|
6182
6336
|
decodeNoteDisclosureKey,
|
|
6183
6337
|
decodeNoteTransferPage,
|
|
6338
|
+
decodePaymentSlip,
|
|
6184
6339
|
decodePrecompileCalldata,
|
|
6185
6340
|
decryptHintBatch,
|
|
6186
6341
|
decryptJson,
|
|
6187
6342
|
decryptNoteRecord,
|
|
6188
6343
|
deriveMasterKeyBytes,
|
|
6344
|
+
deriveOutgoingCipherKey,
|
|
6345
|
+
deriveOutgoingViewingKey,
|
|
6189
6346
|
deriveOwnerPk,
|
|
6190
6347
|
derivePairwiseEphSk,
|
|
6191
6348
|
derivePairwiseSharedSecret,
|
|
@@ -6204,6 +6361,7 @@ export {
|
|
|
6204
6361
|
detectCommitmentMismatch,
|
|
6205
6362
|
encodeNoteBackup,
|
|
6206
6363
|
encodeNoteTransferPages,
|
|
6364
|
+
encodePaymentSlip,
|
|
6207
6365
|
encryptJson,
|
|
6208
6366
|
encryptNote,
|
|
6209
6367
|
ensureCreatedAt,
|
|
@@ -6240,6 +6398,7 @@ export {
|
|
|
6240
6398
|
implicitSubstrateToEvm,
|
|
6241
6399
|
importDeviceKey,
|
|
6242
6400
|
importNotesFromBackup,
|
|
6401
|
+
importPaymentSlip,
|
|
6243
6402
|
isAbortError,
|
|
6244
6403
|
isAlreadySpentError,
|
|
6245
6404
|
isConnectionLossError,
|
|
@@ -6269,6 +6428,8 @@ export {
|
|
|
6269
6428
|
noteSpentTxHash,
|
|
6270
6429
|
noteToTransferEntry,
|
|
6271
6430
|
noteTxKind,
|
|
6431
|
+
openOutgoingBlob,
|
|
6432
|
+
openPaymentSlip,
|
|
6272
6433
|
pairwiseEphWindow,
|
|
6273
6434
|
palletErrorKind,
|
|
6274
6435
|
parseAmount,
|
|
@@ -6278,6 +6439,7 @@ export {
|
|
|
6278
6439
|
planTransfer,
|
|
6279
6440
|
planUnshield,
|
|
6280
6441
|
randomBlinding,
|
|
6442
|
+
randomOutgoingBlob,
|
|
6281
6443
|
reconstructOutgoingTxRecords,
|
|
6282
6444
|
recoverOwnerPkPoint,
|
|
6283
6445
|
recoverSelfStealthNote,
|
|
@@ -6293,6 +6455,8 @@ export {
|
|
|
6293
6455
|
runScan,
|
|
6294
6456
|
scalarToHex,
|
|
6295
6457
|
scanAbortError,
|
|
6458
|
+
sealOutgoingBlob,
|
|
6459
|
+
sealPaymentSlip,
|
|
6296
6460
|
selectGhosts,
|
|
6297
6461
|
selectNotes,
|
|
6298
6462
|
selfEphWindow,
|
|
@@ -6316,6 +6480,7 @@ export {
|
|
|
6316
6480
|
truncateMiddle,
|
|
6317
6481
|
tryDecryptNote,
|
|
6318
6482
|
tryDecryptNoteVerbose,
|
|
6483
|
+
tryRecoverOutgoing,
|
|
6319
6484
|
txLandedAfterError,
|
|
6320
6485
|
u128,
|
|
6321
6486
|
u64,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { c as DECRYPT_YIELD_EVERY, d as DecryptBatchResult, a as DecryptPool, e as DecryptRequest, E as EMPTY_BATCH_RESULT, K as KnownEphEntry, f as KnownEphWindow, M as MAX_WORKERS, g as MatchSource, P as PAIRWISE_EPH_WINDOW, i as SELF_EPH_WINDOW, b as ScanKeys, W as WORKER_CRASHED, j as WorkerFactory, k as WorkerLike, l as WorkerMessage, m as clearKnownEphWindow, n as createDecryptPool, o as createMainThreadPool, p as createWorkerPool, q as decryptHintBatch, r as getKnownEphWindow } from '../../index-
|
|
1
|
+
export { c as DECRYPT_YIELD_EVERY, d as DecryptBatchResult, a as DecryptPool, e as DecryptRequest, E as EMPTY_BATCH_RESULT, K as KnownEphEntry, f as KnownEphWindow, M as MAX_WORKERS, g as MatchSource, P as PAIRWISE_EPH_WINDOW, i as SELF_EPH_WINDOW, b as ScanKeys, W as WORKER_CRASHED, j as WorkerFactory, k as WorkerLike, l as WorkerMessage, m as clearKnownEphWindow, n as createDecryptPool, o as createMainThreadPool, p as createWorkerPool, q as decryptHintBatch, r as getKnownEphWindow } from '../../index-V5Z9igEN.mjs';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { c as DECRYPT_YIELD_EVERY, d as DecryptBatchResult, a as DecryptPool, e as DecryptRequest, E as EMPTY_BATCH_RESULT, K as KnownEphEntry, f as KnownEphWindow, M as MAX_WORKERS, g as MatchSource, P as PAIRWISE_EPH_WINDOW, i as SELF_EPH_WINDOW, b as ScanKeys, W as WORKER_CRASHED, j as WorkerFactory, k as WorkerLike, l as WorkerMessage, m as clearKnownEphWindow, n as createDecryptPool, o as createMainThreadPool, p as createWorkerPool, q as decryptHintBatch, r as getKnownEphWindow } from '../../index-
|
|
1
|
+
export { c as DECRYPT_YIELD_EVERY, d as DecryptBatchResult, a as DecryptPool, e as DecryptRequest, E as EMPTY_BATCH_RESULT, K as KnownEphEntry, f as KnownEphWindow, M as MAX_WORKERS, g as MatchSource, P as PAIRWISE_EPH_WINDOW, i as SELF_EPH_WINDOW, b as ScanKeys, W as WORKER_CRASHED, j as WorkerFactory, k as WorkerLike, l as WorkerMessage, m as clearKnownEphWindow, n as createDecryptPool, o as createMainThreadPool, p as createWorkerPool, q as decryptHintBatch, r as getKnownEphWindow } from '../../index-V5Z9igEN.js';
|
|
@@ -570,6 +570,7 @@ var import_hkdf2 = require("@noble/hashes/hkdf.js");
|
|
|
570
570
|
var import_sha25 = require("@noble/hashes/sha2.js");
|
|
571
571
|
var import_baby_jubjub6 = require("@zk-kit/baby-jubjub");
|
|
572
572
|
var IVK_DOMAIN = new TextEncoder().encode("orbinum-ivk-v1");
|
|
573
|
+
var OVK_DOMAIN = new TextEncoder().encode("orbinum-ovk-v1");
|
|
573
574
|
function deriveViewingPublicKey(ivsk) {
|
|
574
575
|
const ivskScalar = BigInt(toHex(ivsk)) % BABYJUB_SUBORDER || 1n;
|
|
575
576
|
const ivkPoint = fastMulBase(ivskScalar);
|