@zama-fhe/sdk 3.0.0-alpha.2 → 3.0.0-alpha.21

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 (99) hide show
  1. package/README.md +207 -122
  2. package/dist/cjs/build.cjs +2 -0
  3. package/dist/cjs/build.cjs.map +1 -0
  4. package/dist/cjs/chains/index.cjs +1 -0
  5. package/dist/cjs/chains.cjs +2 -0
  6. package/dist/cjs/chains.cjs.map +1 -0
  7. package/dist/cjs/cleartext/index.cjs +1 -1
  8. package/dist/cjs/eip1193-subscribe.cjs +1 -1
  9. package/dist/cjs/eip1193-subscribe.cjs.map +1 -1
  10. package/dist/cjs/encryption.cjs +2 -0
  11. package/dist/cjs/encryption.cjs.map +1 -0
  12. package/dist/cjs/ethers/index.cjs +1 -1
  13. package/dist/cjs/ethers/index.cjs.map +1 -1
  14. package/dist/cjs/index.cjs +73 -73
  15. package/dist/cjs/index.cjs.map +1 -1
  16. package/dist/cjs/query/index.cjs +1 -1
  17. package/dist/cjs/query/index.cjs.map +1 -1
  18. package/dist/cjs/readonly-token.cjs +1 -1
  19. package/dist/cjs/readonly-token.cjs.map +1 -1
  20. package/dist/cjs/relayer-cleartext.cjs +2 -0
  21. package/dist/cjs/relayer-cleartext.cjs.map +1 -0
  22. package/dist/cjs/relayer-sdk.worker.js +71 -71
  23. package/dist/cjs/relayer.cjs +1 -1
  24. package/dist/cjs/relayer.cjs.map +1 -1
  25. package/dist/cjs/viem/index.cjs +1 -1
  26. package/dist/cjs/viem/index.cjs.map +1 -1
  27. package/dist/cjs/wrappers-registry.cjs +1 -1
  28. package/dist/cjs/wrappers-registry.cjs.map +1 -1
  29. package/dist/esm/{assertions-BARApuMj.js → assertions-CfqI3AJv.js} +1 -1
  30. package/dist/esm/{assertions-BARApuMj.js.map → assertions-CfqI3AJv.js.map} +1 -1
  31. package/dist/esm/build-CvenCk6R.js +2 -0
  32. package/dist/esm/build-CvenCk6R.js.map +1 -0
  33. package/dist/esm/chains/index.d.ts +3 -0
  34. package/dist/esm/chains/index.js +1 -0
  35. package/dist/esm/chains-aHmrozPh.js +2 -0
  36. package/dist/esm/chains-aHmrozPh.js.map +1 -0
  37. package/dist/esm/cleartext/index.d.ts +2 -86
  38. package/dist/esm/cleartext/index.js +1 -1
  39. package/dist/esm/cleartext-BHu6-LCv.d.ts +19 -0
  40. package/dist/esm/cleartext-I-etE_7S.js +2 -0
  41. package/dist/esm/cleartext-I-etE_7S.js.map +1 -0
  42. package/dist/esm/eip1193-subscribe-CcotSOIm.js +2 -0
  43. package/dist/esm/eip1193-subscribe-CcotSOIm.js.map +1 -0
  44. package/dist/esm/{encryption-CmIPBcfP.js → encryption-YS-Kb7qm.js} +2 -2
  45. package/dist/esm/{encryption-CmIPBcfP.js.map → encryption-YS-Kb7qm.js.map} +1 -1
  46. package/dist/esm/ethers/index.d.ts +53 -8
  47. package/dist/esm/ethers/index.js +1 -1
  48. package/dist/esm/ethers/index.js.map +1 -1
  49. package/dist/esm/{hex-D_B-zoId.js → hex-BZVTzEK6.js} +2 -2
  50. package/dist/esm/{hex-D_B-zoId.js.map → hex-BZVTzEK6.js.map} +1 -1
  51. package/dist/esm/{relayer-utils-iSPis4x-.d.ts → index-BTY0MxOt.d.ts} +50 -23
  52. package/dist/esm/{onchain-events-2VNiL78c.d.ts → index-BdyljG1F.d.ts} +387 -1505
  53. package/dist/esm/index.d.ts +61 -93
  54. package/dist/esm/index.js +73 -73
  55. package/dist/esm/index.js.map +1 -1
  56. package/dist/esm/memory-storage-CFXqXUcm.js +2 -0
  57. package/dist/esm/memory-storage-CFXqXUcm.js.map +1 -0
  58. package/dist/esm/node/index.d.ts +88 -110
  59. package/dist/esm/node/index.js +1 -1
  60. package/dist/esm/node/index.js.map +1 -1
  61. package/dist/esm/node/relayer-sdk.node-worker.js +1 -1
  62. package/dist/esm/node/relayer-sdk.node-worker.js.map +1 -1
  63. package/dist/esm/query/index.d.ts +40 -50
  64. package/dist/esm/query/index.js +1 -1
  65. package/dist/esm/query/index.js.map +1 -1
  66. package/dist/esm/readonly-token-DCLOYhws.js +2 -0
  67. package/dist/esm/readonly-token-DCLOYhws.js.map +1 -0
  68. package/dist/esm/{relayer-C6u3eOlN.js → relayer-7Hd00A6X.js} +2 -2
  69. package/dist/esm/relayer-7Hd00A6X.js.map +1 -0
  70. package/dist/esm/{relayer-sdk.types-CGfXwKcB.d.ts → relayer-cleartext-DJkSUlZ2.d.ts} +263 -106
  71. package/dist/esm/relayer-cleartext-SZCM9wTx.js +2 -0
  72. package/dist/esm/relayer-cleartext-SZCM9wTx.js.map +1 -0
  73. package/dist/esm/relayer-sdk.worker.js +71 -71
  74. package/dist/esm/types-C1S426x4.d.ts +48 -0
  75. package/dist/esm/types-CVyJHEya.d.ts +14 -0
  76. package/dist/esm/types-DePjTTbo.d.ts +30 -0
  77. package/dist/esm/types-FY7ciI37.d.ts +615 -0
  78. package/dist/esm/viem/index.d.ts +39 -11
  79. package/dist/esm/viem/index.js +1 -1
  80. package/dist/esm/viem/index.js.map +1 -1
  81. package/dist/esm/wrappers-registry-CXNs4eR0.js +2 -0
  82. package/dist/esm/wrappers-registry-CXNs4eR0.js.map +1 -0
  83. package/package.json +17 -3
  84. package/dist/cjs/cleartext.cjs +0 -2
  85. package/dist/cjs/cleartext.cjs.map +0 -1
  86. package/dist/esm/cleartext-Cs28cTsa.js +0 -2
  87. package/dist/esm/cleartext-Cs28cTsa.js.map +0 -1
  88. package/dist/esm/eip1193-subscribe-Cl_wlVuQ.js +0 -2
  89. package/dist/esm/eip1193-subscribe-Cl_wlVuQ.js.map +0 -1
  90. package/dist/esm/memory-storage-F8xjMzVy.js +0 -2
  91. package/dist/esm/memory-storage-F8xjMzVy.js.map +0 -1
  92. package/dist/esm/readonly-token-D4GjTj0q.js +0 -2
  93. package/dist/esm/readonly-token-D4GjTj0q.js.map +0 -1
  94. package/dist/esm/relayer-C6u3eOlN.js.map +0 -1
  95. package/dist/esm/relayer-sdk-DPqytEbO.d.ts +0 -44
  96. package/dist/esm/relayer-utils-BeoTNDM4.js +0 -2
  97. package/dist/esm/relayer-utils-BeoTNDM4.js.map +0 -1
  98. package/dist/esm/wrappers-registry-ydyySM9g.js +0 -2
  99. package/dist/esm/wrappers-registry-ydyySM9g.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"readonly-token-D4GjTj0q.js","names":["#assertDelegationActive"],"sources":["../../src/errors/signing.ts","../../src/errors/credential.ts","../../src/errors/delegation.ts","../../src/errors/decrypt.ts","../../src/errors/session.ts","../../src/utils/handles.ts","../../src/contracts/erc20.ts","../../src/abi/acl.abi.ts","../../src/contracts/acl.ts","../../src/contracts/constants.ts","../../src/events/sdk-events.ts","../../src/utils/concurrency.ts","../../src/token/readonly-token.ts"],"sourcesContent":["import { ZamaError, ZamaErrorCode } from \"./base\";\n\n/** User rejected the wallet signature prompt. */\nexport class SigningRejectedError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.SigningRejected, message, options);\n this.name = \"SigningRejectedError\";\n }\n}\n\n/** Wallet signature failed for a reason other than rejection. */\nexport class SigningFailedError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.SigningFailed, message, options);\n this.name = \"SigningFailedError\";\n }\n}\n\n/**\n * Wrap a signing error as {@link SigningRejectedError} or {@link SigningFailedError}.\n * Detects user rejection via EIP-1193 code 4001 or message heuristics.\n */\nexport function wrapSigningError(error: unknown, context: string): never {\n const hasCode4001 =\n typeof error === \"object\" && error !== null && \"code\" in error && error.code === 4001;\n const originalMsg = error instanceof Error ? error.message : String(error);\n const lowerMsg = originalMsg.toLowerCase();\n const hasRejectionMessage =\n lowerMsg.includes(\"user rejected\") || lowerMsg.includes(\"user denied\");\n const fullMessage = `${context}: ${originalMsg}`;\n if (hasCode4001 || hasRejectionMessage) {\n throw new SigningRejectedError(fullMessage, { cause: error });\n }\n throw new SigningFailedError(fullMessage, { cause: error });\n}\n","import { ZamaError, ZamaErrorCode } from \"./base\";\n\n/** FHE keypair has expired and needs regeneration. */\nexport class KeypairExpiredError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.KeypairExpired, message, options);\n this.name = \"KeypairExpiredError\";\n }\n}\n\n/** Relayer rejected FHE keypair (stale, expired, or malformed). */\nexport class InvalidKeypairError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.InvalidKeypair, message, options);\n this.name = \"InvalidKeypairError\";\n }\n}\n\n/** No FHE ciphertext exists for this account (never shielded). */\nexport class NoCiphertextError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.NoCiphertext, message, options);\n this.name = \"NoCiphertextError\";\n }\n}\n","import { ZamaError, ZamaErrorCode } from \"./base\";\n\n// Delegation errors — thrown by SDK pre-flight checks and by `matchAclRevert()`\n// when it maps ACL Solidity revert reasons to typed errors.\n\n/** Delegation cannot target self (delegate === msg.sender). */\nexport class DelegationSelfNotAllowedError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.DelegationSelfNotAllowed, message, options);\n this.name = \"DelegationSelfNotAllowedError\";\n }\n}\n\n/** Only one delegate/revoke per (delegator, delegate, contract) per block. */\nexport class DelegationCooldownError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.DelegationCooldown, message, options);\n this.name = \"DelegationCooldownError\";\n }\n}\n\n/** No active delegation found for this (delegator, delegate, contract) tuple. */\nexport class DelegationNotFoundError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.DelegationNotFound, message, options);\n this.name = \"DelegationNotFoundError\";\n }\n}\n\n/** The delegation has expired. */\nexport class DelegationExpiredError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.DelegationExpired, message, options);\n this.name = \"DelegationExpiredError\";\n }\n}\n\n/** The new expiration date equals the current one. */\nexport class DelegationExpiryUnchangedError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.DelegationExpiryUnchanged, message, options);\n this.name = \"DelegationExpiryUnchangedError\";\n }\n}\n\n/** Delegate address cannot be the contract address. */\nexport class DelegationDelegateEqualsContractError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.DelegationDelegateEqualsContract, message, options);\n this.name = \"DelegationDelegateEqualsContractError\";\n }\n}\n\n/** Contract address cannot be the sender address. */\nexport class DelegationContractIsSelfError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.DelegationContractIsSelf, message, options);\n this.name = \"DelegationContractIsSelfError\";\n }\n}\n\n/** The ACL contract is paused. */\nexport class AclPausedError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.AclPaused, message, options);\n this.name = \"AclPausedError\";\n }\n}\n\n/** Expiration date is too soon (must be at least 1 hour in the future). */\nexport class DelegationExpirationTooSoonError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.DelegationExpirationTooSoon, message, options);\n this.name = \"DelegationExpirationTooSoonError\";\n }\n}\n\n/**\n * Delegation exists on L1 but hasn't propagated to the gateway yet.\n *\n * After calling `delegateForUserDecryption()`, the delegation is recorded on-chain\n * immediately. However, the gateway (deployed on Arbitrum) must sync this state\n * via cross-chain event propagation, which typically takes 1–2 minutes.\n *\n * Calling `decryptBalanceAs` during this window will fail because the gateway's\n * `isHandleDelegatedForUserDecryption()` check reads from its own synced copy\n * of the ACL state, which hasn't been updated yet.\n *\n * **Note:** This error is raised as a best-effort heuristic — when a delegated\n * decryption receives an HTTP 500 from the relayer, the most likely cause is a\n * propagation delay. However, the same status code can occur if the gateway or\n * relayer experiences an unrelated internal error.\n */\nexport class DelegationNotPropagatedError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.DelegationNotPropagated, message, options);\n this.name = \"DelegationNotPropagatedError\";\n }\n}\n","import type { ZamaError } from \"./base\";\nimport { DecryptionFailedError } from \"./encryption\";\nimport { NoCiphertextError } from \"./credential\";\nimport { RelayerRequestFailedError } from \"./relayer\";\nimport { DelegationNotPropagatedError } from \"./delegation\";\nimport { SigningRejectedError, SigningFailedError } from \"./signing\";\n\n/**\n * Inspect a caught error for an HTTP status code and return the appropriate\n * typed SDK error (NoCiphertextError for 400, RelayerRequestFailedError for\n * other HTTP errors, or the generic DecryptionFailedError as fallback).\n *\n * Errors that are already typed SDK errors (e.g. {@link SigningRejectedError},\n * {@link DecryptionFailedError}) are returned as-is so callers can still match\n * the original cause.\n *\n * When `isDelegated` is true and the relayer returns a 500, the error is\n * wrapped as {@link DelegationNotPropagatedError} because the most likely\n * cause is that the gateway hasn't synced the delegation from L1 yet.\n */\nexport function wrapDecryptError(\n error: unknown,\n fallbackMessage: string,\n isDelegated = false,\n): ZamaError {\n if (\n error instanceof DecryptionFailedError ||\n error instanceof NoCiphertextError ||\n error instanceof RelayerRequestFailedError ||\n error instanceof DelegationNotPropagatedError ||\n error instanceof SigningRejectedError ||\n error instanceof SigningFailedError\n ) {\n return error;\n }\n\n const statusCode =\n error !== null &&\n error !== undefined &&\n typeof error === \"object\" &&\n \"statusCode\" in error &&\n typeof (error as Record<string, unknown>).statusCode === \"number\"\n ? ((error as Record<string, unknown>).statusCode as number)\n : undefined;\n\n if (statusCode === 400) {\n return new NoCiphertextError(\n error instanceof Error ? error.message : \"No ciphertext for this account\",\n { cause: error },\n );\n }\n\n if (isDelegated && statusCode === 500) {\n return new DelegationNotPropagatedError(\n \"Delegated decryption failed with a server error. \" +\n \"This is most commonly caused by the delegation not having propagated to the gateway yet — \" +\n \"after granting delegation, allow 1–2 minutes for cross-chain synchronization before retrying. \" +\n \"If the error persists, the gateway or relayer may be experiencing an unrelated issue.\",\n { cause: error },\n );\n }\n\n if (statusCode !== undefined) {\n return new RelayerRequestFailedError(\n error instanceof Error ? error.message : fallbackMessage,\n statusCode,\n { cause: error },\n );\n }\n\n return new DecryptionFailedError(fallbackMessage, {\n cause: error,\n });\n}\n","import { ConfigurationError } from \"./relayer\";\nimport { SigningRejectedError, SigningFailedError } from \"./signing\";\n\n/**\n * Returns `true` for errors that indicate a session-level failure — i.e.\n * problems that affect the whole SDK session (wallet signature rejected,\n * signing infra broken, SDK misconfigured) rather than a single item in a\n * batch operation.\n *\n * Callers iterating over a batch (e.g. per-token decrypt) should rethrow when\n * this predicate is true so the whole batch aborts, and record the error\n * per-item otherwise.\n */\nexport function isSessionError(error: unknown): boolean {\n return (\n error instanceof SigningRejectedError ||\n error instanceof SigningFailedError ||\n error instanceof ConfigurationError\n );\n}\n","export const ZERO_HANDLE =\n \"0x0000000000000000000000000000000000000000000000000000000000000000\" as const;\n\n/**\n * Check whether a handle represents the zero value.\n */\nexport function isZeroHandle(handle: string): boolean {\n return handle === ZERO_HANDLE || handle === \"0x\";\n}\n","import { erc20Abi, type Address } from \"viem\";\n\n/**\n * Returns the contract config to read a token's name.\n *\n * @example\n * ```ts\n * const name = await signer.readContract(nameContract(tokenAddress));\n * ```\n */\nexport function nameContract(tokenAddress: Address) {\n return {\n address: tokenAddress,\n abi: erc20Abi,\n functionName: \"name\",\n args: [],\n } as const;\n}\n\n/**\n * Returns the contract config to read a token's symbol.\n *\n * @example\n * ```ts\n * const symbol = await signer.readContract(symbolContract(tokenAddress));\n * ```\n */\nexport function symbolContract(tokenAddress: Address) {\n return {\n address: tokenAddress,\n abi: erc20Abi,\n functionName: \"symbol\",\n args: [],\n } as const;\n}\n\n/**\n * Returns the contract config to read a token's decimals.\n *\n * @example\n * ```ts\n * const decimals = await signer.readContract(decimalsContract(tokenAddress));\n * ```\n */\nexport function decimalsContract(tokenAddress: Address) {\n return {\n address: tokenAddress,\n abi: erc20Abi,\n functionName: \"decimals\",\n args: [],\n } as const;\n}\n\n/**\n * Returns the contract config to read an ERC-20 token's total supply.\n *\n * @example\n * ```ts\n * const supply = await signer.readContract(erc20TotalSupplyContract(tokenAddress));\n * ```\n */\nexport function erc20TotalSupplyContract(tokenAddress: Address) {\n return {\n address: tokenAddress,\n abi: erc20Abi,\n functionName: \"totalSupply\",\n args: [],\n } as const;\n}\n\n/**\n * Returns the contract config to read an ERC-20 balance.\n *\n * @example\n * ```ts\n * const balance = await signer.readContract(\n * balanceOfContract(tokenAddress, account),\n * );\n * ```\n */\nexport function balanceOfContract(tokenAddress: Address, account: Address) {\n return {\n address: tokenAddress,\n abi: erc20Abi,\n functionName: \"balanceOf\",\n args: [account],\n } as const;\n}\n\n/**\n * Returns the contract config to read an ERC-20 allowance.\n *\n * @example\n * ```ts\n * const allowance = await signer.readContract(\n * allowanceContract(tokenAddress, owner, spender),\n * );\n * ```\n */\nexport function allowanceContract(tokenAddress: Address, owner: Address, spender: Address) {\n return {\n address: tokenAddress,\n abi: erc20Abi,\n functionName: \"allowance\",\n args: [owner, spender],\n } as const;\n}\n\n/**\n * Returns the contract config for an ERC-20 approve.\n *\n * @example\n * ```ts\n * const txHash = await signer.writeContract(\n * approveContract(tokenAddress, spender, amount),\n * );\n * ```\n */\nexport function approveContract(tokenAddress: Address, spender: Address, value: bigint) {\n return {\n address: tokenAddress,\n abi: erc20Abi,\n functionName: \"approve\",\n args: [spender, value],\n } as const;\n}\n","export const aclAbi = [\n {\n inputs: [\n { internalType: \"address\", name: \"delegate\", type: \"address\" },\n { internalType: \"address\", name: \"contractAddress\", type: \"address\" },\n { internalType: \"uint64\", name: \"expirationDate\", type: \"uint64\" },\n ],\n name: \"delegateForUserDecryption\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"delegate\", type: \"address\" },\n { internalType: \"address\", name: \"contractAddress\", type: \"address\" },\n ],\n name: \"revokeDelegationForUserDecryption\",\n outputs: [],\n stateMutability: \"nonpayable\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"delegator\", type: \"address\" },\n { internalType: \"address\", name: \"delegate\", type: \"address\" },\n { internalType: \"address\", name: \"contractAddress\", type: \"address\" },\n ],\n name: \"getUserDecryptionDelegationExpirationDate\",\n outputs: [{ internalType: \"uint64\", name: \"\", type: \"uint64\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n {\n inputs: [\n { internalType: \"address\", name: \"delegator\", type: \"address\" },\n { internalType: \"address\", name: \"delegate\", type: \"address\" },\n { internalType: \"address\", name: \"contractAddress\", type: \"address\" },\n { internalType: \"bytes32\", name: \"handle\", type: \"bytes32\" },\n ],\n name: \"isHandleDelegatedForUserDecryption\",\n outputs: [{ internalType: \"bool\", name: \"\", type: \"bool\" }],\n stateMutability: \"view\",\n type: \"function\",\n },\n] as const;\n","import type { Address } from \"viem\";\nimport { aclAbi } from \"../abi/acl.abi\";\n\n/**\n * Returns the contract config to delegate user decryption rights.\n *\n * @example\n * ```ts\n * const txHash = await signer.writeContract(\n * delegateForUserDecryptionContract(aclAddress, delegateAddress, contractAddress, expirationDate),\n * );\n * ```\n */\nexport function delegateForUserDecryptionContract(\n aclAddress: Address,\n delegateAddress: Address,\n contractAddress: Address,\n expirationDate: bigint,\n) {\n return {\n address: aclAddress,\n abi: aclAbi,\n functionName: \"delegateForUserDecryption\",\n args: [delegateAddress, contractAddress, expirationDate],\n } as const;\n}\n\n/**\n * Returns the contract config to revoke a user decryption delegation.\n *\n * @example\n * ```ts\n * const txHash = await signer.writeContract(\n * revokeDelegationContract(aclAddress, delegateAddress, contractAddress),\n * );\n * ```\n */\nexport function revokeDelegationContract(\n aclAddress: Address,\n delegateAddress: Address,\n contractAddress: Address,\n) {\n return {\n address: aclAddress,\n abi: aclAbi,\n functionName: \"revokeDelegationForUserDecryption\",\n args: [delegateAddress, contractAddress],\n } as const;\n}\n\n/**\n * Returns the contract config to read the delegation expiry date.\n *\n * @example\n * ```ts\n * const expiry = await signer.readContract(\n * getDelegationExpiryContract(aclAddress, delegatorAddress, delegateAddress, contractAddress),\n * );\n * ```\n */\nexport function getDelegationExpiryContract(\n aclAddress: Address,\n delegatorAddress: Address,\n delegateAddress: Address,\n contractAddress: Address,\n) {\n return {\n address: aclAddress,\n abi: aclAbi,\n functionName: \"getUserDecryptionDelegationExpirationDate\",\n args: [delegatorAddress, delegateAddress, contractAddress],\n } as const;\n}\n\n/**\n * Returns the contract config to check if a specific handle is delegated.\n *\n * @example\n * ```ts\n * const isDelegated = await signer.readContract(\n * isHandleDelegatedContract(aclAddress, delegatorAddress, delegateAddress, contractAddress, handle),\n * );\n * ```\n */\nexport function isHandleDelegatedContract(\n aclAddress: Address,\n delegatorAddress: Address,\n delegateAddress: Address,\n contractAddress: Address,\n handle: `0x${string}`,\n) {\n return {\n address: aclAddress,\n abi: aclAbi,\n functionName: \"isHandleDelegatedForUserDecryption\",\n args: [delegatorAddress, delegateAddress, contractAddress, handle],\n } as const;\n}\n","/** uint64 max — represents a permanent (no-expiry) delegation. */\nexport const MAX_UINT64 = 2n ** 64n - 1n;\n","import type { Address, Hex } from \"viem\";\nimport type { ClearValueType, Handle } from \"../relayer/relayer-sdk.types\";\n\n/**\n * All SDK event keys, accessible as `ZamaSDKEvents.EncryptStart` etc.\n */\nexport const ZamaSDKEvents = {\n // Credentials lifecycle\n CredentialsLoading: \"credentials:loading\",\n CredentialsCached: \"credentials:cached\",\n CredentialsExpired: \"credentials:expired\",\n CredentialsCreating: \"credentials:creating\",\n CredentialsCreated: \"credentials:created\",\n CredentialsRevoked: \"credentials:revoked\",\n CredentialsPersistFailed: \"credentials:persist_failed\",\n CredentialsAllowed: \"credentials:allowed\",\n CredentialsCorrupted: \"credentials:corrupted\",\n SessionExpired: \"session:expired\",\n // FHE operations\n EncryptStart: \"encrypt:start\",\n EncryptEnd: \"encrypt:end\",\n EncryptError: \"encrypt:error\",\n DecryptStart: \"decrypt:start\",\n DecryptEnd: \"decrypt:end\",\n DecryptError: \"decrypt:error\",\n // Write operations\n TransactionError: \"transaction:error\",\n ShieldSubmitted: \"shield:submitted\",\n TransferSubmitted: \"transfer:submitted\",\n TransferFromSubmitted: \"transferFrom:submitted\",\n ApproveSubmitted: \"approve:submitted\",\n ApproveUnderlyingSubmitted: \"approveUnderlying:submitted\",\n UnwrapSubmitted: \"unwrap:submitted\",\n FinalizeUnwrapSubmitted: \"finalizeUnwrap:submitted\",\n // Delegation operations\n DelegationSubmitted: \"delegation:submitted\",\n RevokeDelegationSubmitted: \"revokeDelegation:submitted\",\n // Unshield orchestration\n UnshieldPhase1Submitted: \"unshield:phase1_submitted\",\n UnshieldPhase2Started: \"unshield:phase2_started\",\n UnshieldPhase2Submitted: \"unshield:phase2_submitted\",\n} as const;\n\n/** Union of all SDK event type strings. */\nexport type ZamaSDKEventType = (typeof ZamaSDKEvents)[keyof typeof ZamaSDKEvents];\n\n// -- Base fields present on every event --\n\nexport interface BaseEvent {\n tokenAddress?: Address;\n timestamp: number;\n /** Shared identifier linking related events in multi-phase operations (e.g. unshield). */\n operationId?: string;\n}\n\n// -- Per-event typed payloads --\n\nexport interface CredentialsLoadingEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.CredentialsLoading;\n /** Contract addresses being requested. */\n contractAddresses?: Address[];\n}\n\nexport interface CredentialsCachedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.CredentialsCached;\n /** Contract addresses covered by the cached credentials. */\n contractAddresses?: Address[];\n}\n\nexport interface CredentialsExpiredEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.CredentialsExpired;\n /** Contract addresses that need re-authorization. */\n contractAddresses?: Address[];\n}\n\nexport interface CredentialsCreatingEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.CredentialsCreating;\n /** Contract addresses being authorized. */\n contractAddresses?: Address[];\n}\n\nexport interface CredentialsCreatedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.CredentialsCreated;\n /** Contract addresses covered by the new credentials. */\n contractAddresses?: Address[];\n}\n\nexport interface CredentialsRevokedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.CredentialsRevoked;\n contractAddresses?: Address[];\n}\n\nexport interface CredentialsPersistFailedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.CredentialsPersistFailed;\n /** The error that caused the persist failure. */\n error: Error;\n}\n\nexport interface CredentialsAllowedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.CredentialsAllowed;\n /** Contract addresses covered by the authorized credentials. */\n contractAddresses?: Address[];\n}\n\nexport interface CredentialsCorruptedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.CredentialsCorrupted;\n /** The error that revealed storage corruption. */\n error: Error;\n}\n\nexport interface SessionExpiredEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.SessionExpired;\n /** Why the session expired. Currently always `\"ttl\"`, extensible for future inactivity timeout. */\n reason: \"ttl\";\n}\n\nexport interface EncryptStartEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.EncryptStart;\n}\n\nexport interface EncryptEndEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.EncryptEnd;\n durationMs: number;\n}\n\nexport interface EncryptErrorEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.EncryptError;\n /** The error that caused the encryption to fail. */\n error: Error;\n durationMs: number;\n}\n\nexport interface DecryptStartEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.DecryptStart;\n /** Handles being decrypted — correlate with matching DecryptEnd/DecryptError. */\n handles: Handle[];\n}\n\nexport interface DecryptEndEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.DecryptEnd;\n durationMs: number;\n /** Handles that were decrypted. */\n handles: Handle[];\n /** Decrypted values keyed by handle — use this to correlate events to specific handles. */\n result: Record<Handle, ClearValueType>;\n}\n\nexport interface DecryptErrorEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.DecryptError;\n /** The error that caused the decryption to fail. */\n error: Error;\n durationMs: number;\n /** Handles that were being decrypted when the error occurred. */\n handles: Handle[];\n}\n\nexport interface TransactionErrorEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.TransactionError;\n /** Which write operation failed. */\n operation: string;\n /** The error that caused the transaction to fail. */\n error: Error;\n}\n\nexport interface ShieldSubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.ShieldSubmitted;\n txHash: Hex;\n}\n\nexport interface TransferSubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.TransferSubmitted;\n txHash: Hex;\n}\n\nexport interface TransferFromSubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.TransferFromSubmitted;\n txHash: Hex;\n}\n\nexport interface ApproveSubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.ApproveSubmitted;\n txHash: Hex;\n}\n\nexport interface ApproveUnderlyingSubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.ApproveUnderlyingSubmitted;\n txHash: Hex;\n}\n\nexport interface UnwrapSubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.UnwrapSubmitted;\n txHash: Hex;\n}\n\nexport interface FinalizeUnwrapSubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.FinalizeUnwrapSubmitted;\n txHash: Hex;\n}\n\nexport interface DelegationSubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.DelegationSubmitted;\n txHash: Hex;\n}\n\nexport interface RevokeDelegationSubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.RevokeDelegationSubmitted;\n txHash: Hex;\n}\n\nexport interface UnshieldPhase1SubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.UnshieldPhase1Submitted;\n txHash: Hex;\n}\n\nexport interface UnshieldPhase2StartedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.UnshieldPhase2Started;\n}\n\nexport interface UnshieldPhase2SubmittedEvent extends BaseEvent {\n type: typeof ZamaSDKEvents.UnshieldPhase2Submitted;\n txHash: Hex;\n}\n\n/**\n * Discriminated union of all SDK events.\n *\n * Decrypt events carry handles and decrypted clear-text values so event\n * subscribers can correlate and bind them in UI layers. Events never carry\n * private keys, session signatures, or ZK proofs.\n */\nexport type ZamaSDKEvent =\n | CredentialsLoadingEvent\n | CredentialsCachedEvent\n | CredentialsExpiredEvent\n | CredentialsCreatingEvent\n | CredentialsCreatedEvent\n | CredentialsRevokedEvent\n | CredentialsPersistFailedEvent\n | CredentialsAllowedEvent\n | CredentialsCorruptedEvent\n | SessionExpiredEvent\n | EncryptStartEvent\n | EncryptEndEvent\n | EncryptErrorEvent\n | DecryptStartEvent\n | DecryptEndEvent\n | DecryptErrorEvent\n | TransactionErrorEvent\n | ShieldSubmittedEvent\n | TransferSubmittedEvent\n | TransferFromSubmittedEvent\n | ApproveSubmittedEvent\n | ApproveUnderlyingSubmittedEvent\n | UnwrapSubmittedEvent\n | FinalizeUnwrapSubmittedEvent\n | DelegationSubmittedEvent\n | RevokeDelegationSubmittedEvent\n | UnshieldPhase1SubmittedEvent\n | UnshieldPhase2StartedEvent\n | UnshieldPhase2SubmittedEvent;\n\nexport type ZamaSDKEventListener = (event: ZamaSDKEvent) => void;\n\n/** Distributive Omit that preserves the discriminated union. */\nexport type ZamaSDKEventInput = ZamaSDKEvent extends infer E\n ? E extends ZamaSDKEvent\n ? Omit<E, \"timestamp\" | \"tokenAddress\">\n : never\n : never;\n","/**\n * Execute an array of async thunks with bounded concurrency.\n * Defaults to `Infinity` (equivalent to `Promise.all`).\n */\nexport async function pLimit<T>(\n fns: (() => Promise<T>)[],\n maxConcurrency = Infinity,\n): Promise<T[]> {\n if (Number.isFinite(maxConcurrency) && maxConcurrency <= 0) {\n throw new Error(\"maxConcurrency must be a positive number\");\n }\n if (!Number.isFinite(maxConcurrency) || maxConcurrency >= fns.length) {\n return Promise.all(fns.map((f) => f()));\n }\n\n const results: T[] = Array.from({ length: fns.length });\n let index = 0;\n\n async function worker() {\n while (index < fns.length) {\n const i = index++;\n if (fns[i]) {\n results[i] = await fns[i]();\n }\n }\n }\n\n await Promise.all(Array.from({ length: maxConcurrency }, worker));\n return results;\n}\n","import { type Address, getAddress } from \"viem\";\nimport {\n allowanceContract,\n confidentialBalanceOfContract,\n decimalsContract,\n ERC7984_INTERFACE_ID,\n ERC7984_WRAPPER_INTERFACE_ID,\n getDelegationExpiryContract,\n MAX_UINT64,\n nameContract,\n supportsInterfaceContract,\n symbolContract,\n underlyingContract,\n} from \"../contracts\";\nimport {\n ConfigurationError,\n DecryptionFailedError,\n DelegationExpiredError,\n DelegationNotFoundError,\n isSessionError,\n wrapDecryptError,\n ZamaError,\n} from \"../errors\";\nimport { ZamaSDKEvents, type ZamaSDKEventInput } from \"../events/sdk-events\";\nimport { isZeroHandle, ZERO_HANDLE } from \"../utils/handles\";\nimport type { ClearValueType, Handle } from \"../relayer/relayer-sdk.types\";\nimport { toError } from \"../utils\";\nimport { assertBigint } from \"../utils/assertions\";\nimport { pLimit } from \"../utils/concurrency\";\nimport type { ZamaSDK } from \"../zama-sdk\";\n\n// Re-exported so consumers importing via `./token` keep a single canonical\n// reference. The constant itself lives in `utils/handles`.\nexport { ZERO_HANDLE, isZeroHandle };\n\n/** Options for {@link ReadonlyToken.batchDecryptBalancesAs}. */\nexport interface BatchDecryptAsOptions {\n /** The address of the account that delegated decryption rights. */\n delegatorAddress: Address;\n /** Pre-fetched encrypted handles. When omitted, handles are fetched from the chain. */\n handles?: Handle[];\n /** Balance owner address. Defaults to the delegator address. */\n owner?: Address;\n /** Maximum number of concurrent decrypt calls. Default: Infinity. */\n maxConcurrency?: number;\n /** Called when decryption fails for a single token. Return a fallback bigint. */\n onError?: (error: Error, address: Address) => bigint;\n}\n\n/** Result of {@link ReadonlyToken.batchBalancesOf}. */\nexport interface BatchBalancesResult {\n /** Successfully decrypted balances, keyed by token address. */\n results: Map<Address, bigint>;\n /** Per-token errors for tokens that failed to decrypt. */\n errors: Map<Address, ZamaError>;\n}\n\n/**\n * Read-only interface for a confidential token.\n * Supports balance queries, authorization, and ERC-165 checks.\n * Does not require a wrapper address.\n *\n * Decryption, credentials, caching, and event emission are handled by the\n * owning {@link ZamaSDK} — this class only exposes token-specific helpers\n * that delegate to {@link ZamaSDK.userDecrypt} and {@link ZamaSDK.allow}.\n */\nexport class ReadonlyToken {\n readonly sdk: ZamaSDK;\n readonly address: Address;\n\n constructor(sdk: ZamaSDK, address: Address) {\n this.sdk = sdk;\n this.address = getAddress(address);\n }\n\n /**\n * Decrypt and return the plaintext balance for the given owner.\n * Acquires FHE credentials via a wallet signature if none are cached.\n *\n * @param owner - Optional balance owner address. Defaults to the connected signer.\n * @returns The decrypted plaintext balance as a bigint.\n * @throws {@link DecryptionFailedError} if FHE decryption fails.\n *\n * @example\n * ```ts\n * const balance = await token.balanceOf();\n * // or for another address:\n * const balance = await token.balanceOf(\"0xOwner\");\n * ```\n */\n async balanceOf(owner?: Address): Promise<bigint> {\n const ownerAddress = owner ? getAddress(owner) : await this.sdk.signer.getAddress();\n const handle = await this.readConfidentialBalanceOf(ownerAddress);\n const result = await this.sdk.userDecrypt([{ handle, contractAddress: this.address }]);\n const value = result[handle];\n if (value === undefined) {\n throw new DecryptionFailedError(`Decryption returned no value for handle ${handle}`);\n }\n assertBigint(value, \"balanceOf: result[handle]\");\n return value;\n }\n\n /**\n * Return the raw encrypted balance handle without decrypting.\n *\n * @param owner - Optional balance owner address. Defaults to the connected signer.\n * @returns The encrypted balance handle as a hex string.\n *\n * @example\n * ```ts\n * const handle = await token.confidentialBalanceOf();\n * ```\n */\n async confidentialBalanceOf(owner?: Address): Promise<Handle> {\n const ownerAddress = owner ? getAddress(owner) : await this.sdk.signer.getAddress();\n return this.readConfidentialBalanceOf(ownerAddress);\n }\n\n /**\n * ERC-165 check for {@link ERC7984_INTERFACE_ID} support.\n *\n * @returns `true` if the contract implements the ERC-7984 confidential token interface.\n */\n async isConfidential(): Promise<boolean> {\n return this.sdk.signer.readContract(\n supportsInterfaceContract(this.address, ERC7984_INTERFACE_ID),\n );\n }\n\n /**\n * ERC-165 check for {@link ERC7984_WRAPPER_INTERFACE_ID} support.\n *\n * @returns `true` if the contract implements the ERC-7984 wrapper interface.\n */\n async isWrapper(): Promise<boolean> {\n return this.sdk.signer.readContract(\n supportsInterfaceContract(this.address, ERC7984_WRAPPER_INTERFACE_ID),\n );\n }\n\n /**\n * Decrypt confidential balances for multiple tokens in parallel, returning\n * successes and per-token errors separately. Pre-authorizes all token\n * addresses in a single wallet signature, then delegates each decrypt to\n * {@link ZamaSDK.userDecrypt}.\n *\n * Tokens that fail to decrypt land in `errors` rather than aborting the\n * whole batch — caller decides how to surface them.\n *\n * @param tokens - Array of {@link ReadonlyToken} instances bound to the same SDK.\n * @param owner - Optional balance owner address. Defaults to the connected signer.\n * @returns `{ results, errors }` partitioning the per-token outcomes.\n *\n * @example\n * ```ts\n * const { results, errors } = await ReadonlyToken.batchBalancesOf(tokens);\n * ```\n */\n static async batchBalancesOf(\n tokens: ReadonlyToken[],\n owner?: Address,\n ): Promise<BatchBalancesResult> {\n const results = new Map<Address, bigint>();\n const errors = new Map<Address, ZamaError>();\n if (tokens.length === 0) {\n return { results, errors };\n }\n\n const sdk = ReadonlyToken.assertSameSdk(tokens);\n // Pre-authorize the full token set in one wallet signature so subsequent\n // per-token userDecrypt calls reuse the cached credentials.\n await sdk.allow(tokens.map((t) => t.address));\n\n // Bound concurrency so a large token list can't overwhelm the relayer.\n // Default matches the inner userDecrypt limit.\n const outcomes = await pLimit(\n tokens.map((t) => async () => {\n try {\n return {\n status: \"fulfilled\" as const,\n value: await t.balanceOf(owner),\n };\n } catch (reason) {\n return { status: \"rejected\" as const, reason };\n }\n }),\n 5,\n );\n\n for (let i = 0; i < tokens.length; i++) {\n const tokenAddress = tokens[i]!.address;\n const outcome = outcomes[i]!;\n if (outcome.status === \"fulfilled\") {\n results.set(tokenAddress, outcome.value);\n } else {\n const reason = outcome.reason;\n // Session-level failures (user rejected signature, SDK misconfigured)\n // apply to every token — surface them instead of collecting per-token.\n if (isSessionError(reason)) {\n throw reason;\n }\n const error =\n reason instanceof ZamaError\n ? reason\n : new DecryptionFailedError(toError(reason).message, {\n cause: reason,\n });\n errors.set(tokenAddress, error);\n }\n }\n\n // Total failure: surface the first error so callers know nothing decrypted.\n if (errors.size === tokens.length) {\n const firstError = errors.values().next().value;\n throw firstError ?? new DecryptionFailedError(\"All token balance decryptions failed\");\n }\n\n return { results, errors };\n }\n\n /**\n * Batch decrypt confidential balances as a delegate across multiple tokens.\n * Mirrors {@link batchBalancesOf} but uses delegated credentials.\n *\n * **Error handling:** If a per-token decryption fails and no `onError` callback\n * is provided, errors are collected and thrown as an aggregated\n * `DecryptionFailedError`. When the relayer returns no value for a handle,\n * a `DecryptionFailedError` is thrown for that token (never silently returns `0n`).\n * Pass `onError: () => 0n` to opt into the silent zero behavior.\n *\n * @param tokens - Array of ReadonlyToken instances to decrypt balances for.\n * @param options - Delegated decryption configuration.\n * @returns A Map from token address to decrypted balance.\n * @throws {@link DelegationNotFoundError} if no active delegation exists from the delegator to the connected signer.\n * @throws {@link DelegationExpiredError} if the delegation has expired.\n * @throws {@link DecryptionFailedError} if any decryption fails and no `onError` callback is provided.\n * @throws {@link SigningRejectedError} if the user rejects the wallet signature prompt.\n *\n * @example\n * ```ts\n * const balances = await ReadonlyToken.batchDecryptBalancesAs(tokens, {\n * delegatorAddress: \"0xDelegator\",\n * onError: (err, addr) => { console.error(addr, err); return 0n; },\n * });\n * ```\n */\n static async batchDecryptBalancesAs(\n tokens: ReadonlyToken[],\n options: BatchDecryptAsOptions,\n ): Promise<Map<Address, bigint>> {\n if (tokens.length === 0) {\n return new Map();\n }\n\n const { delegatorAddress, handles, owner, onError, maxConcurrency } = options;\n const ownerAddress = owner ?? delegatorAddress;\n const firstToken = tokens[0]!;\n ReadonlyToken.assertSameSdk(tokens);\n\n const resolvedHandles =\n handles ?? (await Promise.all(tokens.map((t) => t.readConfidentialBalanceOf(ownerAddress))));\n\n if (tokens.length !== resolvedHandles.length) {\n throw new DecryptionFailedError(\n `tokens.length (${tokens.length}) must equal handles.length (${resolvedHandles.length})`,\n );\n }\n\n const results = new Map<Address, bigint>();\n\n // Parallel cache lookups — avoids sequential IDB round-trips.\n const uncached: { token: ReadonlyToken; handle: Handle }[] = [];\n const cachedValues = await Promise.all(\n tokens.map(async (token, i) => {\n const handle = resolvedHandles[i]!;\n if (isZeroHandle(handle)) {\n return 0n;\n }\n return firstToken.sdk.cache.get(ownerAddress, token.address, handle);\n }),\n );\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]!;\n const handle = resolvedHandles[i]!;\n const cached = cachedValues[i];\n\n if (cached !== null && cached !== undefined) {\n assertBigint(cached, \"batchDecryptBalancesAs: cached\");\n results.set(token.address, cached);\n continue;\n }\n\n uncached.push({ token, handle });\n }\n\n // All balances resolved from cache — no credentials needed.\n if (uncached.length === 0) {\n return results;\n }\n\n // Pre-flight delegation check runs after cache lookups — skips RPC overhead\n // when all balances are cached. Best-effort: checks the first token's\n // contract only (delegations are typically granted per-delegator, not per-token).\n await firstToken.#assertDelegationActive(delegatorAddress);\n\n const uncachedAddresses = uncached.map((entry) => entry.token.address);\n const creds = await firstToken.sdk.delegatedCredentials.allow(\n delegatorAddress,\n ...uncachedAddresses,\n );\n\n const errors: { address: Address; error: Error }[] = [];\n const decryptFns: (() => Promise<void>)[] = [];\n\n for (const { token, handle } of uncached) {\n decryptFns.push(() =>\n firstToken.sdk.relayer\n .delegatedUserDecrypt({\n handles: [handle],\n contractAddress: token.address,\n signedContractAddresses: creds.contractAddresses,\n privateKey: creds.privateKey,\n publicKey: creds.publicKey,\n signature: creds.signature,\n delegatorAddress: creds.delegatorAddress,\n delegateAddress: creds.delegateAddress,\n startTimestamp: creds.startTimestamp,\n durationDays: creds.durationDays,\n })\n .then(async (result) => {\n const value = result[handle];\n if (value === undefined) {\n throw new DecryptionFailedError(\n `Batch delegated decryption returned no value for handle ${handle} on token ${token.address}`,\n );\n }\n assertBigint(value, \"batchDecryptBalancesAs: result[handle]\");\n results.set(token.address, value);\n // Cache write is best-effort — log on failure so a broken cache\n // backend doesn't silently force re-decryption forever.\n firstToken.sdk.cache\n .set(ownerAddress, token.address, handle, value)\n .catch((cacheErr: unknown) => {\n // oxlint-disable-next-line no-console\n console.warn(\"[zama-sdk] Failed to cache decrypted value:\", cacheErr);\n });\n })\n .catch((error) => {\n // Session-level failures apply to every token — re-throw so the\n // whole batch aborts with the original typed error.\n if (isSessionError(error)) {\n throw error;\n }\n const err = toError(error);\n if (onError) {\n try {\n results.set(token.address, onError(err, token.address));\n } catch (callbackError) {\n errors.push({\n address: token.address,\n error: toError(callbackError),\n });\n }\n } else {\n errors.push({ address: token.address, error: err });\n }\n }),\n );\n }\n\n await pLimit(decryptFns, maxConcurrency);\n\n if (errors.length > 0) {\n const message = errors.map((e) => `${e.address}: ${e.error.message}`).join(\"; \");\n // Preserve the first original error as `cause` so callers can still\n // `instanceof`-check the underlying failure type.\n throw new DecryptionFailedError(\n `Batch delegated decryption failed for ${errors.length} token(s): ${message}`,\n { cause: errors[0]!.error },\n );\n }\n\n return results;\n }\n\n /**\n * Read the underlying ERC-20 address from this token's wrapper contract.\n *\n * @returns The underlying ERC-20 token address.\n */\n async underlyingToken(): Promise<Address> {\n return this.sdk.signer.readContract(underlyingContract(this.address));\n }\n\n /**\n * Read the ERC-20 allowance of the underlying token for a given wrapper.\n *\n * @param wrapper - The wrapper contract address to check allowance for.\n * @param owner - Optional owner address. Defaults to the connected signer.\n * @returns The current allowance as a bigint.\n */\n async allowance(wrapper: Address, owner?: Address): Promise<bigint> {\n const normalizedWrapper = getAddress(wrapper);\n const underlying = await this.sdk.signer.readContract(underlyingContract(normalizedWrapper));\n const userAddress = owner ? getAddress(owner) : await this.sdk.signer.getAddress();\n return this.sdk.signer.readContract(\n allowanceContract(underlying, userAddress, normalizedWrapper),\n );\n }\n\n /**\n * Read the token name from the contract.\n *\n * @returns The token name string.\n */\n async name(): Promise<string> {\n return this.sdk.signer.readContract(nameContract(this.address));\n }\n\n /**\n * Read the token symbol from the contract.\n *\n * @returns The token symbol string.\n */\n async symbol(): Promise<string> {\n return this.sdk.signer.readContract(symbolContract(this.address));\n }\n\n /**\n * Read the token decimals from the contract.\n *\n * @returns The number of decimals.\n */\n async decimals(): Promise<number> {\n return this.sdk.signer.readContract(decimalsContract(this.address));\n }\n\n /**\n * Ensure FHE decrypt credentials exist for this token.\n * Generates a keypair and requests an EIP-712 signature if needed.\n * Call this before any decrypt operation to avoid mid-flow wallet prompts.\n *\n * @returns Resolves when credentials are cached.\n *\n * @example\n * ```ts\n * await token.allow();\n * // Credentials are now cached — subsequent decrypts won't prompt\n * const balance = await token.balanceOf();\n * ```\n */\n async allow(): Promise<void> {\n await this.sdk.allow([this.address]);\n }\n\n /**\n * Whether a session signature is currently cached for the connected wallet.\n * Use this to check if decrypt operations can proceed without a wallet prompt.\n */\n async isAllowed(): Promise<boolean> {\n return this.sdk.credentials.isAllowed([this.address]);\n }\n\n /**\n * Revoke cached session signatures for the given contract addresses, forcing\n * a fresh wallet signature on the next decrypt operation for those contracts.\n * Stored credentials remain intact; only the in-memory session signature is\n * cleared.\n *\n * @param contractAddresses - Contract addresses to revoke credentials for.\n */\n async revoke(...contractAddresses: Address[]): Promise<void> {\n await this.sdk.credentials.revoke(...contractAddresses);\n }\n\n /**\n * Ensure FHE decrypt credentials exist for all given tokens in a single\n * wallet signature. Call this early (e.g. after loading the token list) so\n * that subsequent individual decrypt operations reuse cached credentials.\n *\n * @param tokens - Array of ReadonlyToken instances to allow.\n * @returns Resolves when all credentials are cached.\n *\n * @example\n * ```ts\n * const tokens = addresses.map(a => sdk.createReadonlyToken(a));\n * await ReadonlyToken.allow(...tokens);\n * // All tokens now share the same credentials\n * ```\n */\n static async allow(...tokens: ReadonlyToken[]): Promise<void> {\n if (tokens.length === 0) {\n return;\n }\n const sdk = ReadonlyToken.assertSameSdk(tokens);\n await sdk.allow(tokens.map((t) => t.address));\n }\n\n protected async getAclAddress(): Promise<Address> {\n return this.sdk.relayer.getAclAddress();\n }\n\n /**\n * Check whether a delegation is active for this token's contract address.\n *\n * @param delegatorAddress - The address that granted the delegation.\n * @param delegateAddress - The address that received delegation rights.\n * @returns `true` if the delegation exists and has not expired.\n */\n async isDelegated(params: {\n delegatorAddress: Address;\n delegateAddress: Address;\n }): Promise<boolean> {\n const expiry = await this.getDelegationExpiry(params);\n if (expiry === 0n) {\n return false;\n }\n // Permanent delegation (uint64 max) — skip the RPC round-trip for block timestamp.\n if (expiry === MAX_UINT64) {\n return true;\n }\n const now = await this.sdk.signer.getBlockTimestamp();\n return expiry > now;\n }\n\n /**\n * Get the expiration timestamp of a delegation for this token.\n *\n * @param delegatorAddress - The address that granted the delegation.\n * @param delegateAddress - The address that received delegation rights.\n * @returns Unix timestamp as bigint. `0n` = no delegation. `2^64 - 1` = permanent.\n */\n async getDelegationExpiry({\n delegatorAddress,\n delegateAddress,\n }: {\n delegatorAddress: Address;\n delegateAddress: Address;\n }): Promise<bigint> {\n const acl = await this.getAclAddress();\n return this.sdk.signer.readContract(\n getDelegationExpiryContract(\n acl,\n getAddress(delegatorAddress),\n getAddress(delegateAddress),\n this.address,\n ),\n );\n }\n\n /**\n * Throws if there is no active delegation from `delegatorAddress` to the\n * connected signer for this token contract.\n */\n async #assertDelegationActive(delegatorAddress: Address): Promise<void> {\n const delegateAddress = await this.sdk.signer.getAddress();\n const expiry = await this.getDelegationExpiry({\n delegatorAddress,\n delegateAddress,\n });\n if (expiry === 0n) {\n throw new DelegationNotFoundError(\n `No active delegation from ${delegatorAddress} to ${delegateAddress} for ${this.address}`,\n );\n }\n if (expiry !== MAX_UINT64) {\n const now = await this.sdk.signer.getBlockTimestamp();\n if (expiry <= now) {\n throw new DelegationExpiredError(\n `Delegation from ${delegatorAddress} to ${delegateAddress} for ${this.address} has expired`,\n );\n }\n }\n }\n\n protected async readConfidentialBalanceOf(owner: Address): Promise<Handle> {\n return await this.sdk.signer.readContract(confidentialBalanceOfContract(this.address, owner));\n }\n /**\n * Decrypt the balance of a delegator using delegated decryption credentials.\n * The connected signer acts as the delegate who has been granted permission\n * by the delegator to decrypt their balance.\n *\n * Decrypted values are cached in storage keyed by `(token, owner, handle)`.\n * Cache write failures are silently ignored — they do not affect the returned value.\n *\n * @param delegatorAddress - The address of the account that delegated decryption rights.\n * @param owner - Optional balance owner address. Defaults to the delegator address.\n * @returns The decrypted plaintext balance as a bigint.\n * @throws {@link DelegationNotFoundError} if no active delegation exists from the delegator to the connected signer.\n * @throws {@link DelegationExpiredError} if the delegation has expired.\n * @throws {@link DecryptionFailedError} if delegated decryption fails or the relayer returns no value.\n *\n * @example\n * ```ts\n * const balance = await token.decryptBalanceAs({\n * delegatorAddress: \"0xDelegator\",\n * });\n * ```\n */\n async decryptBalanceAs({\n delegatorAddress,\n owner,\n }: {\n delegatorAddress: Address;\n owner?: Address;\n }): Promise<bigint> {\n const normalizedDelegator = getAddress(delegatorAddress);\n const normalizedOwner = owner ? getAddress(owner) : normalizedDelegator;\n\n const handle = await this.readConfidentialBalanceOf(normalizedOwner);\n if (isZeroHandle(handle)) {\n return 0n;\n }\n\n const cached = await this.sdk.cache.get(normalizedOwner, this.address, handle);\n if (cached !== null) {\n assertBigint(cached, \"decryptBalanceAs: cached\");\n return cached;\n }\n\n // Pre-flight delegation check — avoids wasting a wallet signature on an\n // expired or non-existent delegation.\n await this.#assertDelegationActive(normalizedDelegator);\n\n const t0 = Date.now();\n try {\n this.emit({ type: ZamaSDKEvents.DecryptStart, handles: [handle] });\n\n const creds = await this.sdk.delegatedCredentials.allow(normalizedDelegator, this.address);\n\n const result = await this.sdk.relayer.delegatedUserDecrypt({\n handles: [handle],\n contractAddress: this.address,\n signedContractAddresses: creds.contractAddresses,\n privateKey: creds.privateKey,\n publicKey: creds.publicKey,\n signature: creds.signature,\n delegatorAddress: creds.delegatorAddress,\n delegateAddress: creds.delegateAddress,\n startTimestamp: creds.startTimestamp,\n durationDays: creds.durationDays,\n });\n\n // Validate the relayer response before emitting DecryptEnd so subscribers\n // never see a contradictory `Start → End → Error` sequence.\n const value = result[handle];\n if (value === undefined) {\n throw new DecryptionFailedError(\n `Delegated decryption returned no value for handle ${handle}`,\n );\n }\n assertBigint(value, \"decryptBalanceAs: result[handle]\");\n\n this.emit({\n type: ZamaSDKEvents.DecryptEnd,\n durationMs: Date.now() - t0,\n handles: [handle],\n result,\n });\n\n await this.sdk.cache.set(normalizedOwner, this.address, handle, value);\n return value;\n } catch (error) {\n this.emit({\n type: ZamaSDKEvents.DecryptError,\n error: toError(error),\n durationMs: Date.now() - t0,\n handles: [handle],\n });\n throw wrapDecryptError(error, \"Failed to decrypt delegated balance\", true);\n }\n }\n\n /**\n * Emit a decrypt-related event scoped to this token. Events are routed\n * through the owning {@link ZamaSDK} so subscribers see a unified stream.\n */\n protected emit(input: ZamaSDKEventInput): void {\n this.sdk.emitEvent(input, this.address);\n }\n\n /** Verify all tokens share the same SDK instance and return it. */\n private static assertSameSdk(tokens: ReadonlyToken[]): ZamaSDK {\n const sdk = tokens[0]!.sdk;\n for (let i = 1; i < tokens.length; i++) {\n if (tokens[i]!.sdk !== sdk) {\n throw new ConfigurationError(\n \"All tokens in a batch operation must share the same ZamaSDK instance\",\n );\n }\n }\n return sdk;\n }\n}\n\n/**\n * Re-exported alias used by tests and helpers for arbitrary-handle decryption.\n * Use {@link ZamaSDK.userDecrypt} directly in application code.\n *\n * @internal\n */\nexport type DecryptedHandlesMap = Map<Handle, ClearValueType>;\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"relayer-C6u3eOlN.js","names":[],"sources":["../../src/errors/base.ts","../../src/errors/relayer.ts"],"sourcesContent":["/**\n * Typed error codes thrown by the SDK.\n * Use `error.code` or `instanceof` to programmatically handle specific failure modes.\n *\n * @example\n * ```ts\n * try {\n * await token.confidentialTransfer(\"0xTo\", 100n);\n * } catch (e) {\n * if (e instanceof SigningRejectedError) {\n * // User rejected the wallet signature\n * }\n * }\n * ```\n */\nexport const ZamaErrorCode = {\n /** User rejected the wallet signature prompt. */\n SigningRejected: \"SIGNING_REJECTED\",\n /** Wallet signature failed for a reason other than rejection. */\n SigningFailed: \"SIGNING_FAILED\",\n /** FHE encryption failed. */\n EncryptionFailed: \"ENCRYPTION_FAILED\",\n /** FHE decryption failed. */\n DecryptionFailed: \"DECRYPTION_FAILED\",\n /** ERC-20 approval transaction failed. */\n ApprovalFailed: \"APPROVAL_FAILED\",\n /** On-chain transaction reverted. */\n TransactionReverted: \"TRANSACTION_REVERTED\",\n /** FHE keypair has expired and needs regeneration. */\n KeypairExpired: \"KEYPAIR_EXPIRED\",\n /** Relayer rejected FHE keypair (stale, expired, or malformed). */\n InvalidKeypair: \"INVALID_KEYPAIR\",\n /** No FHE ciphertext exists for this account (never shielded). */\n NoCiphertext: \"NO_CIPHERTEXT\",\n /** Relayer HTTP request failed. */\n RelayerRequestFailed: \"RELAYER_REQUEST_FAILED\",\n /** SDK configuration is invalid (e.g. forbidden chain ID, unsupported type). */\n Configuration: \"CONFIGURATION\",\n /** Delegation cannot target self (delegate === msg.sender). */\n DelegationSelfNotAllowed: \"DELEGATION_SELF_NOT_ALLOWED\",\n /** Only one delegate/revoke per (delegator, delegate, contract) per block. */\n DelegationCooldown: \"DELEGATION_COOLDOWN\",\n /** No active delegation found for this (delegator, delegate, contract) tuple. */\n DelegationNotFound: \"DELEGATION_NOT_FOUND\",\n /** The delegation has expired. */\n DelegationExpired: \"DELEGATION_EXPIRED\",\n /** Confidential (cToken) balance is insufficient for the requested operation. */\n InsufficientConfidentialBalance: \"INSUFFICIENT_CONFIDENTIAL_BALANCE\",\n /** ERC-20 balance is insufficient for the requested shield amount. */\n InsufficientERC20Balance: \"INSUFFICIENT_ERC20_BALANCE\",\n /** Balance validation could not be performed (no cached credentials and decryption not possible). */\n BalanceCheckUnavailable: \"BALANCE_CHECK_UNAVAILABLE\",\n /** Public ERC-20 read (e.g. balanceOf) failed due to a network or contract error. */\n ERC20ReadFailed: \"ERC20_READ_FAILED\",\n /** The new expiration date equals the current one — no on-chain change needed. */\n DelegationExpiryUnchanged: \"DELEGATION_EXPIRY_UNCHANGED\",\n /** Delegate address cannot be the contract address. */\n DelegationDelegateEqualsContract: \"DELEGATION_DELEGATE_EQUALS_CONTRACT\",\n /** Contract address cannot be the sender address. */\n DelegationContractIsSelf: \"DELEGATION_CONTRACT_IS_SELF\",\n /** The ACL contract is paused. */\n AclPaused: \"ACL_PAUSED\",\n /** Expiration date is too soon (must be at least 1 hour in the future). */\n DelegationExpirationTooSoon: \"DELEGATION_EXPIRATION_TOO_SOON\",\n /** Delegation exists on-chain but hasn't propagated to the gateway yet. */\n DelegationNotPropagated: \"DELEGATION_NOT_PROPAGATED\",\n} as const;\n\n/** Union of all {@link ZamaErrorCode} string values. */\nexport type ZamaErrorCode = (typeof ZamaErrorCode)[keyof typeof ZamaErrorCode];\n\n/**\n * Base error thrown by all SDK operations.\n * Carries a {@link ZamaErrorCode} for programmatic error handling.\n * Prefer catching specific subclasses (e.g. {@link EncryptionFailedError}).\n */\nexport class ZamaError extends Error {\n /** Machine-readable error code. */\n readonly code: ZamaErrorCode;\n\n constructor(code: ZamaErrorCode, message: string, options?: ErrorOptions) {\n super(message, options);\n Object.setPrototypeOf(this, new.target.prototype);\n this.name = \"ZamaError\";\n this.code = code;\n }\n}\n\n/**\n * Pattern-match on a {@link ZamaError} by its error code.\n * Falls through to the `_` wildcard handler if no specific handler matches.\n * Returns `undefined` if the error is not a `ZamaError` and no `_` handler is provided.\n *\n * @example\n * ```ts\n * matchZamaError(error, {\n * SIGNING_REJECTED: () => toast(\"Please approve in wallet\"),\n * TRANSACTION_REVERTED: (e) => toast(`Tx failed: ${e.message}`),\n * _: () => toast(\"Unknown error\"),\n * });\n * ```\n */\nexport function matchZamaError<R>(\n error: unknown,\n handlers: Partial<Record<ZamaErrorCode, (error: ZamaError) => R>> & {\n _?: (error: unknown) => R;\n },\n): R | undefined {\n if (error instanceof ZamaError) {\n const handler = handlers[error.code];\n if (handler) {\n return handler(error);\n }\n }\n return handlers._?.(error);\n}\n","import { ZamaError, ZamaErrorCode } from \"./base\";\n\n/** Relayer HTTP request failed. */\nexport class RelayerRequestFailedError extends ZamaError {\n /** HTTP status code from the relayer, if available. */\n readonly statusCode: number | undefined;\n\n constructor(message: string, statusCode?: number, options?: ErrorOptions) {\n super(ZamaErrorCode.RelayerRequestFailed, message, options);\n this.name = \"RelayerRequestFailedError\";\n this.statusCode = statusCode;\n }\n}\n\n/** SDK configuration is invalid (e.g. forbidden chain ID, unsupported type). */\nexport class ConfigurationError extends ZamaError {\n constructor(message: string, options?: ErrorOptions) {\n super(ZamaErrorCode.Configuration, message, options);\n this.name = \"ConfigurationError\";\n }\n}\n"],"mappings":"AAeA,MAAa,EAAgB,CAE3B,gBAAiB,mBAEjB,cAAe,iBAEf,iBAAkB,oBAElB,iBAAkB,oBAElB,eAAgB,kBAEhB,oBAAqB,uBAErB,eAAgB,kBAEhB,eAAgB,kBAEhB,aAAc,gBAEd,qBAAsB,yBAEtB,cAAe,gBAEf,yBAA0B,8BAE1B,mBAAoB,sBAEpB,mBAAoB,uBAEpB,kBAAmB,qBAEnB,gCAAiC,oCAEjC,yBAA0B,6BAE1B,wBAAyB,4BAEzB,gBAAiB,oBAEjB,0BAA2B,8BAE3B,iCAAkC,sCAElC,yBAA0B,8BAE1B,UAAW,aAEX,4BAA6B,iCAE7B,wBAAyB,4BAC1B,CAUD,IAAa,EAAb,cAA+B,KAAM,CAEnC,KAEA,YAAY,EAAqB,EAAiB,EAAwB,CACxE,MAAM,EAAS,EAAQ,CACvB,OAAO,eAAe,KAAM,IAAI,OAAO,UAAU,CACjD,KAAK,KAAO,YACZ,KAAK,KAAO,IAkBhB,SAAgB,EACd,EACA,EAGe,CACf,GAAI,aAAiB,EAAW,CAC9B,IAAM,EAAU,EAAS,EAAM,MAC/B,GAAI,EACF,OAAO,EAAQ,EAAM,CAGzB,OAAO,EAAS,IAAI,EAAM,CC/G5B,IAAa,EAAb,cAA+C,CAAU,CAEvD,WAEA,YAAY,EAAiB,EAAqB,EAAwB,CACxE,MAAM,EAAc,qBAAsB,EAAS,EAAQ,CAC3D,KAAK,KAAO,4BACZ,KAAK,WAAa,IAKT,EAAb,cAAwC,CAAU,CAChD,YAAY,EAAiB,EAAwB,CACnD,MAAM,EAAc,cAAe,EAAS,EAAQ,CACpD,KAAK,KAAO"}
@@ -1,44 +0,0 @@
1
- import { a as EncryptParams, l as PublicDecryptResult, n as DelegatedUserDecryptParams, o as EncryptResult, p as UserDecryptParams, r as EIP712TypedData, s as Handle, t as ClearValueType } from "./relayer-sdk.types-CGfXwKcB.js";
2
- import { Address, Hex } from "viem";
3
- import { InputProofBytesType, KeypairType, KmsDelegatedUserDecryptEIP712Type, ZKProofLike } from "@zama-fhe/relayer-sdk/bundle";
4
-
5
- //#region src/relayer/relayer-sdk.d.ts
6
- /**
7
- * Interface for FHE relayer operations.
8
- * Implemented by `RelayerWeb` (browser, via Web Worker + WASM) and `RelayerNode` (Node.js, direct).
9
- */
10
- interface RelayerSDK {
11
- /** Generate an FHE keypair (public + private key). */
12
- generateKeypair(): Promise<KeypairType<Hex>>;
13
- /** Create EIP-712 typed data for signing an FHE decrypt credential. */
14
- createEIP712(publicKey: Hex, contractAddresses: Address[], startTimestamp: number, durationDays?: number): Promise<EIP712TypedData>;
15
- /** Encrypt plaintext values into FHE ciphertexts. */
16
- encrypt(params: EncryptParams): Promise<EncryptResult>;
17
- /** Decrypt FHE ciphertext handles using the user's own credentials. */
18
- userDecrypt(params: UserDecryptParams): Promise<Readonly<Record<Handle, ClearValueType>>>;
19
- /** Decrypt FHE handles using the network public key (no credential needed). */
20
- publicDecrypt(handles: Handle[]): Promise<PublicDecryptResult>;
21
- /** Create EIP-712 typed data for a delegated user decrypt credential. */
22
- createDelegatedUserDecryptEIP712(publicKey: Hex, contractAddresses: Address[], delegatorAddress: Address, startTimestamp: number, durationDays?: number): Promise<KmsDelegatedUserDecryptEIP712Type>;
23
- /** Decrypt FHE handles using delegated user credentials. */
24
- delegatedUserDecrypt(params: DelegatedUserDecryptParams): Promise<Readonly<Record<Handle, ClearValueType>>>;
25
- /** Submit a ZK proof for on-chain verification. */
26
- requestZKProofVerification(zkProof: ZKProofLike): Promise<InputProofBytesType>;
27
- /** Fetch the FHE network public key. Returns `null` if not available. */
28
- getPublicKey(): Promise<{
29
- publicKeyId: string;
30
- publicKey: Uint8Array;
31
- } | null>;
32
- /** Fetch FHE public parameters for a given bit size. Returns `null` if not available. */
33
- getPublicParams(bits: number): Promise<{
34
- publicParams: Uint8Array;
35
- publicParamsId: string;
36
- } | null>;
37
- /** Return the ACL contract address for the current chain. */
38
- getAclAddress(): Promise<Address>;
39
- /** Terminate the relayer backend and release resources. */
40
- terminate(): void;
41
- }
42
- //#endregion
43
- export { RelayerSDK as t };
44
- //# sourceMappingURL=relayer-sdk-DPqytEbO.d.ts.map
@@ -1,2 +0,0 @@
1
- async function e(e,r=2){let i;for(let a=0;a<=r;a++)try{return await e()}catch(e){if(i=e,a<r&&t(e)){await n(500*2**a);continue}throw e}throw i}function t(e){if(!(e instanceof Error))return!1;let t=e.message.toLowerCase();return t.includes(`timed out`)||t.includes(`timeout`)||t.includes(`econnreset`)||t.includes(`econnrefused`)||t.includes(`network`)||t.includes(`fetch failed`)||t.includes(`socket hang up`)||t.includes(`502`)||t.includes(`503`)||t.includes(`504`)}function n(e){return new Promise(t=>setTimeout(t,e))}const r={chainId:1,gatewayChainId:261131,relayerUrl:`https://relayer.mainnet.zama.org/v2`,network:`https://ethereum-rpc.publicnode.com`,aclContractAddress:`0xcA2E8f1F656CD25C01F05d0b243Ab1ecd4a8ffb6`,kmsContractAddress:`0x77627828a55156b04Ac0DC0eb30467f1a552BB03`,inputVerifierContractAddress:`0xCe0FC2e05CFff1B719EFF7169f7D80Af770c8EA2`,verifyingContractAddressDecryption:`0x0f6024a97684f7d90ddb0fAAD79cB15F2C888D24`,verifyingContractAddressInputVerification:`0xcB1bB072f38bdAF0F328CdEf1Fc6eDa1DF029287`,registryAddress:`0xeb5015fF021DB115aCe010f23F55C2591059bBA0`},i={chainId:11155111,gatewayChainId:10901,relayerUrl:`https://relayer.testnet.zama.org/v2`,network:`https://ethereum-sepolia-rpc.publicnode.com`,aclContractAddress:`0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D`,kmsContractAddress:`0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A`,inputVerifierContractAddress:`0xBBC1fFCdc7C316aAAd72E807D9b0272BE8F84DA0`,verifyingContractAddressDecryption:`0x5D8BD78e2ea6bbE41f26dFe9fdaEAa349e077478`,verifyingContractAddressInputVerification:`0x483b9dE06E4E4C7D35CCf5837A1668487406D955`,registryAddress:`0x2f0750Bbb0A246059d80e94c454586a7F27a128e`},a={chainId:31337,gatewayChainId:10901,relayerUrl:``,network:`http://127.0.0.1:8545`,aclContractAddress:`0x50157CFfD6bBFA2DECe204a89ec419c23ef5755D`,inputVerifierContractAddress:`0x36772142b74871f255CbD7A3e89B401d3e45825f`,kmsContractAddress:`0x901F8942346f7AB3a01F6D7613119Bca447Bb030`,verifyingContractAddressDecryption:`0x5ffdaAB0373E62E2ea2944776209aEf29E631A64`,verifyingContractAddressInputVerification:`0x812b06e1CDCE800494b79fFE4f925A504a9A9810`,registryAddress:void 0},o={[r.chainId]:r,[i.chainId]:i,[a.chainId]:a},s={name:`string`,version:`string`,chainId:`uint256`,verifyingContract:`address`,salt:`bytes32`};function c(e){return Object.keys(s).filter(t=>t in e).map(e=>({name:e,type:s[e]}))}export{c as a,i,a as n,e as o,r,o as t};
2
- //# sourceMappingURL=relayer-utils-BeoTNDM4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"relayer-utils-BeoTNDM4.js","names":[],"sources":["../../src/relayer/relayer-utils.ts"],"sourcesContent":["import type { FhevmInstanceConfig } from \"@zama-fhe/relayer-sdk/bundle\";\nimport type { Address } from \"viem\";\nimport type { EIP712TypedData } from \"./relayer-sdk.types\";\n\nconst MAX_RETRIES = 2;\nconst RETRY_BASE_MS = 500;\n\n/**\n * Retry an async operation with exponential backoff.\n * Only retries on transient errors (timeout, network). Does not retry user-facing errors.\n */\nexport async function withRetry<T>(fn: () => Promise<T>, retries = MAX_RETRIES): Promise<T> {\n let lastError: unknown;\n for (let attempt = 0; attempt <= retries; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error;\n if (attempt < retries && isTransientError(error)) {\n await sleep(RETRY_BASE_MS * 2 ** attempt);\n continue;\n }\n throw error;\n }\n }\n throw lastError;\n}\n\nfunction isTransientError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n const msg = error.message.toLowerCase();\n return (\n msg.includes(\"timed out\") ||\n msg.includes(\"timeout\") ||\n msg.includes(\"econnreset\") ||\n msg.includes(\"econnrefused\") ||\n msg.includes(\"network\") ||\n msg.includes(\"fetch failed\") ||\n msg.includes(\"socket hang up\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\")\n );\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Extends the base relayer config with the on-chain wrappers registry address.\n *\n * Used by `DefaultConfigs` and the `WrappersRegistry` class to\n * resolve the correct registry contract per chain.\n */\nexport interface ExtendedFhevmInstanceConfig extends FhevmInstanceConfig {\n /**\n * Address of the `ConfidentialTokenWrappersRegistry` contract.\n * `undefined` for chains where no registry is deployed (e.g. Hardhat).\n */\n registryAddress: Address | undefined;\n}\n\n/**\n * Mainnet network configuration (chainId 1).\n *\n * Contract addresses mirror `MainnetConfigV2` from `@zama-fhe/relayer-sdk`.\n * They are duplicated here because the `/bundle` export path only exposes\n * types at build time (runtime values require `/web` or `/node` which pull\n * in WASM). `satisfies ExtendedFhevmInstanceConfig` ensures structural drift\n * is caught at compile time.\n *\n * Includes `registryAddress` for the on-chain token wrappers registry.\n */\nexport const MainnetConfig = {\n chainId: 1,\n gatewayChainId: 261131,\n relayerUrl: \"https://relayer.mainnet.zama.org/v2\",\n network: \"https://ethereum-rpc.publicnode.com\",\n aclContractAddress: \"0xcA2E8f1F656CD25C01F05d0b243Ab1ecd4a8ffb6\",\n kmsContractAddress: \"0x77627828a55156b04Ac0DC0eb30467f1a552BB03\",\n inputVerifierContractAddress: \"0xCe0FC2e05CFff1B719EFF7169f7D80Af770c8EA2\",\n verifyingContractAddressDecryption: \"0x0f6024a97684f7d90ddb0fAAD79cB15F2C888D24\",\n verifyingContractAddressInputVerification: \"0xcB1bB072f38bdAF0F328CdEf1Fc6eDa1DF029287\",\n registryAddress: \"0xeb5015fF021DB115aCe010f23F55C2591059bBA0\",\n} as const satisfies ExtendedFhevmInstanceConfig;\n\n/**\n * Sepolia testnet network configuration (chainId 11155111).\n *\n * See {@link MainnetConfig} for why addresses are hardcoded.\n * Includes `registryAddress` for the on-chain token wrappers registry.\n */\nexport const SepoliaConfig = {\n chainId: 11155111,\n gatewayChainId: 10901,\n relayerUrl: \"https://relayer.testnet.zama.org/v2\",\n network: \"https://ethereum-sepolia-rpc.publicnode.com\",\n aclContractAddress: \"0xf0Ffdc93b7E186bC2f8CB3dAA75D86d1930A433D\",\n kmsContractAddress: \"0xbE0E383937d564D7FF0BC3b46c51f0bF8d5C311A\",\n inputVerifierContractAddress: \"0xBBC1fFCdc7C316aAAd72E807D9b0272BE8F84DA0\",\n verifyingContractAddressDecryption: \"0x5D8BD78e2ea6bbE41f26dFe9fdaEAa349e077478\",\n verifyingContractAddressInputVerification: \"0x483b9dE06E4E4C7D35CCf5837A1668487406D955\",\n registryAddress: \"0x2f0750Bbb0A246059d80e94c454586a7F27a128e\",\n} as const satisfies ExtendedFhevmInstanceConfig;\n\n/**\n * Hardhat local network configuration (chainId 31337).\n *\n * The addresses in this configuration must match those of your deployment.\n * Ensure that the executor address and other contract addresses correspond to\n * the contracts deployed on your Hardhat network.\n *\n * `registryAddress` is `undefined` — pass it explicitly via\n * `registryAddresses` when creating a `WrappersRegistry`.\n */\nexport const HardhatConfig = {\n chainId: 31337,\n gatewayChainId: 10901,\n relayerUrl: \"\",\n network: \"http://127.0.0.1:8545\",\n aclContractAddress: \"0x50157CFfD6bBFA2DECe204a89ec419c23ef5755D\",\n inputVerifierContractAddress: \"0x36772142b74871f255CbD7A3e89B401d3e45825f\",\n kmsContractAddress: \"0x901F8942346f7AB3a01F6D7613119Bca447Bb030\",\n verifyingContractAddressDecryption: \"0x5ffdaAB0373E62E2ea2944776209aEf29E631A64\",\n verifyingContractAddressInputVerification: \"0x812b06e1CDCE800494b79fFE4f925A504a9A9810\",\n registryAddress: undefined,\n} as const satisfies ExtendedFhevmInstanceConfig;\n\n/**\n * Built-in network configurations keyed by chain ID.\n *\n * Includes Mainnet (1), Sepolia (11155111), and Hardhat (31337).\n * Used by `RelayerWeb` to resolve transport configs and by\n * `WrappersRegistry` to resolve registry addresses.\n */\nexport const DefaultConfigs: Record<number, ExtendedFhevmInstanceConfig> = {\n [MainnetConfig.chainId]: MainnetConfig,\n [SepoliaConfig.chainId]: SepoliaConfig,\n [HardhatConfig.chainId]: HardhatConfig,\n} as const;\n\n/** EIP-712 domain field → Solidity type. Order follows the EIP-712 spec. */\nconst DOMAIN_FIELD_TYPES: Record<string, string> = {\n name: \"string\",\n version: \"string\",\n chainId: \"uint256\",\n verifyingContract: \"address\",\n salt: \"bytes32\",\n};\n\n/**\n * Build `EIP712Domain` type entries from the keys present in a domain object.\n * Order matches the EIP-712 spec (name → version → chainId → verifyingContract → salt).\n */\nexport function buildEIP712DomainType(\n domain: EIP712TypedData[\"domain\"],\n): { name: string; type: string }[] {\n return Object.keys(DOMAIN_FIELD_TYPES)\n .filter((k) => k in domain)\n .map((k) => ({ name: k, type: DOMAIN_FIELD_TYPES[k]! }));\n}\n"],"mappings":"AAWA,eAAsB,EAAa,EAAsB,EAAU,EAAyB,CAC1F,IAAI,EACJ,IAAK,IAAI,EAAU,EAAG,GAAW,EAAS,IACxC,GAAI,CACF,OAAO,MAAM,GAAI,OACV,EAAO,CAEd,GADA,EAAY,EACR,EAAU,GAAW,EAAiB,EAAM,CAAE,CAChD,MAAM,EAAM,IAAgB,GAAK,EAAQ,CACzC,SAEF,MAAM,EAGV,MAAM,EAGR,SAAS,EAAiB,EAAyB,CACjD,GAAI,EAAE,aAAiB,OACrB,MAAO,GAET,IAAM,EAAM,EAAM,QAAQ,aAAa,CACvC,OACE,EAAI,SAAS,YAAY,EACzB,EAAI,SAAS,UAAU,EACvB,EAAI,SAAS,aAAa,EAC1B,EAAI,SAAS,eAAe,EAC5B,EAAI,SAAS,UAAU,EACvB,EAAI,SAAS,eAAe,EAC5B,EAAI,SAAS,iBAAiB,EAC9B,EAAI,SAAS,MAAM,EACnB,EAAI,SAAS,MAAM,EACnB,EAAI,SAAS,MAAM,CAIvB,SAAS,EAAM,EAA2B,CACxC,OAAO,IAAI,QAAS,GAAY,WAAW,EAAS,EAAG,CAAC,CA4B1D,MAAa,EAAgB,CAC3B,QAAS,EACT,eAAgB,OAChB,WAAY,sCACZ,QAAS,sCACT,mBAAoB,6CACpB,mBAAoB,6CACpB,6BAA8B,6CAC9B,mCAAoC,6CACpC,0CAA2C,6CAC3C,gBAAiB,6CAClB,CAQY,EAAgB,CAC3B,QAAS,SACT,eAAgB,MAChB,WAAY,sCACZ,QAAS,8CACT,mBAAoB,6CACpB,mBAAoB,6CACpB,6BAA8B,6CAC9B,mCAAoC,6CACpC,0CAA2C,6CAC3C,gBAAiB,6CAClB,CAYY,EAAgB,CAC3B,QAAS,MACT,eAAgB,MAChB,WAAY,GACZ,QAAS,wBACT,mBAAoB,6CACpB,6BAA8B,6CAC9B,mBAAoB,6CACpB,mCAAoC,6CACpC,0CAA2C,6CAC3C,gBAAiB,IAAA,GAClB,CASY,EAA8D,EACxE,EAAc,SAAU,GACxB,EAAc,SAAU,GACxB,EAAc,SAAU,EAC1B,CAGK,EAA6C,CACjD,KAAM,SACN,QAAS,SACT,QAAS,UACT,kBAAmB,UACnB,KAAM,UACP,CAMD,SAAgB,EACd,EACkC,CAClC,OAAO,OAAO,KAAK,EAAmB,CACnC,OAAQ,GAAM,KAAK,EAAO,CAC1B,IAAK,IAAO,CAAE,KAAM,EAAG,KAAM,EAAmB,GAAK,EAAE"}
@@ -1,2 +0,0 @@
1
- import{toHex as e}from"viem";const t=[{inputs:[],stateMutability:`nonpayable`,type:`constructor`},{inputs:[{internalType:`address`,name:`target`,type:`address`}],name:`AddressEmptyCode`,type:`error`},{inputs:[],name:`CannotReceiveEthForTokenWrap`,type:`error`},{inputs:[{internalType:`address`,name:`implementation`,type:`address`}],name:`ERC1967InvalidImplementation`,type:`error`},{inputs:[],name:`ERC1967NonPayable`,type:`error`},{inputs:[{internalType:`uint256`,name:`requestId`,type:`uint256`}],name:`ERC7984InvalidGatewayRequest`,type:`error`},{inputs:[{internalType:`address`,name:`receiver`,type:`address`}],name:`ERC7984InvalidReceiver`,type:`error`},{inputs:[{internalType:`address`,name:`receiver`,type:`address`}],name:`ERC7984InvalidReceiver`,type:`error`},{inputs:[{internalType:`address`,name:`sender`,type:`address`}],name:`ERC7984InvalidSender`,type:`error`},{inputs:[],name:`ERC7984TotalSupplyOverflow`,type:`error`},{inputs:[{internalType:`address`,name:`caller`,type:`address`}],name:`ERC7984UnauthorizedCaller`,type:`error`},{inputs:[{internalType:`address`,name:`holder`,type:`address`},{internalType:`address`,name:`spender`,type:`address`}],name:`ERC7984UnauthorizedSpender`,type:`error`},{inputs:[{internalType:`euint64`,name:`amount`,type:`bytes32`},{internalType:`address`,name:`user`,type:`address`}],name:`ERC7984UnauthorizedUseOfEncryptedAmount`,type:`error`},{inputs:[{internalType:`address`,name:`holder`,type:`address`}],name:`ERC7984ZeroBalance`,type:`error`},{inputs:[],name:`FailedCall`,type:`error`},{inputs:[],name:`IncorrectEthAmount`,type:`error`},{inputs:[],name:`InvalidInitialization`,type:`error`},{inputs:[],name:`InvalidKMSSignatures`,type:`error`},{inputs:[{internalType:`bytes32`,name:`unwrapRequestId`,type:`bytes32`}],name:`InvalidUnwrapRequest`,type:`error`},{inputs:[],name:`NotInitializing`,type:`error`},{inputs:[{internalType:`address`,name:`owner`,type:`address`}],name:`OwnableInvalidOwner`,type:`error`},{inputs:[{internalType:`address`,name:`account`,type:`address`}],name:`OwnableUnauthorizedAccount`,type:`error`},{inputs:[],name:`ReentrancyGuardReentrantCall`,type:`error`},{inputs:[{internalType:`uint8`,name:`bits`,type:`uint8`},{internalType:`uint256`,name:`value`,type:`uint256`}],name:`SafeCastOverflowedUintDowncast`,type:`error`},{inputs:[{internalType:`address`,name:`token`,type:`address`}],name:`SafeERC20FailedOperation`,type:`error`},{inputs:[{internalType:`address`,name:`account`,type:`address`}],name:`SanctionedAddress`,type:`error`},{inputs:[{internalType:`bytes32`,name:`handle`,type:`bytes32`},{internalType:`address`,name:`sender`,type:`address`}],name:`SenderNotAllowedToUseHandle`,type:`error`},{inputs:[],name:`UUPSUnauthorizedCallContext`,type:`error`},{inputs:[{internalType:`bytes32`,name:`slot`,type:`bytes32`}],name:`UUPSUnsupportedProxiableUUID`,type:`error`},{inputs:[{internalType:`euint64`,name:`burntAmount`,type:`bytes32`},{internalType:`address`,name:`caller`,type:`address`},{internalType:`address`,name:`unwrapInitiator`,type:`address`}],name:`UnauthorizedFinalizeUnwrapCaller`,type:`error`},{inputs:[],name:`WrapperBalanceExceedsMaxSupply`,type:`error`},{inputs:[],name:`ZamaProtocolUnsupported`,type:`error`},{anonymous:!1,inputs:[{indexed:!0,internalType:`euint64`,name:`encryptedAmount`,type:`bytes32`},{indexed:!0,internalType:`address`,name:`requester`,type:`address`}],name:`AmountDiscloseRequested`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`euint64`,name:`encryptedAmount`,type:`bytes32`},{indexed:!1,internalType:`uint64`,name:`amount`,type:`uint64`}],name:`AmountDisclosed`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`from`,type:`address`},{indexed:!1,internalType:`euint64`,name:`amount`,type:`bytes32`},{indexed:!1,internalType:`uint256`,name:`txId`,type:`uint256`}],name:`BurnInfo`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`from`,type:`address`},{indexed:!0,internalType:`address`,name:`to`,type:`address`},{indexed:!0,internalType:`euint64`,name:`amount`,type:`bytes32`}],name:`ConfidentialTransfer`,type:`event`},{anonymous:!1,inputs:[{indexed:!1,internalType:`uint64`,name:`version`,type:`uint64`}],name:`Initialized`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`to`,type:`address`},{indexed:!1,internalType:`uint64`,name:`amount`,type:`uint64`},{indexed:!1,internalType:`uint256`,name:`txId`,type:`uint256`}],name:`MintInfo`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`holder`,type:`address`},{indexed:!0,internalType:`address`,name:`operator`,type:`address`},{indexed:!1,internalType:`uint48`,name:`until`,type:`uint48`}],name:`OperatorSet`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`previousOwner`,type:`address`},{indexed:!0,internalType:`address`,name:`newOwner`,type:`address`}],name:`OwnershipTransferStarted`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`previousOwner`,type:`address`},{indexed:!0,internalType:`address`,name:`newOwner`,type:`address`}],name:`OwnershipTransferred`,type:`event`},{anonymous:!1,inputs:[{indexed:!1,internalType:`bytes32[]`,name:`handlesList`,type:`bytes32[]`},{indexed:!1,internalType:`bytes`,name:`abiEncodedCleartexts`,type:`bytes`}],name:`PublicDecryptionVerified`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`oldRegulator`,type:`address`},{indexed:!0,internalType:`address`,name:`newRegulator`,type:`address`}],name:`TokenRegulatorUpdated`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`from`,type:`address`},{indexed:!0,internalType:`address`,name:`to`,type:`address`},{indexed:!1,internalType:`euint64`,name:`encryptedAmount`,type:`bytes32`},{indexed:!1,internalType:`uint256`,name:`txId`,type:`uint256`}],name:`TransferInfo`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`receiver`,type:`address`},{indexed:!0,internalType:`bytes32`,name:`unwrapRequestId`,type:`bytes32`},{indexed:!1,internalType:`euint64`,name:`encryptedAmount`,type:`bytes32`},{indexed:!1,internalType:`uint64`,name:`cleartextAmount`,type:`uint64`}],name:`UnwrapFinalized`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`receiver`,type:`address`},{indexed:!0,internalType:`bytes32`,name:`unwrapRequestId`,type:`bytes32`},{indexed:!1,internalType:`euint64`,name:`amount`,type:`bytes32`}],name:`UnwrapRequested`,type:`event`},{anonymous:!1,inputs:[{indexed:!1,internalType:`bool`,name:`returnVal`,type:`bool`},{indexed:!0,internalType:`uint256`,name:`requestId`,type:`uint256`},{indexed:!0,internalType:`uint256`,name:`txId`,type:`uint256`},{indexed:!0,internalType:`address`,name:`to`,type:`address`},{indexed:!1,internalType:`address`,name:`refund`,type:`address`},{indexed:!1,internalType:`euint64`,name:`requestedAmount`,type:`bytes32`},{indexed:!1,internalType:`euint64`,name:`burnAmount`,type:`bytes32`}],name:`UnwrappedStarted`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`implementation`,type:`address`}],name:`Upgraded`,type:`event`},{anonymous:!1,inputs:[{indexed:!0,internalType:`address`,name:`to`,type:`address`},{indexed:!1,internalType:`uint256`,name:`amountIn`,type:`uint256`}],name:`Wrapped`,type:`event`},{inputs:[],name:`UPGRADE_INTERFACE_VERSION`,outputs:[{internalType:`string`,name:``,type:`string`}],stateMutability:`view`,type:`function`},{inputs:[],name:`acceptOwnership`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`account`,type:`address`}],name:`confidentialBalanceOf`,outputs:[{internalType:`euint64`,name:``,type:`bytes32`}],stateMutability:`view`,type:`function`},{inputs:[],name:`confidentialProtocolId`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[],name:`confidentialTotalSupply`,outputs:[{internalType:`euint64`,name:``,type:`bytes32`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`address`,name:`to`,type:`address`},{internalType:`externalEuint64`,name:`encryptedAmount`,type:`bytes32`},{internalType:`bytes`,name:`inputProof`,type:`bytes`}],name:`confidentialTransfer`,outputs:[{internalType:`euint64`,name:``,type:`bytes32`}],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`to`,type:`address`},{internalType:`euint64`,name:`amount`,type:`bytes32`}],name:`confidentialTransfer`,outputs:[{internalType:`euint64`,name:``,type:`bytes32`}],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`to`,type:`address`},{internalType:`euint64`,name:`amount`,type:`bytes32`},{internalType:`bytes`,name:`data`,type:`bytes`}],name:`confidentialTransferAndCall`,outputs:[{internalType:`euint64`,name:`transferred`,type:`bytes32`}],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`to`,type:`address`},{internalType:`externalEuint64`,name:`encryptedAmount`,type:`bytes32`},{internalType:`bytes`,name:`inputProof`,type:`bytes`},{internalType:`bytes`,name:`data`,type:`bytes`}],name:`confidentialTransferAndCall`,outputs:[{internalType:`euint64`,name:`transferred`,type:`bytes32`}],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`from`,type:`address`},{internalType:`address`,name:`to`,type:`address`},{internalType:`externalEuint64`,name:`encryptedAmount`,type:`bytes32`},{internalType:`bytes`,name:`inputProof`,type:`bytes`}],name:`confidentialTransferFrom`,outputs:[{internalType:`euint64`,name:`transferred`,type:`bytes32`}],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`from`,type:`address`},{internalType:`address`,name:`to`,type:`address`},{internalType:`euint64`,name:`amount`,type:`bytes32`}],name:`confidentialTransferFrom`,outputs:[{internalType:`euint64`,name:`transferred`,type:`bytes32`}],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`from`,type:`address`},{internalType:`address`,name:`to`,type:`address`},{internalType:`externalEuint64`,name:`encryptedAmount`,type:`bytes32`},{internalType:`bytes`,name:`inputProof`,type:`bytes`},{internalType:`bytes`,name:`data`,type:`bytes`}],name:`confidentialTransferFromAndCall`,outputs:[{internalType:`euint64`,name:`transferred`,type:`bytes32`}],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`from`,type:`address`},{internalType:`address`,name:`to`,type:`address`},{internalType:`euint64`,name:`amount`,type:`bytes32`},{internalType:`bytes`,name:`data`,type:`bytes`}],name:`confidentialTransferFromAndCall`,outputs:[{internalType:`euint64`,name:`transferred`,type:`bytes32`}],stateMutability:`nonpayable`,type:`function`},{inputs:[],name:`contractURI`,outputs:[{internalType:`string`,name:``,type:`string`}],stateMutability:`view`,type:`function`},{inputs:[],name:`decimals`,outputs:[{internalType:`uint8`,name:``,type:`uint8`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`euint64`,name:`encryptedAmount`,type:`bytes32`},{internalType:`uint64`,name:`cleartextAmount`,type:`uint64`},{internalType:`bytes`,name:`decryptionProof`,type:`bytes`}],name:`discloseEncryptedAmount`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`bytes32`,name:`unwrapRequestId`,type:`bytes32`},{internalType:`uint64`,name:`burntAmountCleartext`,type:`uint64`},{internalType:`bytes`,name:`decryptionProof`,type:`bytes`}],name:`finalizeUnwrap`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`string`,name:`name_`,type:`string`},{internalType:`string`,name:`symbol_`,type:`string`},{internalType:`string`,name:`contractURI_`,type:`string`},{internalType:`contract IERC20`,name:`underlying_`,type:`address`},{internalType:`address`,name:`owner_`,type:`address`}],name:`initialize`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`holder`,type:`address`},{internalType:`address`,name:`spender`,type:`address`}],name:`isOperator`,outputs:[{internalType:`bool`,name:``,type:`bool`}],stateMutability:`view`,type:`function`},{inputs:[],name:`maxTotalSupply`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[],name:`name`,outputs:[{internalType:`string`,name:``,type:`string`}],stateMutability:`view`,type:`function`},{inputs:[],name:`nextTxId`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`address`,name:``,type:`address`},{internalType:`address`,name:`from`,type:`address`},{internalType:`uint256`,name:`amount`,type:`uint256`},{internalType:`bytes`,name:`data`,type:`bytes`}],name:`onTransferReceived`,outputs:[{internalType:`bytes4`,name:``,type:`bytes4`}],stateMutability:`nonpayable`,type:`function`},{inputs:[],name:`owner`,outputs:[{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[],name:`pendingOwner`,outputs:[{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[],name:`proxiableUUID`,outputs:[{internalType:`bytes32`,name:``,type:`bytes32`}],stateMutability:`view`,type:`function`},{inputs:[],name:`rate`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[],name:`regulator`,outputs:[{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[],name:`renounceOwnership`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`euint64`,name:`encryptedAmount`,type:`bytes32`}],name:`requestDiscloseEncryptedAmount`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[],name:`requestId`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`address`,name:`operator`,type:`address`},{internalType:`uint48`,name:`until`,type:`uint48`}],name:`setOperator`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`newRegulator`,type:`address`}],name:`setTokenRegulator`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`bytes4`,name:`interfaceId`,type:`bytes4`}],name:`supportsInterface`,outputs:[{internalType:`bool`,name:``,type:`bool`}],stateMutability:`view`,type:`function`},{inputs:[],name:`symbol`,outputs:[{internalType:`string`,name:``,type:`string`}],stateMutability:`view`,type:`function`},{inputs:[],name:`tokenRegulator`,outputs:[{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[],name:`inferredTotalSupply`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`address`,name:`newOwner`,type:`address`}],name:`transferOwnership`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[],name:`underlying`,outputs:[{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`address`,name:`from`,type:`address`},{internalType:`address`,name:`to`,type:`address`},{internalType:`externalEuint64`,name:`encryptedAmount`,type:`bytes32`},{internalType:`bytes`,name:`inputProof`,type:`bytes`}],name:`unwrap`,outputs:[{internalType:`bytes32`,name:``,type:`bytes32`}],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`from`,type:`address`},{internalType:`address`,name:`to`,type:`address`},{internalType:`euint64`,name:`amount`,type:`bytes32`}],name:`unwrap`,outputs:[{internalType:`bytes32`,name:``,type:`bytes32`}],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`bytes32`,name:`unwrapRequestId`,type:`bytes32`}],name:`unwrapAmount`,outputs:[{internalType:`euint64`,name:``,type:`bytes32`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`bytes32`,name:`unwrapRequestId`,type:`bytes32`}],name:`unwrapRequester`,outputs:[{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`address`,name:`from`,type:`address`},{internalType:`address`,name:`to`,type:`address`},{internalType:`euint64`,name:`amount`,type:`bytes32`},{internalType:`address`,name:`refund`,type:`address`},{internalType:`bytes`,name:`unwrapCallbackData`,type:`bytes`}],name:`unwrapAndCall`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`from`,type:`address`},{internalType:`address`,name:`to`,type:`address`},{internalType:`externalEuint64`,name:`encryptedAmount`,type:`bytes32`},{internalType:`bytes`,name:`inputProof`,type:`bytes`},{internalType:`address`,name:`refund`,type:`address`},{internalType:`bytes`,name:`unwrapCallbackData`,type:`bytes`}],name:`unwrapAndCall`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`from`,type:`address`},{internalType:`address`,name:`to`,type:`address`},{internalType:`euint64`,name:`amount`,type:`bytes32`},{internalType:`address`,name:`refund`,type:`address`}],name:`unwrapWithRefund`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`from`,type:`address`},{internalType:`address`,name:`to`,type:`address`},{internalType:`externalEuint64`,name:`encryptedAmount`,type:`bytes32`},{internalType:`bytes`,name:`inputProof`,type:`bytes`},{internalType:`address`,name:`refund`,type:`address`}],name:`unwrapWithRefund`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`newImplementation`,type:`address`},{internalType:`bytes`,name:`data`,type:`bytes`}],name:`upgradeToAndCall`,outputs:[],stateMutability:`payable`,type:`function`},{inputs:[{internalType:`address`,name:`to`,type:`address`},{internalType:`uint256`,name:`amount`,type:`uint256`}],name:`wrap`,outputs:[],stateMutability:`nonpayable`,type:`function`}],n=[{type:`constructor`,inputs:[],stateMutability:`nonpayable`},{type:`function`,name:`UPGRADE_INTERFACE_VERSION`,inputs:[],outputs:[{name:``,type:`string`,internalType:`string`}],stateMutability:`view`},{type:`function`,name:`acceptOwnership`,inputs:[],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`confidentialBalanceOf`,inputs:[{name:`account`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`bytes32`,internalType:`euint64`}],stateMutability:`view`},{type:`function`,name:`confidentialProtocolId`,inputs:[],outputs:[{name:``,type:`uint256`,internalType:`uint256`}],stateMutability:`view`},{type:`function`,name:`confidentialTotalSupply`,inputs:[],outputs:[{name:``,type:`bytes32`,internalType:`euint64`}],stateMutability:`view`},{type:`function`,name:`confidentialTransfer`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`encryptedAmount`,type:`bytes32`,internalType:`externalEuint64`},{name:`inputProof`,type:`bytes`,internalType:`bytes`}],outputs:[{name:``,type:`bytes32`,internalType:`euint64`}],stateMutability:`nonpayable`},{type:`function`,name:`confidentialTransfer`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`amount`,type:`bytes32`,internalType:`euint64`}],outputs:[{name:``,type:`bytes32`,internalType:`euint64`}],stateMutability:`nonpayable`},{type:`function`,name:`confidentialTransferAndCall`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`amount`,type:`bytes32`,internalType:`euint64`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:`transferred`,type:`bytes32`,internalType:`euint64`}],stateMutability:`nonpayable`},{type:`function`,name:`confidentialTransferAndCall`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`encryptedAmount`,type:`bytes32`,internalType:`externalEuint64`},{name:`inputProof`,type:`bytes`,internalType:`bytes`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:`transferred`,type:`bytes32`,internalType:`euint64`}],stateMutability:`nonpayable`},{type:`function`,name:`confidentialTransferFrom`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`encryptedAmount`,type:`bytes32`,internalType:`externalEuint64`},{name:`inputProof`,type:`bytes`,internalType:`bytes`}],outputs:[{name:`transferred`,type:`bytes32`,internalType:`euint64`}],stateMutability:`nonpayable`},{type:`function`,name:`confidentialTransferFrom`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`amount`,type:`bytes32`,internalType:`euint64`}],outputs:[{name:`transferred`,type:`bytes32`,internalType:`euint64`}],stateMutability:`nonpayable`},{type:`function`,name:`confidentialTransferFromAndCall`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`encryptedAmount`,type:`bytes32`,internalType:`externalEuint64`},{name:`inputProof`,type:`bytes`,internalType:`bytes`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:`transferred`,type:`bytes32`,internalType:`euint64`}],stateMutability:`nonpayable`},{type:`function`,name:`confidentialTransferFromAndCall`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`amount`,type:`bytes32`,internalType:`euint64`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:`transferred`,type:`bytes32`,internalType:`euint64`}],stateMutability:`nonpayable`},{type:`function`,name:`contractURI`,inputs:[],outputs:[{name:``,type:`string`,internalType:`string`}],stateMutability:`view`},{type:`function`,name:`decimals`,inputs:[],outputs:[{name:``,type:`uint8`,internalType:`uint8`}],stateMutability:`view`},{type:`function`,name:`discloseEncryptedAmount`,inputs:[{name:`encryptedAmount`,type:`bytes32`,internalType:`euint64`},{name:`cleartextAmount`,type:`uint64`,internalType:`uint64`},{name:`decryptionProof`,type:`bytes`,internalType:`bytes`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`finalizeUnwrap`,inputs:[{name:`unwrapRequestId`,type:`bytes32`,internalType:`bytes32`},{name:`burntAmountCleartext`,type:`uint64`,internalType:`uint64`},{name:`decryptionProof`,type:`bytes`,internalType:`bytes`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`initialize`,inputs:[{name:`name_`,type:`string`,internalType:`string`},{name:`symbol_`,type:`string`,internalType:`string`},{name:`contractURI_`,type:`string`,internalType:`string`},{name:`underlying_`,type:`address`,internalType:`contract IERC20`},{name:`owner_`,type:`address`,internalType:`address`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`isOperator`,inputs:[{name:`holder`,type:`address`,internalType:`address`},{name:`spender`,type:`address`,internalType:`address`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`maxTotalSupply`,inputs:[],outputs:[{name:``,type:`uint256`,internalType:`uint256`}],stateMutability:`view`},{type:`function`,name:`name`,inputs:[],outputs:[{name:``,type:`string`,internalType:`string`}],stateMutability:`view`},{type:`function`,name:`onTransferReceived`,inputs:[{name:``,type:`address`,internalType:`address`},{name:`from`,type:`address`,internalType:`address`},{name:`amount`,type:`uint256`,internalType:`uint256`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[{name:``,type:`bytes4`,internalType:`bytes4`}],stateMutability:`nonpayable`},{type:`function`,name:`owner`,inputs:[],outputs:[{name:``,type:`address`,internalType:`address`}],stateMutability:`view`},{type:`function`,name:`pendingOwner`,inputs:[],outputs:[{name:``,type:`address`,internalType:`address`}],stateMutability:`view`},{type:`function`,name:`proxiableUUID`,inputs:[],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`view`},{type:`function`,name:`rate`,inputs:[],outputs:[{name:``,type:`uint256`,internalType:`uint256`}],stateMutability:`view`},{type:`function`,name:`renounceOwnership`,inputs:[],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`requestDiscloseEncryptedAmount`,inputs:[{name:`encryptedAmount`,type:`bytes32`,internalType:`euint64`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`setOperator`,inputs:[{name:`operator`,type:`address`,internalType:`address`},{name:`until`,type:`uint48`,internalType:`uint48`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`supportsInterface`,inputs:[{name:`interfaceId`,type:`bytes4`,internalType:`bytes4`}],outputs:[{name:``,type:`bool`,internalType:`bool`}],stateMutability:`view`},{type:`function`,name:`symbol`,inputs:[],outputs:[{name:``,type:`string`,internalType:`string`}],stateMutability:`view`},{type:`function`,name:`inferredTotalSupply`,inputs:[],outputs:[{name:``,type:`uint256`,internalType:`uint256`}],stateMutability:`view`},{type:`function`,name:`transferOwnership`,inputs:[{name:`newOwner`,type:`address`,internalType:`address`}],outputs:[],stateMutability:`nonpayable`},{type:`function`,name:`underlying`,inputs:[],outputs:[{name:``,type:`address`,internalType:`address`}],stateMutability:`view`},{type:`function`,name:`unwrap`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`encryptedAmount`,type:`bytes32`,internalType:`externalEuint64`},{name:`inputProof`,type:`bytes`,internalType:`bytes`}],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`nonpayable`},{type:`function`,name:`unwrap`,inputs:[{name:`from`,type:`address`,internalType:`address`},{name:`to`,type:`address`,internalType:`address`},{name:`amount`,type:`bytes32`,internalType:`euint64`}],outputs:[{name:``,type:`bytes32`,internalType:`bytes32`}],stateMutability:`nonpayable`},{type:`function`,name:`unwrapAmount`,inputs:[{name:`unwrapRequestId`,type:`bytes32`,internalType:`bytes32`}],outputs:[{name:``,type:`bytes32`,internalType:`euint64`}],stateMutability:`view`},{type:`function`,name:`unwrapRequester`,inputs:[{name:`unwrapRequestId`,type:`bytes32`,internalType:`bytes32`}],outputs:[{name:``,type:`address`,internalType:`address`}],stateMutability:`view`},{type:`function`,name:`upgradeToAndCall`,inputs:[{name:`newImplementation`,type:`address`,internalType:`address`},{name:`data`,type:`bytes`,internalType:`bytes`}],outputs:[],stateMutability:`payable`},{type:`function`,name:`wrap`,inputs:[{name:`to`,type:`address`,internalType:`address`},{name:`amount`,type:`uint256`,internalType:`uint256`}],outputs:[],stateMutability:`nonpayable`},{type:`event`,name:`AmountDiscloseRequested`,inputs:[{name:`encryptedAmount`,type:`bytes32`,indexed:!0,internalType:`euint64`},{name:`requester`,type:`address`,indexed:!0,internalType:`address`}],anonymous:!1},{type:`event`,name:`AmountDisclosed`,inputs:[{name:`encryptedAmount`,type:`bytes32`,indexed:!0,internalType:`euint64`},{name:`amount`,type:`uint64`,indexed:!1,internalType:`uint64`}],anonymous:!1},{type:`event`,name:`ConfidentialTransfer`,inputs:[{name:`from`,type:`address`,indexed:!0,internalType:`address`},{name:`to`,type:`address`,indexed:!0,internalType:`address`},{name:`amount`,type:`bytes32`,indexed:!0,internalType:`euint64`}],anonymous:!1},{type:`event`,name:`Initialized`,inputs:[{name:`version`,type:`uint64`,indexed:!1,internalType:`uint64`}],anonymous:!1},{type:`event`,name:`OperatorSet`,inputs:[{name:`holder`,type:`address`,indexed:!0,internalType:`address`},{name:`operator`,type:`address`,indexed:!0,internalType:`address`},{name:`until`,type:`uint48`,indexed:!1,internalType:`uint48`}],anonymous:!1},{type:`event`,name:`OwnershipTransferStarted`,inputs:[{name:`previousOwner`,type:`address`,indexed:!0,internalType:`address`},{name:`newOwner`,type:`address`,indexed:!0,internalType:`address`}],anonymous:!1},{type:`event`,name:`OwnershipTransferred`,inputs:[{name:`previousOwner`,type:`address`,indexed:!0,internalType:`address`},{name:`newOwner`,type:`address`,indexed:!0,internalType:`address`}],anonymous:!1},{type:`event`,name:`PublicDecryptionVerified`,inputs:[{name:`handlesList`,type:`bytes32[]`,indexed:!1,internalType:`bytes32[]`},{name:`abiEncodedCleartexts`,type:`bytes`,indexed:!1,internalType:`bytes`}],anonymous:!1},{type:`event`,name:`UnwrapFinalized`,inputs:[{name:`receiver`,type:`address`,indexed:!0,internalType:`address`},{name:`unwrapRequestId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`encryptedAmount`,type:`bytes32`,indexed:!1,internalType:`euint64`},{name:`cleartextAmount`,type:`uint64`,indexed:!1,internalType:`uint64`}],anonymous:!1},{type:`event`,name:`UnwrapRequested`,inputs:[{name:`receiver`,type:`address`,indexed:!0,internalType:`address`},{name:`unwrapRequestId`,type:`bytes32`,indexed:!0,internalType:`bytes32`},{name:`amount`,type:`bytes32`,indexed:!1,internalType:`euint64`}],anonymous:!1},{type:`event`,name:`Upgraded`,inputs:[{name:`implementation`,type:`address`,indexed:!0,internalType:`address`}],anonymous:!1},{type:`error`,name:`AddressEmptyCode`,inputs:[{name:`target`,type:`address`,internalType:`address`}]},{type:`error`,name:`ERC1967InvalidImplementation`,inputs:[{name:`implementation`,type:`address`,internalType:`address`}]},{type:`error`,name:`ERC1967NonPayable`,inputs:[]},{type:`error`,name:`ERC7984InvalidGatewayRequest`,inputs:[{name:`requestId`,type:`uint256`,internalType:`uint256`}]},{type:`error`,name:`ERC7984InvalidReceiver`,inputs:[{name:`receiver`,type:`address`,internalType:`address`}]},{type:`error`,name:`ERC7984InvalidReceiver`,inputs:[{name:`receiver`,type:`address`,internalType:`address`}]},{type:`error`,name:`ERC7984InvalidSender`,inputs:[{name:`sender`,type:`address`,internalType:`address`}]},{type:`error`,name:`ERC7984TotalSupplyOverflow`,inputs:[]},{type:`error`,name:`ERC7984UnauthorizedCaller`,inputs:[{name:`caller`,type:`address`,internalType:`address`}]},{type:`error`,name:`ERC7984UnauthorizedSpender`,inputs:[{name:`holder`,type:`address`,internalType:`address`},{name:`spender`,type:`address`,internalType:`address`}]},{type:`error`,name:`ERC7984UnauthorizedUseOfEncryptedAmount`,inputs:[{name:`amount`,type:`bytes32`,internalType:`euint64`},{name:`user`,type:`address`,internalType:`address`}]},{type:`error`,name:`ERC7984ZeroBalance`,inputs:[{name:`holder`,type:`address`,internalType:`address`}]},{type:`error`,name:`FailedCall`,inputs:[]},{type:`error`,name:`InvalidInitialization`,inputs:[]},{type:`error`,name:`InvalidKMSSignatures`,inputs:[]},{type:`error`,name:`InvalidUnwrapRequest`,inputs:[{name:`unwrapRequestId`,type:`bytes32`,internalType:`bytes32`}]},{type:`error`,name:`NotInitializing`,inputs:[]},{type:`error`,name:`OwnableInvalidOwner`,inputs:[{name:`owner`,type:`address`,internalType:`address`}]},{type:`error`,name:`OwnableUnauthorizedAccount`,inputs:[{name:`account`,type:`address`,internalType:`address`}]},{type:`error`,name:`SafeCastOverflowedUintDowncast`,inputs:[{name:`bits`,type:`uint8`,internalType:`uint8`},{name:`value`,type:`uint256`,internalType:`uint256`}]},{type:`error`,name:`SafeERC20FailedOperation`,inputs:[{name:`token`,type:`address`,internalType:`address`}]},{type:`error`,name:`SenderNotAllowedToUseHandle`,inputs:[{name:`handle`,type:`bytes32`,internalType:`bytes32`},{name:`sender`,type:`address`,internalType:`address`}]},{type:`error`,name:`UUPSUnauthorizedCallContext`,inputs:[]},{type:`error`,name:`UUPSUnsupportedProxiableUUID`,inputs:[{name:`slot`,type:`bytes32`,internalType:`bytes32`}]},{type:`error`,name:`ZamaProtocolUnsupported`,inputs:[]}];function r(e,t,r,i){return{address:e,abi:n,functionName:`finalizeUnwrap`,args:[t,r,i]}}function i(e){return{address:e,abi:n,functionName:`underlying`,args:[]}}function a(e){return{address:e,abi:n,functionName:`inferredTotalSupply`,args:[]}}function o(e,t,r){return{address:e,abi:n,functionName:`wrap`,args:[t,r]}}function s(e,n){return{address:e,abi:t,functionName:`confidentialBalanceOf`,args:[n]}}function c(n,r,i,a){return{address:n,abi:t,functionName:`confidentialTransfer`,args:[r,e(i),e(a)]}}function l(n,r,i,a,o){return{address:n,abi:t,functionName:`confidentialTransferFrom`,args:[r,i,e(a),e(o)]}}function u(e,n,r){return{address:e,abi:t,functionName:`isOperator`,args:[n,r]}}function d(e,n,r){return{address:e,abi:t,functionName:`setOperator`,args:[n,r??Math.floor(Date.now()/1e3)+3600]}}function f(n,r,i,a,o){return{address:n,abi:t,functionName:`unwrap`,args:[r,i,e(a),e(o)]}}function p(e,n,r,i){return{address:e,abi:t,functionName:`unwrap`,args:[n,r,i]}}function m(e){return{address:e,abi:t,functionName:`confidentialTotalSupply`,args:[]}}function h(e){return a(e)}function g(e){return{address:e,abi:t,functionName:`rate`,args:[]}}const _=[{inputs:[{internalType:`bytes4`,name:`interfaceId`,type:`bytes4`}],name:`supportsInterface`,outputs:[{internalType:`bool`,name:``,type:`bool`}],stateMutability:`view`,type:`function`}],v=`0x4958f2a4`,y=`0xf1f4c25a`;function b(e,t){return{address:e,abi:_,functionName:`supportsInterface`,args:[t]}}function x(e){return b(e,v)}function S(e){return b(e,y)}const C=[{inputs:[],name:`getTokenConfidentialTokenPairs`,outputs:[{components:[{internalType:`address`,name:`tokenAddress`,type:`address`},{internalType:`address`,name:`confidentialTokenAddress`,type:`address`},{internalType:`bool`,name:`isValid`,type:`bool`}],internalType:`struct ConfidentialTokenWrappersRegistry.TokenWrapperPair[]`,name:``,type:`tuple[]`}],stateMutability:`view`,type:`function`},{inputs:[],name:`getTokenConfidentialTokenPairsLength`,outputs:[{internalType:`uint256`,name:``,type:`uint256`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`uint256`,name:`fromIndex`,type:`uint256`},{internalType:`uint256`,name:`toIndex`,type:`uint256`}],name:`getTokenConfidentialTokenPairsSlice`,outputs:[{components:[{internalType:`address`,name:`tokenAddress`,type:`address`},{internalType:`address`,name:`confidentialTokenAddress`,type:`address`},{internalType:`bool`,name:`isValid`,type:`bool`}],internalType:`struct ConfidentialTokenWrappersRegistry.TokenWrapperPair[]`,name:``,type:`tuple[]`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`uint256`,name:`index`,type:`uint256`}],name:`getTokenConfidentialTokenPair`,outputs:[{components:[{internalType:`address`,name:`tokenAddress`,type:`address`},{internalType:`address`,name:`confidentialTokenAddress`,type:`address`},{internalType:`bool`,name:`isValid`,type:`bool`}],internalType:`struct ConfidentialTokenWrappersRegistry.TokenWrapperPair`,name:``,type:`tuple`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`address`,name:`tokenAddress`,type:`address`}],name:`getConfidentialTokenAddress`,outputs:[{internalType:`bool`,name:``,type:`bool`},{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`address`,name:`confidentialTokenAddress`,type:`address`}],name:`getTokenAddress`,outputs:[{internalType:`bool`,name:``,type:`bool`},{internalType:`address`,name:``,type:`address`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`address`,name:`confidentialTokenAddress`,type:`address`}],name:`isConfidentialTokenValid`,outputs:[{internalType:`bool`,name:``,type:`bool`}],stateMutability:`view`,type:`function`},{inputs:[{internalType:`address`,name:`initialOwner`,type:`address`}],name:`initialize`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`tokenAddress`,type:`address`},{internalType:`address`,name:`confidentialTokenAddress`,type:`address`}],name:`registerConfidentialToken`,outputs:[],stateMutability:`nonpayable`,type:`function`},{inputs:[{internalType:`address`,name:`confidentialTokenAddress`,type:`address`}],name:`revokeConfidentialToken`,outputs:[],stateMutability:`nonpayable`,type:`function`}];function w(e){return{address:e,abi:C,functionName:`getTokenConfidentialTokenPairs`,args:[]}}function T(e){return{address:e,abi:C,functionName:`getTokenConfidentialTokenPairsLength`,args:[]}}function E(e,t,n){return{address:e,abi:C,functionName:`getTokenConfidentialTokenPairsSlice`,args:[t,n]}}function D(e,t){return{address:e,abi:C,functionName:`getTokenConfidentialTokenPair`,args:[t]}}function O(e,t){return{address:e,abi:C,functionName:`getConfidentialTokenAddress`,args:[t]}}function k(e,t){return{address:e,abi:C,functionName:`getTokenAddress`,args:[t]}}function A(e,t){return{address:e,abi:C,functionName:`isConfidentialTokenValid`,args:[t]}}export{r as C,o as E,p as S,i as T,u as _,T as a,h as b,v as c,S as d,b as f,l as g,c as h,w as i,y as l,m,k as n,E as o,s as p,D as r,A as s,O as t,x as u,g as v,a as w,f as x,d as y};
2
- //# sourceMappingURL=wrappers-registry-ydyySM9g.js.map