@permissionless-technologies/upp-sdk 0.4.22 → 0.5.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.
Files changed (53) hide show
  1. package/README.md +30 -0
  2. package/dist/{chunk-XDWRMHLY.js → chunk-27SFQEYY.js} +79 -40
  3. package/dist/chunk-27SFQEYY.js.map +1 -0
  4. package/dist/chunk-53JACDGZ.js +131 -0
  5. package/dist/chunk-53JACDGZ.js.map +1 -0
  6. package/dist/{chunk-D4VCRPKS.js → chunk-5CZ7R4CT.js} +2 -2
  7. package/dist/{chunk-D4VCRPKS.js.map → chunk-5CZ7R4CT.js.map} +1 -1
  8. package/dist/chunk-HB43C26P.cjs +139 -0
  9. package/dist/chunk-HB43C26P.cjs.map +1 -0
  10. package/dist/{chunk-UYPIWBKM.cjs → chunk-JVFP4Q2B.cjs} +2 -2
  11. package/dist/{chunk-UYPIWBKM.cjs.map → chunk-JVFP4Q2B.cjs.map} +1 -1
  12. package/dist/{chunk-DYSU7JYL.cjs → chunk-MSBRBR3X.cjs} +79 -40
  13. package/dist/chunk-MSBRBR3X.cjs.map +1 -0
  14. package/dist/core/index.cjs +21 -13
  15. package/dist/core/index.d.cts +2 -2
  16. package/dist/core/index.d.ts +2 -2
  17. package/dist/core/index.js +2 -2
  18. package/dist/{index-CpfUNGm9.d.ts → index-BRgBwiBM.d.ts} +179 -2
  19. package/dist/{index-hNuffoCo.d.cts → index-BuUCObcz.d.cts} +1167 -714
  20. package/dist/{index-De5B4r0l.d.ts → index-C7OdmKfs.d.ts} +1167 -714
  21. package/dist/{index-AooYZ0kF.d.cts → index-brLSTa0y.d.cts} +179 -2
  22. package/dist/index.cjs +1489 -767
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.cts +4 -4
  25. package/dist/index.d.ts +4 -4
  26. package/dist/index.js +1464 -747
  27. package/dist/index.js.map +1 -1
  28. package/dist/indexer/index.cjs +6 -6
  29. package/dist/indexer/index.d.cts +5 -5
  30. package/dist/indexer/index.d.ts +5 -5
  31. package/dist/indexer/index.js +1 -1
  32. package/dist/react/index.cjs +30 -28
  33. package/dist/react/index.cjs.map +1 -1
  34. package/dist/react/index.d.cts +8 -4
  35. package/dist/react/index.d.ts +8 -4
  36. package/dist/react/index.js +30 -28
  37. package/dist/react/index.js.map +1 -1
  38. package/dist/{transfer-H6UWWUSN.cjs → transfer-AJWQANX7.cjs} +9 -9
  39. package/dist/{transfer-H6UWWUSN.cjs.map → transfer-AJWQANX7.cjs.map} +1 -1
  40. package/dist/{transfer-BGzySIhC.d.ts → transfer-BxiDgCvx.d.ts} +2 -0
  41. package/dist/{transfer-MLVRASM3.js → transfer-SEC6K5A5.js} +3 -3
  42. package/dist/{transfer-MLVRASM3.js.map → transfer-SEC6K5A5.js.map} +1 -1
  43. package/dist/{transfer-BhB-UuBP.d.cts → transfer-p-NXHdGY.d.cts} +2 -0
  44. package/package.json +4 -5
  45. package/src/contracts/interfaces/IUniversalPrivatePool.sol +52 -93
  46. package/src/deployments/11155111.json +28 -17
  47. package/src/deployments/31337.json +28 -14
  48. package/dist/chunk-632LPXPX.cjs +0 -49
  49. package/dist/chunk-632LPXPX.cjs.map +0 -1
  50. package/dist/chunk-DYSU7JYL.cjs.map +0 -1
  51. package/dist/chunk-UMWY4ICQ.js +0 -43
  52. package/dist/chunk-UMWY4ICQ.js.map +0 -1
  53. package/dist/chunk-XDWRMHLY.js.map +0 -1
@@ -8,66 +8,105 @@ var viem = require('viem');
8
8
 
9
9
  // src/deployments/31337.json
10
10
  var __default = {
11
- UniversalPrivatePool: "0x2279b7a0a67db372996a5fab50d91eaa73d2ebe6",
12
- ASPRegistryHub: "0xe7f1725e7734ce288f8367e1bb143e90bb3f0512",
13
- TestToken: "0x610178da211fef7d417bc0e6fed39f05609ad788",
14
- TestToken2: "0xb7f8bc63bbcad18155201308c8f3540b07f84f5e",
11
+ contracts: {
12
+ ASPRegistryHub: "0x9708CfDCa7AA4d282888B43f70ff11Fc869431f1",
13
+ UniversalPrivatePool: "0x4bC6d44f8a706276216AA2d2F5F726939B945690",
14
+ UPPSwapModule: "0x3289135f1e5990BA93932924090BA9F6354EeBe0"
15
+ },
16
+ implementations: {
17
+ ASPRegistryHub: "0xdcD8A9D39E4305187A45Bf9208A83233D2654e87",
18
+ UniversalPrivatePool: "0xB99A51eFb2fdF83243C383a5CDdF803D8dDFc5ea",
19
+ UPPSwapModule: "0xd81a856940FaC8B24875855F26087c532B80BABc"
20
+ },
15
21
  verifiers: {
16
- TransferVerifier: "0x9fe46736679d2d9a65f0992f2272de9f3c7fa6e0",
17
- MergeVerifier: "0xcf7ed3acca5a467e9e704c703e8d87f634fb0fc9",
18
- WithdrawVerifier: "0xdc64a140aa3e981100a9beca4e685f962f0cf6c9",
19
- JoinSplitVerifier: "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707",
20
- MergeTransfer2x2Verifier: "0x0165878a594ca255338adfa4d48449f69242eb8f",
21
- MergeTransfer4x2Verifier: "0xa513e6e4b8f2a923d98304ec87f64353c4d5c853"
22
+ Transfer: "0xFF1574526DC526c0ca271cFF6541e0e28f1547cB",
23
+ Merge: "0x9E111a0d8c99b86738bCeBf5aFC0Db159244C7b7",
24
+ Withdraw: "0x4D8397464bF23B3b38E31636f94FC4C1A7139a44",
25
+ JoinSplit: "0x311788765A9C37AbBe2522EE7dE25Da41724aD75",
26
+ MergeTransfer2x2: "0x6bC3217Cc933c55EFf5951f4022c8a9dDB4F4023",
27
+ MergeTransfer4x2: "0xD4aA8Dc4B38673142C9b082b57c193eBB3690C37"
22
28
  },
23
29
  starkVerifiers: {
24
- CircleStarkVerifier: "0x0dcd1bf9a1b36ce34237eeafef220932846bcd82"
30
+ WithdrawVerifier: "0xa131A62B7AF5C81BfbdbA708750Fc378e3353B42",
31
+ TransferVerifier: "0x6aB434B061D3EaAfF7d704DCcd2d137966212daC"
32
+ },
33
+ testTokens: {
34
+ TestStableToken: "0x10a1a550AC27b94dD9aEA65f097177de02f67cAf",
35
+ TestStableToken2: "0x2Fe988cea5E2683EBCFF0Ba1861002FBB265b695"
25
36
  },
26
- deployBlock: 1,
27
- deployTimestamp: 1774728354492
37
+ metadata: {
38
+ chainId: 31337,
39
+ deployTimestamp: 1774959216,
40
+ deployer: "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"
41
+ }
28
42
  };
29
43
 
30
44
  // src/deployments/11155111.json
31
45
  var __default2 = {
32
- UniversalPrivatePool: "0xba5405375ee4c1b5fdcb1b755381edcc38ae28f2",
33
- ASPRegistryHub: "0xfd11c56a23314aa88dfbcc36254f33e5e8b010df",
34
- TestToken: "0xc3cef670aae8228de206c98b67c3d25c520b8f14",
35
- TestToken2: "0x4de3efd64d4ce9a4b45f538104bdbaadaf170bed",
46
+ contracts: {
47
+ ASPRegistryHub: "0xA85d9766C794B97d1463Ba6D5734a27C65A958Da",
48
+ UniversalPrivatePool: "0xD493b0651C285a60cae3c45035D0Fd58AC274BC9",
49
+ UPPSwapModule: "0x5a626e9b119A6f8DF1Dcc161F5b95Da9F93dB963"
50
+ },
51
+ implementations: {
52
+ ASPRegistryHub: "0xdcD8A9D39E4305187A45Bf9208A83233D2654e87",
53
+ UniversalPrivatePool: "0xB99A51eFb2fdF83243C383a5CDdF803D8dDFc5ea",
54
+ UPPSwapModule: "0xd81a856940FaC8B24875855F26087c532B80BABc"
55
+ },
36
56
  verifiers: {
37
- TransferVerifier: "0xe4a737e8e3100709986e1992d8e18cf324965320",
38
- MergeVerifier: "0x3a844672f792d3b1216e4e64acd8c5d0301a3a3e",
39
- WithdrawVerifier: "0x387afb8566d446c8344e03b8a9c54ba96b22233d",
40
- JoinSplitVerifier: "0xe03c270de9b33f72a0656b07ed43f3269d586607",
41
- MergeTransfer2x2Verifier: "0xbc1378d567abdfad063cd32b684e03ca29e79b99",
42
- MergeTransfer4x2Verifier: "0xd1f75b988e6fd6003204bda6e83eb3186a8dec34"
57
+ Transfer: "0x3755b4fA8Ee882311aB8FaB8Fd5BFecc355fF35B",
58
+ Merge: "0xE115B76eAff5Ba63F8018c182BF7824af7fC7431",
59
+ Withdraw: "0xB7FC84975066493fD3962c3c79e4c073BeaD090a",
60
+ JoinSplit: "0xFF2c3c620C6047da8d53e137C573E4738D2005e0",
61
+ MergeTransfer2x2: "0x347301A2DC42Cbf1386509f716a24d677D8599c8",
62
+ MergeTransfer4x2: "0x7F5cc8a714Ae9461B95EFDcaA85494F4251ebc0F"
43
63
  },
44
64
  starkVerifiers: {
45
- CircleStarkVerifier: "0xc92ba214653c616c4546d7edcb7aba8ced3e0a94"
65
+ WithdrawVerifier: "0xB8C307D74dAeBe816839BB891b16aCfc01253241",
66
+ TransferVerifier: "0x172960000Eed4A280Ac6cAecD318aBF2E0517734"
67
+ },
68
+ testTokens: {
69
+ TestStableToken: "0x8369F7dBdd1835410d421D1dD732346106ebc872",
70
+ TestStableToken2: "0xE721b1746be10C5D751a6cc44748F00654630Cb7"
46
71
  },
47
- deployBlock: 10555332,
48
- deployTimestamp: 1774895534634};
72
+ metadata: {
73
+ chainId: 11155111,
74
+ deployTimestamp: 1774958844,
75
+ deployer: "0xdEadDEADb916b00D02f4f2db062Fb2C47fe0689b"
76
+ }
77
+ };
49
78
 
50
79
  // src/deployments/index.ts
51
80
  function parseDeployment(json, chainId) {
81
+ const contracts = json.contracts || {};
82
+ const verifs = json.verifiers || {};
83
+ const testTokens = json.testTokens || {};
52
84
  return {
53
- UniversalPrivatePool: json.UniversalPrivatePool,
54
- ASPRegistryHub: json.ASPRegistryHub,
55
- TestToken: json.TestToken,
56
- TestToken2: json.TestToken2,
85
+ UniversalPrivatePool: contracts.UniversalPrivatePool,
86
+ ASPRegistryHub: contracts.ASPRegistryHub,
87
+ UPPSwapModule: contracts.UPPSwapModule,
88
+ implementations: json.implementations ? {
89
+ UniversalPrivatePool: json.implementations.UniversalPrivatePool,
90
+ ASPRegistryHub: json.implementations.ASPRegistryHub,
91
+ UPPSwapModule: json.implementations.UPPSwapModule
92
+ } : void 0,
93
+ TestToken: testTokens.TestStableToken,
94
+ TestToken2: testTokens.TestStableToken2,
57
95
  verifiers: {
58
- TransferVerifier: json.verifiers.TransferVerifier,
59
- MergeVerifier: json.verifiers.MergeVerifier,
60
- WithdrawVerifier: json.verifiers.WithdrawVerifier,
61
- JoinSplitVerifier: json.verifiers.JoinSplitVerifier,
62
- MergeTransfer2x2Verifier: json.verifiers.MergeTransfer2x2Verifier,
63
- MergeTransfer4x2Verifier: json.verifiers.MergeTransfer4x2Verifier
96
+ Transfer: verifs.Transfer || verifs.TransferVerifier,
97
+ Merge: verifs.Merge || verifs.MergeVerifier,
98
+ Withdraw: verifs.Withdraw || verifs.WithdrawVerifier,
99
+ JoinSplit: verifs.JoinSplit || verifs.JoinSplitVerifier,
100
+ MergeTransfer2x2: verifs.MergeTransfer2x2 || verifs.MergeTransfer2x2Verifier,
101
+ MergeTransfer4x2: verifs.MergeTransfer4x2 || verifs.MergeTransfer4x2Verifier
64
102
  },
65
103
  starkVerifiers: json.starkVerifiers ? {
66
104
  CircleStarkVerifier: json.starkVerifiers.CircleStarkVerifier
67
105
  } : void 0,
68
106
  chainId,
69
- deployBlock: json.deployBlock,
70
- deployTimestamp: json.deployTimestamp
107
+ deployBlock: 0,
108
+ // Legacy support
109
+ deployTimestamp: json.metadata?.deployTimestamp
71
110
  };
72
111
  }
73
112
  var deployments = {
@@ -339,5 +378,5 @@ exports.getTokenAddress = getTokenAddress;
339
378
  exports.hasDeployment = hasDeployment;
340
379
  exports.registerDeployment = registerDeployment;
341
380
  exports.syncMerkleTree = syncMerkleTree;
342
- //# sourceMappingURL=chunk-DYSU7JYL.cjs.map
343
- //# sourceMappingURL=chunk-DYSU7JYL.cjs.map
381
+ //# sourceMappingURL=chunk-MSBRBR3X.cjs.map
382
+ //# sourceMappingURL=chunk-MSBRBR3X.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/deployments/31337.json","../src/deployments/11155111.json","../src/deployments/index.ts","../src/core/transfer.ts"],"names":["__default","init_poseidon","STATE_TREE_DEPTH","ASP_TREE_DEPTH","buildMerkleTree","poseidon","computeOwnerHash","computeNoteCommitment","generateASPProof","DEMO_ASP_ID","generateUPPProof","formatPlonkProofForContract","toHex"],"mappings":"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","file":"chunk-MSBRBR3X.cjs","sourcesContent":["{\n \"contracts\": {\n \"ASPRegistryHub\": \"0x9708CfDCa7AA4d282888B43f70ff11Fc869431f1\",\n \"UniversalPrivatePool\": \"0x4bC6d44f8a706276216AA2d2F5F726939B945690\",\n \"UPPSwapModule\": \"0x3289135f1e5990BA93932924090BA9F6354EeBe0\"\n },\n \"implementations\": {\n \"ASPRegistryHub\": \"0xdcD8A9D39E4305187A45Bf9208A83233D2654e87\",\n \"UniversalPrivatePool\": \"0xB99A51eFb2fdF83243C383a5CDdF803D8dDFc5ea\",\n \"UPPSwapModule\": \"0xd81a856940FaC8B24875855F26087c532B80BABc\"\n },\n \"verifiers\": {\n \"Transfer\": \"0xFF1574526DC526c0ca271cFF6541e0e28f1547cB\",\n \"Merge\": \"0x9E111a0d8c99b86738bCeBf5aFC0Db159244C7b7\",\n \"Withdraw\": \"0x4D8397464bF23B3b38E31636f94FC4C1A7139a44\",\n \"JoinSplit\": \"0x311788765A9C37AbBe2522EE7dE25Da41724aD75\",\n \"MergeTransfer2x2\": \"0x6bC3217Cc933c55EFf5951f4022c8a9dDB4F4023\",\n \"MergeTransfer4x2\": \"0xD4aA8Dc4B38673142C9b082b57c193eBB3690C37\"\n },\n \"starkVerifiers\": {\n \"WithdrawVerifier\": \"0xa131A62B7AF5C81BfbdbA708750Fc378e3353B42\",\n \"TransferVerifier\": \"0x6aB434B061D3EaAfF7d704DCcd2d137966212daC\"\n },\n \"testTokens\": {\n \"TestStableToken\": \"0x10a1a550AC27b94dD9aEA65f097177de02f67cAf\",\n \"TestStableToken2\": \"0x2Fe988cea5E2683EBCFF0Ba1861002FBB265b695\"\n },\n \"metadata\": {\n \"chainId\": 31337,\n \"deployTimestamp\": 1774959216,\n \"deployer\": \"0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266\"\n }\n}","{\n \"contracts\": {\n \"ASPRegistryHub\": \"0xA85d9766C794B97d1463Ba6D5734a27C65A958Da\",\n \"UniversalPrivatePool\": \"0xD493b0651C285a60cae3c45035D0Fd58AC274BC9\",\n \"UPPSwapModule\": \"0x5a626e9b119A6f8DF1Dcc161F5b95Da9F93dB963\"\n },\n \"implementations\": {\n \"ASPRegistryHub\": \"0xdcD8A9D39E4305187A45Bf9208A83233D2654e87\",\n \"UniversalPrivatePool\": \"0xB99A51eFb2fdF83243C383a5CDdF803D8dDFc5ea\",\n \"UPPSwapModule\": \"0xd81a856940FaC8B24875855F26087c532B80BABc\"\n },\n \"verifiers\": {\n \"Transfer\": \"0x3755b4fA8Ee882311aB8FaB8Fd5BFecc355fF35B\",\n \"Merge\": \"0xE115B76eAff5Ba63F8018c182BF7824af7fC7431\",\n \"Withdraw\": \"0xB7FC84975066493fD3962c3c79e4c073BeaD090a\",\n \"JoinSplit\": \"0xFF2c3c620C6047da8d53e137C573E4738D2005e0\",\n \"MergeTransfer2x2\": \"0x347301A2DC42Cbf1386509f716a24d677D8599c8\",\n \"MergeTransfer4x2\": \"0x7F5cc8a714Ae9461B95EFDcaA85494F4251ebc0F\"\n },\n \"starkVerifiers\": {\n \"WithdrawVerifier\": \"0xB8C307D74dAeBe816839BB891b16aCfc01253241\",\n \"TransferVerifier\": \"0x172960000Eed4A280Ac6cAecD318aBF2E0517734\"\n },\n \"testTokens\": {\n \"TestStableToken\": \"0x8369F7dBdd1835410d421D1dD732346106ebc872\",\n \"TestStableToken2\": \"0xE721b1746be10C5D751a6cc44748F00654630Cb7\"\n },\n \"metadata\": {\n \"chainId\": 11155111,\n \"deployTimestamp\": 1774958844,\n \"deployer\": \"0xdEadDEADb916b00D02f4f2db062Fb2C47fe0689b\"\n }\n}","/**\n * Deployment Configuration Loader\n *\n * Loads contract addresses based on chain ID.\n * Built-in: Anvil (31337) and Sepolia (11155111).\n * Custom chains can be registered at runtime via registerDeployment().\n */\n\nimport type { Address } from \"viem\";\n\n/**\n * Verifier contract addresses\n */\nexport interface VerifierAddresses {\n Transfer: Address;\n Merge: Address;\n Withdraw: Address;\n JoinSplit?: Address;\n MergeTransfer2x2?: Address;\n MergeTransfer4x2?: Address;\n /** @deprecated Use `Transfer` */\n TransferVerifier?: Address;\n /** @deprecated Use `Merge` */\n MergeVerifier?: Address;\n /** @deprecated Use `Withdraw` */\n WithdrawVerifier?: Address;\n}\n\n/**\n * STARK verifier contract addresses\n */\nexport interface StarkVerifierAddresses {\n CircleStarkVerifier?: Address;\n}\n\n/**\n * Implementation addresses for UUPS proxies (for upgrade verification)\n */\nexport interface ImplementationAddresses {\n UniversalPrivatePool?: Address;\n ASPRegistryHub?: Address;\n UPPSwapModule?: Address;\n}\n\n/**\n * Deployment configuration for a chain\n */\nexport interface DeploymentConfig {\n /** Universal Private Pool contract address (proxy) */\n UniversalPrivatePool: Address;\n /** ASP Registry Hub contract address (proxy) */\n ASPRegistryHub: Address;\n /** UPP Swap Module contract address (proxy) */\n UPPSwapModule?: Address;\n /** Implementation addresses for UUPS proxies */\n implementations?: ImplementationAddresses;\n /** Test token address (local/testnet) */\n TestToken?: Address;\n /** Test token 2 address — bonding curve token (local/testnet) */\n TestToken2?: Address;\n /** Verifier contract addresses */\n verifiers: VerifierAddresses;\n /** STARK verifier contract addresses */\n starkVerifiers?: StarkVerifierAddresses;\n /** Chain ID */\n chainId: number;\n /** Block number when contracts were deployed (for efficient scanning) */\n deployBlock: number;\n /** Timestamp when contracts were deployed */\n deployTimestamp?: number;\n}\n\n/**\n * Raw JSON file format (without chainId, which is added dynamically)\n */\ninterface DeploymentJSON {\n contracts?: {\n UniversalPrivatePool?: string;\n ASPRegistryHub?: string;\n UPPSwapModule?: string;\n };\n implementations?: {\n UniversalPrivatePool?: string;\n ASPRegistryHub?: string;\n UPPSwapModule?: string;\n };\n testTokens?: {\n TestStableToken?: string;\n TestStableToken2?: string;\n };\n verifiers?: {\n Transfer?: string;\n Merge?: string;\n Withdraw?: string;\n JoinSplit?: string;\n MergeTransfer2x2?: string;\n MergeTransfer4x2?: string;\n TransferVerifier?: string;\n MergeVerifier?: string;\n WithdrawVerifier?: string;\n JoinSplitVerifier?: string;\n MergeTransfer2x2Verifier?: string;\n MergeTransfer4x2Verifier?: string;\n };\n starkVerifiers?: {\n CircleStarkVerifier?: string;\n WithdrawVerifier?: string;\n TransferVerifier?: string;\n };\n metadata?: {\n chainId?: number;\n deployTimestamp?: number;\n };\n}\n\n/**\n * Parse raw deployment JSON into typed config\n */\nfunction parseDeployment(\n json: DeploymentJSON,\n chainId: number\n): DeploymentConfig {\n const contracts = json.contracts || {};\n const verifs = json.verifiers || {};\n const testTokens = json.testTokens || {};\n\n return {\n UniversalPrivatePool: contracts.UniversalPrivatePool as Address,\n ASPRegistryHub: contracts.ASPRegistryHub as Address,\n UPPSwapModule: contracts.UPPSwapModule as Address | undefined,\n implementations: json.implementations\n ? {\n UniversalPrivatePool: json.implementations.UniversalPrivatePool as Address | undefined,\n ASPRegistryHub: json.implementations.ASPRegistryHub as Address | undefined,\n UPPSwapModule: json.implementations.UPPSwapModule as Address | undefined,\n }\n : undefined,\n TestToken: testTokens.TestStableToken as Address | undefined,\n TestToken2: testTokens.TestStableToken2 as Address | undefined,\n verifiers: {\n Transfer: (verifs.Transfer || verifs.TransferVerifier) as Address,\n Merge: (verifs.Merge || verifs.MergeVerifier) as Address,\n Withdraw: (verifs.Withdraw || verifs.WithdrawVerifier) as Address,\n JoinSplit: (verifs.JoinSplit || verifs.JoinSplitVerifier) as Address | undefined,\n MergeTransfer2x2: (verifs.MergeTransfer2x2 || verifs.MergeTransfer2x2Verifier) as Address | undefined,\n MergeTransfer4x2: (verifs.MergeTransfer4x2 || verifs.MergeTransfer4x2Verifier) as Address | undefined,\n },\n starkVerifiers: json.starkVerifiers\n ? {\n CircleStarkVerifier: json.starkVerifiers.CircleStarkVerifier as Address | undefined,\n }\n : undefined,\n chainId,\n deployBlock: 0, // Legacy support\n deployTimestamp: json.metadata?.deployTimestamp,\n };\n}\n\n// Import deployment configs\n// These will be updated by the extract-deployment.js script\nimport anvil from \"./31337.json\" with { type: \"json\" };\nimport sepolia from \"./11155111.json\" with { type: \"json\" };\n\nconst deployments: Record<number, DeploymentConfig> = {\n 31337: parseDeployment(anvil as unknown as DeploymentJSON, 31337),\n 11155111: parseDeployment(sepolia as unknown as DeploymentJSON, 11155111),\n};\n\n/**\n * Get deployment config for a chain\n *\n * @param chainId - Chain ID to get deployment for\n * @returns Deployment config or null if not found\n *\n * @example\n * ```ts\n * const deployment = getDeployment(31337)\n * if (deployment) {\n * console.log('Pool address:', deployment.UniversalPrivatePool)\n * }\n * ```\n */\nexport function getDeployment(chainId: number): DeploymentConfig | null {\n return deployments[chainId] ?? null;\n}\n\n/**\n * Get deployment config or throw if not found\n *\n * @param chainId - Chain ID to get deployment for\n * @returns Deployment config\n * @throws Error if deployment not found\n */\nexport function getDeploymentOrThrow(chainId: number): DeploymentConfig {\n const deployment = getDeployment(chainId);\n if (!deployment) {\n throw new Error(\n `No deployment found for chain ${chainId}. ` +\n `Supported chains: ${Object.keys(deployments).join(\", \")}`\n );\n }\n return deployment;\n}\n\n/**\n * Check if a chain has a deployment\n */\nexport function hasDeployment(chainId: number): boolean {\n return chainId in deployments;\n}\n\n/**\n * Get all supported chain IDs\n */\nexport function getSupportedChainIds(): number[] {\n return Object.keys(deployments).map(Number);\n}\n\n/**\n * Get the token address for a chain\n */\nexport function getTokenAddress(chainId: number): Address | null {\n const deployment = getDeployment(chainId);\n if (!deployment) return null;\n return deployment.TestToken ?? null;\n}\n\n/**\n * Register a deployment for a custom chain at runtime.\n *\n * Use this when deploying your own pool on a chain not built into the SDK.\n * Overrides any existing deployment for the same chainId.\n *\n * @example\n * ```ts\n * registerDeployment(8453, {\n * UniversalPrivatePool: '0x...',\n * ASPRegistryHub: '0x...',\n * verifiers: { Transfer: '0x...', Merge: '0x...', Withdraw: '0x...' },\n * chainId: 8453,\n * deployBlock: 12345678,\n * })\n * ```\n */\nexport function registerDeployment(chainId: number, config: DeploymentConfig): void {\n deployments[chainId] = { ...config, chainId };\n}\n","/**\n * Transfer Module\n *\n * Core logic for building and executing UPP transfers.\n * This module is framework-agnostic (no React).\n */\n\nimport { toHex, type Address, type Hex, type PublicClient } from 'viem'\nimport { getDeployment } from '../deployments/index.js'\nimport { buildMerkleTree, type MerkleProof } from '../utils/merkle.js'\nimport { poseidon, computeOwnerHash as poseidonOwnerHash, computeNoteCommitment } from '../utils/poseidon.js'\nimport {\n generateUPPProof,\n formatPlonkProofForContract,\n STATE_TREE_DEPTH,\n ASP_TREE_DEPTH,\n type UPPCircuitType,\n type UPPTransferCircuitInputs,\n type PlonkProofStruct,\n} from './proof.js'\nimport { generateASPProof, type ASPProof } from './asp.js'\nimport type { NoteCreationResult } from '../react/use-upp-account.js'\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Transfer stage for progress tracking\n */\nexport type TransferStage =\n | 'selecting_notes'\n | 'syncing_merkle'\n | 'creating_outputs'\n | 'generating_proof'\n | 'submitting_tx'\n | 'confirming'\n\n/**\n * A shielded note with all data needed for spending\n *\n * Post-quantum: uses ownerSecret/ownerHash instead of BabyJubJub one-time keys.\n * Ownership is proven via hash preimage: Poseidon(ownerSecret) == ownerHash.\n */\nexport interface SpendableNote {\n amount: bigint\n blinding: bigint\n commitment: string\n /** Owner secret (hash preimage for ownership proof) */\n ownerSecret: string\n /** Owner hash = Poseidon(ownerSecret) - committed in the note */\n ownerHash: string\n leafIndex: number\n /** Origin address (depositor) - required for UPP circuits */\n origin: bigint\n /** Token address - required for UPP circuits */\n token: bigint\n}\n\n/**\n * Merkle proof with associated note\n */\nexport interface MerkleProofWithNote {\n proof: MerkleProof\n note: SpendableNote\n}\n\n/**\n * Transfer context (dependencies)\n */\nexport interface TransferContext {\n /** viem PublicClient for RPC calls */\n publicClient: PublicClient\n /** Contract address */\n contractAddress: Address\n /** Chain ID */\n chainId: number\n /** Circuit base URL (default: '/circuits/') */\n circuitBaseUrl?: string\n /** ASP ID to use (default: DEMO_ASP_ID) */\n aspId?: bigint\n /** All approved origins in the ASP tree (enables multi-origin proofs) */\n aspApprovedOrigins?: bigint[]\n}\n\n/**\n * Transfer result\n */\nexport interface TransferBuildResult {\n /** Circuit type used */\n circuit: UPPCircuitType\n /** Formatted PLONK proof for contract */\n proof: {\n proofStruct: PlonkProofStruct\n publicSignals: bigint[]\n }\n /** Public signals from proof */\n publicSignals: string[]\n /** State tree root */\n stateRoot: bigint\n /** ASP tree root */\n aspRoot: bigint\n /** Nullifier hash */\n nullifier: bigint\n /** Output commitment 1 */\n outputCommitment1: bigint\n /** Output commitment 2 */\n outputCommitment2: bigint\n /** Token address */\n token: bigint\n /** Recipient output */\n recipientOutput: NoteCreationResult\n /** Change output */\n changeOutput: NoteCreationResult\n /** Notes that will be spent */\n spentNotes: SpendableNote[]\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\n/** Chunk size for paginated RPC queries on testnets */\nconst RPC_CHUNK_SIZE = 9000n\n\n/**\n * Pad an array to the state tree depth (32 levels)\n * @param arr - Array to pad\n * @param padValue - Value to use for padding (default: '0')\n * @returns Padded array of length STATE_TREE_DEPTH\n */\nfunction padToStateTreeDepth<T>(arr: T[], padValue: T): T[] {\n if (arr.length >= STATE_TREE_DEPTH) {\n return arr.slice(0, STATE_TREE_DEPTH)\n }\n return [...arr, ...Array(STATE_TREE_DEPTH - arr.length).fill(padValue)]\n}\n\n/**\n * Pad an array to the ASP tree depth (20 levels)\n * @param arr - Array to pad\n * @param padValue - Value to use for padding (default: '0')\n * @returns Padded array of length ASP_TREE_DEPTH\n */\nfunction padToASPTreeDepth<T>(arr: T[], padValue: T): T[] {\n if (arr.length >= ASP_TREE_DEPTH) {\n return arr.slice(0, ASP_TREE_DEPTH)\n }\n return [...arr, ...Array(ASP_TREE_DEPTH - arr.length).fill(padValue)]\n}\n\n/**\n * CommitmentInserted event — emitted by _insertLeaf() for ALL leaf insertions\n * (shield, transfer, merge, swap fill, swap claim, swap cancel).\n * This is the single canonical event for Merkle tree reconstruction.\n */\nconst COMMITMENT_INSERTED_EVENT = {\n type: 'event' as const,\n name: 'CommitmentInserted',\n inputs: [\n { type: 'bytes32', name: 'commitment', indexed: true },\n { type: 'uint256', name: 'leafIndex' },\n { type: 'uint256', name: 'timestamp' },\n ],\n}\n\n// ============================================================================\n// Merkle Tree Functions\n// ============================================================================\n\n/**\n * Fetch all commitments from the contract and build a Merkle tree\n *\n * @param publicClient - viem PublicClient\n * @param contractAddress - Contract address\n * @returns Object with tree and leaves array\n */\nexport async function syncMerkleTree(\n publicClient: PublicClient,\n contractAddress: Address\n): Promise<{ tree: ReturnType<typeof buildMerkleTree>; leaves: bigint[] }> {\n const currentBlock = await publicClient.getBlockNumber()\n const chainId = await publicClient.getChainId()\n\n // Use CommitmentInserted events — the canonical event emitted by _insertLeaf()\n // for ALL operations (shield, transfer, merge, swap fill/claim/cancel).\n // Each event has an explicit leafIndex, so ordering is deterministic.\n let commitmentLogs: any[] = []\n\n if (chainId === 31337) {\n // Anvil - single query is fine\n commitmentLogs = await publicClient.getLogs({\n address: contractAddress,\n event: COMMITMENT_INSERTED_EVENT,\n fromBlock: 0n,\n })\n } else {\n // Testnet/mainnet - paginate to avoid RPC limits\n const deployment = getDeployment(chainId)\n let fromBlock = deployment?.deployBlock ? BigInt(deployment.deployBlock) : 0n\n console.log(`[syncMerkleTree] Chain ${chainId}: scanning from block ${fromBlock} to ${currentBlock}`)\n\n while (fromBlock <= currentBlock) {\n const toBlock =\n fromBlock + RPC_CHUNK_SIZE > currentBlock ? currentBlock : fromBlock + RPC_CHUNK_SIZE\n const chunk = await publicClient.getLogs({\n address: contractAddress,\n event: COMMITMENT_INSERTED_EVENT,\n fromBlock,\n toBlock,\n })\n commitmentLogs = commitmentLogs.concat(chunk)\n fromBlock = toBlock + 1n\n }\n }\n\n // Sort by explicit leafIndex (most reliable), falling back to block+logIndex\n commitmentLogs.sort((a: any, b: any) => {\n const idxA = Number(a.args.leafIndex!)\n const idxB = Number(b.args.leafIndex!)\n return idxA - idxB\n })\n\n // Build leaves array using the explicit leafIndex from each event\n const leaves: bigint[] = []\n for (const log of commitmentLogs) {\n const leafIndex = Number(log.args.leafIndex!)\n const commitment = BigInt(log.args.commitment!)\n\n if (leaves.length !== leafIndex) {\n console.warn(\n `[syncMerkleTree] WARNING: Expected leafIndex ${leaves.length} but event has ${leafIndex}. ` +\n `This may indicate missed events or reorg.`\n )\n }\n leaves.push(commitment)\n }\n\n const tree = buildMerkleTree(leaves)\n\n // Debug: compare our root with on-chain root\n const ourRoot = await tree.getRoot()\n const onChainRoot = (await publicClient.readContract({\n address: contractAddress,\n abi: [\n {\n type: 'function',\n name: 'getMerkleRoot',\n inputs: [],\n outputs: [{ type: 'uint256' }],\n stateMutability: 'view',\n },\n ],\n functionName: 'getMerkleRoot',\n })) as bigint\n\n console.log(`[syncMerkleTree] Leaves count: ${leaves.length}`)\n console.log(`[syncMerkleTree] Tree depth: ${tree.depth}`)\n console.log(`[syncMerkleTree] Our computed root: ${ourRoot}`)\n console.log(`[syncMerkleTree] On-chain root: ${onChainRoot}`)\n console.log(`[syncMerkleTree] Roots match: ${ourRoot === onChainRoot}`)\n\n if (ourRoot !== onChainRoot) {\n console.log(`[syncMerkleTree] WARNING: Root mismatch!`)\n console.log(\n `[syncMerkleTree] Leaves:`,\n leaves.map((l) => '0x' + l.toString(16))\n )\n }\n\n return { tree, leaves }\n}\n\n/**\n * Get Merkle proofs for a set of notes\n *\n * @param notes - Notes to get proofs for\n * @param leaves - All leaves in the tree\n * @param tree - Merkle tree instance\n * @returns Array of proofs with associated notes\n */\nexport async function getMerkleProofsForNotes(\n notes: SpendableNote[],\n leaves: bigint[],\n tree: ReturnType<typeof buildMerkleTree>\n): Promise<MerkleProofWithNote[]> {\n const { verifyMerkleProof } = await import('../utils/merkle.js')\n const proofs: MerkleProofWithNote[] = []\n\n for (const note of notes) {\n const commitmentBI = BigInt(note.commitment)\n const leafIndex = leaves.findIndex((l) => l === commitmentBI)\n\n console.log(`[getMerkleProofsForNotes] Note commitment: ${note.commitment}`)\n console.log(`[getMerkleProofsForNotes] Note commitment as BigInt: ${commitmentBI}`)\n console.log(`[getMerkleProofsForNotes] Found at leafIndex: ${leafIndex}`)\n console.log(`[getMerkleProofsForNotes] Note's stored leafIndex: ${note.leafIndex}`)\n\n if (leafIndex === -1) {\n console.log(`[getMerkleProofsForNotes] Leaves in tree:`, leaves.map((l) => l.toString()))\n throw new Error(`Note ${note.commitment.slice(0, 10)}... not found on-chain`)\n }\n\n const proof = await tree.getProof(leafIndex)\n\n console.log(`[getMerkleProofsForNotes] Proof root: ${proof.root}`)\n console.log(`[getMerkleProofsForNotes] Proof leafIndex: ${proof.leafIndex}`)\n console.log(`[getMerkleProofsForNotes] PathElements:`, proof.pathElements.map((e) => e.toString()))\n console.log(`[getMerkleProofsForNotes] PathIndices:`, proof.pathIndices)\n\n // Verify the proof locally before returning\n const isValid = await verifyMerkleProof(commitmentBI, proof)\n console.log(`[getMerkleProofsForNotes] Local proof verification: ${isValid}`)\n\n if (!isValid) {\n console.error(`[getMerkleProofsForNotes] WARNING: Merkle proof is invalid!`)\n }\n\n proofs.push({ proof, note: { ...note, leafIndex } })\n }\n\n return proofs\n}\n\n// ============================================================================\n// Circuit Input Building\n// ============================================================================\n\n/**\n * Compute nullifier for a UPP note (BLS12-381)\n *\n * nullifier = Poseidon(ownerSecret, leafIndex, commitment)\n *\n * @param ownerSecret - Owner secret (hash preimage)\n * @param leafIndex - Leaf index in Merkle tree\n * @param commitment - Note commitment\n * @returns Nullifier as bigint\n */\nexport async function computeNullifier(\n ownerSecret: bigint,\n leafIndex: number,\n commitment: bigint\n): Promise<bigint> {\n return await poseidon([ownerSecret, BigInt(leafIndex), commitment])\n}\n\n/**\n * Note with amount for circuit building\n */\nexport interface NoteWithAmount extends NoteCreationResult {\n amount: bigint\n}\n\n/**\n * Build circuit inputs for UPP transfer (1-in-2-out)\n *\n * @param noteProof - Merkle proof for input note\n * @param aspProof - ASP membership proof for input note's origin\n * @param recipientNote - Output note for recipient\n * @param changeNote - Output note for change\n * @returns UPP transfer circuit inputs\n */\nexport async function buildUPPTransferCircuitInputs(\n noteProof: MerkleProofWithNote,\n aspProof: ASPProof,\n recipientNote: NoteWithAmount,\n changeNote: NoteWithAmount\n): Promise<UPPTransferCircuitInputs> {\n const { proof, note } = noteProof\n\n // Compute owner hash from secret (hash-based ownership)\n const inputOwnerHash = poseidonOwnerHash(BigInt(note.ownerSecret))\n\n // Verify input commitment locally\n // BLS12-381 commitment: Poseidon(amount, ownerHash, blinding, origin, token)\n const localInputCommitment = computeNoteCommitment(\n note.amount,\n inputOwnerHash,\n note.blinding,\n note.origin,\n note.token,\n )\n\n const storedCommitment = BigInt(note.commitment)\n if (localInputCommitment !== storedCommitment) {\n console.error(`[buildUPPTransferCircuitInputs] COMMITMENT MISMATCH`)\n console.error(` amount: ${note.amount}, ownerHash: ${inputOwnerHash}`)\n console.error(` blinding: ${note.blinding}, origin: ${note.origin}, token: ${note.token}`)\n console.error(` local=${localInputCommitment}, stored=${storedCommitment}`)\n throw new Error(\n `Note commitment mismatch — this note was created with an outdated commitment formula. ` +\n `Clear your shielded account (localStorage) and re-shield tokens.`\n )\n }\n\n const nullifier = await computeNullifier(\n BigInt(note.ownerSecret),\n proof.leafIndex,\n BigInt(note.commitment)\n )\n\n return {\n // Public inputs\n stateRoot: String(proof.root),\n aspRoot: String(aspProof.aspRoot),\n nullifier: String(nullifier),\n outputCommitment1: String(recipientNote.commitment),\n outputCommitment2: String(changeNote.commitment),\n token: String(note.token),\n\n // Private inputs - Input Note\n inputAmount: String(note.amount),\n inputOneTimeSecret: String(BigInt(note.ownerSecret)),\n inputBlinding: String(note.blinding),\n inputOrigin: String(note.origin),\n inputLeafIndex: String(proof.leafIndex),\n inputPathElements: padToStateTreeDepth(proof.pathElements.map((e) => String(e)), '0'),\n inputPathIndices: padToStateTreeDepth(proof.pathIndices.map(String), '0'),\n\n // Private inputs - ASP Membership Proof\n aspPathElements: padToASPTreeDepth(aspProof.aspPathElements.map((e) => String(e)), '0'),\n aspPathIndices: padToASPTreeDepth(aspProof.aspPathIndices.map(String), '0'),\n\n // Private inputs - Output Notes (hash-based ownership)\n outputAmount1: String(recipientNote.amount),\n outputOwnerHash1: String(recipientNote.ownerHash),\n outputBlinding1: String(recipientNote.blinding),\n\n outputAmount2: String(changeNote.amount),\n outputOwnerHash2: String(changeNote.ownerHash),\n outputBlinding2: String(changeNote.blinding),\n }\n}\n\n// ============================================================================\n// Transfer Building\n// ============================================================================\n\nimport { DEMO_ASP_ID } from './asp.js'\n\n/**\n * Build a UPP transfer (proof + outputs)\n *\n * This prepares everything needed to submit the transaction.\n * UPP transfer is 1-in-2-out with ASP membership proof.\n *\n * @param ctx - Transfer context\n * @param selectedNote - Note to spend (UPP transfer uses exactly 1 input)\n * @param recipientNote - Output note for recipient\n * @param changeNote - Output note for change\n * @param onStageChange - Optional callback for stage updates\n * @returns Transfer build result with proof and outputs\n */\nexport async function buildTransfer(\n ctx: TransferContext,\n selectedNote: SpendableNote,\n recipientNote: NoteWithAmount,\n changeNote: NoteWithAmount,\n onStageChange?: (stage: TransferStage) => void\n): Promise<TransferBuildResult> {\n // 1. Sync Merkle tree\n onStageChange?.('syncing_merkle')\n const { tree, leaves } = await syncMerkleTree(ctx.publicClient, ctx.contractAddress)\n\n // 2. Get Merkle proof for note\n const noteProofs = await getMerkleProofsForNotes([selectedNote], leaves, tree)\n const noteProof = noteProofs[0]!\n\n // 3. Generate ASP proof for the note's origin\n const aspProof = await generateASPProof(\n ctx.aspId ?? DEMO_ASP_ID,\n selectedNote.origin,\n ctx.aspApprovedOrigins\n )\n\n // 4. Build circuit inputs and generate proof\n onStageChange?.('generating_proof')\n\n const circuitInputs = await buildUPPTransferCircuitInputs(\n noteProof,\n aspProof,\n recipientNote,\n changeNote\n )\n\n const { proof } = await generateUPPProof(\n 'transfer',\n circuitInputs,\n ctx.circuitBaseUrl ?? '/circuits/'\n )\n\n const formattedProof = await formatPlonkProofForContract(proof)\n\n return {\n circuit: 'transfer',\n proof: formattedProof,\n publicSignals: proof.publicSignals,\n stateRoot: BigInt(circuitInputs.stateRoot),\n aspRoot: BigInt(circuitInputs.aspRoot),\n nullifier: BigInt(circuitInputs.nullifier),\n outputCommitment1: BigInt(circuitInputs.outputCommitment1),\n outputCommitment2: BigInt(circuitInputs.outputCommitment2),\n token: BigInt(circuitInputs.token),\n recipientOutput: recipientNote,\n changeOutput: changeNote,\n spentNotes: [selectedNote],\n }\n}\n\n/**\n * Format output for contract call (post-quantum)\n */\nexport function formatOutputForContract(note: NoteCreationResult): {\n commitment: Hex\n searchTag: bigint\n ownerHash: bigint\n encryptedNote: Hex\n} {\n return {\n commitment: toHex(note.commitment, { size: 32 }),\n searchTag: note.searchTag,\n ownerHash: note.ownerHash,\n encryptedNote: note.encryptedNote as Hex,\n }\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunk632LPXPX_cjs = require('../chunk-632LPXPX.cjs');
4
- var chunkDYSU7JYL_cjs = require('../chunk-DYSU7JYL.cjs');
3
+ var chunkHB43C26P_cjs = require('../chunk-HB43C26P.cjs');
4
+ var chunkMSBRBR3X_cjs = require('../chunk-MSBRBR3X.cjs');
5
5
  var chunkIX7HV5TE_cjs = require('../chunk-IX7HV5TE.cjs');
6
6
  var chunkSWTNJPK5_cjs = require('../chunk-SWTNJPK5.cjs');
7
7
  require('../chunk-IIUKM5VE.cjs');
@@ -17,47 +17,55 @@ require('../chunk-G7VZBCD6.cjs');
17
17
 
18
18
  Object.defineProperty(exports, "NOTE_VERSION", {
19
19
  enumerable: true,
20
- get: function () { return chunk632LPXPX_cjs.NOTE_VERSION; }
20
+ get: function () { return chunkHB43C26P_cjs.NOTE_VERSION; }
21
+ });
22
+ Object.defineProperty(exports, "checkImplementation", {
23
+ enumerable: true,
24
+ get: function () { return chunkHB43C26P_cjs.checkImplementation; }
21
25
  });
22
26
  Object.defineProperty(exports, "createNote", {
23
27
  enumerable: true,
24
- get: function () { return chunk632LPXPX_cjs.createNote; }
28
+ get: function () { return chunkHB43C26P_cjs.createNote; }
25
29
  });
26
30
  Object.defineProperty(exports, "createUPPClient", {
27
31
  enumerable: true,
28
- get: function () { return chunk632LPXPX_cjs.createUPPClient; }
32
+ get: function () { return chunkHB43C26P_cjs.createUPPClient; }
29
33
  });
30
34
  Object.defineProperty(exports, "decryptNote", {
31
35
  enumerable: true,
32
- get: function () { return chunk632LPXPX_cjs.decryptNote; }
36
+ get: function () { return chunkHB43C26P_cjs.decryptNote; }
33
37
  });
34
38
  Object.defineProperty(exports, "encryptNote", {
35
39
  enumerable: true,
36
- get: function () { return chunk632LPXPX_cjs.encryptNote; }
40
+ get: function () { return chunkHB43C26P_cjs.encryptNote; }
41
+ });
42
+ Object.defineProperty(exports, "verifyDeployment", {
43
+ enumerable: true,
44
+ get: function () { return chunkHB43C26P_cjs.verifyDeployment; }
37
45
  });
38
46
  Object.defineProperty(exports, "buildTransfer", {
39
47
  enumerable: true,
40
- get: function () { return chunkDYSU7JYL_cjs.buildTransfer; }
48
+ get: function () { return chunkMSBRBR3X_cjs.buildTransfer; }
41
49
  });
42
50
  Object.defineProperty(exports, "buildUPPTransferCircuitInputs", {
43
51
  enumerable: true,
44
- get: function () { return chunkDYSU7JYL_cjs.buildUPPTransferCircuitInputs; }
52
+ get: function () { return chunkMSBRBR3X_cjs.buildUPPTransferCircuitInputs; }
45
53
  });
46
54
  Object.defineProperty(exports, "computeNullifier", {
47
55
  enumerable: true,
48
- get: function () { return chunkDYSU7JYL_cjs.computeNullifier; }
56
+ get: function () { return chunkMSBRBR3X_cjs.computeNullifier; }
49
57
  });
50
58
  Object.defineProperty(exports, "formatOutputForContract", {
51
59
  enumerable: true,
52
- get: function () { return chunkDYSU7JYL_cjs.formatOutputForContract; }
60
+ get: function () { return chunkMSBRBR3X_cjs.formatOutputForContract; }
53
61
  });
54
62
  Object.defineProperty(exports, "getMerkleProofsForNotes", {
55
63
  enumerable: true,
56
- get: function () { return chunkDYSU7JYL_cjs.getMerkleProofsForNotes; }
64
+ get: function () { return chunkMSBRBR3X_cjs.getMerkleProofsForNotes; }
57
65
  });
58
66
  Object.defineProperty(exports, "syncMerkleTree", {
59
67
  enumerable: true,
60
- get: function () { return chunkDYSU7JYL_cjs.syncMerkleTree; }
68
+ get: function () { return chunkMSBRBR3X_cjs.syncMerkleTree; }
61
69
  });
62
70
  Object.defineProperty(exports, "ASP_TREE_DEPTH", {
63
71
  enumerable: true,
@@ -1,5 +1,5 @@
1
- export { A as ADDRESS_VERSION, k as ASPMembershipProof, D as DirectAccountAdapter, l as IASPProvider, m as IAccountAdapter, n as INoteStore, V as NoteStatus, o as NoteStore, P as ProofSystem, p as STARK_ADDRESS_VERSION, q as STARK_STEALTH_ADDRESS_PREFIX, r as STEALTH_ADDRESS_PREFIX, s as ShieldedNote, t as StorableAccountAdapter, U as UPPClient, u as UPPClientConfig, v as computeNoteEncryptionKey, w as createNote, x as createOneTimeKeys, y as createUPPClient, z as decodeStarkStealthAddress, B as decodeStealthAddress, E as decryptNote, F as detectAddressType, G as encodeStarkStealthAddress, H as encodeStealthAddress, J as encryptNote, K as generateStarkStealthAddress, M as generateStealthAddress, O as isValidStarkStealthAddress, Q as isValidStealthAddress, T as verifyOwnership } from '../index-AooYZ0kF.cjs';
2
- export { A as ASPProof, a as ASPRoot, b as ASP_TREE_DEPTH, C as CIRCUIT_CDN_BASE, c as CIRCUIT_VERSION, d as CircuitArtifactCache, e as CircuitArtifacts, f as CircuitCacheStatus, g as CircuitType, h as Commitment, D as DEMO_ASP_ID, i as DEMO_ASP_NAME, j as DownloadProgress, E as EncryptedNote, M as MergeParams, k as MergeRecord, l as MerkleProofWithNote, N as NOTE_VERSION, m as Note, n as NoteWithAmount, o as Nullifier, P as PlonkProvingStage, p as Proof, q as ProofResult, r as ProofWorkerManager, s as ProofWorkerRequest, t as ProofWorkerResponse, R as RATE_PRECISION, u as ResolvedCircuitArtifacts, S as STATE_TREE_DEPTH, v as SWAP_EVENTS_ABI, w as SWAP_ORDER_CANCELLED_EVENT, x as SWAP_ORDER_CLAIMED_EVENT, y as SWAP_ORDER_FILLED_EVENT, z as SWAP_ORDER_PLACED_EVENT, B as ShieldParams, F as SpendableNote, G as StarkNote, H as StarkProof, I as StarkStealthMetaAddress, J as Stealth1x2CircuitInputs, K as Stealth2x2CircuitInputs, L as StealthAddress, O as StealthCircuitInputs, Q as StealthCircuitType, T as StealthMetaAddress, U as SwapFillEvent, V as SwapFillParams, W as SwapOrder, X as SwapOrderEvent, Y as SwapOrderParams, Z as TransferBuildResult, _ as TransferContext, $ as TransferParams, a0 as TransferStage, a1 as UPPCircuitInputs, a2 as UPPCircuitType, a3 as UPPTransferCircuitInputs, a4 as UPPWithdrawCircuitInputs, a5 as WithdrawParams, a6 as buildASPTree, a7 as buildTransfer, a8 as buildUPPTransferCircuitInputs, a9 as computeCancelKeyHash, aa as computeFillPercentage, ab as computeGiveAmount, ac as computeMultiOriginASPRoot, ad as computeNullifier, ae as computeRate, af as computeSingleOriginASPRoot, ag as computeTakeAmount, ah as computeTotalBuyAmount, ai as createDemoASPRoot, aj as filterOrdersByASP, ak as filterOrdersByTokenPair, al as formatOutputForContract, am as formatProofForContract, an as formatRate, ao as generateASPProof, ap as generateCancelSecret, aq as generateMultiOriginASPProof, ar as generateProof, as as generateSingleOriginASPProof, at as generateStealthProof, au as generateUPPProof, av as generateUPPProofAsync, aw as getCancelSecret, ax as getMerkleProofsForNotes, ay as getOwnOrderIds, az as getStealthCircuitArtifacts, aA as getUPPCircuitArtifacts, aB as isFillerASPAccepted, aC as isOrderActive, aD as removeCancelSecret, aE as storeCancelSecret, aF as syncMerkleTree, aG as verifyASPProof, aH as verifyProof } from '../transfer-BhB-UuBP.cjs';
1
+ export { A as ADDRESS_VERSION, k as ASPMembershipProof, l as DirectAccountAdapter, m as IASPProvider, n as IAccountAdapter, o as INoteStore, a5 as NoteStatus, p as NoteStore, P as ProofSystem, q as STARK_ADDRESS_VERSION, r as STARK_STEALTH_ADDRESS_PREFIX, s as STEALTH_ADDRESS_PREFIX, t as ShieldedNote, u as StorableAccountAdapter, U as UPPClient, v as UPPClientConfig, V as VerificationCheck, w as VerificationResult, y as checkImplementation, z as computeNoteEncryptionKey, B as createNote, E as createOneTimeKeys, F as createUPPClient, G as decodeStarkStealthAddress, H as decodeStealthAddress, J as decryptNote, K as detectAddressType, M as encodeStarkStealthAddress, O as encodeStealthAddress, Q as encryptNote, T as generateStarkStealthAddress, W as generateStealthAddress, a0 as isValidStarkStealthAddress, a1 as isValidStealthAddress, a3 as verifyDeployment, a4 as verifyOwnership } from '../index-brLSTa0y.cjs';
2
+ export { A as ASPProof, a as ASPRoot, b as ASP_TREE_DEPTH, C as CIRCUIT_CDN_BASE, c as CIRCUIT_VERSION, d as CircuitArtifactCache, e as CircuitArtifacts, f as CircuitCacheStatus, g as CircuitType, h as Commitment, D as DEMO_ASP_ID, i as DEMO_ASP_NAME, j as DownloadProgress, E as EncryptedNote, M as MergeParams, k as MergeRecord, l as MerkleProofWithNote, N as NOTE_VERSION, m as Note, n as NoteWithAmount, o as Nullifier, P as PlonkProvingStage, p as Proof, q as ProofResult, r as ProofWorkerManager, s as ProofWorkerRequest, t as ProofWorkerResponse, R as RATE_PRECISION, u as ResolvedCircuitArtifacts, S as STATE_TREE_DEPTH, v as SWAP_EVENTS_ABI, w as SWAP_ORDER_CANCELLED_EVENT, x as SWAP_ORDER_CLAIMED_EVENT, y as SWAP_ORDER_FILLED_EVENT, z as SWAP_ORDER_PLACED_EVENT, B as ShieldParams, F as SpendableNote, G as StarkNote, H as StarkProof, I as StarkStealthMetaAddress, J as Stealth1x2CircuitInputs, K as Stealth2x2CircuitInputs, L as StealthAddress, O as StealthCircuitInputs, Q as StealthCircuitType, T as StealthMetaAddress, U as SwapFillEvent, V as SwapFillParams, W as SwapOrder, X as SwapOrderEvent, Y as SwapOrderParams, Z as TransferBuildResult, _ as TransferContext, $ as TransferParams, a0 as TransferStage, a1 as UPPCircuitInputs, a2 as UPPCircuitType, a3 as UPPTransferCircuitInputs, a4 as UPPWithdrawCircuitInputs, a5 as WithdrawParams, a6 as buildASPTree, a7 as buildTransfer, a8 as buildUPPTransferCircuitInputs, a9 as computeCancelKeyHash, aa as computeFillPercentage, ab as computeGiveAmount, ac as computeMultiOriginASPRoot, ad as computeNullifier, ae as computeRate, af as computeSingleOriginASPRoot, ag as computeTakeAmount, ah as computeTotalBuyAmount, ai as createDemoASPRoot, aj as filterOrdersByASP, ak as filterOrdersByTokenPair, al as formatOutputForContract, am as formatProofForContract, an as formatRate, ao as generateASPProof, ap as generateCancelSecret, aq as generateMultiOriginASPProof, ar as generateProof, as as generateSingleOriginASPProof, at as generateStealthProof, au as generateUPPProof, av as generateUPPProofAsync, aw as getCancelSecret, ax as getMerkleProofsForNotes, ay as getOwnOrderIds, az as getStealthCircuitArtifacts, aA as getUPPCircuitArtifacts, aB as isFillerASPAccepted, aC as isOrderActive, aD as removeCancelSecret, aE as storeCancelSecret, aF as syncMerkleTree, aG as verifyASPProof, aH as verifyProof } from '../transfer-p-NXHdGY.cjs';
3
3
  export { S as STARK_AMOUNT_SCALE } from '../stark-BcTD1OaJ.cjs';
4
4
  import 'viem';
5
5
  import '../types-CJSbxv4q.cjs';
@@ -1,5 +1,5 @@
1
- export { A as ADDRESS_VERSION, k as ASPMembershipProof, D as DirectAccountAdapter, l as IASPProvider, m as IAccountAdapter, n as INoteStore, V as NoteStatus, o as NoteStore, P as ProofSystem, p as STARK_ADDRESS_VERSION, q as STARK_STEALTH_ADDRESS_PREFIX, r as STEALTH_ADDRESS_PREFIX, s as ShieldedNote, t as StorableAccountAdapter, U as UPPClient, u as UPPClientConfig, v as computeNoteEncryptionKey, w as createNote, x as createOneTimeKeys, y as createUPPClient, z as decodeStarkStealthAddress, B as decodeStealthAddress, E as decryptNote, F as detectAddressType, G as encodeStarkStealthAddress, H as encodeStealthAddress, J as encryptNote, K as generateStarkStealthAddress, M as generateStealthAddress, O as isValidStarkStealthAddress, Q as isValidStealthAddress, T as verifyOwnership } from '../index-CpfUNGm9.js';
2
- export { A as ASPProof, a as ASPRoot, b as ASP_TREE_DEPTH, C as CIRCUIT_CDN_BASE, c as CIRCUIT_VERSION, d as CircuitArtifactCache, e as CircuitArtifacts, f as CircuitCacheStatus, g as CircuitType, h as Commitment, D as DEMO_ASP_ID, i as DEMO_ASP_NAME, j as DownloadProgress, E as EncryptedNote, M as MergeParams, k as MergeRecord, l as MerkleProofWithNote, N as NOTE_VERSION, m as Note, n as NoteWithAmount, o as Nullifier, P as PlonkProvingStage, p as Proof, q as ProofResult, r as ProofWorkerManager, s as ProofWorkerRequest, t as ProofWorkerResponse, R as RATE_PRECISION, u as ResolvedCircuitArtifacts, S as STATE_TREE_DEPTH, v as SWAP_EVENTS_ABI, w as SWAP_ORDER_CANCELLED_EVENT, x as SWAP_ORDER_CLAIMED_EVENT, y as SWAP_ORDER_FILLED_EVENT, z as SWAP_ORDER_PLACED_EVENT, B as ShieldParams, F as SpendableNote, G as StarkNote, H as StarkProof, I as StarkStealthMetaAddress, J as Stealth1x2CircuitInputs, K as Stealth2x2CircuitInputs, L as StealthAddress, O as StealthCircuitInputs, Q as StealthCircuitType, T as StealthMetaAddress, U as SwapFillEvent, V as SwapFillParams, W as SwapOrder, X as SwapOrderEvent, Y as SwapOrderParams, Z as TransferBuildResult, _ as TransferContext, $ as TransferParams, a0 as TransferStage, a1 as UPPCircuitInputs, a2 as UPPCircuitType, a3 as UPPTransferCircuitInputs, a4 as UPPWithdrawCircuitInputs, a5 as WithdrawParams, a6 as buildASPTree, a7 as buildTransfer, a8 as buildUPPTransferCircuitInputs, a9 as computeCancelKeyHash, aa as computeFillPercentage, ab as computeGiveAmount, ac as computeMultiOriginASPRoot, ad as computeNullifier, ae as computeRate, af as computeSingleOriginASPRoot, ag as computeTakeAmount, ah as computeTotalBuyAmount, ai as createDemoASPRoot, aj as filterOrdersByASP, ak as filterOrdersByTokenPair, al as formatOutputForContract, am as formatProofForContract, an as formatRate, ao as generateASPProof, ap as generateCancelSecret, aq as generateMultiOriginASPProof, ar as generateProof, as as generateSingleOriginASPProof, at as generateStealthProof, au as generateUPPProof, av as generateUPPProofAsync, aw as getCancelSecret, ax as getMerkleProofsForNotes, ay as getOwnOrderIds, az as getStealthCircuitArtifacts, aA as getUPPCircuitArtifacts, aB as isFillerASPAccepted, aC as isOrderActive, aD as removeCancelSecret, aE as storeCancelSecret, aF as syncMerkleTree, aG as verifyASPProof, aH as verifyProof } from '../transfer-BGzySIhC.js';
1
+ export { A as ADDRESS_VERSION, k as ASPMembershipProof, l as DirectAccountAdapter, m as IASPProvider, n as IAccountAdapter, o as INoteStore, a5 as NoteStatus, p as NoteStore, P as ProofSystem, q as STARK_ADDRESS_VERSION, r as STARK_STEALTH_ADDRESS_PREFIX, s as STEALTH_ADDRESS_PREFIX, t as ShieldedNote, u as StorableAccountAdapter, U as UPPClient, v as UPPClientConfig, V as VerificationCheck, w as VerificationResult, y as checkImplementation, z as computeNoteEncryptionKey, B as createNote, E as createOneTimeKeys, F as createUPPClient, G as decodeStarkStealthAddress, H as decodeStealthAddress, J as decryptNote, K as detectAddressType, M as encodeStarkStealthAddress, O as encodeStealthAddress, Q as encryptNote, T as generateStarkStealthAddress, W as generateStealthAddress, a0 as isValidStarkStealthAddress, a1 as isValidStealthAddress, a3 as verifyDeployment, a4 as verifyOwnership } from '../index-BRgBwiBM.js';
2
+ export { A as ASPProof, a as ASPRoot, b as ASP_TREE_DEPTH, C as CIRCUIT_CDN_BASE, c as CIRCUIT_VERSION, d as CircuitArtifactCache, e as CircuitArtifacts, f as CircuitCacheStatus, g as CircuitType, h as Commitment, D as DEMO_ASP_ID, i as DEMO_ASP_NAME, j as DownloadProgress, E as EncryptedNote, M as MergeParams, k as MergeRecord, l as MerkleProofWithNote, N as NOTE_VERSION, m as Note, n as NoteWithAmount, o as Nullifier, P as PlonkProvingStage, p as Proof, q as ProofResult, r as ProofWorkerManager, s as ProofWorkerRequest, t as ProofWorkerResponse, R as RATE_PRECISION, u as ResolvedCircuitArtifacts, S as STATE_TREE_DEPTH, v as SWAP_EVENTS_ABI, w as SWAP_ORDER_CANCELLED_EVENT, x as SWAP_ORDER_CLAIMED_EVENT, y as SWAP_ORDER_FILLED_EVENT, z as SWAP_ORDER_PLACED_EVENT, B as ShieldParams, F as SpendableNote, G as StarkNote, H as StarkProof, I as StarkStealthMetaAddress, J as Stealth1x2CircuitInputs, K as Stealth2x2CircuitInputs, L as StealthAddress, O as StealthCircuitInputs, Q as StealthCircuitType, T as StealthMetaAddress, U as SwapFillEvent, V as SwapFillParams, W as SwapOrder, X as SwapOrderEvent, Y as SwapOrderParams, Z as TransferBuildResult, _ as TransferContext, $ as TransferParams, a0 as TransferStage, a1 as UPPCircuitInputs, a2 as UPPCircuitType, a3 as UPPTransferCircuitInputs, a4 as UPPWithdrawCircuitInputs, a5 as WithdrawParams, a6 as buildASPTree, a7 as buildTransfer, a8 as buildUPPTransferCircuitInputs, a9 as computeCancelKeyHash, aa as computeFillPercentage, ab as computeGiveAmount, ac as computeMultiOriginASPRoot, ad as computeNullifier, ae as computeRate, af as computeSingleOriginASPRoot, ag as computeTakeAmount, ah as computeTotalBuyAmount, ai as createDemoASPRoot, aj as filterOrdersByASP, ak as filterOrdersByTokenPair, al as formatOutputForContract, am as formatProofForContract, an as formatRate, ao as generateASPProof, ap as generateCancelSecret, aq as generateMultiOriginASPProof, ar as generateProof, as as generateSingleOriginASPProof, at as generateStealthProof, au as generateUPPProof, av as generateUPPProofAsync, aw as getCancelSecret, ax as getMerkleProofsForNotes, ay as getOwnOrderIds, az as getStealthCircuitArtifacts, aA as getUPPCircuitArtifacts, aB as isFillerASPAccepted, aC as isOrderActive, aD as removeCancelSecret, aE as storeCancelSecret, aF as syncMerkleTree, aG as verifyASPProof, aH as verifyProof } from '../transfer-BxiDgCvx.js';
3
3
  export { S as STARK_AMOUNT_SCALE } from '../stark-BcTD1OaJ.js';
4
4
  import 'viem';
5
5
  import '../types-mLybMxNR.js';
@@ -1,5 +1,5 @@
1
- export { NOTE_VERSION, createNote, createUPPClient, decryptNote, encryptNote } from '../chunk-UMWY4ICQ.js';
2
- export { buildTransfer, buildUPPTransferCircuitInputs, computeNullifier, formatOutputForContract, getMerkleProofsForNotes, syncMerkleTree } from '../chunk-XDWRMHLY.js';
1
+ export { NOTE_VERSION, checkImplementation, createNote, createUPPClient, decryptNote, encryptNote, verifyDeployment } from '../chunk-53JACDGZ.js';
2
+ export { buildTransfer, buildUPPTransferCircuitInputs, computeNullifier, formatOutputForContract, getMerkleProofsForNotes, syncMerkleTree } from '../chunk-27SFQEYY.js';
3
3
  export { ASP_TREE_DEPTH, STATE_TREE_DEPTH, formatProofForContract, generateProof, generateStealthProof, generateUPPProof, getStealthCircuitArtifacts, getUPPCircuitArtifacts, verifyProof } from '../chunk-KR4GB6VC.js';
4
4
  export { STARK_AMOUNT_SCALE } from '../chunk-7T4CUE6E.js';
5
5
  import '../chunk-GPF72JFR.js';
@@ -1,5 +1,5 @@
1
1
  import { PublicClient, WalletClient, Address, Hex } from 'viem';
2
- import { B as ShieldParams, m as Note, $ as TransferParams, M as MergeParams, a5 as WithdrawParams, E as EncryptedNote } from './transfer-BGzySIhC.js';
2
+ import { B as ShieldParams, m as Note, $ as TransferParams, M as MergeParams, a5 as WithdrawParams, E as EncryptedNote } from './transfer-BxiDgCvx.js';
3
3
  import { M as MasterKeys, O as OneTimeKeys, b as StarkMasterKeys } from './types-mLybMxNR.js';
4
4
  import { a as M31Digest } from './keccak-m31-B_AqBbRF.js';
5
5
  import { P as Point } from './merkle-mteVOlDf.js';
@@ -275,6 +275,183 @@ declare function generateStarkStealthAddress(keys: StarkMasterKeys, chainId?: nu
275
275
  */
276
276
  declare function detectAddressType(address: string): 'snark' | 'stark' | 'unknown';
277
277
 
278
+ /**
279
+ * Deployment Configuration Loader
280
+ *
281
+ * Loads contract addresses based on chain ID.
282
+ * Built-in: Anvil (31337) and Sepolia (11155111).
283
+ * Custom chains can be registered at runtime via registerDeployment().
284
+ */
285
+
286
+ /**
287
+ * Verifier contract addresses
288
+ */
289
+ interface VerifierAddresses {
290
+ Transfer: Address;
291
+ Merge: Address;
292
+ Withdraw: Address;
293
+ JoinSplit?: Address;
294
+ MergeTransfer2x2?: Address;
295
+ MergeTransfer4x2?: Address;
296
+ /** @deprecated Use `Transfer` */
297
+ TransferVerifier?: Address;
298
+ /** @deprecated Use `Merge` */
299
+ MergeVerifier?: Address;
300
+ /** @deprecated Use `Withdraw` */
301
+ WithdrawVerifier?: Address;
302
+ }
303
+ /**
304
+ * STARK verifier contract addresses
305
+ */
306
+ interface StarkVerifierAddresses {
307
+ CircleStarkVerifier?: Address;
308
+ }
309
+ /**
310
+ * Implementation addresses for UUPS proxies (for upgrade verification)
311
+ */
312
+ interface ImplementationAddresses {
313
+ UniversalPrivatePool?: Address;
314
+ ASPRegistryHub?: Address;
315
+ UPPSwapModule?: Address;
316
+ }
317
+ /**
318
+ * Deployment configuration for a chain
319
+ */
320
+ interface DeploymentConfig {
321
+ /** Universal Private Pool contract address (proxy) */
322
+ UniversalPrivatePool: Address;
323
+ /** ASP Registry Hub contract address (proxy) */
324
+ ASPRegistryHub: Address;
325
+ /** UPP Swap Module contract address (proxy) */
326
+ UPPSwapModule?: Address;
327
+ /** Implementation addresses for UUPS proxies */
328
+ implementations?: ImplementationAddresses;
329
+ /** Test token address (local/testnet) */
330
+ TestToken?: Address;
331
+ /** Test token 2 address — bonding curve token (local/testnet) */
332
+ TestToken2?: Address;
333
+ /** Verifier contract addresses */
334
+ verifiers: VerifierAddresses;
335
+ /** STARK verifier contract addresses */
336
+ starkVerifiers?: StarkVerifierAddresses;
337
+ /** Chain ID */
338
+ chainId: number;
339
+ /** Block number when contracts were deployed (for efficient scanning) */
340
+ deployBlock: number;
341
+ /** Timestamp when contracts were deployed */
342
+ deployTimestamp?: number;
343
+ }
344
+ /**
345
+ * Get deployment config for a chain
346
+ *
347
+ * @param chainId - Chain ID to get deployment for
348
+ * @returns Deployment config or null if not found
349
+ *
350
+ * @example
351
+ * ```ts
352
+ * const deployment = getDeployment(31337)
353
+ * if (deployment) {
354
+ * console.log('Pool address:', deployment.UniversalPrivatePool)
355
+ * }
356
+ * ```
357
+ */
358
+ declare function getDeployment(chainId: number): DeploymentConfig | null;
359
+ /**
360
+ * Get deployment config or throw if not found
361
+ *
362
+ * @param chainId - Chain ID to get deployment for
363
+ * @returns Deployment config
364
+ * @throws Error if deployment not found
365
+ */
366
+ declare function getDeploymentOrThrow(chainId: number): DeploymentConfig;
367
+ /**
368
+ * Check if a chain has a deployment
369
+ */
370
+ declare function hasDeployment(chainId: number): boolean;
371
+ /**
372
+ * Get all supported chain IDs
373
+ */
374
+ declare function getSupportedChainIds(): number[];
375
+ /**
376
+ * Get the token address for a chain
377
+ */
378
+ declare function getTokenAddress(chainId: number): Address | null;
379
+ /**
380
+ * Register a deployment for a custom chain at runtime.
381
+ *
382
+ * Use this when deploying your own pool on a chain not built into the SDK.
383
+ * Overrides any existing deployment for the same chainId.
384
+ *
385
+ * @example
386
+ * ```ts
387
+ * registerDeployment(8453, {
388
+ * UniversalPrivatePool: '0x...',
389
+ * ASPRegistryHub: '0x...',
390
+ * verifiers: { Transfer: '0x...', Merge: '0x...', Withdraw: '0x...' },
391
+ * chainId: 8453,
392
+ * deployBlock: 12345678,
393
+ * })
394
+ * ```
395
+ */
396
+ declare function registerDeployment(chainId: number, config: DeploymentConfig): void;
397
+
398
+ /**
399
+ * UPP Deployment Verification — Check on-chain state matches deployment config.
400
+ *
401
+ * Verifies:
402
+ * 1. Bytecode exists at proxy and implementation addresses
403
+ * 2. UUPS proxy implementation slots point to expected implementations
404
+ *
405
+ * Use `verifyDeployment()` for comprehensive checks, or `checkImplementation()`
406
+ * for a lightweight proxy-vs-expected check suitable for UI warnings.
407
+ */
408
+
409
+ interface VerificationCheck {
410
+ name: string;
411
+ passed: boolean;
412
+ expected?: string;
413
+ actual?: string;
414
+ }
415
+ interface VerificationResult {
416
+ chainId: number;
417
+ checks: VerificationCheck[];
418
+ passed: number;
419
+ failed: number;
420
+ allPassed: boolean;
421
+ }
422
+ /**
423
+ * Lightweight check: does the on-chain proxy point to the expected implementation?
424
+ *
425
+ * Returns `true` if the implementation matches, `false` if it doesn't or can't be read.
426
+ * Use this in UI code to warn users about outdated deployments.
427
+ *
428
+ * @example
429
+ * ```ts
430
+ * import { checkImplementation, getDeploymentOrThrow } from '@permissionless-technologies/upp-sdk'
431
+ *
432
+ * const deployment = getDeploymentOrThrow(11155111)
433
+ * const ok = await checkImplementation(publicClient, deployment, 'UniversalPrivatePool')
434
+ * if (!ok) {
435
+ * console.warn('Pool implementation has been upgraded — SDK may be outdated')
436
+ * }
437
+ * ```
438
+ */
439
+ declare function checkImplementation(publicClient: PublicClient, deployment: DeploymentConfig, contract: 'UniversalPrivatePool' | 'ASPRegistryHub'): Promise<boolean>;
440
+ /**
441
+ * Full deployment verification — checks bytecode existence and proxy implementations.
442
+ *
443
+ * @example
444
+ * ```ts
445
+ * const result = await verifyDeployment(publicClient, deployment)
446
+ * if (!result.allPassed) {
447
+ * for (const check of result.checks.filter(c => !c.passed)) {
448
+ * console.error(`FAIL: ${check.name}`, check.expected, check.actual)
449
+ * }
450
+ * }
451
+ * ```
452
+ */
453
+ declare function verifyDeployment(publicClient: PublicClient, deployment: DeploymentConfig): Promise<VerificationResult>;
454
+
278
455
  /**
279
456
  * Indexer Types
280
457
  *
@@ -780,4 +957,4 @@ declare class NoteStore implements INoteStore {
780
957
  private notify;
781
958
  }
782
959
 
783
- export { ADDRESS_VERSION as A, decodeStealthAddress as B, type CommitmentInsertedArgs as C, DirectAccountAdapter as D, decryptNote as E, detectAddressType as F, encodeStarkStealthAddress as G, encodeStealthAddress as H, type Indexer as I, encryptNote as J, generateStarkStealthAddress as K, type LiveSyncConfig as L, generateStealthAddress as M, type NoteStatus$1 as N, isValidStarkStealthAddress as O, type ProofSystem as P, isValidStealthAddress as Q, type RpcIndexerConfig as R, type StorageAdapter as S, verifyOwnership as T, type UPPClient as U, type NoteStatus as V, type IndexedNote as a, type NoteFilters as b, type SyncResult as c, type SyncProgress as d, type SyncConfig as e, type IndexerState as f, type SyncState as g, type SerializedNote as h, type StealthTransactArgs as i, type NullifiedArgs as j, type ASPMembershipProof as k, type IASPProvider as l, type IAccountAdapter as m, type INoteStore as n, NoteStore as o, STARK_ADDRESS_VERSION as p, STARK_STEALTH_ADDRESS_PREFIX as q, STEALTH_ADDRESS_PREFIX as r, type ShieldedNote as s, StorableAccountAdapter as t, type UPPClientConfig as u, computeNoteEncryptionKey as v, createNote as w, createOneTimeKeys as x, createUPPClient as y, decodeStarkStealthAddress as z };
960
+ export { hasDeployment as $, ADDRESS_VERSION as A, createNote as B, type CommitmentInsertedArgs as C, type DeploymentConfig as D, createOneTimeKeys as E, createUPPClient as F, decodeStarkStealthAddress as G, decodeStealthAddress as H, type Indexer as I, decryptNote as J, detectAddressType as K, type LiveSyncConfig as L, encodeStarkStealthAddress as M, type NoteStatus$1 as N, encodeStealthAddress as O, type ProofSystem as P, encryptNote as Q, type RpcIndexerConfig as R, type StorageAdapter as S, generateStarkStealthAddress as T, type UPPClient as U, type VerificationCheck as V, generateStealthAddress as W, getDeployment as X, getDeploymentOrThrow as Y, getSupportedChainIds as Z, getTokenAddress as _, type IndexedNote as a, isValidStarkStealthAddress as a0, isValidStealthAddress as a1, registerDeployment as a2, verifyDeployment as a3, verifyOwnership as a4, type NoteStatus as a5, type NoteFilters as b, type SyncResult as c, type SyncProgress as d, type SyncConfig as e, type IndexerState as f, type SyncState as g, type SerializedNote as h, type StealthTransactArgs as i, type NullifiedArgs as j, type ASPMembershipProof as k, DirectAccountAdapter as l, type IASPProvider as m, type IAccountAdapter as n, type INoteStore as o, NoteStore as p, STARK_ADDRESS_VERSION as q, STARK_STEALTH_ADDRESS_PREFIX as r, STEALTH_ADDRESS_PREFIX as s, type ShieldedNote as t, StorableAccountAdapter as u, type UPPClientConfig as v, type VerificationResult as w, type VerifierAddresses as x, checkImplementation as y, computeNoteEncryptionKey as z };