@unlink-xyz/core 0.1.2 → 0.1.3-canary.06c36a8
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/account/{zkAccount.d.ts → account.d.ts} +7 -5
- package/dist/account/account.d.ts.map +1 -0
- package/dist/account/{zkAccount.js → account.js} +57 -43
- package/dist/browser/index.js +108267 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/circuits.json +74 -0
- package/dist/clients/broadcaster.d.ts +7 -2
- package/dist/clients/broadcaster.d.ts.map +1 -1
- package/dist/clients/broadcaster.js +9 -1
- package/dist/clients/http.d.ts +6 -0
- package/dist/clients/http.d.ts.map +1 -1
- package/dist/clients/http.js +24 -9
- package/dist/clients/indexer.d.ts +11 -0
- package/dist/clients/indexer.d.ts.map +1 -1
- package/dist/clients/indexer.js +40 -11
- package/dist/config.d.ts +28 -9
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +33 -26
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +5 -0
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +5 -2
- package/dist/crypto-adapters/auto-init.d.ts +2 -0
- package/dist/crypto-adapters/auto-init.d.ts.map +1 -0
- package/dist/crypto-adapters/auto-init.js +7 -0
- package/dist/crypto-adapters/index.d.ts +22 -0
- package/dist/crypto-adapters/index.d.ts.map +1 -0
- package/dist/crypto-adapters/index.js +47 -0
- package/dist/crypto-adapters/polyfills.d.ts +5 -0
- package/dist/crypto-adapters/polyfills.d.ts.map +1 -0
- package/dist/crypto-adapters/polyfills.js +8 -0
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +18 -0
- package/dist/history/index.d.ts +3 -0
- package/dist/history/index.d.ts.map +1 -0
- package/dist/history/index.js +2 -0
- package/dist/history/service.d.ts +46 -0
- package/dist/history/service.d.ts.map +1 -0
- package/dist/history/service.js +354 -0
- package/dist/history/types.d.ts +21 -0
- package/dist/history/types.d.ts.map +1 -0
- package/dist/index.d.ts +14 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -4
- package/dist/keys/address.d.ts +13 -0
- package/dist/keys/address.d.ts.map +1 -0
- package/dist/keys/address.js +55 -0
- package/dist/keys/derive.d.ts +37 -0
- package/dist/keys/derive.d.ts.map +1 -0
- package/dist/keys/derive.js +112 -0
- package/dist/keys/hex.d.ts +17 -0
- package/dist/keys/hex.d.ts.map +1 -0
- package/dist/keys/hex.js +66 -0
- package/dist/keys/index.d.ts +5 -0
- package/dist/keys/index.d.ts.map +1 -0
- package/dist/keys/index.js +4 -0
- package/dist/keys/mnemonic.d.ts +8 -0
- package/dist/keys/mnemonic.d.ts.map +1 -0
- package/dist/keys/mnemonic.js +23 -0
- package/dist/keys.d.ts +4 -1
- package/dist/keys.d.ts.map +1 -1
- package/dist/keys.js +4 -0
- package/dist/prover/config.d.ts +1 -15
- package/dist/prover/config.d.ts.map +1 -1
- package/dist/prover/config.js +1 -11
- package/dist/prover/prover.d.ts +15 -4
- package/dist/prover/prover.d.ts.map +1 -1
- package/dist/prover/prover.js +115 -98
- package/dist/prover/registry.d.ts +2 -2
- package/dist/prover/registry.d.ts.map +1 -1
- package/dist/prover/registry.js +62 -14
- package/dist/state/merkle/hydrator.d.ts.map +1 -1
- package/dist/state/merkle/hydrator.js +3 -2
- package/dist/state/merkle/index.d.ts +1 -1
- package/dist/state/merkle/index.d.ts.map +1 -1
- package/dist/state/merkle/index.js +1 -1
- package/dist/state/merkle/merkle-tree.d.ts +8 -0
- package/dist/state/merkle/merkle-tree.d.ts.map +1 -1
- package/dist/state/merkle/merkle-tree.js +16 -7
- package/dist/state/store/ciphertext-store.d.ts +4 -0
- package/dist/state/store/ciphertext-store.d.ts.map +1 -1
- package/dist/state/store/ciphertext-store.js +12 -0
- package/dist/state/store/history-store.d.ts +24 -0
- package/dist/state/store/history-store.d.ts.map +1 -0
- package/dist/state/store/history-store.js +53 -0
- package/dist/state/store/index.d.ts +3 -2
- package/dist/state/store/index.d.ts.map +1 -1
- package/dist/state/store/index.js +1 -0
- package/dist/state/store/job-store.d.ts +7 -7
- package/dist/state/store/job-store.d.ts.map +1 -1
- package/dist/state/store/job-store.js +65 -39
- package/dist/state/store/jobs.d.ts +65 -18
- package/dist/state/store/jobs.d.ts.map +1 -1
- package/dist/state/store/leaf-store.d.ts.map +1 -1
- package/dist/state/store/leaf-store.js +0 -3
- package/dist/state/store/note-store.d.ts +7 -7
- package/dist/state/store/note-store.d.ts.map +1 -1
- package/dist/state/store/note-store.js +38 -34
- package/dist/state/store/nullifier-store.d.ts +9 -0
- package/dist/state/store/nullifier-store.d.ts.map +1 -1
- package/dist/state/store/nullifier-store.js +32 -2
- package/dist/state/store/records.d.ts +31 -2
- package/dist/state/store/records.d.ts.map +1 -1
- package/dist/state/store/root-store.d.ts.map +1 -1
- package/dist/state/store/root-store.js +0 -4
- package/dist/state/store/store.d.ts +61 -27
- package/dist/state/store/store.d.ts.map +1 -1
- package/dist/state/store/store.js +92 -1
- package/dist/storage/memory.d.ts.map +1 -1
- package/dist/storage/memory.js +5 -1
- package/dist/transactions/deposit.d.ts +12 -15
- package/dist/transactions/deposit.d.ts.map +1 -1
- package/dist/transactions/deposit.js +203 -152
- package/dist/transactions/index.d.ts +7 -4
- package/dist/transactions/index.d.ts.map +1 -1
- package/dist/transactions/index.js +7 -2
- package/dist/transactions/note-selection.d.ts +17 -0
- package/dist/transactions/note-selection.d.ts.map +1 -0
- package/dist/transactions/note-selection.js +201 -0
- package/dist/transactions/note-sync.d.ts +5 -33
- package/dist/transactions/note-sync.d.ts.map +1 -1
- package/dist/transactions/note-sync.js +320 -155
- package/dist/transactions/reconcile.d.ts +10 -12
- package/dist/transactions/reconcile.d.ts.map +1 -1
- package/dist/transactions/reconcile.js +53 -7
- package/dist/transactions/transact.d.ts +13 -24
- package/dist/transactions/transact.d.ts.map +1 -1
- package/dist/transactions/transact.js +393 -507
- package/dist/transactions/transaction-planner.d.ts +34 -0
- package/dist/transactions/transaction-planner.d.ts.map +1 -0
- package/dist/transactions/transaction-planner.js +116 -0
- package/dist/transactions/transfer-planner.d.ts +36 -0
- package/dist/transactions/transfer-planner.d.ts.map +1 -0
- package/dist/transactions/transfer-planner.js +85 -0
- package/dist/transactions/types/deposit.d.ts +67 -0
- package/dist/transactions/types/deposit.d.ts.map +1 -0
- package/dist/transactions/types/domain.d.ts +67 -0
- package/dist/transactions/types/domain.d.ts.map +1 -0
- package/dist/transactions/types/domain.js +4 -0
- package/dist/transactions/types/index.d.ts +18 -0
- package/dist/transactions/types/index.d.ts.map +1 -0
- package/dist/transactions/types/index.js +17 -0
- package/dist/transactions/types/options.d.ts +45 -0
- package/dist/transactions/types/options.d.ts.map +1 -0
- package/dist/transactions/types/options.js +1 -0
- package/dist/transactions/types/planning.d.ts +80 -0
- package/dist/transactions/types/planning.d.ts.map +1 -0
- package/dist/transactions/types/planning.js +1 -0
- package/dist/transactions/types/state-stores.d.ts +103 -0
- package/dist/transactions/types/state-stores.d.ts.map +1 -0
- package/dist/transactions/types/state-stores.js +1 -0
- package/dist/transactions/types/transact.d.ts +76 -0
- package/dist/transactions/types/transact.d.ts.map +1 -0
- package/dist/transactions/types/transact.js +1 -0
- package/dist/transactions/withdrawal-planner.d.ts +58 -0
- package/dist/transactions/withdrawal-planner.d.ts.map +1 -0
- package/dist/transactions/withdrawal-planner.js +128 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/tsup.browser.config.d.ts +7 -0
- package/dist/tsup.browser.config.d.ts.map +1 -0
- package/dist/tsup.browser.config.js +34 -0
- package/dist/utils/amounts.d.ts +39 -0
- package/dist/utils/amounts.d.ts.map +1 -0
- package/dist/utils/amounts.js +89 -0
- package/dist/utils/async.d.ts +9 -0
- package/dist/utils/async.d.ts.map +1 -1
- package/dist/utils/async.js +24 -0
- package/dist/utils/bigint.js +7 -7
- package/dist/utils/crypto.d.ts +11 -5
- package/dist/utils/crypto.d.ts.map +1 -1
- package/dist/utils/crypto.js +12 -6
- package/dist/utils/format.d.ts +25 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +33 -0
- package/dist/utils/notes.d.ts +15 -0
- package/dist/utils/notes.d.ts.map +1 -0
- package/dist/utils/notes.js +14 -0
- package/dist/utils/polling.d.ts +5 -0
- package/dist/utils/polling.d.ts.map +1 -1
- package/dist/utils/polling.js +5 -0
- package/dist/utils/random.d.ts +13 -0
- package/dist/utils/random.d.ts.map +1 -0
- package/dist/utils/random.js +27 -0
- package/dist/utils/secure-memory.d.ts +25 -0
- package/dist/utils/secure-memory.d.ts.map +1 -0
- package/dist/utils/secure-memory.js +28 -0
- package/dist/utils/signature.d.ts +6 -0
- package/dist/utils/signature.d.ts.map +1 -1
- package/dist/utils/signature.js +8 -6
- package/dist/utils/validators.d.ts +21 -10
- package/dist/utils/validators.d.ts.map +1 -1
- package/dist/utils/validators.js +37 -11
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +13 -0
- package/package.json +27 -7
- package/.eslintrc.json +0 -4
- package/account/zkAccount.test.ts +0 -316
- package/account/zkAccount.ts +0 -222
- package/clients/broadcaster.ts +0 -67
- package/clients/http.ts +0 -94
- package/clients/indexer.ts +0 -150
- package/config.ts +0 -39
- package/core.ts +0 -17
- package/dist/account/railgun-imports-prototype.d.ts +0 -12
- package/dist/account/railgun-imports-prototype.d.ts.map +0 -1
- package/dist/account/railgun-imports-prototype.js +0 -30
- package/dist/account/zkAccount.d.ts.map +0 -1
- package/dist/key-derivation/babyjubjub.d.ts +0 -9
- package/dist/key-derivation/babyjubjub.d.ts.map +0 -1
- package/dist/key-derivation/babyjubjub.js +0 -9
- package/dist/key-derivation/bech32.d.ts +0 -22
- package/dist/key-derivation/bech32.d.ts.map +0 -1
- package/dist/key-derivation/bech32.js +0 -86
- package/dist/key-derivation/bip32.d.ts +0 -17
- package/dist/key-derivation/bip32.d.ts.map +0 -1
- package/dist/key-derivation/bip32.js +0 -41
- package/dist/key-derivation/bip39.d.ts +0 -22
- package/dist/key-derivation/bip39.d.ts.map +0 -1
- package/dist/key-derivation/bip39.js +0 -56
- package/dist/key-derivation/bytes.d.ts +0 -19
- package/dist/key-derivation/bytes.d.ts.map +0 -1
- package/dist/key-derivation/bytes.js +0 -92
- package/dist/key-derivation/hash.d.ts +0 -3
- package/dist/key-derivation/hash.d.ts.map +0 -1
- package/dist/key-derivation/hash.js +0 -10
- package/dist/key-derivation/index.d.ts +0 -8
- package/dist/key-derivation/index.d.ts.map +0 -1
- package/dist/key-derivation/index.js +0 -7
- package/dist/key-derivation/wallet-node.d.ts +0 -45
- package/dist/key-derivation/wallet-node.d.ts.map +0 -1
- package/dist/key-derivation/wallet-node.js +0 -109
- package/dist/state/ciphertext-store.d.ts +0 -12
- package/dist/state/ciphertext-store.d.ts.map +0 -1
- package/dist/state/ciphertext-store.js +0 -25
- package/dist/state/hydrator.d.ts +0 -16
- package/dist/state/hydrator.d.ts.map +0 -1
- package/dist/state/hydrator.js +0 -18
- package/dist/state/job-store.d.ts +0 -12
- package/dist/state/job-store.d.ts.map +0 -1
- package/dist/state/job-store.js +0 -118
- package/dist/state/jobs.d.ts +0 -50
- package/dist/state/jobs.d.ts.map +0 -1
- package/dist/state/jobs.js +0 -1
- package/dist/state/leaf-store.d.ts +0 -17
- package/dist/state/leaf-store.d.ts.map +0 -1
- package/dist/state/leaf-store.js +0 -35
- package/dist/state/merkle-tree.d.ts +0 -34
- package/dist/state/merkle-tree.d.ts.map +0 -1
- package/dist/state/merkle-tree.js +0 -104
- package/dist/state/note-store.d.ts +0 -37
- package/dist/state/note-store.d.ts.map +0 -1
- package/dist/state/note-store.js +0 -133
- package/dist/state/nullifier-store.d.ts +0 -13
- package/dist/state/nullifier-store.d.ts.map +0 -1
- package/dist/state/nullifier-store.js +0 -21
- package/dist/state/records.d.ts +0 -57
- package/dist/state/records.d.ts.map +0 -1
- package/dist/state/root-store.d.ts +0 -13
- package/dist/state/root-store.d.ts.map +0 -1
- package/dist/state/root-store.js +0 -30
- package/dist/state/store.d.ts +0 -26
- package/dist/state/store.d.ts.map +0 -1
- package/dist/state/store.js +0 -19
- package/dist/state.d.ts +0 -83
- package/dist/state.d.ts.map +0 -1
- package/dist/state.js +0 -171
- package/dist/transactions/shield.d.ts +0 -5
- package/dist/transactions/shield.d.ts.map +0 -1
- package/dist/transactions/shield.js +0 -93
- package/dist/transactions/types.d.ts +0 -114
- package/dist/transactions/types.d.ts.map +0 -1
- package/dist/transactions/utils.d.ts +0 -10
- package/dist/transactions/utils.d.ts.map +0 -1
- package/dist/transactions/utils.js +0 -17
- package/dist/utils/time.d.ts +0 -2
- package/dist/utils/time.d.ts.map +0 -1
- package/dist/utils/time.js +0 -3
- package/dist/utils/witness.d.ts +0 -11
- package/dist/utils/witness.d.ts.map +0 -1
- package/dist/utils/witness.js +0 -19
- package/errors.ts +0 -20
- package/index.ts +0 -17
- package/key-derivation/babyjubjub.ts +0 -11
- package/key-derivation/bech32.test.ts +0 -90
- package/key-derivation/bech32.ts +0 -124
- package/key-derivation/bip32.ts +0 -56
- package/key-derivation/bip39.ts +0 -76
- package/key-derivation/bytes.ts +0 -118
- package/key-derivation/hash.ts +0 -13
- package/key-derivation/index.ts +0 -7
- package/key-derivation/wallet-node.ts +0 -155
- package/keys.ts +0 -47
- package/prover/config.ts +0 -104
- package/prover/index.ts +0 -1
- package/prover/prover.integration.test.ts +0 -162
- package/prover/prover.test.ts +0 -309
- package/prover/prover.ts +0 -405
- package/prover/registry.test.ts +0 -90
- package/prover/registry.ts +0 -82
- package/schema.ts +0 -17
- package/setup-artifacts.sh +0 -57
- package/state/index.ts +0 -2
- package/state/merkle/hydrator.ts +0 -69
- package/state/merkle/index.ts +0 -12
- package/state/merkle/merkle-tree.test.ts +0 -50
- package/state/merkle/merkle-tree.ts +0 -163
- package/state/store/ciphertext-store.ts +0 -28
- package/state/store/index.ts +0 -24
- package/state/store/job-store.ts +0 -162
- package/state/store/jobs.ts +0 -64
- package/state/store/leaf-store.ts +0 -39
- package/state/store/note-store.ts +0 -177
- package/state/store/nullifier-store.ts +0 -39
- package/state/store/records.ts +0 -61
- package/state/store/root-store.ts +0 -34
- package/state/store/store.ts +0 -25
- package/state.test.ts +0 -235
- package/storage/index.ts +0 -3
- package/storage/indexeddb.test.ts +0 -99
- package/storage/indexeddb.ts +0 -235
- package/storage/memory.test.ts +0 -59
- package/storage/memory.ts +0 -93
- package/transactions/deposit.test.ts +0 -160
- package/transactions/deposit.ts +0 -227
- package/transactions/index.ts +0 -20
- package/transactions/note-sync.test.ts +0 -155
- package/transactions/note-sync.ts +0 -452
- package/transactions/reconcile.ts +0 -73
- package/transactions/transact.test.ts +0 -451
- package/transactions/transact.ts +0 -811
- package/transactions/types.ts +0 -141
- package/tsconfig.json +0 -14
- package/types/global.d.ts +0 -15
- package/types.ts +0 -24
- package/utils/async.ts +0 -15
- package/utils/bigint.ts +0 -34
- package/utils/crypto.test.ts +0 -69
- package/utils/crypto.ts +0 -58
- package/utils/json-codec.ts +0 -38
- package/utils/polling.ts +0 -6
- package/utils/signature.ts +0 -16
- package/utils/validators.test.ts +0 -64
- package/utils/validators.ts +0 -86
- /package/dist/{transactions → history}/types.js +0 -0
- /package/dist/{state/records.js → transactions/types/deposit.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type SpendingKeyPair, type ViewingKeyPair } from "../
|
|
1
|
+
import { type SpendingKeyPair, type ViewingKeyPair } from "../keys/derive.js";
|
|
2
2
|
import type { Storage } from "../types.js";
|
|
3
3
|
export type MasterSeedCrypto = {
|
|
4
4
|
encrypt(seed: Uint8Array): Promise<Uint8Array> | Uint8Array;
|
|
@@ -14,14 +14,16 @@ export type GenerateMasterSeedOptions = {
|
|
|
14
14
|
export declare const MASTER_SEED_LENGTH = 64;
|
|
15
15
|
export declare const MASTER_SEED_KEY = "cfg:wallet:master_seed/v1";
|
|
16
16
|
export declare const MASTER_MNEMONIC_KEY = "cfg:wallet:master_mnemonic/v1";
|
|
17
|
-
export type
|
|
17
|
+
export type Account = {
|
|
18
18
|
spendingKeyPair: SpendingKeyPair;
|
|
19
19
|
viewingKeyPair: ViewingKeyPair;
|
|
20
20
|
nullifyingKey: bigint;
|
|
21
21
|
masterPublicKey: bigint;
|
|
22
|
+
/** Bech32m address (0zk1...) for this account */
|
|
23
|
+
address: string;
|
|
22
24
|
};
|
|
23
|
-
export declare function
|
|
24
|
-
export declare function
|
|
25
|
+
export declare function deriveAccount(masterSeed: Uint8Array, accountIndex?: number): Promise<Account>;
|
|
26
|
+
export declare function deriveAccountFromMnemonic(mnemonic: string, accountIndex?: number, password?: string): Promise<Account>;
|
|
25
27
|
export declare function generateMasterSeed({ storage, rng, crypto, overwrite, mnemonicPassphrase, }: GenerateMasterSeedOptions): Promise<Uint8Array>;
|
|
26
28
|
export declare function loadMasterSeed(storage: Storage, crypto?: MasterSeedCrypto): Promise<Uint8Array | null>;
|
|
27
29
|
export declare function storeMasterSeed(storage: Storage, seed: Uint8Array, crypto?: MasterSeedCrypto): Promise<void>;
|
|
@@ -35,4 +37,4 @@ export type ImportMasterMnemonicOptions = {
|
|
|
35
37
|
};
|
|
36
38
|
export declare function importMasterMnemonic({ storage, mnemonic, crypto, overwrite, password, }: ImportMasterMnemonicOptions): Promise<Uint8Array>;
|
|
37
39
|
export declare function storeMasterMnemonic(storage: Storage, mnemonic: string, crypto?: MasterSeedCrypto): Promise<void>;
|
|
38
|
-
//# sourceMappingURL=
|
|
40
|
+
//# sourceMappingURL=account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../account/account.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IAC5D,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,UAAU,CAAC;IAC/B,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,eAAe,8BAA8B,CAAC;AAC3D,eAAO,MAAM,mBAAmB,kCAAkC,CAAC;AAOnE,MAAM,MAAM,OAAO,GAAG;IACpB,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,YAAY,GAAE,MAAU,GACvB,OAAO,CAAC,OAAO,CAAC,CAmBlB;AAED,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE,MAAU,EACxB,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAQD,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,GAAG,EACH,MAAiC,EACjC,SAAiB,EACjB,kBAAkB,GACnB,EAAE,yBAAyB,GAAG,OAAO,CAAC,UAAU,CAAC,CAgCjD;AAED,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAK5B;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,OAAO,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAUxB;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,wBAAsB,oBAAoB,CAAC,EACzC,OAAO,EACP,QAAQ,EACR,MAAiC,EACjC,SAAiB,EACjB,QAAa,GACd,EAAE,2BAA2B,GAAG,OAAO,CAAC,UAAU,CAAC,CAenD;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,gBAA2C,GAClD,OAAO,CAAC,IAAI,CAAC,CASf"}
|
|
@@ -1,41 +1,47 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { ValidationError } from "../errors.js";
|
|
2
|
+
import { encodeAddress } from "../keys/address.js";
|
|
3
|
+
import { deriveAccountKeys, } from "../keys/derive.js";
|
|
4
|
+
import { Hex } from "../keys/hex.js";
|
|
5
|
+
import { Mnemonic } from "../keys/mnemonic.js";
|
|
6
|
+
import { zeroize } from "../utils/secure-memory.js";
|
|
4
7
|
export const MASTER_SEED_LENGTH = 64;
|
|
5
8
|
export const MASTER_SEED_KEY = "cfg:wallet:master_seed/v1";
|
|
6
9
|
export const MASTER_MNEMONIC_KEY = "cfg:wallet:master_mnemonic/v1";
|
|
7
10
|
const MNEMONIC_ENTROPY_BYTES = 32;
|
|
8
11
|
const textEncoder = new TextEncoder();
|
|
9
12
|
const textDecoder = new TextDecoder();
|
|
10
|
-
export async function
|
|
13
|
+
export async function deriveAccount(masterSeed, accountIndex = 0) {
|
|
11
14
|
const seed = normalizeMasterSeed(masterSeed);
|
|
12
15
|
if (!Number.isInteger(accountIndex) || accountIndex < 0) {
|
|
13
|
-
throw new
|
|
16
|
+
throw new ValidationError("accountIndex must be a non-negative integer");
|
|
14
17
|
}
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
const keys = await deriveAccountKeys(seed, accountIndex);
|
|
19
|
+
const address = encodeAddress({
|
|
20
|
+
masterPublicKey: keys.masterPublicKey,
|
|
21
|
+
viewingPublicKey: keys.viewing.pubkey,
|
|
22
|
+
});
|
|
20
23
|
return {
|
|
21
|
-
spendingKeyPair,
|
|
22
|
-
viewingKeyPair,
|
|
23
|
-
nullifyingKey,
|
|
24
|
-
masterPublicKey,
|
|
24
|
+
spendingKeyPair: keys.spending,
|
|
25
|
+
viewingKeyPair: keys.viewing,
|
|
26
|
+
nullifyingKey: keys.nullifyingKey,
|
|
27
|
+
masterPublicKey: keys.masterPublicKey,
|
|
28
|
+
address,
|
|
25
29
|
};
|
|
26
30
|
}
|
|
27
|
-
export async function
|
|
31
|
+
export async function deriveAccountFromMnemonic(mnemonic, accountIndex = 0, password = "") {
|
|
28
32
|
const normalized = normalizeMnemonic(mnemonic);
|
|
29
33
|
const seed = mnemonicToSeed(normalized, password);
|
|
30
|
-
|
|
34
|
+
try {
|
|
35
|
+
return await deriveAccount(seed, accountIndex);
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
zeroize(seed);
|
|
39
|
+
}
|
|
31
40
|
}
|
|
41
|
+
/** Passthrough crypto, storage handles buffer isolation */
|
|
32
42
|
const identityMasterSeedCrypto = {
|
|
33
|
-
encrypt(seed)
|
|
34
|
-
|
|
35
|
-
},
|
|
36
|
-
decrypt(payload) {
|
|
37
|
-
return clone(payload);
|
|
38
|
-
},
|
|
43
|
+
encrypt: (seed) => seed,
|
|
44
|
+
decrypt: (payload) => payload,
|
|
39
45
|
};
|
|
40
46
|
export async function generateMasterSeed({ storage, rng, crypto = identityMasterSeedCrypto, overwrite = false, mnemonicPassphrase, }) {
|
|
41
47
|
if (!overwrite) {
|
|
@@ -51,13 +57,18 @@ export async function generateMasterSeed({ storage, rng, crypto = identityMaster
|
|
|
51
57
|
}
|
|
52
58
|
const entropy = rng(MNEMONIC_ENTROPY_BYTES);
|
|
53
59
|
if (entropy.length !== MNEMONIC_ENTROPY_BYTES) {
|
|
54
|
-
throw new
|
|
60
|
+
throw new ValidationError(`mnemonic entropy must be ${MNEMONIC_ENTROPY_BYTES} bytes`);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const mnemonic = Mnemonic.fromEntropy(Hex.fromBytes(entropy));
|
|
64
|
+
await storeMasterMnemonic(storage, mnemonic, crypto);
|
|
65
|
+
const seed = mnemonicToSeed(mnemonic, mnemonicPassphrase);
|
|
66
|
+
await storeMasterSeed(storage, seed, crypto);
|
|
67
|
+
return seed;
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
zeroize(entropy);
|
|
55
71
|
}
|
|
56
|
-
const mnemonic = Mnemonic.fromEntropy(ByteUtils.bytesToHex(entropy));
|
|
57
|
-
await storeMasterMnemonic(storage, mnemonic, crypto);
|
|
58
|
-
const seed = mnemonicToSeed(mnemonic, mnemonicPassphrase);
|
|
59
|
-
await storeMasterSeed(storage, seed, crypto);
|
|
60
|
-
return seed;
|
|
61
72
|
}
|
|
62
73
|
export async function loadMasterSeed(storage, crypto = identityMasterSeedCrypto) {
|
|
63
74
|
const stored = await storage.get(MASTER_SEED_KEY);
|
|
@@ -70,23 +81,28 @@ export async function storeMasterSeed(storage, seed, crypto = identityMasterSeed
|
|
|
70
81
|
const normalized = normalizeMasterSeed(seed);
|
|
71
82
|
const encrypted = await crypto.encrypt(normalized);
|
|
72
83
|
if (!(encrypted instanceof Uint8Array)) {
|
|
73
|
-
throw new
|
|
84
|
+
throw new ValidationError("master seed encryptor must return Uint8Array");
|
|
74
85
|
}
|
|
75
|
-
await storage.put(MASTER_SEED_KEY,
|
|
86
|
+
await storage.put(MASTER_SEED_KEY, encrypted);
|
|
76
87
|
}
|
|
77
88
|
export async function loadMasterMnemonic(storage, crypto = identityMasterSeedCrypto) {
|
|
78
89
|
const stored = await storage.get(MASTER_MNEMONIC_KEY);
|
|
79
90
|
if (!stored)
|
|
80
91
|
return null;
|
|
81
92
|
const plaintext = await crypto.decrypt(stored);
|
|
82
|
-
|
|
83
|
-
|
|
93
|
+
try {
|
|
94
|
+
const mnemonic = textDecoder.decode(plaintext);
|
|
95
|
+
return normalizeMnemonic(mnemonic);
|
|
96
|
+
}
|
|
97
|
+
finally {
|
|
98
|
+
zeroize(plaintext);
|
|
99
|
+
}
|
|
84
100
|
}
|
|
85
101
|
export async function importMasterMnemonic({ storage, mnemonic, crypto = identityMasterSeedCrypto, overwrite = false, password = "", }) {
|
|
86
102
|
if (!overwrite) {
|
|
87
103
|
const existing = await loadMasterMnemonic(storage, crypto);
|
|
88
104
|
if (existing) {
|
|
89
|
-
throw new
|
|
105
|
+
throw new ValidationError("master mnemonic already exists; set overwrite to true to replace it");
|
|
90
106
|
}
|
|
91
107
|
}
|
|
92
108
|
const normalized = normalizeMnemonic(mnemonic);
|
|
@@ -99,30 +115,28 @@ export async function storeMasterMnemonic(storage, mnemonic, crypto = identityMa
|
|
|
99
115
|
const normalized = normalizeMnemonic(mnemonic);
|
|
100
116
|
const encrypted = await crypto.encrypt(textEncoder.encode(normalized));
|
|
101
117
|
if (!(encrypted instanceof Uint8Array)) {
|
|
102
|
-
throw new
|
|
118
|
+
throw new ValidationError("master mnemonic encryptor must return Uint8Array");
|
|
103
119
|
}
|
|
104
|
-
await storage.put(MASTER_MNEMONIC_KEY,
|
|
105
|
-
}
|
|
106
|
-
function clone(bytes) {
|
|
107
|
-
return new Uint8Array(bytes);
|
|
120
|
+
await storage.put(MASTER_MNEMONIC_KEY, encrypted);
|
|
108
121
|
}
|
|
122
|
+
/** Validates seed format. Storage handles buffer isolation on put/get. */
|
|
109
123
|
function normalizeMasterSeed(seed) {
|
|
110
124
|
if (!(seed instanceof Uint8Array)) {
|
|
111
|
-
throw new
|
|
125
|
+
throw new ValidationError("master seed must be a Uint8Array");
|
|
112
126
|
}
|
|
113
127
|
if (seed.length !== MASTER_SEED_LENGTH) {
|
|
114
|
-
throw new
|
|
128
|
+
throw new ValidationError(`master seed must be ${MASTER_SEED_LENGTH} bytes`);
|
|
115
129
|
}
|
|
116
|
-
return
|
|
130
|
+
return seed;
|
|
117
131
|
}
|
|
118
132
|
function normalizeMnemonic(mnemonic) {
|
|
119
133
|
const formatted = mnemonic.trim().replace(/\s+/g, " ");
|
|
120
134
|
if (!Mnemonic.validate(formatted)) {
|
|
121
|
-
throw new
|
|
135
|
+
throw new ValidationError("invalid BIP-39 mnemonic phrase");
|
|
122
136
|
}
|
|
123
137
|
return formatted;
|
|
124
138
|
}
|
|
125
139
|
function mnemonicToSeed(mnemonic, password = "") {
|
|
126
140
|
const seedHex = Mnemonic.toSeed(mnemonic, password);
|
|
127
|
-
return
|
|
141
|
+
return Hex.toBytes(seedHex);
|
|
128
142
|
}
|