@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.
Files changed (348) hide show
  1. package/dist/account/{zkAccount.d.ts → account.d.ts} +7 -5
  2. package/dist/account/account.d.ts.map +1 -0
  3. package/dist/account/{zkAccount.js → account.js} +57 -43
  4. package/dist/browser/index.js +108267 -0
  5. package/dist/browser/index.js.map +1 -0
  6. package/dist/circuits.json +74 -0
  7. package/dist/clients/broadcaster.d.ts +7 -2
  8. package/dist/clients/broadcaster.d.ts.map +1 -1
  9. package/dist/clients/broadcaster.js +9 -1
  10. package/dist/clients/http.d.ts +6 -0
  11. package/dist/clients/http.d.ts.map +1 -1
  12. package/dist/clients/http.js +24 -9
  13. package/dist/clients/indexer.d.ts +11 -0
  14. package/dist/clients/indexer.d.ts.map +1 -1
  15. package/dist/clients/indexer.js +40 -11
  16. package/dist/config.d.ts +28 -9
  17. package/dist/config.d.ts.map +1 -1
  18. package/dist/config.js +33 -26
  19. package/dist/constants.d.ts +6 -0
  20. package/dist/constants.d.ts.map +1 -0
  21. package/dist/constants.js +5 -0
  22. package/dist/core.d.ts.map +1 -1
  23. package/dist/core.js +5 -2
  24. package/dist/crypto-adapters/auto-init.d.ts +2 -0
  25. package/dist/crypto-adapters/auto-init.d.ts.map +1 -0
  26. package/dist/crypto-adapters/auto-init.js +7 -0
  27. package/dist/crypto-adapters/index.d.ts +22 -0
  28. package/dist/crypto-adapters/index.d.ts.map +1 -0
  29. package/dist/crypto-adapters/index.js +47 -0
  30. package/dist/crypto-adapters/polyfills.d.ts +5 -0
  31. package/dist/crypto-adapters/polyfills.d.ts.map +1 -0
  32. package/dist/crypto-adapters/polyfills.js +8 -0
  33. package/dist/errors.d.ts +9 -0
  34. package/dist/errors.d.ts.map +1 -1
  35. package/dist/errors.js +18 -0
  36. package/dist/history/index.d.ts +3 -0
  37. package/dist/history/index.d.ts.map +1 -0
  38. package/dist/history/index.js +2 -0
  39. package/dist/history/service.d.ts +46 -0
  40. package/dist/history/service.d.ts.map +1 -0
  41. package/dist/history/service.js +354 -0
  42. package/dist/history/types.d.ts +21 -0
  43. package/dist/history/types.d.ts.map +1 -0
  44. package/dist/index.d.ts +14 -5
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +14 -4
  47. package/dist/keys/address.d.ts +13 -0
  48. package/dist/keys/address.d.ts.map +1 -0
  49. package/dist/keys/address.js +55 -0
  50. package/dist/keys/derive.d.ts +37 -0
  51. package/dist/keys/derive.d.ts.map +1 -0
  52. package/dist/keys/derive.js +112 -0
  53. package/dist/keys/hex.d.ts +17 -0
  54. package/dist/keys/hex.d.ts.map +1 -0
  55. package/dist/keys/hex.js +66 -0
  56. package/dist/keys/index.d.ts +5 -0
  57. package/dist/keys/index.d.ts.map +1 -0
  58. package/dist/keys/index.js +4 -0
  59. package/dist/keys/mnemonic.d.ts +8 -0
  60. package/dist/keys/mnemonic.d.ts.map +1 -0
  61. package/dist/keys/mnemonic.js +23 -0
  62. package/dist/keys.d.ts +4 -1
  63. package/dist/keys.d.ts.map +1 -1
  64. package/dist/keys.js +4 -0
  65. package/dist/prover/config.d.ts +1 -15
  66. package/dist/prover/config.d.ts.map +1 -1
  67. package/dist/prover/config.js +1 -11
  68. package/dist/prover/prover.d.ts +15 -4
  69. package/dist/prover/prover.d.ts.map +1 -1
  70. package/dist/prover/prover.js +115 -98
  71. package/dist/prover/registry.d.ts +2 -2
  72. package/dist/prover/registry.d.ts.map +1 -1
  73. package/dist/prover/registry.js +62 -14
  74. package/dist/state/merkle/hydrator.d.ts.map +1 -1
  75. package/dist/state/merkle/hydrator.js +3 -2
  76. package/dist/state/merkle/index.d.ts +1 -1
  77. package/dist/state/merkle/index.d.ts.map +1 -1
  78. package/dist/state/merkle/index.js +1 -1
  79. package/dist/state/merkle/merkle-tree.d.ts +8 -0
  80. package/dist/state/merkle/merkle-tree.d.ts.map +1 -1
  81. package/dist/state/merkle/merkle-tree.js +16 -7
  82. package/dist/state/store/ciphertext-store.d.ts +4 -0
  83. package/dist/state/store/ciphertext-store.d.ts.map +1 -1
  84. package/dist/state/store/ciphertext-store.js +12 -0
  85. package/dist/state/store/history-store.d.ts +24 -0
  86. package/dist/state/store/history-store.d.ts.map +1 -0
  87. package/dist/state/store/history-store.js +53 -0
  88. package/dist/state/store/index.d.ts +3 -2
  89. package/dist/state/store/index.d.ts.map +1 -1
  90. package/dist/state/store/index.js +1 -0
  91. package/dist/state/store/job-store.d.ts +7 -7
  92. package/dist/state/store/job-store.d.ts.map +1 -1
  93. package/dist/state/store/job-store.js +65 -39
  94. package/dist/state/store/jobs.d.ts +65 -18
  95. package/dist/state/store/jobs.d.ts.map +1 -1
  96. package/dist/state/store/leaf-store.d.ts.map +1 -1
  97. package/dist/state/store/leaf-store.js +0 -3
  98. package/dist/state/store/note-store.d.ts +7 -7
  99. package/dist/state/store/note-store.d.ts.map +1 -1
  100. package/dist/state/store/note-store.js +38 -34
  101. package/dist/state/store/nullifier-store.d.ts +9 -0
  102. package/dist/state/store/nullifier-store.d.ts.map +1 -1
  103. package/dist/state/store/nullifier-store.js +32 -2
  104. package/dist/state/store/records.d.ts +31 -2
  105. package/dist/state/store/records.d.ts.map +1 -1
  106. package/dist/state/store/root-store.d.ts.map +1 -1
  107. package/dist/state/store/root-store.js +0 -4
  108. package/dist/state/store/store.d.ts +61 -27
  109. package/dist/state/store/store.d.ts.map +1 -1
  110. package/dist/state/store/store.js +92 -1
  111. package/dist/storage/memory.d.ts.map +1 -1
  112. package/dist/storage/memory.js +5 -1
  113. package/dist/transactions/deposit.d.ts +12 -15
  114. package/dist/transactions/deposit.d.ts.map +1 -1
  115. package/dist/transactions/deposit.js +203 -152
  116. package/dist/transactions/index.d.ts +7 -4
  117. package/dist/transactions/index.d.ts.map +1 -1
  118. package/dist/transactions/index.js +7 -2
  119. package/dist/transactions/note-selection.d.ts +17 -0
  120. package/dist/transactions/note-selection.d.ts.map +1 -0
  121. package/dist/transactions/note-selection.js +201 -0
  122. package/dist/transactions/note-sync.d.ts +5 -33
  123. package/dist/transactions/note-sync.d.ts.map +1 -1
  124. package/dist/transactions/note-sync.js +320 -155
  125. package/dist/transactions/reconcile.d.ts +10 -12
  126. package/dist/transactions/reconcile.d.ts.map +1 -1
  127. package/dist/transactions/reconcile.js +53 -7
  128. package/dist/transactions/transact.d.ts +13 -24
  129. package/dist/transactions/transact.d.ts.map +1 -1
  130. package/dist/transactions/transact.js +393 -507
  131. package/dist/transactions/transaction-planner.d.ts +34 -0
  132. package/dist/transactions/transaction-planner.d.ts.map +1 -0
  133. package/dist/transactions/transaction-planner.js +116 -0
  134. package/dist/transactions/transfer-planner.d.ts +36 -0
  135. package/dist/transactions/transfer-planner.d.ts.map +1 -0
  136. package/dist/transactions/transfer-planner.js +85 -0
  137. package/dist/transactions/types/deposit.d.ts +67 -0
  138. package/dist/transactions/types/deposit.d.ts.map +1 -0
  139. package/dist/transactions/types/domain.d.ts +67 -0
  140. package/dist/transactions/types/domain.d.ts.map +1 -0
  141. package/dist/transactions/types/domain.js +4 -0
  142. package/dist/transactions/types/index.d.ts +18 -0
  143. package/dist/transactions/types/index.d.ts.map +1 -0
  144. package/dist/transactions/types/index.js +17 -0
  145. package/dist/transactions/types/options.d.ts +45 -0
  146. package/dist/transactions/types/options.d.ts.map +1 -0
  147. package/dist/transactions/types/options.js +1 -0
  148. package/dist/transactions/types/planning.d.ts +80 -0
  149. package/dist/transactions/types/planning.d.ts.map +1 -0
  150. package/dist/transactions/types/planning.js +1 -0
  151. package/dist/transactions/types/state-stores.d.ts +103 -0
  152. package/dist/transactions/types/state-stores.d.ts.map +1 -0
  153. package/dist/transactions/types/state-stores.js +1 -0
  154. package/dist/transactions/types/transact.d.ts +76 -0
  155. package/dist/transactions/types/transact.d.ts.map +1 -0
  156. package/dist/transactions/types/transact.js +1 -0
  157. package/dist/transactions/withdrawal-planner.d.ts +58 -0
  158. package/dist/transactions/withdrawal-planner.d.ts.map +1 -0
  159. package/dist/transactions/withdrawal-planner.js +128 -0
  160. package/dist/tsconfig.tsbuildinfo +1 -1
  161. package/dist/tsup.browser.config.d.ts +7 -0
  162. package/dist/tsup.browser.config.d.ts.map +1 -0
  163. package/dist/tsup.browser.config.js +34 -0
  164. package/dist/utils/amounts.d.ts +39 -0
  165. package/dist/utils/amounts.d.ts.map +1 -0
  166. package/dist/utils/amounts.js +89 -0
  167. package/dist/utils/async.d.ts +9 -0
  168. package/dist/utils/async.d.ts.map +1 -1
  169. package/dist/utils/async.js +24 -0
  170. package/dist/utils/bigint.js +7 -7
  171. package/dist/utils/crypto.d.ts +11 -5
  172. package/dist/utils/crypto.d.ts.map +1 -1
  173. package/dist/utils/crypto.js +12 -6
  174. package/dist/utils/format.d.ts +25 -0
  175. package/dist/utils/format.d.ts.map +1 -0
  176. package/dist/utils/format.js +33 -0
  177. package/dist/utils/notes.d.ts +15 -0
  178. package/dist/utils/notes.d.ts.map +1 -0
  179. package/dist/utils/notes.js +14 -0
  180. package/dist/utils/polling.d.ts +5 -0
  181. package/dist/utils/polling.d.ts.map +1 -1
  182. package/dist/utils/polling.js +5 -0
  183. package/dist/utils/random.d.ts +13 -0
  184. package/dist/utils/random.d.ts.map +1 -0
  185. package/dist/utils/random.js +27 -0
  186. package/dist/utils/secure-memory.d.ts +25 -0
  187. package/dist/utils/secure-memory.d.ts.map +1 -0
  188. package/dist/utils/secure-memory.js +28 -0
  189. package/dist/utils/signature.d.ts +6 -0
  190. package/dist/utils/signature.d.ts.map +1 -1
  191. package/dist/utils/signature.js +8 -6
  192. package/dist/utils/validators.d.ts +21 -10
  193. package/dist/utils/validators.d.ts.map +1 -1
  194. package/dist/utils/validators.js +37 -11
  195. package/dist/vitest.config.d.ts +3 -0
  196. package/dist/vitest.config.d.ts.map +1 -0
  197. package/dist/vitest.config.js +13 -0
  198. package/package.json +27 -7
  199. package/.eslintrc.json +0 -4
  200. package/account/zkAccount.test.ts +0 -316
  201. package/account/zkAccount.ts +0 -222
  202. package/clients/broadcaster.ts +0 -67
  203. package/clients/http.ts +0 -94
  204. package/clients/indexer.ts +0 -150
  205. package/config.ts +0 -39
  206. package/core.ts +0 -17
  207. package/dist/account/railgun-imports-prototype.d.ts +0 -12
  208. package/dist/account/railgun-imports-prototype.d.ts.map +0 -1
  209. package/dist/account/railgun-imports-prototype.js +0 -30
  210. package/dist/account/zkAccount.d.ts.map +0 -1
  211. package/dist/key-derivation/babyjubjub.d.ts +0 -9
  212. package/dist/key-derivation/babyjubjub.d.ts.map +0 -1
  213. package/dist/key-derivation/babyjubjub.js +0 -9
  214. package/dist/key-derivation/bech32.d.ts +0 -22
  215. package/dist/key-derivation/bech32.d.ts.map +0 -1
  216. package/dist/key-derivation/bech32.js +0 -86
  217. package/dist/key-derivation/bip32.d.ts +0 -17
  218. package/dist/key-derivation/bip32.d.ts.map +0 -1
  219. package/dist/key-derivation/bip32.js +0 -41
  220. package/dist/key-derivation/bip39.d.ts +0 -22
  221. package/dist/key-derivation/bip39.d.ts.map +0 -1
  222. package/dist/key-derivation/bip39.js +0 -56
  223. package/dist/key-derivation/bytes.d.ts +0 -19
  224. package/dist/key-derivation/bytes.d.ts.map +0 -1
  225. package/dist/key-derivation/bytes.js +0 -92
  226. package/dist/key-derivation/hash.d.ts +0 -3
  227. package/dist/key-derivation/hash.d.ts.map +0 -1
  228. package/dist/key-derivation/hash.js +0 -10
  229. package/dist/key-derivation/index.d.ts +0 -8
  230. package/dist/key-derivation/index.d.ts.map +0 -1
  231. package/dist/key-derivation/index.js +0 -7
  232. package/dist/key-derivation/wallet-node.d.ts +0 -45
  233. package/dist/key-derivation/wallet-node.d.ts.map +0 -1
  234. package/dist/key-derivation/wallet-node.js +0 -109
  235. package/dist/state/ciphertext-store.d.ts +0 -12
  236. package/dist/state/ciphertext-store.d.ts.map +0 -1
  237. package/dist/state/ciphertext-store.js +0 -25
  238. package/dist/state/hydrator.d.ts +0 -16
  239. package/dist/state/hydrator.d.ts.map +0 -1
  240. package/dist/state/hydrator.js +0 -18
  241. package/dist/state/job-store.d.ts +0 -12
  242. package/dist/state/job-store.d.ts.map +0 -1
  243. package/dist/state/job-store.js +0 -118
  244. package/dist/state/jobs.d.ts +0 -50
  245. package/dist/state/jobs.d.ts.map +0 -1
  246. package/dist/state/jobs.js +0 -1
  247. package/dist/state/leaf-store.d.ts +0 -17
  248. package/dist/state/leaf-store.d.ts.map +0 -1
  249. package/dist/state/leaf-store.js +0 -35
  250. package/dist/state/merkle-tree.d.ts +0 -34
  251. package/dist/state/merkle-tree.d.ts.map +0 -1
  252. package/dist/state/merkle-tree.js +0 -104
  253. package/dist/state/note-store.d.ts +0 -37
  254. package/dist/state/note-store.d.ts.map +0 -1
  255. package/dist/state/note-store.js +0 -133
  256. package/dist/state/nullifier-store.d.ts +0 -13
  257. package/dist/state/nullifier-store.d.ts.map +0 -1
  258. package/dist/state/nullifier-store.js +0 -21
  259. package/dist/state/records.d.ts +0 -57
  260. package/dist/state/records.d.ts.map +0 -1
  261. package/dist/state/root-store.d.ts +0 -13
  262. package/dist/state/root-store.d.ts.map +0 -1
  263. package/dist/state/root-store.js +0 -30
  264. package/dist/state/store.d.ts +0 -26
  265. package/dist/state/store.d.ts.map +0 -1
  266. package/dist/state/store.js +0 -19
  267. package/dist/state.d.ts +0 -83
  268. package/dist/state.d.ts.map +0 -1
  269. package/dist/state.js +0 -171
  270. package/dist/transactions/shield.d.ts +0 -5
  271. package/dist/transactions/shield.d.ts.map +0 -1
  272. package/dist/transactions/shield.js +0 -93
  273. package/dist/transactions/types.d.ts +0 -114
  274. package/dist/transactions/types.d.ts.map +0 -1
  275. package/dist/transactions/utils.d.ts +0 -10
  276. package/dist/transactions/utils.d.ts.map +0 -1
  277. package/dist/transactions/utils.js +0 -17
  278. package/dist/utils/time.d.ts +0 -2
  279. package/dist/utils/time.d.ts.map +0 -1
  280. package/dist/utils/time.js +0 -3
  281. package/dist/utils/witness.d.ts +0 -11
  282. package/dist/utils/witness.d.ts.map +0 -1
  283. package/dist/utils/witness.js +0 -19
  284. package/errors.ts +0 -20
  285. package/index.ts +0 -17
  286. package/key-derivation/babyjubjub.ts +0 -11
  287. package/key-derivation/bech32.test.ts +0 -90
  288. package/key-derivation/bech32.ts +0 -124
  289. package/key-derivation/bip32.ts +0 -56
  290. package/key-derivation/bip39.ts +0 -76
  291. package/key-derivation/bytes.ts +0 -118
  292. package/key-derivation/hash.ts +0 -13
  293. package/key-derivation/index.ts +0 -7
  294. package/key-derivation/wallet-node.ts +0 -155
  295. package/keys.ts +0 -47
  296. package/prover/config.ts +0 -104
  297. package/prover/index.ts +0 -1
  298. package/prover/prover.integration.test.ts +0 -162
  299. package/prover/prover.test.ts +0 -309
  300. package/prover/prover.ts +0 -405
  301. package/prover/registry.test.ts +0 -90
  302. package/prover/registry.ts +0 -82
  303. package/schema.ts +0 -17
  304. package/setup-artifacts.sh +0 -57
  305. package/state/index.ts +0 -2
  306. package/state/merkle/hydrator.ts +0 -69
  307. package/state/merkle/index.ts +0 -12
  308. package/state/merkle/merkle-tree.test.ts +0 -50
  309. package/state/merkle/merkle-tree.ts +0 -163
  310. package/state/store/ciphertext-store.ts +0 -28
  311. package/state/store/index.ts +0 -24
  312. package/state/store/job-store.ts +0 -162
  313. package/state/store/jobs.ts +0 -64
  314. package/state/store/leaf-store.ts +0 -39
  315. package/state/store/note-store.ts +0 -177
  316. package/state/store/nullifier-store.ts +0 -39
  317. package/state/store/records.ts +0 -61
  318. package/state/store/root-store.ts +0 -34
  319. package/state/store/store.ts +0 -25
  320. package/state.test.ts +0 -235
  321. package/storage/index.ts +0 -3
  322. package/storage/indexeddb.test.ts +0 -99
  323. package/storage/indexeddb.ts +0 -235
  324. package/storage/memory.test.ts +0 -59
  325. package/storage/memory.ts +0 -93
  326. package/transactions/deposit.test.ts +0 -160
  327. package/transactions/deposit.ts +0 -227
  328. package/transactions/index.ts +0 -20
  329. package/transactions/note-sync.test.ts +0 -155
  330. package/transactions/note-sync.ts +0 -452
  331. package/transactions/reconcile.ts +0 -73
  332. package/transactions/transact.test.ts +0 -451
  333. package/transactions/transact.ts +0 -811
  334. package/transactions/types.ts +0 -141
  335. package/tsconfig.json +0 -14
  336. package/types/global.d.ts +0 -15
  337. package/types.ts +0 -24
  338. package/utils/async.ts +0 -15
  339. package/utils/bigint.ts +0 -34
  340. package/utils/crypto.test.ts +0 -69
  341. package/utils/crypto.ts +0 -58
  342. package/utils/json-codec.ts +0 -38
  343. package/utils/polling.ts +0 -6
  344. package/utils/signature.ts +0 -16
  345. package/utils/validators.test.ts +0 -64
  346. package/utils/validators.ts +0 -86
  347. /package/dist/{transactions → history}/types.js +0 -0
  348. /package/dist/{state/records.js → transactions/types/deposit.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { type SpendingKeyPair, type ViewingKeyPair } from "../key-derivation/wallet-node.js";
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 ZkAccount = {
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 deriveZkAccount(masterSeed: Uint8Array, accountIndex?: number): Promise<ZkAccount>;
24
- export declare function deriveZkAccountFromMnemonic(mnemonic: string, accountIndex?: number, password?: string): Promise<ZkAccount>;
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=zkAccount.d.ts.map
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 { Mnemonic } from "../key-derivation/bip39.js";
2
- import { ByteUtils } from "../key-derivation/bytes.js";
3
- import { deriveNodesFromSeed, WalletNode, } from "../key-derivation/wallet-node.js";
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 deriveZkAccount(masterSeed, accountIndex = 0) {
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 Error("accountIndex must be a non-negative integer");
16
+ throw new ValidationError("accountIndex must be a non-negative integer");
14
17
  }
15
- const { spending, viewing } = deriveNodesFromSeed(seed, accountIndex);
16
- const spendingKeyPair = spending.getSpendingKeyPair();
17
- const viewingKeyPair = await viewing.getViewingKeyPair();
18
- const nullifyingKey = WalletNode.getNullifyingKey(viewingKeyPair.privateKey);
19
- const masterPublicKey = WalletNode.getMasterPublicKey(spendingKeyPair.pubkey, nullifyingKey);
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 deriveZkAccountFromMnemonic(mnemonic, accountIndex = 0, password = "") {
31
+ export async function deriveAccountFromMnemonic(mnemonic, accountIndex = 0, password = "") {
28
32
  const normalized = normalizeMnemonic(mnemonic);
29
33
  const seed = mnemonicToSeed(normalized, password);
30
- return deriveZkAccount(seed, accountIndex);
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
- return clone(seed);
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 Error(`mnemonic entropy must be ${MNEMONIC_ENTROPY_BYTES} bytes`);
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 Error("master seed encryptor must return Uint8Array");
84
+ throw new ValidationError("master seed encryptor must return Uint8Array");
74
85
  }
75
- await storage.put(MASTER_SEED_KEY, clone(encrypted));
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
- const mnemonic = textDecoder.decode(plaintext);
83
- return normalizeMnemonic(mnemonic);
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 Error("master mnemonic already exists; set overwrite to true to replace it");
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 Error("master mnemonic encryptor must return Uint8Array");
118
+ throw new ValidationError("master mnemonic encryptor must return Uint8Array");
103
119
  }
104
- await storage.put(MASTER_MNEMONIC_KEY, clone(encrypted));
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 Error("master seed must be a Uint8Array");
125
+ throw new ValidationError("master seed must be a Uint8Array");
112
126
  }
113
127
  if (seed.length !== MASTER_SEED_LENGTH) {
114
- throw new Error(`master seed must be ${MASTER_SEED_LENGTH} bytes`);
128
+ throw new ValidationError(`master seed must be ${MASTER_SEED_LENGTH} bytes`);
115
129
  }
116
- return clone(seed);
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 Error("invalid BIP-39 mnemonic phrase");
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 ByteUtils.hexStringToBytes(seedHex);
141
+ return Hex.toBytes(seedHex);
128
142
  }