@fhevm/sdk 1.0.0-alpha.1 → 1.0.0-alpha.3

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 (648) hide show
  1. package/_cjs/core/_version.js +1 -1
  2. package/_cjs/core/actions/base/fetchVerifiedInputProof.js +1 -1
  3. package/_cjs/core/actions/base/fetchVerifiedInputProof.js.map +1 -1
  4. package/_cjs/core/actions/base/signDecryptionPermit.js.map +1 -1
  5. package/_cjs/core/actions/chain/index.js +5 -5
  6. package/_cjs/core/actions/chain/index.js.map +1 -1
  7. package/_cjs/core/actions/chain/parseSignedDecryptionPermit.js +2 -3
  8. package/_cjs/core/actions/chain/parseSignedDecryptionPermit.js.map +1 -1
  9. package/_cjs/core/actions/chain/parseTransportKeypair.js +1 -2
  10. package/_cjs/core/actions/chain/parseTransportKeypair.js.map +1 -1
  11. package/_cjs/core/actions/decrypt/decryptValue.js +4 -1
  12. package/_cjs/core/actions/decrypt/decryptValue.js.map +1 -1
  13. package/_cjs/core/actions/decrypt/decryptValues.js +4 -1
  14. package/_cjs/core/actions/decrypt/decryptValues.js.map +1 -1
  15. package/_cjs/core/actions/decrypt/decryptValuesFromPairs.js +4 -1
  16. package/_cjs/core/actions/decrypt/decryptValuesFromPairs.js.map +1 -1
  17. package/_cjs/core/actions/decrypt/index.js.map +1 -1
  18. package/_cjs/core/actions/host/getUserDecryptionDelegationExpirationDate.js +12 -14
  19. package/_cjs/core/actions/host/getUserDecryptionDelegationExpirationDate.js.map +1 -1
  20. package/_cjs/core/base/bytes.js +8 -0
  21. package/_cjs/core/base/bytes.js.map +1 -1
  22. package/_cjs/core/base/sign.js +50 -0
  23. package/_cjs/core/base/sign.js.map +1 -0
  24. package/_cjs/core/base/typedValue.js +17 -0
  25. package/_cjs/core/base/typedValue.js.map +1 -1
  26. package/_cjs/core/base/uint.js +29 -0
  27. package/_cjs/core/base/uint.js.map +1 -1
  28. package/_cjs/core/clients/decorators/decrypt.js +3 -3
  29. package/_cjs/core/clients/decorators/decrypt.js.map +1 -1
  30. package/_cjs/core/coprocessor/ZkProof-p.js +17 -11
  31. package/_cjs/core/coprocessor/ZkProof-p.js.map +1 -1
  32. package/_cjs/core/coprocessor/ZkProofBuilder-p.js +6 -4
  33. package/_cjs/core/coprocessor/ZkProofBuilder-p.js.map +1 -1
  34. package/_cjs/core/coprocessor/encrypt.js +1 -3
  35. package/_cjs/core/coprocessor/encrypt.js.map +1 -1
  36. package/_cjs/core/coprocessor/fetchVerifiedInputProof.js +3 -4
  37. package/_cjs/core/coprocessor/fetchVerifiedInputProof.js.map +1 -1
  38. package/_cjs/core/handle/FheType.js +5 -2
  39. package/_cjs/core/handle/FheType.js.map +1 -1
  40. package/_cjs/core/host-contracts/KmsSignersContext-p.js +1 -1
  41. package/_cjs/core/host-contracts/KmsSignersContext-p.js.map +1 -1
  42. package/_cjs/core/host-contracts/checkDelegation.js +74 -0
  43. package/_cjs/core/host-contracts/checkDelegation.js.map +1 -0
  44. package/_cjs/core/host-contracts/getUserDecryptionDelegationExpirationDate.js +21 -0
  45. package/_cjs/core/host-contracts/getUserDecryptionDelegationExpirationDate.js.map +1 -0
  46. package/_cjs/core/host-contracts/isHandleDelegatedForUserDecryption-p.js +33 -0
  47. package/_cjs/core/host-contracts/isHandleDelegatedForUserDecryption-p.js.map +1 -0
  48. package/_cjs/core/host-contracts/persistAllowed.js +1 -1
  49. package/_cjs/core/host-contracts/persistAllowed.js.map +1 -1
  50. package/_cjs/core/kms/fetchKmsSignedcryptedShares-p.js +18 -8
  51. package/_cjs/core/kms/fetchKmsSignedcryptedShares-p.js.map +1 -1
  52. package/_cjs/core/kms/publicDecrypt.js +1 -4
  53. package/_cjs/core/kms/publicDecrypt.js.map +1 -1
  54. package/_cjs/core/modules/decrypt/mock.js +93 -10
  55. package/_cjs/core/modules/decrypt/mock.js.map +1 -1
  56. package/_cjs/core/modules/encrypt/mock.js +142 -12
  57. package/_cjs/core/modules/encrypt/mock.js.map +1 -1
  58. package/_cjs/core/modules/encrypt/module/api-p.js +7 -2
  59. package/_cjs/core/modules/encrypt/module/api-p.js.map +1 -1
  60. package/_cjs/core/modules/ethereum/types-ct.js +3 -0
  61. package/_cjs/core/modules/ethereum/types-ct.js.map +1 -0
  62. package/_cjs/core/modules/relayer/cleartext/fetchCoprocessorSignatures.js +68 -0
  63. package/_cjs/core/modules/relayer/cleartext/fetchCoprocessorSignatures.js.map +1 -0
  64. package/_cjs/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.js +119 -0
  65. package/_cjs/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.js.map +1 -0
  66. package/_cjs/core/modules/relayer/cleartext/fetchPublicDecrypt.js +52 -0
  67. package/_cjs/core/modules/relayer/cleartext/fetchPublicDecrypt.js.map +1 -0
  68. package/_cjs/core/modules/relayer/cleartext/fetchUserDecrypt.js +117 -0
  69. package/_cjs/core/modules/relayer/cleartext/fetchUserDecrypt.js.map +1 -0
  70. package/_cjs/core/modules/relayer/cleartext/mock.js +40 -0
  71. package/_cjs/core/modules/relayer/cleartext/mock.js.map +1 -0
  72. package/_cjs/core/modules/relayer/cleartext/signers.js +34 -0
  73. package/_cjs/core/modules/relayer/cleartext/signers.js.map +1 -0
  74. package/_cjs/core/modules/relayer/module/fetchCoprocessorSignatures.js +2 -2
  75. package/_cjs/core/modules/relayer/module/fetchCoprocessorSignatures.js.map +1 -1
  76. package/_cjs/core/modules/relayer/module/fetchDelegatedUserDecrypt.js +1 -1
  77. package/_cjs/core/modules/relayer/module/fetchDelegatedUserDecrypt.js.map +1 -1
  78. package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js +1 -1
  79. package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
  80. package/_cjs/core/modules/relayer/module/fetchUserDecrypt.js +1 -1
  81. package/_cjs/core/modules/relayer/module/fetchUserDecrypt.js.map +1 -1
  82. package/_cjs/core/modules/relayer/utils.js +16 -0
  83. package/_cjs/core/modules/relayer/utils.js.map +1 -0
  84. package/_cjs/ethers/cleartext/createFhevmCleartextBaseClient.js +17 -0
  85. package/_cjs/ethers/cleartext/createFhevmCleartextBaseClient.js.map +1 -0
  86. package/_cjs/ethers/cleartext/createFhevmCleartextClient.js +11 -0
  87. package/_cjs/ethers/cleartext/createFhevmCleartextClient.js.map +1 -0
  88. package/_cjs/ethers/cleartext/createFhevmCleartextDecryptClient.js +10 -0
  89. package/_cjs/ethers/cleartext/createFhevmCleartextDecryptClient.js.map +1 -0
  90. package/_cjs/ethers/cleartext/createFhevmCleartextEncryptClient.js +10 -0
  91. package/_cjs/ethers/cleartext/createFhevmCleartextEncryptClient.js.map +1 -0
  92. package/_cjs/ethers/cleartext/decorators/decrypt.js +9 -0
  93. package/_cjs/ethers/cleartext/decorators/decrypt.js.map +1 -0
  94. package/_cjs/ethers/cleartext/decorators/encrypt.js +9 -0
  95. package/_cjs/ethers/cleartext/decorators/encrypt.js.map +1 -0
  96. package/_cjs/ethers/cleartext/index.js +12 -0
  97. package/_cjs/ethers/cleartext/index.js.map +1 -0
  98. package/_cjs/ethers/clients/createFhevmBaseClient.js +2 -1
  99. package/_cjs/ethers/clients/createFhevmBaseClient.js.map +1 -1
  100. package/_cjs/ethers/clients/createFhevmClient.js +2 -2
  101. package/_cjs/ethers/clients/createFhevmClient.js.map +1 -1
  102. package/_cjs/ethers/clients/createFhevmDecryptClient.js +1 -1
  103. package/_cjs/ethers/clients/createFhevmDecryptClient.js.map +1 -1
  104. package/_cjs/ethers/clients/createFhevmEncryptClient.js +1 -1
  105. package/_cjs/ethers/clients/createFhevmEncryptClient.js.map +1 -1
  106. package/_cjs/{viem → ethers/clients}/decorators/decrypt.js +2 -2
  107. package/_cjs/ethers/clients/decorators/decrypt.js.map +1 -0
  108. package/_cjs/ethers/{decorators → clients/decorators}/encrypt.js +2 -2
  109. package/_cjs/ethers/clients/decorators/encrypt.js.map +1 -0
  110. package/_cjs/ethers/index.js +4 -3
  111. package/_cjs/ethers/index.js.map +1 -1
  112. package/_cjs/ethers/internal/config.js +32 -0
  113. package/_cjs/ethers/internal/config.js.map +1 -0
  114. package/_cjs/ethers/internal/ethereum-ct.js +42 -0
  115. package/_cjs/ethers/internal/ethereum-ct.js.map +1 -0
  116. package/_cjs/ethers/internal/ethers-p.js +0 -32
  117. package/_cjs/ethers/internal/ethers-p.js.map +1 -1
  118. package/_cjs/ethers/internal/runtime-ct.js +22 -0
  119. package/_cjs/ethers/internal/runtime-ct.js.map +1 -0
  120. package/_cjs/ethers/internal/runtime.js +22 -0
  121. package/_cjs/ethers/internal/runtime.js.map +1 -0
  122. package/_cjs/ethers/runtime/initFhevmDecryptRuntime.js +3 -2
  123. package/_cjs/ethers/runtime/initFhevmDecryptRuntime.js.map +1 -1
  124. package/_cjs/ethers/runtime/initFhevmEncryptRuntime.js +3 -2
  125. package/_cjs/ethers/runtime/initFhevmEncryptRuntime.js.map +1 -1
  126. package/_cjs/ethers/runtime/initFhevmRuntime.js +3 -2
  127. package/_cjs/ethers/runtime/initFhevmRuntime.js.map +1 -1
  128. package/_cjs/index.js +2 -0
  129. package/_cjs/index.js.map +1 -0
  130. package/_cjs/viem/cleartext/createFhevmCleartextBaseClient.js +17 -0
  131. package/_cjs/viem/cleartext/createFhevmCleartextBaseClient.js.map +1 -0
  132. package/_cjs/viem/cleartext/createFhevmCleartextClient.js +11 -0
  133. package/_cjs/viem/cleartext/createFhevmCleartextClient.js.map +1 -0
  134. package/_cjs/viem/cleartext/createFhevmCleartextDecryptClient.js +10 -0
  135. package/_cjs/viem/cleartext/createFhevmCleartextDecryptClient.js.map +1 -0
  136. package/_cjs/viem/cleartext/createFhevmCleartextEncryptClient.js +10 -0
  137. package/_cjs/viem/cleartext/createFhevmCleartextEncryptClient.js.map +1 -0
  138. package/_cjs/viem/cleartext/decorators/decrypt.js +9 -0
  139. package/_cjs/viem/cleartext/decorators/decrypt.js.map +1 -0
  140. package/_cjs/viem/cleartext/decorators/encrypt.js +9 -0
  141. package/_cjs/viem/cleartext/decorators/encrypt.js.map +1 -0
  142. package/_cjs/viem/cleartext/index.js +12 -0
  143. package/_cjs/viem/cleartext/index.js.map +1 -0
  144. package/_cjs/viem/clients/createFhevmBaseClient.js +2 -1
  145. package/_cjs/viem/clients/createFhevmBaseClient.js.map +1 -1
  146. package/_cjs/viem/clients/createFhevmClient.js +2 -2
  147. package/_cjs/viem/clients/createFhevmClient.js.map +1 -1
  148. package/_cjs/viem/clients/createFhevmDecryptClient.js +1 -1
  149. package/_cjs/viem/clients/createFhevmDecryptClient.js.map +1 -1
  150. package/_cjs/viem/clients/createFhevmEncryptClient.js +1 -1
  151. package/_cjs/viem/clients/createFhevmEncryptClient.js.map +1 -1
  152. package/_cjs/{ethers → viem/clients}/decorators/decrypt.js +2 -2
  153. package/_cjs/viem/clients/decorators/decrypt.js.map +1 -0
  154. package/_cjs/viem/{decorators → clients/decorators}/encrypt.js +2 -2
  155. package/_cjs/viem/clients/decorators/encrypt.js.map +1 -0
  156. package/_cjs/viem/index.js +6 -5
  157. package/_cjs/viem/index.js.map +1 -1
  158. package/_cjs/viem/internal/config.js +32 -0
  159. package/_cjs/viem/internal/config.js.map +1 -0
  160. package/_cjs/viem/internal/ethereum-ct.js +42 -0
  161. package/_cjs/viem/internal/ethereum-ct.js.map +1 -0
  162. package/_cjs/viem/internal/runtime-ct.js +22 -0
  163. package/_cjs/viem/internal/runtime-ct.js.map +1 -0
  164. package/_cjs/viem/internal/runtime.js +22 -0
  165. package/_cjs/viem/internal/runtime.js.map +1 -0
  166. package/_cjs/viem/internal/viem-p.js +0 -32
  167. package/_cjs/viem/internal/viem-p.js.map +1 -1
  168. package/_cjs/viem/runtime/initFhevmDecryptRuntime.js +2 -1
  169. package/_cjs/viem/runtime/initFhevmDecryptRuntime.js.map +1 -1
  170. package/_cjs/viem/runtime/initFhevmEncryptRuntime.js +2 -1
  171. package/_cjs/viem/runtime/initFhevmEncryptRuntime.js.map +1 -1
  172. package/_cjs/viem/runtime/initFhevmRuntime.js +2 -1
  173. package/_cjs/viem/runtime/initFhevmRuntime.js.map +1 -1
  174. package/_cjs/wasm/tfhe/startWorkers.v1.5.3.js +279 -426
  175. package/_cjs/wasm/tfhe/startWorkers.v1.5.3.js.map +7 -0
  176. package/_cjs/wasm/tfhe/tfhe.v1.5.3.js +2779 -3032
  177. package/_cjs/wasm/tfhe/tfhe.v1.5.3.js.map +7 -0
  178. package/_cjs/wasm/tfhe/tfhe_bg.v1.5.3.wasm.base64.js +29 -1
  179. package/_cjs/wasm/tfhe/tfhe_bg.v1.5.3.wasm.base64.js.map +7 -0
  180. package/_cjs/wasm/tkms/kms_lib.v0.13.10.js +1793 -1985
  181. package/_cjs/wasm/tkms/kms_lib.v0.13.10.js.map +7 -0
  182. package/_cjs/wasm/tkms/kms_lib_bg.v0.13.10.wasm.base64.js +29 -3
  183. package/_cjs/wasm/tkms/kms_lib_bg.v0.13.10.wasm.base64.js.map +7 -0
  184. package/_cjs/wasm/wasmBaseUrl.js +36 -14
  185. package/_cjs/wasm/wasmBaseUrl.js.map +7 -0
  186. package/_esm/core/_version.js +1 -1
  187. package/_esm/core/actions/base/fetchVerifiedInputProof.js +1 -1
  188. package/_esm/core/actions/base/fetchVerifiedInputProof.js.map +1 -1
  189. package/_esm/core/actions/base/signDecryptionPermit.js.map +1 -1
  190. package/_esm/core/actions/chain/index.js +4 -4
  191. package/_esm/core/actions/chain/index.js.map +1 -1
  192. package/_esm/core/actions/chain/parseSignedDecryptionPermit.js +2 -3
  193. package/_esm/core/actions/chain/parseSignedDecryptionPermit.js.map +1 -1
  194. package/_esm/core/actions/chain/parseTransportKeypair.js +1 -3
  195. package/_esm/core/actions/chain/parseTransportKeypair.js.map +1 -1
  196. package/_esm/core/actions/chain/serializeTransportKeypair.js +0 -1
  197. package/_esm/core/actions/chain/serializeTransportKeypair.js.map +1 -1
  198. package/_esm/core/actions/decrypt/decryptValue.js +5 -1
  199. package/_esm/core/actions/decrypt/decryptValue.js.map +1 -1
  200. package/_esm/core/actions/decrypt/decryptValues.js +5 -1
  201. package/_esm/core/actions/decrypt/decryptValues.js.map +1 -1
  202. package/_esm/core/actions/decrypt/decryptValuesFromPairs.js +5 -1
  203. package/_esm/core/actions/decrypt/decryptValuesFromPairs.js.map +1 -1
  204. package/_esm/core/actions/decrypt/index.js +2 -2
  205. package/_esm/core/actions/decrypt/index.js.map +1 -1
  206. package/_esm/core/actions/host/getUserDecryptionDelegationExpirationDate.js +13 -14
  207. package/_esm/core/actions/host/getUserDecryptionDelegationExpirationDate.js.map +1 -1
  208. package/_esm/core/base/bytes.js +7 -0
  209. package/_esm/core/base/bytes.js.map +1 -1
  210. package/_esm/core/base/sign.js +58 -0
  211. package/_esm/core/base/sign.js.map +1 -0
  212. package/_esm/core/base/typedValue.js +16 -0
  213. package/_esm/core/base/typedValue.js.map +1 -1
  214. package/_esm/core/base/uint.js +30 -0
  215. package/_esm/core/base/uint.js.map +1 -1
  216. package/_esm/core/clients/decorators/decrypt.js +3 -3
  217. package/_esm/core/clients/decorators/decrypt.js.map +1 -1
  218. package/_esm/core/coprocessor/InputProof-p.js +2 -2
  219. package/_esm/core/coprocessor/InputProof-p.js.map +1 -1
  220. package/_esm/core/coprocessor/ZkProof-p.js +19 -12
  221. package/_esm/core/coprocessor/ZkProof-p.js.map +1 -1
  222. package/_esm/core/coprocessor/ZkProofBuilder-p.js +7 -5
  223. package/_esm/core/coprocessor/ZkProofBuilder-p.js.map +1 -1
  224. package/_esm/core/coprocessor/encrypt.js +1 -3
  225. package/_esm/core/coprocessor/encrypt.js.map +1 -1
  226. package/_esm/core/coprocessor/fetchVerifiedInputProof.js +3 -4
  227. package/_esm/core/coprocessor/fetchVerifiedInputProof.js.map +1 -1
  228. package/_esm/core/handle/FheType.js +4 -2
  229. package/_esm/core/handle/FheType.js.map +1 -1
  230. package/_esm/core/host-contracts/KmsSignersContext-p.js +1 -1
  231. package/_esm/core/host-contracts/KmsSignersContext-p.js.map +1 -1
  232. package/_esm/core/host-contracts/checkDelegation.js +81 -0
  233. package/_esm/core/host-contracts/checkDelegation.js.map +1 -0
  234. package/_esm/core/host-contracts/getUserDecryptionDelegationExpirationDate.js +19 -0
  235. package/_esm/core/host-contracts/getUserDecryptionDelegationExpirationDate.js.map +1 -0
  236. package/_esm/core/host-contracts/isHandleDelegatedForUserDecryption-p.js +32 -0
  237. package/_esm/core/host-contracts/isHandleDelegatedForUserDecryption-p.js.map +1 -0
  238. package/_esm/core/host-contracts/persistAllowed.js +1 -1
  239. package/_esm/core/host-contracts/persistAllowed.js.map +1 -1
  240. package/_esm/core/kms/fetchKmsSignedcryptedShares-p.js +18 -8
  241. package/_esm/core/kms/fetchKmsSignedcryptedShares-p.js.map +1 -1
  242. package/_esm/core/kms/publicDecrypt.js +1 -4
  243. package/_esm/core/kms/publicDecrypt.js.map +1 -1
  244. package/_esm/core/modules/decrypt/mock.js +96 -10
  245. package/_esm/core/modules/decrypt/mock.js.map +1 -1
  246. package/_esm/core/modules/encrypt/mock.js +151 -12
  247. package/_esm/core/modules/encrypt/mock.js.map +1 -1
  248. package/_esm/core/modules/encrypt/module/api-p.js +7 -2
  249. package/_esm/core/modules/encrypt/module/api-p.js.map +1 -1
  250. package/_esm/core/modules/ethereum/types-ct.js +2 -0
  251. package/_esm/core/modules/ethereum/types-ct.js.map +1 -0
  252. package/_esm/core/modules/relayer/cleartext/fetchCoprocessorSignatures.js +75 -0
  253. package/_esm/core/modules/relayer/cleartext/fetchCoprocessorSignatures.js.map +1 -0
  254. package/_esm/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.js +121 -0
  255. package/_esm/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.js.map +1 -0
  256. package/_esm/core/modules/relayer/cleartext/fetchPublicDecrypt.js +52 -0
  257. package/_esm/core/modules/relayer/cleartext/fetchPublicDecrypt.js.map +1 -0
  258. package/_esm/core/modules/relayer/cleartext/fetchUserDecrypt.js +119 -0
  259. package/_esm/core/modules/relayer/cleartext/fetchUserDecrypt.js.map +1 -0
  260. package/_esm/core/modules/relayer/cleartext/mock.js +39 -0
  261. package/_esm/core/modules/relayer/cleartext/mock.js.map +1 -0
  262. package/_esm/core/modules/relayer/cleartext/signers.js +34 -0
  263. package/_esm/core/modules/relayer/cleartext/signers.js.map +1 -0
  264. package/_esm/core/modules/relayer/module/fetchCoprocessorSignatures.js +2 -2
  265. package/_esm/core/modules/relayer/module/fetchCoprocessorSignatures.js.map +1 -1
  266. package/_esm/core/modules/relayer/module/fetchDelegatedUserDecrypt.js +1 -1
  267. package/_esm/core/modules/relayer/module/fetchDelegatedUserDecrypt.js.map +1 -1
  268. package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js +1 -1
  269. package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
  270. package/_esm/core/modules/relayer/module/fetchUserDecrypt.js +1 -1
  271. package/_esm/core/modules/relayer/module/fetchUserDecrypt.js.map +1 -1
  272. package/_esm/core/modules/relayer/utils.js +13 -0
  273. package/_esm/core/modules/relayer/utils.js.map +1 -0
  274. package/_esm/ethers/cleartext/createFhevmCleartextBaseClient.js +15 -0
  275. package/_esm/ethers/cleartext/createFhevmCleartextBaseClient.js.map +1 -0
  276. package/_esm/ethers/cleartext/createFhevmCleartextClient.js +9 -0
  277. package/_esm/ethers/cleartext/createFhevmCleartextClient.js.map +1 -0
  278. package/_esm/ethers/cleartext/createFhevmCleartextDecryptClient.js +8 -0
  279. package/_esm/ethers/cleartext/createFhevmCleartextDecryptClient.js.map +1 -0
  280. package/_esm/ethers/cleartext/createFhevmCleartextEncryptClient.js +8 -0
  281. package/_esm/ethers/cleartext/createFhevmCleartextEncryptClient.js.map +1 -0
  282. package/_esm/ethers/cleartext/decorators/decrypt.js +7 -0
  283. package/_esm/ethers/cleartext/decorators/decrypt.js.map +1 -0
  284. package/_esm/ethers/cleartext/decorators/encrypt.js +7 -0
  285. package/_esm/ethers/cleartext/decorators/encrypt.js.map +1 -0
  286. package/_esm/ethers/cleartext/index.js +5 -0
  287. package/_esm/ethers/cleartext/index.js.map +1 -0
  288. package/_esm/ethers/clients/createFhevmBaseClient.js +2 -1
  289. package/_esm/ethers/clients/createFhevmBaseClient.js.map +1 -1
  290. package/_esm/ethers/clients/createFhevmClient.js +2 -2
  291. package/_esm/ethers/clients/createFhevmClient.js.map +1 -1
  292. package/_esm/ethers/clients/createFhevmDecryptClient.js +1 -1
  293. package/_esm/ethers/clients/createFhevmDecryptClient.js.map +1 -1
  294. package/_esm/ethers/clients/createFhevmEncryptClient.js +1 -1
  295. package/_esm/ethers/clients/createFhevmEncryptClient.js.map +1 -1
  296. package/_esm/ethers/clients/decorators/decrypt.js +7 -0
  297. package/_esm/ethers/clients/decorators/decrypt.js.map +1 -0
  298. package/_esm/ethers/clients/decorators/encrypt.js +7 -0
  299. package/_esm/ethers/clients/decorators/encrypt.js.map +1 -0
  300. package/_esm/ethers/index.js +1 -1
  301. package/_esm/ethers/index.js.map +1 -1
  302. package/_esm/ethers/internal/config.js +38 -0
  303. package/_esm/ethers/internal/config.js.map +1 -0
  304. package/_esm/ethers/internal/ethereum-ct.js +39 -0
  305. package/_esm/ethers/internal/ethereum-ct.js.map +1 -0
  306. package/_esm/ethers/internal/ethers-p.js +0 -43
  307. package/_esm/ethers/internal/ethers-p.js.map +1 -1
  308. package/_esm/ethers/internal/runtime-ct.js +21 -0
  309. package/_esm/ethers/internal/runtime-ct.js.map +1 -0
  310. package/_esm/ethers/internal/runtime.js +21 -0
  311. package/_esm/ethers/internal/runtime.js.map +1 -0
  312. package/_esm/ethers/runtime/initFhevmDecryptRuntime.js +2 -1
  313. package/_esm/ethers/runtime/initFhevmDecryptRuntime.js.map +1 -1
  314. package/_esm/ethers/runtime/initFhevmEncryptRuntime.js +2 -1
  315. package/_esm/ethers/runtime/initFhevmEncryptRuntime.js.map +1 -1
  316. package/_esm/ethers/runtime/initFhevmRuntime.js +2 -1
  317. package/_esm/ethers/runtime/initFhevmRuntime.js.map +1 -1
  318. package/_esm/index.js +2 -0
  319. package/_esm/index.js.map +1 -0
  320. package/_esm/viem/cleartext/createFhevmCleartextBaseClient.js +15 -0
  321. package/_esm/viem/cleartext/createFhevmCleartextBaseClient.js.map +1 -0
  322. package/_esm/viem/cleartext/createFhevmCleartextClient.js +9 -0
  323. package/_esm/viem/cleartext/createFhevmCleartextClient.js.map +1 -0
  324. package/_esm/viem/cleartext/createFhevmCleartextDecryptClient.js +8 -0
  325. package/_esm/viem/cleartext/createFhevmCleartextDecryptClient.js.map +1 -0
  326. package/_esm/viem/cleartext/createFhevmCleartextEncryptClient.js +8 -0
  327. package/_esm/viem/cleartext/createFhevmCleartextEncryptClient.js.map +1 -0
  328. package/_esm/viem/cleartext/decorators/decrypt.js +7 -0
  329. package/_esm/viem/cleartext/decorators/decrypt.js.map +1 -0
  330. package/_esm/viem/cleartext/decorators/encrypt.js +7 -0
  331. package/_esm/viem/cleartext/decorators/encrypt.js.map +1 -0
  332. package/_esm/viem/cleartext/index.js +5 -0
  333. package/_esm/viem/cleartext/index.js.map +1 -0
  334. package/_esm/viem/clients/createFhevmBaseClient.js +2 -1
  335. package/_esm/viem/clients/createFhevmBaseClient.js.map +1 -1
  336. package/_esm/viem/clients/createFhevmClient.js +2 -2
  337. package/_esm/viem/clients/createFhevmClient.js.map +1 -1
  338. package/_esm/viem/clients/createFhevmDecryptClient.js +1 -1
  339. package/_esm/viem/clients/createFhevmDecryptClient.js.map +1 -1
  340. package/_esm/viem/clients/createFhevmEncryptClient.js +1 -2
  341. package/_esm/viem/clients/createFhevmEncryptClient.js.map +1 -1
  342. package/_esm/viem/clients/decorators/decrypt.js +7 -0
  343. package/_esm/viem/clients/decorators/decrypt.js.map +1 -0
  344. package/_esm/viem/clients/decorators/encrypt.js +7 -0
  345. package/_esm/viem/clients/decorators/encrypt.js.map +1 -0
  346. package/_esm/viem/index.js +2 -2
  347. package/_esm/viem/index.js.map +1 -1
  348. package/_esm/viem/internal/config.js +38 -0
  349. package/_esm/viem/internal/config.js.map +1 -0
  350. package/_esm/viem/internal/ethereum-ct.js +39 -0
  351. package/_esm/viem/internal/ethereum-ct.js.map +1 -0
  352. package/_esm/viem/internal/runtime-ct.js +21 -0
  353. package/_esm/viem/internal/runtime-ct.js.map +1 -0
  354. package/_esm/viem/internal/runtime.js +21 -0
  355. package/_esm/viem/internal/runtime.js.map +1 -0
  356. package/_esm/viem/internal/viem-p.js +0 -43
  357. package/_esm/viem/internal/viem-p.js.map +1 -1
  358. package/_esm/viem/runtime/initFhevmDecryptRuntime.js +2 -1
  359. package/_esm/viem/runtime/initFhevmDecryptRuntime.js.map +1 -1
  360. package/_esm/viem/runtime/initFhevmEncryptRuntime.js +2 -1
  361. package/_esm/viem/runtime/initFhevmEncryptRuntime.js.map +1 -1
  362. package/_esm/viem/runtime/initFhevmRuntime.js +2 -1
  363. package/_esm/viem/runtime/initFhevmRuntime.js.map +1 -1
  364. package/_types/core/actions/base/signDecryptionPermit.d.ts.map +1 -1
  365. package/_types/core/actions/chain/index.d.ts +4 -4
  366. package/_types/core/actions/chain/index.d.ts.map +1 -1
  367. package/_types/core/actions/chain/parseSignedDecryptionPermit.d.ts +7 -2
  368. package/_types/core/actions/chain/parseSignedDecryptionPermit.d.ts.map +1 -1
  369. package/_types/core/actions/chain/parseTransportKeypair.d.ts +2 -2
  370. package/_types/core/actions/chain/parseTransportKeypair.d.ts.map +1 -1
  371. package/_types/core/actions/chain/verifyKmsDelegatedUserDecryptEip712.d.ts +1 -1
  372. package/_types/core/actions/chain/verifyKmsDelegatedUserDecryptEip712.d.ts.map +1 -1
  373. package/_types/core/actions/decrypt/decryptValue.d.ts +5 -13
  374. package/_types/core/actions/decrypt/decryptValue.d.ts.map +1 -1
  375. package/_types/core/actions/decrypt/decryptValues.d.ts +5 -13
  376. package/_types/core/actions/decrypt/decryptValues.d.ts.map +1 -1
  377. package/_types/core/actions/decrypt/decryptValuesFromPairs.d.ts +5 -13
  378. package/_types/core/actions/decrypt/decryptValuesFromPairs.d.ts.map +1 -1
  379. package/_types/core/actions/decrypt/index.d.ts +3 -3
  380. package/_types/core/actions/decrypt/index.d.ts.map +1 -1
  381. package/_types/core/actions/host/getUserDecryptionDelegationExpirationDate.d.ts +5 -2
  382. package/_types/core/actions/host/getUserDecryptionDelegationExpirationDate.d.ts.map +1 -1
  383. package/_types/core/base/bytes.d.ts +1 -0
  384. package/_types/core/base/bytes.d.ts.map +1 -1
  385. package/_types/core/base/sign.d.ts +10 -0
  386. package/_types/core/base/sign.d.ts.map +1 -0
  387. package/_types/core/base/typedValue.d.ts +2 -1
  388. package/_types/core/base/typedValue.d.ts.map +1 -1
  389. package/_types/core/base/uint.d.ts +3 -0
  390. package/_types/core/base/uint.d.ts.map +1 -1
  391. package/_types/core/clients/decorators/decrypt.d.ts +6 -15
  392. package/_types/core/clients/decorators/decrypt.d.ts.map +1 -1
  393. package/_types/core/coprocessor/ZkProof-p.d.ts +2 -2
  394. package/_types/core/coprocessor/ZkProof-p.d.ts.map +1 -1
  395. package/_types/core/coprocessor/ZkProofBuilder-p.d.ts +2 -1
  396. package/_types/core/coprocessor/ZkProofBuilder-p.d.ts.map +1 -1
  397. package/_types/core/coprocessor/encrypt.d.ts.map +1 -1
  398. package/_types/core/coprocessor/fetchVerifiedInputProof.d.ts +0 -2
  399. package/_types/core/coprocessor/fetchVerifiedInputProof.d.ts.map +1 -1
  400. package/_types/core/handle/FheType.d.ts +1 -0
  401. package/_types/core/handle/FheType.d.ts.map +1 -1
  402. package/_types/core/host-contracts/checkDelegation.d.ts +22 -0
  403. package/_types/core/host-contracts/checkDelegation.d.ts.map +1 -0
  404. package/_types/core/host-contracts/getUserDecryptionDelegationExpirationDate.d.ts +19 -0
  405. package/_types/core/host-contracts/getUserDecryptionDelegationExpirationDate.d.ts.map +1 -0
  406. package/_types/core/host-contracts/isHandleDelegatedForUserDecryption-p.d.ts +20 -0
  407. package/_types/core/host-contracts/isHandleDelegatedForUserDecryption-p.d.ts.map +1 -0
  408. package/_types/core/kms/fetchKmsSignedcryptedShares-p.d.ts.map +1 -1
  409. package/_types/core/kms/publicDecrypt.d.ts.map +1 -1
  410. package/_types/core/modules/decrypt/mock.d.ts +5 -5
  411. package/_types/core/modules/decrypt/mock.d.ts.map +1 -1
  412. package/_types/core/modules/encrypt/mock.d.ts +6 -6
  413. package/_types/core/modules/encrypt/mock.d.ts.map +1 -1
  414. package/_types/core/modules/encrypt/module/api-p.d.ts.map +1 -1
  415. package/_types/core/modules/encrypt/types.d.ts +6 -2
  416. package/_types/core/modules/encrypt/types.d.ts.map +1 -1
  417. package/_types/core/modules/ethereum/types-ct.d.ts +46 -0
  418. package/_types/core/modules/ethereum/types-ct.d.ts.map +1 -0
  419. package/_types/core/modules/relayer/cleartext/fetchCoprocessorSignatures.d.ts +3 -0
  420. package/_types/core/modules/relayer/cleartext/fetchCoprocessorSignatures.d.ts.map +1 -0
  421. package/_types/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.d.ts +3 -0
  422. package/_types/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.d.ts.map +1 -0
  423. package/_types/core/modules/relayer/cleartext/fetchPublicDecrypt.d.ts +3 -0
  424. package/_types/core/modules/relayer/cleartext/fetchPublicDecrypt.d.ts.map +1 -0
  425. package/_types/core/modules/relayer/cleartext/fetchUserDecrypt.d.ts +3 -0
  426. package/_types/core/modules/relayer/cleartext/fetchUserDecrypt.d.ts.map +1 -0
  427. package/_types/core/modules/relayer/cleartext/mock.d.ts +3 -0
  428. package/_types/core/modules/relayer/cleartext/mock.d.ts.map +1 -0
  429. package/_types/core/modules/relayer/cleartext/signers.d.ts +7 -0
  430. package/_types/core/modules/relayer/cleartext/signers.d.ts.map +1 -0
  431. package/_types/core/modules/relayer/module/fetchCoprocessorSignatures.d.ts +2 -2
  432. package/_types/core/modules/relayer/module/fetchCoprocessorSignatures.d.ts.map +1 -1
  433. package/_types/core/modules/relayer/module/fetchDelegatedUserDecrypt.d.ts +2 -2
  434. package/_types/core/modules/relayer/module/fetchDelegatedUserDecrypt.d.ts.map +1 -1
  435. package/_types/core/modules/relayer/module/fetchPublicDecrypt.d.ts +2 -2
  436. package/_types/core/modules/relayer/module/fetchPublicDecrypt.d.ts.map +1 -1
  437. package/_types/core/modules/relayer/module/fetchUserDecrypt.d.ts +2 -2
  438. package/_types/core/modules/relayer/module/fetchUserDecrypt.d.ts.map +1 -1
  439. package/_types/core/modules/relayer/types.d.ts +14 -5
  440. package/_types/core/modules/relayer/types.d.ts.map +1 -1
  441. package/_types/core/modules/relayer/utils.d.ts +4 -0
  442. package/_types/core/modules/relayer/utils.d.ts.map +1 -0
  443. package/_types/core/types/index.d.ts +1 -0
  444. package/_types/core/types/index.d.ts.map +1 -1
  445. package/_types/core/types/kms.d.ts +21 -0
  446. package/_types/core/types/kms.d.ts.map +1 -1
  447. package/_types/core/types/zkProof-p.d.ts +2 -1
  448. package/_types/core/types/zkProof-p.d.ts.map +1 -1
  449. package/_types/ethers/cleartext/createFhevmCleartextBaseClient.d.ts +11 -0
  450. package/_types/ethers/cleartext/createFhevmCleartextBaseClient.d.ts.map +1 -0
  451. package/_types/ethers/cleartext/createFhevmCleartextClient.d.ts +11 -0
  452. package/_types/ethers/cleartext/createFhevmCleartextClient.d.ts.map +1 -0
  453. package/_types/ethers/cleartext/createFhevmCleartextDecryptClient.d.ts +11 -0
  454. package/_types/ethers/cleartext/createFhevmCleartextDecryptClient.d.ts.map +1 -0
  455. package/_types/ethers/cleartext/createFhevmCleartextEncryptClient.d.ts +11 -0
  456. package/_types/ethers/cleartext/createFhevmCleartextEncryptClient.d.ts.map +1 -0
  457. package/_types/ethers/cleartext/decorators/decrypt.d.ts +6 -0
  458. package/_types/ethers/cleartext/decorators/decrypt.d.ts.map +1 -0
  459. package/_types/ethers/cleartext/decorators/encrypt.d.ts +6 -0
  460. package/_types/ethers/cleartext/decorators/encrypt.d.ts.map +1 -0
  461. package/_types/ethers/cleartext/index.d.ts +5 -0
  462. package/_types/ethers/cleartext/index.d.ts.map +1 -0
  463. package/_types/ethers/clients/createFhevmBaseClient.d.ts.map +1 -1
  464. package/_types/ethers/clients/decorators/decrypt.d.ts +6 -0
  465. package/_types/ethers/clients/decorators/decrypt.d.ts.map +1 -0
  466. package/_types/ethers/clients/decorators/encrypt.d.ts +6 -0
  467. package/_types/ethers/clients/decorators/encrypt.d.ts.map +1 -0
  468. package/_types/ethers/index.d.ts +1 -1
  469. package/_types/ethers/index.d.ts.map +1 -1
  470. package/_types/ethers/internal/config.d.ts +15 -0
  471. package/_types/ethers/internal/config.d.ts.map +1 -0
  472. package/_types/ethers/internal/ethereum-ct.d.ts +3 -0
  473. package/_types/ethers/internal/ethereum-ct.d.ts.map +1 -0
  474. package/_types/ethers/internal/ethers-p.d.ts +1 -13
  475. package/_types/ethers/internal/ethers-p.d.ts.map +1 -1
  476. package/_types/ethers/internal/runtime-ct.d.ts +3 -0
  477. package/_types/ethers/internal/runtime-ct.d.ts.map +1 -0
  478. package/_types/ethers/internal/runtime.d.ts +3 -0
  479. package/_types/ethers/internal/runtime.d.ts.map +1 -0
  480. package/_types/ethers/runtime/initFhevmDecryptRuntime.d.ts.map +1 -1
  481. package/_types/ethers/runtime/initFhevmEncryptRuntime.d.ts.map +1 -1
  482. package/_types/ethers/runtime/initFhevmRuntime.d.ts.map +1 -1
  483. package/_types/index.d.ts +2 -0
  484. package/_types/index.d.ts.map +1 -0
  485. package/_types/viem/cleartext/createFhevmCleartextBaseClient.d.ts +11 -0
  486. package/_types/viem/cleartext/createFhevmCleartextBaseClient.d.ts.map +1 -0
  487. package/_types/viem/cleartext/createFhevmCleartextClient.d.ts +11 -0
  488. package/_types/viem/cleartext/createFhevmCleartextClient.d.ts.map +1 -0
  489. package/_types/viem/cleartext/createFhevmCleartextDecryptClient.d.ts +11 -0
  490. package/_types/viem/cleartext/createFhevmCleartextDecryptClient.d.ts.map +1 -0
  491. package/_types/viem/cleartext/createFhevmCleartextEncryptClient.d.ts +11 -0
  492. package/_types/viem/cleartext/createFhevmCleartextEncryptClient.d.ts.map +1 -0
  493. package/_types/viem/cleartext/decorators/decrypt.d.ts +6 -0
  494. package/_types/viem/cleartext/decorators/decrypt.d.ts.map +1 -0
  495. package/_types/viem/cleartext/decorators/encrypt.d.ts +6 -0
  496. package/_types/viem/cleartext/decorators/encrypt.d.ts.map +1 -0
  497. package/_types/viem/cleartext/index.d.ts +5 -0
  498. package/_types/viem/cleartext/index.d.ts.map +1 -0
  499. package/_types/viem/clients/createFhevmBaseClient.d.ts.map +1 -1
  500. package/_types/viem/clients/decorators/decrypt.d.ts +6 -0
  501. package/_types/viem/clients/decorators/decrypt.d.ts.map +1 -0
  502. package/_types/viem/clients/decorators/encrypt.d.ts +6 -0
  503. package/_types/viem/clients/decorators/encrypt.d.ts.map +1 -0
  504. package/_types/viem/index.d.ts +2 -2
  505. package/_types/viem/index.d.ts.map +1 -1
  506. package/_types/viem/internal/config.d.ts +15 -0
  507. package/_types/viem/internal/config.d.ts.map +1 -0
  508. package/_types/viem/internal/ethereum-ct.d.ts +3 -0
  509. package/_types/viem/internal/ethereum-ct.d.ts.map +1 -0
  510. package/_types/viem/internal/runtime-ct.d.ts +3 -0
  511. package/_types/viem/internal/runtime-ct.d.ts.map +1 -0
  512. package/_types/viem/internal/runtime.d.ts +3 -0
  513. package/_types/viem/internal/runtime.d.ts.map +1 -0
  514. package/_types/viem/internal/viem-p.d.ts +1 -13
  515. package/_types/viem/internal/viem-p.d.ts.map +1 -1
  516. package/_types/viem/runtime/initFhevmDecryptRuntime.d.ts.map +1 -1
  517. package/_types/viem/runtime/initFhevmEncryptRuntime.d.ts.map +1 -1
  518. package/_types/viem/runtime/initFhevmRuntime.d.ts.map +1 -1
  519. package/core/_version.ts +1 -1
  520. package/core/actions/base/fetchVerifiedInputProof.ts +1 -1
  521. package/core/actions/base/signDecryptionPermit.ts +2 -0
  522. package/core/actions/chain/index.ts +11 -11
  523. package/core/actions/chain/parseSignedDecryptionPermit.ts +9 -6
  524. package/core/actions/chain/parseTransportKeypair.ts +3 -7
  525. package/core/actions/chain/serializeTransportKeypair.ts +0 -2
  526. package/core/actions/chain/verifyKmsDelegatedUserDecryptEip712.ts +1 -1
  527. package/core/actions/decrypt/decryptValue.ts +9 -28
  528. package/core/actions/decrypt/decryptValues.ts +9 -28
  529. package/core/actions/decrypt/decryptValuesFromPairs.ts +9 -28
  530. package/core/actions/decrypt/index.ts +3 -14
  531. package/core/actions/host/getUserDecryptionDelegationExpirationDate.ts +22 -18
  532. package/core/base/bytes.ts +8 -0
  533. package/core/base/sign.ts +75 -0
  534. package/core/base/typedValue.ts +18 -0
  535. package/core/base/uint.ts +32 -0
  536. package/core/clients/decorators/decrypt.ts +12 -28
  537. package/core/coprocessor/InputProof-p.ts +2 -2
  538. package/core/coprocessor/ZkProof-p.ts +21 -9
  539. package/core/coprocessor/ZkProofBuilder-p.ts +15 -8
  540. package/core/coprocessor/encrypt.ts +1 -3
  541. package/core/coprocessor/fetchVerifiedInputProof.ts +7 -13
  542. package/core/handle/FheType.ts +5 -2
  543. package/core/host-contracts/KmsSignersContext-p.ts +1 -1
  544. package/core/host-contracts/checkDelegation.ts +114 -0
  545. package/core/host-contracts/getUserDecryptionDelegationExpirationDate.ts +45 -0
  546. package/core/host-contracts/isHandleDelegatedForUserDecryption-p.ts +77 -0
  547. package/core/host-contracts/persistAllowed.ts +1 -1
  548. package/core/kms/fetchKmsSignedcryptedShares-p.ts +31 -29
  549. package/core/kms/publicDecrypt.ts +6 -12
  550. package/core/modules/decrypt/mock.ts +126 -13
  551. package/core/modules/encrypt/mock.ts +206 -12
  552. package/core/modules/encrypt/module/api-p.ts +7 -2
  553. package/core/modules/encrypt/types.ts +6 -2
  554. package/core/modules/ethereum/types-ct.ts +89 -0
  555. package/core/modules/relayer/cleartext/fetchCoprocessorSignatures.ts +94 -0
  556. package/core/modules/relayer/cleartext/fetchDelegatedUserDecrypt.ts +147 -0
  557. package/core/modules/relayer/cleartext/fetchPublicDecrypt.ts +67 -0
  558. package/core/modules/relayer/cleartext/fetchUserDecrypt.ts +141 -0
  559. package/core/modules/relayer/cleartext/mock.ts +54 -0
  560. package/core/modules/relayer/cleartext/signers.ts +52 -0
  561. package/core/modules/relayer/module/fetchCoprocessorSignatures.ts +4 -4
  562. package/core/modules/relayer/module/fetchDelegatedUserDecrypt.ts +3 -3
  563. package/core/modules/relayer/module/fetchPublicDecrypt.ts +3 -3
  564. package/core/modules/relayer/module/fetchUserDecrypt.ts +3 -3
  565. package/core/modules/relayer/types.ts +13 -5
  566. package/core/modules/relayer/utils.ts +17 -0
  567. package/core/types/index.ts +1 -0
  568. package/core/types/kms.ts +19 -0
  569. package/core/types/zkProof-p.ts +3 -1
  570. package/ethers/cleartext/createFhevmCleartextBaseClient.ts +25 -0
  571. package/ethers/cleartext/createFhevmCleartextClient.ts +20 -0
  572. package/ethers/cleartext/createFhevmCleartextDecryptClient.ts +18 -0
  573. package/ethers/cleartext/createFhevmCleartextEncryptClient.ts +19 -0
  574. package/ethers/cleartext/decorators/decrypt.ts +12 -0
  575. package/ethers/cleartext/decorators/encrypt.ts +12 -0
  576. package/ethers/cleartext/index.ts +4 -0
  577. package/ethers/cleartext/package.json +6 -0
  578. package/ethers/clients/createFhevmBaseClient.ts +2 -1
  579. package/ethers/clients/createFhevmClient.ts +2 -2
  580. package/ethers/clients/createFhevmDecryptClient.ts +1 -1
  581. package/ethers/clients/createFhevmEncryptClient.ts +1 -1
  582. package/ethers/clients/decorators/decrypt.ts +12 -0
  583. package/ethers/clients/decorators/encrypt.ts +12 -0
  584. package/ethers/index.ts +1 -1
  585. package/ethers/internal/config.ts +50 -0
  586. package/ethers/internal/ethereum-ct.ts +61 -0
  587. package/ethers/internal/ethers-p.ts +1 -56
  588. package/ethers/internal/runtime-ct.ts +28 -0
  589. package/ethers/internal/runtime.ts +28 -0
  590. package/ethers/runtime/initFhevmDecryptRuntime.ts +2 -1
  591. package/ethers/runtime/initFhevmEncryptRuntime.ts +2 -1
  592. package/ethers/runtime/initFhevmRuntime.ts +2 -1
  593. package/index.ts +0 -0
  594. package/package.json +14 -2
  595. package/viem/cleartext/createFhevmCleartextBaseClient.ts +28 -0
  596. package/viem/cleartext/createFhevmCleartextClient.ts +20 -0
  597. package/viem/cleartext/createFhevmCleartextDecryptClient.ts +21 -0
  598. package/viem/cleartext/createFhevmCleartextEncryptClient.ts +22 -0
  599. package/viem/cleartext/decorators/decrypt.ts +12 -0
  600. package/viem/cleartext/decorators/encrypt.ts +12 -0
  601. package/viem/cleartext/index.ts +4 -0
  602. package/viem/cleartext/package.json +6 -0
  603. package/viem/clients/createFhevmBaseClient.ts +2 -1
  604. package/viem/clients/createFhevmClient.ts +2 -2
  605. package/viem/clients/createFhevmDecryptClient.ts +1 -1
  606. package/viem/clients/createFhevmEncryptClient.ts +1 -3
  607. package/viem/clients/decorators/decrypt.ts +12 -0
  608. package/viem/clients/decorators/encrypt.ts +12 -0
  609. package/viem/index.ts +2 -2
  610. package/viem/internal/config.ts +50 -0
  611. package/viem/internal/ethereum-ct.ts +61 -0
  612. package/viem/internal/runtime-ct.ts +28 -0
  613. package/viem/internal/runtime.ts +28 -0
  614. package/viem/internal/viem-p.ts +1 -56
  615. package/viem/runtime/initFhevmDecryptRuntime.ts +2 -1
  616. package/viem/runtime/initFhevmEncryptRuntime.ts +2 -1
  617. package/viem/runtime/initFhevmRuntime.ts +2 -1
  618. package/_cjs/core/modules/relayer/mock.js +0 -29
  619. package/_cjs/core/modules/relayer/mock.js.map +0 -1
  620. package/_cjs/ethers/decorators/decrypt.js.map +0 -1
  621. package/_cjs/ethers/decorators/encrypt.js.map +0 -1
  622. package/_cjs/viem/decorators/decrypt.js.map +0 -1
  623. package/_cjs/viem/decorators/encrypt.js.map +0 -1
  624. package/_esm/core/modules/relayer/mock.js +0 -28
  625. package/_esm/core/modules/relayer/mock.js.map +0 -1
  626. package/_esm/ethers/decorators/decrypt.js +0 -7
  627. package/_esm/ethers/decorators/decrypt.js.map +0 -1
  628. package/_esm/ethers/decorators/encrypt.js +0 -7
  629. package/_esm/ethers/decorators/encrypt.js.map +0 -1
  630. package/_esm/viem/decorators/decrypt.js +0 -7
  631. package/_esm/viem/decorators/decrypt.js.map +0 -1
  632. package/_esm/viem/decorators/encrypt.js +0 -7
  633. package/_esm/viem/decorators/encrypt.js.map +0 -1
  634. package/_types/core/modules/relayer/mock.d.ts +0 -3
  635. package/_types/core/modules/relayer/mock.d.ts.map +0 -1
  636. package/_types/ethers/decorators/decrypt.d.ts +0 -6
  637. package/_types/ethers/decorators/decrypt.d.ts.map +0 -1
  638. package/_types/ethers/decorators/encrypt.d.ts +0 -6
  639. package/_types/ethers/decorators/encrypt.d.ts.map +0 -1
  640. package/_types/viem/decorators/decrypt.d.ts +0 -6
  641. package/_types/viem/decorators/decrypt.d.ts.map +0 -1
  642. package/_types/viem/decorators/encrypt.d.ts +0 -6
  643. package/_types/viem/decorators/encrypt.d.ts.map +0 -1
  644. package/core/modules/relayer/mock.ts +0 -47
  645. package/ethers/decorators/decrypt.ts +0 -12
  646. package/ethers/decorators/encrypt.ts +0 -12
  647. package/viem/decorators/decrypt.ts +0 -12
  648. package/viem/decorators/encrypt.ts +0 -12
@@ -1,4 +1,3 @@
1
- /* eslint-disable @typescript-eslint/unified-signatures */
2
1
  import type { Fhevm, FhevmBase, FhevmExtension, OptionalNativeClient } from '../../types/coreFhevmClient.js';
3
2
  import type { FhevmRuntime, WithDecrypt } from '../../types/coreFhevmRuntime.js';
4
3
  import type { FhevmChain } from '../../types/fhevmChain.js';
@@ -8,38 +7,29 @@ import { asFhevmClientWith, assertIsFhevmClientWith } from '../../runtime/CoreFh
8
7
  import { generateTransportKeypair } from '../../kms/TransportKeypair-p.js';
9
8
  import {
10
9
  decryptValue,
11
- type DecryptSelfValueParameters,
12
- type DecryptDelegatedValueParameters,
10
+ type DecryptValueParameters,
13
11
  type DecryptValueReturnType,
14
12
  } from '../../actions/decrypt/decryptValue.js';
15
13
  import {
16
14
  decryptValues,
17
- type DecryptDelegatedValuesParameters,
18
- type DecryptSelfValuesParameters,
15
+ type DecryptValuesParameters,
19
16
  type DecryptValuesReturnType,
20
17
  } from '../../actions/decrypt/decryptValues.js';
21
18
  import {
22
19
  decryptValuesFromPairs,
23
- type DecryptSelfValuesFromPairsParameters,
24
- type DecryptDelegatedValuesFromPairsParameters,
20
+ type DecryptValuesFromPairsParameters,
25
21
  type DecryptValuesFromPairsReturnType,
26
22
  } from '../../actions/decrypt/decryptValuesFromPairs.js';
27
23
 
28
24
  ////////////////////////////////////////////////////////////////////////////////
29
25
 
30
26
  export type DecryptActions = {
31
- readonly decryptValue: {
32
- (parameters: DecryptSelfValueParameters): Promise<DecryptValueReturnType>;
33
- (parameters: DecryptDelegatedValueParameters): Promise<DecryptValueReturnType>;
34
- };
35
- readonly decryptValues: {
36
- (parameters: DecryptSelfValuesParameters): Promise<DecryptValuesReturnType>;
37
- (parameters: DecryptDelegatedValuesParameters): Promise<DecryptValuesReturnType>;
38
- };
39
- readonly decryptValuesFromPairs: {
40
- (parameters: DecryptSelfValuesFromPairsParameters): Promise<DecryptValuesFromPairsReturnType>;
41
- (parameters: DecryptDelegatedValuesFromPairsParameters): Promise<DecryptValuesFromPairsReturnType>;
42
- };
27
+ readonly decryptValue: (parameters: DecryptValueParameters) => Promise<DecryptValueReturnType>;
28
+ readonly decryptValues: (parameters: DecryptValuesParameters) => Promise<DecryptValuesReturnType>;
29
+
30
+ readonly decryptValuesFromPairs: (
31
+ parameters: DecryptValuesFromPairsParameters,
32
+ ) => Promise<DecryptValuesFromPairsReturnType>;
43
33
  readonly generateTransportKeypair: () => Promise<GenerateTransportKeypairReturnType>;
44
34
  };
45
35
 
@@ -49,15 +39,9 @@ function _decryptActions(fhevm: Fhevm<FhevmChain, WithDecrypt>): DecryptActions
49
39
  // Preserve the original action overloads on the decorated client API.
50
40
  // Runtime behavior is unchanged: this is a direct pass-through wrapper.
51
41
  return {
52
- decryptValue: ((parameters) =>
53
- decryptValue(fhevm, parameters as DecryptSelfValueParameters)) as DecryptActions['decryptValue'],
54
- decryptValues: ((parameters) =>
55
- decryptValues(fhevm, parameters as DecryptSelfValuesParameters)) as DecryptActions['decryptValues'],
56
- decryptValuesFromPairs: ((parameters) =>
57
- decryptValuesFromPairs(
58
- fhevm,
59
- parameters as DecryptSelfValuesFromPairsParameters,
60
- )) as DecryptActions['decryptValuesFromPairs'],
42
+ decryptValue: (parameters) => decryptValue(fhevm, parameters),
43
+ decryptValues: (parameters) => decryptValues(fhevm, parameters),
44
+ decryptValuesFromPairs: (parameters) => decryptValuesFromPairs(fhevm, parameters),
61
45
  generateTransportKeypair: () => generateTransportKeypair(fhevm),
62
46
  };
63
47
  }
@@ -208,9 +208,9 @@ export function createInputProofFromInputHandles({
208
208
  // Proof format :
209
209
  // ==============
210
210
  //
211
- // <len(handles)><len(signatures)><concat(handles)><concat(signatures)>
211
+ // <len(handles)><len(signatures)><concat(handles)><concat(signatures)><extraData>
212
212
  //
213
- // size: Byte1 + Byte1 + len(handles)*Bytes32 + len(signatures)*Bytes65
213
+ // size: Byte1 + Byte1 + len(handles)*Bytes32 + len(signatures)*Bytes65 + BytesN(extraData)
214
214
  //
215
215
 
216
216
  let proof: string = '';
@@ -7,6 +7,7 @@ import type {
7
7
  Uint64,
8
8
  Bytes21Hex,
9
9
  Uint8Number,
10
+ BytesHex,
10
11
  } from '../types/primitives.js';
11
12
  import type { ZkProofLike, ZkProof } from '../types/zkProof-p.js';
12
13
  import type { ErrorMetadataParams } from '../base/errors/ErrorBase.js';
@@ -49,27 +50,32 @@ class ZkProofImpl implements ZkProof {
49
50
  readonly #fheTypeIds: readonly FheTypeId[]; // Can be empty
50
51
  #inputHandles: InputHandle[] | undefined;
51
52
 
53
+ // In theory, 'extraData' is not part of the ZkProof
54
+ readonly #extraData: BytesHex;
55
+
52
56
  constructor(
53
57
  privateToken: symbol,
54
- params: {
58
+ parameters: {
55
59
  readonly chainId: Uint64BigInt;
56
60
  readonly aclContractAddress: ChecksummedAddress;
57
61
  readonly contractAddress: ChecksummedAddress;
58
62
  readonly userAddress: ChecksummedAddress;
59
63
  readonly ciphertextWithZkProof: Bytes;
60
64
  readonly encryptionBits: readonly EncryptionBits[];
65
+ readonly extraData: BytesHex;
61
66
  },
62
67
  ) {
63
68
  if (privateToken !== PRIVATE_TOKEN) {
64
69
  throw new Error('Unauthorized');
65
70
  }
66
- this.#chainId = params.chainId;
67
- this.#aclContractAddress = params.aclContractAddress;
68
- this.#contractAddress = params.contractAddress;
69
- this.#userAddress = params.userAddress;
70
- this.#ciphertextWithZkProof = params.ciphertextWithZkProof;
71
- this.#encryptionBits = Object.freeze([...params.encryptionBits]);
71
+ this.#chainId = parameters.chainId;
72
+ this.#aclContractAddress = parameters.aclContractAddress;
73
+ this.#contractAddress = parameters.contractAddress;
74
+ this.#userAddress = parameters.userAddress;
75
+ this.#ciphertextWithZkProof = parameters.ciphertextWithZkProof;
76
+ this.#encryptionBits = Object.freeze([...parameters.encryptionBits]);
72
77
  this.#fheTypeIds = Object.freeze(this.#encryptionBits.map(fheTypeIdFromEncryptionBits));
78
+ this.#extraData = parameters.extraData;
73
79
  Object.freeze(this);
74
80
  }
75
81
 
@@ -145,6 +151,10 @@ class ZkProofImpl implements ZkProof {
145
151
  return this.#inputHandles;
146
152
  }
147
153
 
154
+ public getExtraData(): BytesHex {
155
+ return this.#extraData;
156
+ }
157
+
148
158
  //////////////////////////////////////////////////////////////////////////////
149
159
  // JSON
150
160
  //////////////////////////////////////////////////////////////////////////////
@@ -218,6 +228,7 @@ export function assertIsZkProof(
218
228
  */
219
229
  export async function toZkProof(
220
230
  zkProofLike: ZkProofLike,
231
+ extraData: BytesHex,
221
232
  options?: {
222
233
  readonly zkProofParser?: ParseTFHEProvenCompactCiphertextListModuleFunction;
223
234
  readonly copy?: boolean;
@@ -265,8 +276,9 @@ export async function toZkProof(
265
276
  aclContractAddress,
266
277
  contractAddress,
267
278
  userAddress,
268
- ciphertextWithZkProof: ciphertextWithZkProof,
279
+ ciphertextWithZkProof,
269
280
  encryptionBits,
281
+ extraData,
270
282
  });
271
283
  }
272
284
 
@@ -440,7 +452,7 @@ async function _getOrParseEncryptionBits(
440
452
  * assert_eq!(handle.len(), 32);
441
453
  * ```
442
454
  *
443
- * @see https://github.com/zama-ai/fhevm/blob/8ffbd5906ab3d57af178e049930e3fc065c9d4b3/coprocessor/fhevm-engine/zkproof-worker/src/verifier.rs#L431
455
+ * @see https://github.com/zama-ai/fhevm/blob/322748569f0b5eb100b8cc1a58f691cfe88d17c4/coprocessor/fhevm-engine/zkproof-worker/src/verifier.rs#L538
444
456
  * @internal
445
457
  */
446
458
  function _computeInputHash21(
@@ -1,4 +1,4 @@
1
- import type { Bytes20, Bytes32, ChecksummedAddress, UintNumber } from '../types/primitives.js';
1
+ import type { Bytes20, Bytes32, BytesHex, ChecksummedAddress, UintNumber } from '../types/primitives.js';
2
2
  import type { ZkProof } from '../types/zkProof-p.js';
3
3
  import type { EncryptionBits, FheType } from '../types/fheType.js';
4
4
  import type { ZkProofBuilder } from '../types/zkProofBuilder.js';
@@ -18,7 +18,7 @@ import type {
18
18
  import { assert } from '../base/errors/InternalError.js';
19
19
  import { isUint64, uint256ToBytes32 } from '../base/uint.js';
20
20
  import { isAddress } from '../base/address.js';
21
- import { hexToBytes20 } from '../base/bytes.js';
21
+ import { asBytesHex, hexToBytes20 } from '../base/bytes.js';
22
22
  import { ZkProofError } from '../errors/ZkProofError.js';
23
23
  import { createTypedValue, TypedValueArrayBuilder } from '../base/typedValue.js';
24
24
  import { toZkProof } from './ZkProof-p.js';
@@ -142,9 +142,11 @@ class ZkProofBuilderImpl implements ZkProofBuilder {
142
142
  {
143
143
  contractAddress,
144
144
  userAddress,
145
+ extraData,
145
146
  }: {
146
147
  readonly contractAddress: string;
147
148
  readonly userAddress: string;
149
+ readonly extraData: string;
148
150
  },
149
151
  ): Promise<ZkProof> {
150
152
  // Fetch the FheEncryptionKey (in wasm format) from the global cache.
@@ -211,11 +213,13 @@ class ZkProofBuilderImpl implements ZkProofBuilder {
211
213
 
212
214
  assert(metaData.length - chainIdBytes32.length === 60);
213
215
 
214
- const ciphertextWithZKProofBytes: Uint8Array = await context.runtime.encrypt.buildWithProofPacked({
215
- typedValues: [...this.#builder.build()],
216
- fheEncryptionKey: fheEncryptionKeyWasm,
217
- metaData,
218
- });
216
+ const { ciphertextWithZKProofBytes, extraData: finalExtraData } =
217
+ await context.runtime.encrypt.buildWithProofPacked({
218
+ typedValues: [...this.#builder.build()],
219
+ fheEncryptionKey: fheEncryptionKeyWasm,
220
+ metaData,
221
+ extraData: asBytesHex(extraData),
222
+ });
219
223
 
220
224
  return toZkProof(
221
225
  {
@@ -226,6 +230,7 @@ class ZkProofBuilderImpl implements ZkProofBuilder {
226
230
  ciphertextWithZkProof: ciphertextWithZKProofBytes,
227
231
  encryptionBits: this.#bits,
228
232
  },
233
+ finalExtraData,
229
234
  { copy: false }, // Take ownership
230
235
  );
231
236
  }
@@ -273,9 +278,10 @@ export async function createZkProof(
273
278
  readonly values: readonly TypedValue[];
274
279
  readonly contractAddress: ChecksummedAddress;
275
280
  readonly userAddress: ChecksummedAddress;
281
+ readonly extraData: BytesHex;
276
282
  },
277
283
  ): Promise<ZkProof> {
278
- const { contractAddress, userAddress, values } = parameters;
284
+ const { contractAddress, userAddress, values, extraData } = parameters;
279
285
 
280
286
  const builder = new ZkProofBuilderImpl(PRIVATE_TOKEN, {
281
287
  ciphertextCapacity: TFHE_ZKPROOF_CIPHERTEXT_CAPACITY,
@@ -289,6 +295,7 @@ export async function createZkProof(
289
295
  const zkProof = await builder.build(context, {
290
296
  contractAddress,
291
297
  userAddress,
298
+ extraData,
292
299
  });
293
300
 
294
301
  return zkProof;
@@ -3,7 +3,6 @@ import type { FhevmChain } from '../types/fhevmChain.js';
3
3
  import type { BytesHex, ChecksummedAddress, TypedValue } from '../types/primitives.js';
4
4
  import type { RelayerInputProofOptions } from '../types/relayer.js';
5
5
  import type { InputHandle } from '../types/encryptedTypes-p.js';
6
- import { asBytesHex } from '../base/bytes.js';
7
6
  import { fetchVerifiedInputProof } from './fetchVerifiedInputProof.js';
8
7
  import { createZkProof } from './ZkProofBuilder-p.js';
9
8
 
@@ -33,11 +32,10 @@ type ReturnType = {
33
32
  export async function encrypt(context: Context, parameters: Parameters): Promise<ReturnType> {
34
33
  const hardCodedExtraData = '0x00' as BytesHex;
35
34
 
36
- const zkProof = await createZkProof(context, parameters);
35
+ const zkProof = await createZkProof(context, { ...parameters, extraData: hardCodedExtraData });
37
36
 
38
37
  const inputProof = await fetchVerifiedInputProof(context, {
39
38
  zkProof,
40
- extraData: asBytesHex(hardCodedExtraData),
41
39
  options: parameters.options,
42
40
  });
43
41
 
@@ -1,7 +1,6 @@
1
1
  import type { RelayerInputProofOptions } from '../types/relayer.js';
2
2
  import type { FhevmChain } from '../types/fhevmChain.js';
3
3
  import type { VerifiedInputProof } from '../types/inputProof.js';
4
- import type { BytesHex } from '../types/primitives.js';
5
4
  import type { ZkProof } from '../types/zkProof-p.js';
6
5
  import type { FhevmRuntime } from '../types/coreFhevmRuntime.js';
7
6
  import type { InputHandle } from '../types/encryptedTypes-p.js';
@@ -22,7 +21,6 @@ type Context = {
22
21
 
23
22
  type Parameters = {
24
23
  readonly zkProof: ZkProof;
25
- readonly extraData: BytesHex;
26
24
  readonly options?: RelayerInputProofOptions | undefined;
27
25
  };
28
26
 
@@ -31,7 +29,7 @@ type ReturnType = VerifiedInputProof;
31
29
  ////////////////////////////////////////////////////////////////////////////////
32
30
 
33
31
  export async function fetchVerifiedInputProof(context: Context, parameters: Parameters): Promise<ReturnType> {
34
- const { zkProof, extraData, options } = parameters;
32
+ const { zkProof, options } = parameters;
35
33
 
36
34
  assertIsZkProof(zkProof, {});
37
35
 
@@ -52,16 +50,12 @@ export async function fetchVerifiedInputProof(context: Context, parameters: Para
52
50
 
53
51
  // 2. Request coprocessor signatures from the relayer for the given ZK proof
54
52
  const { handles: coprocessorSignedHandles, coprocessorEip712Signatures: coprocessorSignatures } =
55
- await context.runtime.relayer.fetchCoprocessorSignatures(
56
- { relayerUrl: context.chain.fhevm.relayerUrl, chainId: context.chain.id },
57
- {
58
- payload: {
59
- zkProof,
60
- extraData,
61
- },
62
- options: relayerOptions,
53
+ await context.runtime.relayer.fetchCoprocessorSignatures(context, {
54
+ payload: {
55
+ zkProof,
63
56
  },
64
- );
57
+ options: relayerOptions,
58
+ });
65
59
 
66
60
  // 3. Check that the handles and the one in the fetch result
67
61
  // Note: this check is theoretically unnecessary
@@ -73,7 +67,7 @@ export async function fetchVerifiedInputProof(context: Context, parameters: Para
73
67
  const inputProof = createInputProofFromInputHandles({
74
68
  coprocessorEip712Signatures: coprocessorSignatures,
75
69
  inputHandles,
76
- extraData,
70
+ extraData: zkProof.getExtraData(),
77
71
  signedHandleAccess: {
78
72
  userAddress: zkProof.userAddress,
79
73
  contractAddress: zkProof.contractAddress,
@@ -418,8 +418,7 @@ function _assertMinimumEncryptionBitWidth(bw: number): void {
418
418
  );
419
419
  }
420
420
 
421
- export function bytesToClearValueType<etype extends FheType>(fheType: etype, bytes: Bytes): ClearValueType<etype> {
422
- const bn = bytesToBigInt(bytes);
421
+ export function bigintToClearValueType<etype extends FheType>(fheType: etype, bn: bigint): ClearValueType<etype> {
423
422
  // needed to type narrowing
424
423
  const ft: FheType = fheType;
425
424
 
@@ -455,6 +454,10 @@ export function bytesToClearValueType<etype extends FheType>(fheType: etype, byt
455
454
  }
456
455
  }
457
456
 
457
+ export function bytesToClearValueType<etype extends FheType>(fheType: etype, bytes: Bytes): ClearValueType<etype> {
458
+ return bigintToClearValueType(fheType, bytesToBigInt(bytes));
459
+ }
460
+
458
461
  /**
459
462
  * Asserts that `value` is already the correct JS type for the given `fheTypeName`
460
463
  * and returns it narrowed. No conversion is performed.
@@ -70,7 +70,7 @@ class KmsSignersContextImpl implements KmsSignersContext {
70
70
  }
71
71
 
72
72
  public has(signer: string): boolean {
73
- return this.#kmsSignersSet.has(signer);
73
+ return this.#kmsSignersSet.has(signer.toLowerCase());
74
74
  }
75
75
 
76
76
  public static [VERIFY_FUNC](instance: unknown, owner: FhevmRuntime): void {
@@ -0,0 +1,114 @@
1
+ import type { FhevmRuntime } from '../types/coreFhevmRuntime.js';
2
+ import type { Handle } from '../types/encryptedTypes-p.js';
3
+ import type { ChecksummedAddress } from '../types/primitives.js';
4
+ import type { HandleContractPair } from '../types/other-p.js';
5
+ import { AclUserDecryptionError } from '../errors/AclError.js';
6
+ import { isHandleDelegatedForUserDecryption } from './isHandleDelegatedForUserDecryption-p.js';
7
+
8
+ ////////////////////////////////////////////////////////////////////////////////
9
+
10
+ type Context = {
11
+ readonly runtime: FhevmRuntime;
12
+ readonly client: NonNullable<object>;
13
+ readonly options: { readonly batchRpcCalls: boolean };
14
+ };
15
+
16
+ type Parameters = {
17
+ readonly address: ChecksummedAddress;
18
+ readonly delegator: ChecksummedAddress;
19
+ readonly delegate: ChecksummedAddress;
20
+ readonly handleContractPairs: ReadonlyArray<{
21
+ readonly handle: Handle;
22
+ readonly contractAddress: ChecksummedAddress;
23
+ }>;
24
+ };
25
+
26
+ ////////////////////////////////////////////////////////////////////////////////
27
+
28
+ export async function checkDelegation(context: Context, parameters: Parameters): Promise<void> {
29
+ const { address, delegator, delegate, handleContractPairs } = parameters;
30
+
31
+ if (handleContractPairs.length === 0) {
32
+ throw new Error('checkDelegation requires at least one (handle, contractAddress) pair');
33
+ }
34
+
35
+ // runtime defensive check, use lowercase
36
+ function getKey(addr: string, handleBytes32Hex: string): string {
37
+ return `${addr}:${handleBytes32Hex}`.toLowerCase();
38
+ }
39
+
40
+ // 1. Verify rule: delegator !== delegate
41
+ if (delegator.toLowerCase() === delegate.toLowerCase()) {
42
+ throw new AclUserDecryptionError({
43
+ contractAddress: address,
44
+ message: `delegator ${delegator} cannot be equal to delegate`,
45
+ });
46
+ }
47
+
48
+ // 2. Verify rules: delegator !== contractAddress & delegate !== contractAddress
49
+ for (const pair of handleContractPairs) {
50
+ if (delegator.toLowerCase() === pair.contractAddress.toLowerCase()) {
51
+ throw new AclUserDecryptionError({
52
+ contractAddress: address,
53
+ message: `delegator ${delegator} cannot be equal to contractAddress`,
54
+ });
55
+ }
56
+ if (delegate.toLowerCase() === pair.contractAddress.toLowerCase()) {
57
+ throw new AclUserDecryptionError({
58
+ contractAddress: address,
59
+ message: `delegate ${delegate} cannot be equal to contractAddress`,
60
+ });
61
+ }
62
+ }
63
+
64
+ // 3. Collect all unique (contractAddress, handle) pairs to avoid duplicate RPC calls
65
+ const allChecks: HandleContractPair[] = [];
66
+ const seenKeys = new Set<string>();
67
+
68
+ for (const pair of handleContractPairs) {
69
+ // runtime defensive check, use lowercase
70
+ const key = getKey(pair.contractAddress, pair.handle.bytes32Hex);
71
+ if (!seenKeys.has(key)) {
72
+ seenKeys.add(key);
73
+ allChecks.push({
74
+ handle: pair.handle,
75
+ contractAddress: pair.contractAddress,
76
+ });
77
+ }
78
+ }
79
+
80
+ if (allChecks.length === 0) {
81
+ throw new Error('checkDelegation: no delegation checks to perform (unexpected empty dedup result)');
82
+ }
83
+
84
+ // 4. Single batched RPC call for all unique checks
85
+ const allResults = await isHandleDelegatedForUserDecryption(context, {
86
+ address,
87
+ delegator,
88
+ delegate,
89
+ pairs: allChecks,
90
+ });
91
+
92
+ // 5. Build result map for lookup
93
+ const resultMap = new Map<string, boolean>();
94
+ for (const [i, check] of allChecks.entries()) {
95
+ const result = allResults[i];
96
+ // tsc: noUncheckedIndexedAccess
97
+ if (result === undefined) {
98
+ throw new Error(`Missing result at index ${i}`);
99
+ }
100
+ const key = getKey(check.contractAddress, check.handle.bytes32Hex);
101
+ resultMap.set(key, result);
102
+ }
103
+
104
+ // 6. Verify delegation for each requested pair
105
+ for (const pair of handleContractPairs) {
106
+ const key = getKey(pair.contractAddress, pair.handle.bytes32Hex);
107
+ if (resultMap.get(key) !== true) {
108
+ throw new AclUserDecryptionError({
109
+ contractAddress: address,
110
+ message: `Delegate ${delegate} is not delegated by ${delegator} to user decrypt handle ${pair.handle.bytes32Hex} on contract ${pair.contractAddress}!`,
111
+ });
112
+ }
113
+ }
114
+ }
@@ -0,0 +1,45 @@
1
+ import type { FhevmRuntime } from '../types/coreFhevmRuntime.js';
2
+ import type { ChecksummedAddress, Uint64BigInt } from '../types/primitives.js';
3
+ import { isUint64 } from '../base/uint.js';
4
+ import { getUserDecryptionDelegationExpirationDateAbi } from '../host-contracts/abi-fragments/fragments.js';
5
+ import { getTrustedClient } from '../runtime/CoreFhevm-p.js';
6
+
7
+ ////////////////////////////////////////////////////////////////////////////////
8
+
9
+ type Context = {
10
+ readonly runtime: FhevmRuntime;
11
+ readonly client: NonNullable<object>;
12
+ readonly options: { readonly batchRpcCalls: boolean };
13
+ };
14
+
15
+ type Parameters = {
16
+ readonly address: ChecksummedAddress;
17
+ readonly delegator: ChecksummedAddress;
18
+ readonly delegate: ChecksummedAddress;
19
+ readonly contractAddress: ChecksummedAddress;
20
+ };
21
+
22
+ type ReturnType = Uint64BigInt;
23
+
24
+ ////////////////////////////////////////////////////////////////////////////////
25
+
26
+ export async function getUserDecryptionDelegationExpirationDate(
27
+ context: Context,
28
+ parameters: Parameters,
29
+ ): Promise<ReturnType> {
30
+ const trustedClient = getTrustedClient(context);
31
+ const address = parameters.address;
32
+
33
+ const res = await context.runtime.ethereum.readContract(trustedClient, {
34
+ address: address,
35
+ abi: getUserDecryptionDelegationExpirationDateAbi,
36
+ args: [parameters.delegator, parameters.delegate, parameters.contractAddress],
37
+ functionName: getUserDecryptionDelegationExpirationDateAbi[0].name,
38
+ });
39
+
40
+ if (!isUint64(res)) {
41
+ throw new Error(`Invalid expiration date.`);
42
+ }
43
+
44
+ return BigInt(res) as Uint64BigInt;
45
+ }
@@ -0,0 +1,77 @@
1
+ import type { ChecksummedAddress } from '../types/primitives.js';
2
+ import type { FhevmRuntime } from '../types/coreFhevmRuntime.js';
3
+ import type { Handle } from '../types/encryptedTypes-p.js';
4
+ import type { HandleContractPair } from '../types/other-p.js';
5
+ import { isHandleDelegatedForUserDecryptionAbi } from './abi-fragments/fragments.js';
6
+ import { getTrustedClient } from '../runtime/CoreFhevm-p.js';
7
+ import { executeWithBatching } from '../base/promise.js';
8
+
9
+ ////////////////////////////////////////////////////////////////////////////////
10
+
11
+ type Context = {
12
+ readonly runtime: FhevmRuntime;
13
+ readonly client: NonNullable<object>;
14
+ readonly options: { readonly batchRpcCalls: boolean };
15
+ };
16
+
17
+ type Parameters = {
18
+ readonly address: ChecksummedAddress;
19
+ readonly delegate: ChecksummedAddress;
20
+ readonly delegator: ChecksummedAddress;
21
+ readonly pairs: readonly HandleContractPair[];
22
+ };
23
+
24
+ type ReturnType = boolean[];
25
+
26
+ ////////////////////////////////////////////////////////////////////////////////
27
+
28
+ export async function isHandleDelegatedForUserDecryption(
29
+ context: Context,
30
+ parameters: Parameters,
31
+ ): Promise<ReturnType> {
32
+ const { address, delegate, delegator, pairs } = parameters;
33
+
34
+ const rpcCalls = pairs.map(
35
+ (pair) => () =>
36
+ _isHandleDelegatedForUserDecryption(context, {
37
+ address,
38
+ delegate,
39
+ delegator,
40
+ handle: pair.handle,
41
+ contractAddress: pair.contractAddress,
42
+ }),
43
+ );
44
+
45
+ const results = await executeWithBatching(rpcCalls, context.options.batchRpcCalls);
46
+
47
+ return results;
48
+ }
49
+
50
+ ////////////////////////////////////////////////////////////////////////////////
51
+
52
+ async function _isHandleDelegatedForUserDecryption(
53
+ context: Context,
54
+ parameters: {
55
+ readonly address: ChecksummedAddress;
56
+ readonly delegator: ChecksummedAddress;
57
+ readonly delegate: ChecksummedAddress;
58
+ readonly contractAddress: ChecksummedAddress;
59
+ readonly handle: Handle;
60
+ },
61
+ ): Promise<boolean> {
62
+ const { address, delegator, delegate, contractAddress, handle } = parameters;
63
+ const trustedClient = getTrustedClient(context);
64
+
65
+ const res = await context.runtime.ethereum.readContract(trustedClient, {
66
+ address: address,
67
+ abi: isHandleDelegatedForUserDecryptionAbi,
68
+ args: [delegator, delegate, contractAddress, handle.bytes32Hex],
69
+ functionName: isHandleDelegatedForUserDecryptionAbi[0].name,
70
+ });
71
+
72
+ if (typeof res !== 'boolean') {
73
+ throw new Error(`Invalid isHandleDelegatedForUserDecryptionAbi result.`);
74
+ }
75
+
76
+ return res;
77
+ }
@@ -61,7 +61,7 @@ async function _persistAllowed(
61
61
  });
62
62
 
63
63
  if (typeof res !== 'boolean') {
64
- throw new Error(`Invalid isAllowedForDecryption result.`);
64
+ throw new Error(`Invalid persistAllowed result.`);
65
65
  }
66
66
 
67
67
  return res;