@unlink-xyz/core 0.1.0 → 0.1.3-canary.01ac52d

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 (269) hide show
  1. package/README.md +9 -0
  2. package/dist/account/{zkAccount.d.ts → account.d.ts} +36 -5
  3. package/dist/account/account.d.ts.map +1 -0
  4. package/dist/account/accounts.d.ts +42 -0
  5. package/dist/account/accounts.d.ts.map +1 -0
  6. package/dist/account/seed.d.ts +45 -0
  7. package/dist/account/seed.d.ts.map +1 -0
  8. package/dist/account/serialization.d.ts +6 -0
  9. package/dist/account/serialization.d.ts.map +1 -0
  10. package/dist/browser/index.js +56253 -0
  11. package/dist/browser/index.js.map +1 -0
  12. package/dist/browser/wallet/index.js +55974 -0
  13. package/dist/browser/wallet/index.js.map +1 -0
  14. package/dist/clients/broadcaster.d.ts +8 -2
  15. package/dist/clients/broadcaster.d.ts.map +1 -1
  16. package/dist/clients/http.d.ts +6 -0
  17. package/dist/clients/http.d.ts.map +1 -1
  18. package/dist/clients/indexer.d.ts +16 -0
  19. package/dist/clients/indexer.d.ts.map +1 -1
  20. package/dist/config.d.ts +35 -9
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/constants.d.ts +6 -0
  23. package/dist/constants.d.ts.map +1 -0
  24. package/dist/core.d.ts.map +1 -1
  25. package/dist/crypto/adapters/index.d.ts +17 -0
  26. package/dist/crypto/adapters/index.d.ts.map +1 -0
  27. package/dist/crypto/adapters/polyfills.d.ts +5 -0
  28. package/dist/crypto/adapters/polyfills.d.ts.map +1 -0
  29. package/dist/crypto/encrypt.d.ts +33 -0
  30. package/dist/crypto/encrypt.d.ts.map +1 -0
  31. package/dist/crypto/secure-memory.d.ts +25 -0
  32. package/dist/crypto/secure-memory.d.ts.map +1 -0
  33. package/dist/errors.d.ts +17 -0
  34. package/dist/errors.d.ts.map +1 -1
  35. package/dist/history/index.d.ts +3 -0
  36. package/dist/history/index.d.ts.map +1 -0
  37. package/dist/history/service.d.ts +46 -0
  38. package/dist/history/service.d.ts.map +1 -0
  39. package/dist/history/types.d.ts +21 -0
  40. package/dist/history/types.d.ts.map +1 -0
  41. package/dist/index.d.ts +16 -5
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +9969 -16
  44. package/dist/index.js.map +1 -0
  45. package/dist/keys/address.d.ts +13 -0
  46. package/dist/keys/address.d.ts.map +1 -0
  47. package/dist/keys/derive.d.ts +37 -0
  48. package/dist/keys/derive.d.ts.map +1 -0
  49. package/dist/keys/hex.d.ts +14 -0
  50. package/dist/keys/hex.d.ts.map +1 -0
  51. package/dist/keys/index.d.ts +5 -0
  52. package/dist/keys/index.d.ts.map +1 -0
  53. package/dist/keys/mnemonic.d.ts +6 -0
  54. package/dist/keys/mnemonic.d.ts.map +1 -0
  55. package/dist/keys.d.ts +5 -1
  56. package/dist/keys.d.ts.map +1 -1
  57. package/dist/prover/config.d.ts +53 -22
  58. package/dist/prover/config.d.ts.map +1 -1
  59. package/dist/prover/integrity.d.ts +20 -0
  60. package/dist/prover/integrity.d.ts.map +1 -0
  61. package/dist/prover/prover.d.ts +16 -20
  62. package/dist/prover/prover.d.ts.map +1 -1
  63. package/dist/prover/registry.d.ts +3 -30
  64. package/dist/prover/registry.d.ts.map +1 -1
  65. package/dist/state/merkle/hydrator.d.ts +21 -19
  66. package/dist/state/merkle/hydrator.d.ts.map +1 -1
  67. package/dist/state/merkle/index.d.ts +2 -2
  68. package/dist/state/merkle/index.d.ts.map +1 -1
  69. package/dist/state/merkle/merkle-tree.d.ts +8 -0
  70. package/dist/state/merkle/merkle-tree.d.ts.map +1 -1
  71. package/dist/state/store/ciphertext-store.d.ts +11 -0
  72. package/dist/state/store/ciphertext-store.d.ts.map +1 -1
  73. package/dist/state/store/history-store.d.ts +24 -0
  74. package/dist/state/store/history-store.d.ts.map +1 -0
  75. package/dist/state/store/index.d.ts +3 -2
  76. package/dist/state/store/index.d.ts.map +1 -1
  77. package/dist/state/store/job-store.d.ts +7 -7
  78. package/dist/state/store/job-store.d.ts.map +1 -1
  79. package/dist/state/store/jobs.d.ts +70 -25
  80. package/dist/state/store/jobs.d.ts.map +1 -1
  81. package/dist/state/store/leaf-store.d.ts +4 -0
  82. package/dist/state/store/leaf-store.d.ts.map +1 -1
  83. package/dist/state/store/note-store.d.ts +7 -7
  84. package/dist/state/store/note-store.d.ts.map +1 -1
  85. package/dist/state/store/nullifier-store.d.ts +9 -0
  86. package/dist/state/store/nullifier-store.d.ts.map +1 -1
  87. package/dist/state/store/records.d.ts +39 -2
  88. package/dist/state/store/records.d.ts.map +1 -1
  89. package/dist/state/store/root-store.d.ts.map +1 -1
  90. package/dist/state/store/store.d.ts +79 -27
  91. package/dist/state/store/store.d.ts.map +1 -1
  92. package/dist/storage/indexeddb.d.ts.map +1 -1
  93. package/dist/storage/memory.d.ts.map +1 -1
  94. package/dist/transactions/adapter.d.ts +31 -0
  95. package/dist/transactions/adapter.d.ts.map +1 -0
  96. package/dist/transactions/deposit.d.ts +12 -17
  97. package/dist/transactions/deposit.d.ts.map +1 -1
  98. package/dist/transactions/index.d.ts +9 -4
  99. package/dist/transactions/index.d.ts.map +1 -1
  100. package/dist/transactions/note-selection.d.ts +17 -0
  101. package/dist/transactions/note-selection.d.ts.map +1 -0
  102. package/dist/transactions/note-sync.d.ts +5 -33
  103. package/dist/transactions/note-sync.d.ts.map +1 -1
  104. package/dist/transactions/reconcile.d.ts +9 -11
  105. package/dist/transactions/reconcile.d.ts.map +1 -1
  106. package/dist/transactions/transact.d.ts +30 -27
  107. package/dist/transactions/transact.d.ts.map +1 -1
  108. package/dist/transactions/transaction-planner.d.ts +34 -0
  109. package/dist/transactions/transaction-planner.d.ts.map +1 -0
  110. package/dist/transactions/transfer-planner.d.ts +37 -0
  111. package/dist/transactions/transfer-planner.d.ts.map +1 -0
  112. package/dist/transactions/types/deposit.d.ts +67 -0
  113. package/dist/transactions/types/deposit.d.ts.map +1 -0
  114. package/dist/transactions/types/domain.d.ts +70 -0
  115. package/dist/transactions/types/domain.d.ts.map +1 -0
  116. package/dist/transactions/types/index.d.ts +18 -0
  117. package/dist/transactions/types/index.d.ts.map +1 -0
  118. package/dist/transactions/types/options.d.ts +54 -0
  119. package/dist/transactions/types/options.d.ts.map +1 -0
  120. package/dist/transactions/types/planning.d.ts +82 -0
  121. package/dist/transactions/types/planning.d.ts.map +1 -0
  122. package/dist/transactions/types/state-stores.d.ts +151 -0
  123. package/dist/transactions/types/state-stores.d.ts.map +1 -0
  124. package/dist/transactions/types/transact.d.ts +83 -0
  125. package/dist/transactions/types/transact.d.ts.map +1 -0
  126. package/dist/transactions/withdrawal-planner.d.ts +58 -0
  127. package/dist/transactions/withdrawal-planner.d.ts.map +1 -0
  128. package/dist/tsconfig.tsbuildinfo +1 -1
  129. package/dist/tsup.browser.config.d.ts +7 -0
  130. package/dist/tsup.browser.config.d.ts.map +1 -0
  131. package/dist/tsup.config.d.ts +8 -0
  132. package/dist/tsup.config.d.ts.map +1 -0
  133. package/dist/types.d.ts +1 -0
  134. package/dist/types.d.ts.map +1 -1
  135. package/dist/utils/amounts.d.ts +26 -0
  136. package/dist/utils/amounts.d.ts.map +1 -0
  137. package/dist/utils/async.d.ts +9 -0
  138. package/dist/utils/async.d.ts.map +1 -1
  139. package/dist/utils/async.js +38 -11
  140. package/dist/utils/async.js.map +1 -0
  141. package/dist/utils/bigint.d.ts +0 -2
  142. package/dist/utils/bigint.d.ts.map +1 -1
  143. package/dist/utils/format.d.ts +25 -0
  144. package/dist/utils/format.d.ts.map +1 -0
  145. package/dist/utils/notes.d.ts +15 -0
  146. package/dist/utils/notes.d.ts.map +1 -0
  147. package/dist/utils/polling.d.ts +5 -0
  148. package/dist/utils/polling.d.ts.map +1 -1
  149. package/dist/utils/random.d.ts +18 -0
  150. package/dist/utils/random.d.ts.map +1 -0
  151. package/dist/utils/signature.d.ts +6 -0
  152. package/dist/utils/signature.d.ts.map +1 -1
  153. package/dist/utils/validators.d.ts +21 -10
  154. package/dist/utils/validators.d.ts.map +1 -1
  155. package/dist/vitest.config.d.ts +3 -0
  156. package/dist/vitest.config.d.ts.map +1 -0
  157. package/dist/wallet/adapter.d.ts +21 -0
  158. package/dist/wallet/adapter.d.ts.map +1 -0
  159. package/dist/wallet/burner/service.d.ts +32 -0
  160. package/dist/wallet/burner/service.d.ts.map +1 -0
  161. package/dist/wallet/burner/types.d.ts +47 -0
  162. package/dist/wallet/burner/types.d.ts.map +1 -0
  163. package/dist/wallet/index.d.ts +20 -0
  164. package/dist/wallet/index.d.ts.map +1 -0
  165. package/dist/wallet/index.js +9712 -0
  166. package/dist/wallet/index.js.map +1 -0
  167. package/dist/wallet/sdk.d.ts +47 -0
  168. package/dist/wallet/sdk.d.ts.map +1 -0
  169. package/dist/wallet/types.d.ts +455 -0
  170. package/dist/wallet/types.d.ts.map +1 -0
  171. package/dist/wallet/unlink-wallet.d.ts +186 -0
  172. package/dist/wallet/unlink-wallet.d.ts.map +1 -0
  173. package/package.json +40 -14
  174. package/dist/account/zkAccount.d.ts.map +0 -1
  175. package/dist/account/zkAccount.js +0 -128
  176. package/dist/clients/broadcaster.js +0 -23
  177. package/dist/clients/http.js +0 -57
  178. package/dist/clients/indexer.js +0 -67
  179. package/dist/config.js +0 -29
  180. package/dist/core.js +0 -12
  181. package/dist/errors.js +0 -18
  182. package/dist/key-derivation/babyjubjub.d.ts +0 -9
  183. package/dist/key-derivation/babyjubjub.d.ts.map +0 -1
  184. package/dist/key-derivation/babyjubjub.js +0 -9
  185. package/dist/key-derivation/bech32.d.ts +0 -22
  186. package/dist/key-derivation/bech32.d.ts.map +0 -1
  187. package/dist/key-derivation/bech32.js +0 -86
  188. package/dist/key-derivation/bip32.d.ts +0 -17
  189. package/dist/key-derivation/bip32.d.ts.map +0 -1
  190. package/dist/key-derivation/bip32.js +0 -41
  191. package/dist/key-derivation/bip39.d.ts +0 -22
  192. package/dist/key-derivation/bip39.d.ts.map +0 -1
  193. package/dist/key-derivation/bip39.js +0 -56
  194. package/dist/key-derivation/bytes.d.ts +0 -19
  195. package/dist/key-derivation/bytes.d.ts.map +0 -1
  196. package/dist/key-derivation/bytes.js +0 -92
  197. package/dist/key-derivation/hash.d.ts +0 -3
  198. package/dist/key-derivation/hash.d.ts.map +0 -1
  199. package/dist/key-derivation/hash.js +0 -10
  200. package/dist/key-derivation/index.d.ts +0 -8
  201. package/dist/key-derivation/index.d.ts.map +0 -1
  202. package/dist/key-derivation/index.js +0 -7
  203. package/dist/key-derivation/wallet-node.d.ts +0 -45
  204. package/dist/key-derivation/wallet-node.d.ts.map +0 -1
  205. package/dist/key-derivation/wallet-node.js +0 -109
  206. package/dist/keys.js +0 -41
  207. package/dist/prover/config.js +0 -80
  208. package/dist/prover/index.js +0 -1
  209. package/dist/prover/prover.js +0 -274
  210. package/dist/prover/registry.js +0 -57
  211. package/dist/schema.js +0 -14
  212. package/dist/state/ciphertext-store.d.ts +0 -12
  213. package/dist/state/ciphertext-store.d.ts.map +0 -1
  214. package/dist/state/ciphertext-store.js +0 -25
  215. package/dist/state/index.js +0 -2
  216. package/dist/state/leaf-store.d.ts +0 -17
  217. package/dist/state/leaf-store.d.ts.map +0 -1
  218. package/dist/state/leaf-store.js +0 -35
  219. package/dist/state/merkle/hydrator.js +0 -36
  220. package/dist/state/merkle/index.js +0 -2
  221. package/dist/state/merkle/merkle-tree.js +0 -104
  222. package/dist/state/merkle-tree.d.ts +0 -34
  223. package/dist/state/merkle-tree.d.ts.map +0 -1
  224. package/dist/state/merkle-tree.js +0 -104
  225. package/dist/state/note-store.d.ts +0 -37
  226. package/dist/state/note-store.d.ts.map +0 -1
  227. package/dist/state/note-store.js +0 -133
  228. package/dist/state/nullifier-store.d.ts +0 -13
  229. package/dist/state/nullifier-store.d.ts.map +0 -1
  230. package/dist/state/nullifier-store.js +0 -21
  231. package/dist/state/records.d.ts +0 -57
  232. package/dist/state/records.d.ts.map +0 -1
  233. package/dist/state/records.js +0 -1
  234. package/dist/state/root-store.d.ts +0 -13
  235. package/dist/state/root-store.d.ts.map +0 -1
  236. package/dist/state/root-store.js +0 -30
  237. package/dist/state/store/ciphertext-store.js +0 -25
  238. package/dist/state/store/index.js +0 -8
  239. package/dist/state/store/job-store.js +0 -118
  240. package/dist/state/store/jobs.js +0 -1
  241. package/dist/state/store/leaf-store.js +0 -35
  242. package/dist/state/store/note-store.js +0 -142
  243. package/dist/state/store/nullifier-store.js +0 -30
  244. package/dist/state/store/records.js +0 -1
  245. package/dist/state/store/root-store.js +0 -30
  246. package/dist/state/store/store.js +0 -22
  247. package/dist/state/store.d.ts +0 -26
  248. package/dist/state/store.d.ts.map +0 -1
  249. package/dist/state/store.js +0 -19
  250. package/dist/storage/index.js +0 -2
  251. package/dist/storage/indexeddb.js +0 -205
  252. package/dist/storage/memory.js +0 -87
  253. package/dist/transactions/deposit.js +0 -173
  254. package/dist/transactions/index.js +0 -4
  255. package/dist/transactions/note-sync.js +0 -320
  256. package/dist/transactions/reconcile.js +0 -39
  257. package/dist/transactions/transact.js +0 -561
  258. package/dist/transactions/types.d.ts +0 -114
  259. package/dist/transactions/types.d.ts.map +0 -1
  260. package/dist/transactions/types.js +0 -1
  261. package/dist/types.js +0 -1
  262. package/dist/utils/bigint.js +0 -29
  263. package/dist/utils/crypto.d.ts +0 -12
  264. package/dist/utils/crypto.d.ts.map +0 -1
  265. package/dist/utils/crypto.js +0 -39
  266. package/dist/utils/json-codec.js +0 -25
  267. package/dist/utils/polling.js +0 -6
  268. package/dist/utils/signature.js +0 -12
  269. package/dist/utils/validators.js +0 -70
@@ -1,29 +0,0 @@
1
- import { CoreError } from "../errors.js";
2
- import { ByteLength, ByteUtils } from "../key-derivation/bytes.js";
3
- /**
4
- * BigInt helpers shared across transaction builders to keep formatting consistent.
5
- */
6
- export function formatUint256(value) {
7
- assertNonNegative("uint256", value);
8
- return ByteUtils.nToHex(value, ByteLength.UINT_256, true);
9
- }
10
- export function parseHexToBigInt(value) {
11
- return ByteUtils.hexToBigInt(value);
12
- }
13
- export function parseNumToBigInt(value) {
14
- if (value === undefined) {
15
- throw new CoreError("Value is undefined");
16
- }
17
- return BigInt(value);
18
- }
19
- export function assertNonNegative(label, value) {
20
- if (value < 0n) {
21
- throw new CoreError(`${label} must be non-negative`);
22
- }
23
- }
24
- export function ensureBigint(label, value) {
25
- if (typeof value !== "bigint") {
26
- throw new CoreError(`${label} must be provided as a bigint`);
27
- }
28
- return value;
29
- }
@@ -1,12 +0,0 @@
1
- import { Ciphertext, DepositNoteInput, DepositRequest, OutputNoteInput } from "../transactions/types.js";
2
- export declare function encryptNote(note: OutputNoteInput | DepositNoteInput): Ciphertext;
3
- export declare function encrypt(data: bigint, key: bigint): bigint;
4
- export declare function decryptNote(c: Ciphertext, key: bigint): OutputNoteInput;
5
- export declare function deriveCommitment(note: {
6
- npk: bigint;
7
- amount: bigint;
8
- token: string;
9
- }): bigint;
10
- export declare function deriveNpk(request: DepositRequest): bigint;
11
- export declare function computeCommitment(request: DepositRequest, npk: bigint): bigint;
12
- //# sourceMappingURL=crypto.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../utils/crypto.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EAChB,MAAM,0BAA0B,CAAC;AAGlC,wBAAgB,WAAW,CACzB,IAAI,EAAE,eAAe,GAAG,gBAAgB,GACvC,UAAU,CAQZ;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,eAAe,CAYvE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,UAGA;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,cAAc,UAEhD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,UAGrE"}
@@ -1,39 +0,0 @@
1
- import { poseidon } from "@railgun-community/circomlibjs";
2
- import { CoreError } from "../errors.js";
3
- import { parseHexToBigInt } from "./bigint.js";
4
- export function encryptNote(note) {
5
- return {
6
- data: [
7
- encrypt(note.random, note.mpk),
8
- encrypt(parseHexToBigInt(note.token), note.mpk),
9
- encrypt(note.amount, note.mpk),
10
- ],
11
- };
12
- }
13
- export function encrypt(data, key) {
14
- return poseidon([0x556e6c696e6b, key]) ^ data;
15
- }
16
- export function decryptNote(c, key) {
17
- const token_bigint = encrypt(c.data[1], key);
18
- if (token_bigint > 0xffffffffffffffffffffffffffffffffffffffffn) {
19
- throw new CoreError("Invalid Decrypt");
20
- }
21
- const result = {
22
- mpk: key,
23
- random: encrypt(c.data[0], key),
24
- token: "0x" + token_bigint.toString(16).padStart(40, "0"),
25
- amount: encrypt(c.data[2], key),
26
- };
27
- return result;
28
- }
29
- export function deriveCommitment(note) {
30
- const tokenScalar = BigInt(note.token);
31
- return poseidon([note.npk, tokenScalar, note.amount]);
32
- }
33
- export function deriveNpk(request) {
34
- return poseidon([request.note.mpk, request.note.random]);
35
- }
36
- export function computeCommitment(request, npk) {
37
- const tokenScalar = BigInt(request.note.token);
38
- return poseidon([npk, tokenScalar, request.note.amount]);
39
- }
@@ -1,25 +0,0 @@
1
- import { CoreError } from "../errors.js";
2
- import { validateKey } from "../keys.js";
3
- const encoder = new TextEncoder();
4
- const decoder = new TextDecoder();
5
- export function encodeJson(value) {
6
- return encoder.encode(JSON.stringify(value));
7
- }
8
- export function decodeJson(payload) {
9
- try {
10
- return JSON.parse(decoder.decode(payload));
11
- }
12
- catch (err) {
13
- throw new CoreError("failed to decode stored state payload");
14
- }
15
- }
16
- export async function putJson(storage, key, record) {
17
- validateKey(key);
18
- await storage.put(key, encodeJson(record));
19
- }
20
- export async function getJson(storage, key) {
21
- const payload = await storage.get(key);
22
- if (!payload)
23
- return null;
24
- return decodeJson(payload);
25
- }
@@ -1,6 +0,0 @@
1
- /**
2
- * Shared polling configuration constants.
3
- */
4
- export const DEFAULT_POLL_INTERVAL_MS = 500;
5
- export const DEFAULT_POLL_TIMEOUT_MS = 30_000;
6
- export const MAX_POLL_INTERVAL_MS = 5_000;
@@ -1,12 +0,0 @@
1
- import { Buffer } from "buffer";
2
- import { eddsa } from "@railgun-community/circomlibjs";
3
- /**
4
- * Generates an EdDSA signature over a poseidon-hashed message using the spending private key.
5
- * Used for transact public signal signing.
6
- */
7
- export function signTransactMessage(spendingPrivateKey, message) {
8
- const key = Buffer.isBuffer(spendingPrivateKey)
9
- ? spendingPrivateKey
10
- : Buffer.from(spendingPrivateKey);
11
- return eddsa.signPoseidon(key, message);
12
- }
@@ -1,70 +0,0 @@
1
- import { CoreError } from "../errors.js";
2
- import { assertNonNegative } from "./bigint.js";
3
- export const SNARK_SCALAR_FIELD = 21888242871839275222246405745257275088548364400416034343698204186575808495617n;
4
- export function ensurePositiveInt(label, value) {
5
- if (!Number.isInteger(value) || value < 0) {
6
- throw new CoreError(`${label} must be a non-negative integer`);
7
- }
8
- }
9
- export function ensureChainId(chainId) {
10
- if (!Number.isInteger(chainId) || chainId <= 0) {
11
- throw new CoreError("chainId must be a positive integer");
12
- }
13
- }
14
- /** Guards master public key strings against empty values. */
15
- export function ensureMpk(mpk) {
16
- if (typeof mpk !== "string" || mpk.length === 0) {
17
- throw new CoreError("note mpk must be a non-empty string");
18
- }
19
- }
20
- export function ensureBigIntString(label, value) {
21
- let parsed;
22
- try {
23
- parsed = BigInt(value);
24
- }
25
- catch {
26
- throw new CoreError(`${label} must be a base-10 bigint string`);
27
- }
28
- if (parsed < 0n) {
29
- throw new CoreError(`${label} must be non-negative`);
30
- }
31
- }
32
- const ADDRESS_REGEX = /^0x[0-9a-fA-F]{40}$/;
33
- export function ensureAddress(label, value) {
34
- if (typeof value !== "string" || !ADDRESS_REGEX.test(value)) {
35
- throw new CoreError(`${label} must be a 0x-prefixed hex address`);
36
- }
37
- }
38
- /** Confirms the bigint resides in the SNARK scalar field range. */
39
- export function ensureFieldElement(label, value) {
40
- if (value < 0n) {
41
- throw new CoreError(`${label} must be a non-negative field element`);
42
- }
43
- if (value >= SNARK_SCALAR_FIELD) {
44
- throw new CoreError(`${label} must be less than the SNARK scalar field`);
45
- }
46
- }
47
- /** Validates withdrawal note public data before encoding calldata. */
48
- export function ensureWithdrawalInput(label, withdrawal) {
49
- assertNonNegative(`${label}.npk`, withdrawal.npk);
50
- ensureFieldElement(`${label}.npk`, withdrawal.npk);
51
- assertNonNegative(`${label}.amount`, withdrawal.amount);
52
- // if (withdrawal.amount === 0n) {
53
- // throw new CoreError(`${label}.amount must be greater than zero`);
54
- // }
55
- ensureFieldElement(`${label}.amount`, withdrawal.amount);
56
- ensureAddress(`${label}.token`, withdrawal.token);
57
- return withdrawal;
58
- }
59
- /** Validates note parameters before producing a Poseidon commitment. */
60
- export function ensureNoteCommitmentInput(label, note) {
61
- assertNonNegative(`${label}.npk`, note.npk);
62
- ensureFieldElement(`${label}.npk`, note.npk);
63
- assertNonNegative(`${label}.amount`, note.amount);
64
- if (note.amount === 0n) {
65
- throw new CoreError(`${label}.amount must be greater than zero`);
66
- }
67
- ensureFieldElement(`${label}.amount`, note.amount);
68
- ensureAddress(`${label}.token`, note.token);
69
- return note;
70
- }