@fhevm/sdk 0.13.2 → 0.14.0-13

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 (322) hide show
  1. package/_cjs/core/_version.js +1 -1
  2. package/_cjs/core/_version.js.map +1 -1
  3. package/_cjs/core/actions/base/canUseUnifiedDecryptionPermit.js +11 -0
  4. package/_cjs/core/actions/base/canUseUnifiedDecryptionPermit.js.map +1 -0
  5. package/_cjs/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.js +0 -4
  6. package/_cjs/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.js.map +1 -1
  7. package/_cjs/core/actions/base/index.js +7 -1
  8. package/_cjs/core/actions/base/index.js.map +1 -1
  9. package/_cjs/core/actions/base/signUnifiedDecryptionPermit.js +10 -0
  10. package/_cjs/core/actions/base/signUnifiedDecryptionPermit.js.map +1 -0
  11. package/_cjs/core/actions/host/resolveChainId.js +3 -1
  12. package/_cjs/core/actions/host/resolveChainId.js.map +1 -1
  13. package/_cjs/core/clients/decorators/base.js +2 -0
  14. package/_cjs/core/clients/decorators/base.js.map +1 -1
  15. package/_cjs/core/errors/Erc1271Error.js +48 -0
  16. package/_cjs/core/errors/Erc1271Error.js.map +1 -0
  17. package/_cjs/core/frozenContext/fhevmClientFrozenContext-p.js.map +1 -1
  18. package/_cjs/core/frozenContext/resolveFhevmClientFrozenContext-p.js +11 -1
  19. package/_cjs/core/frozenContext/resolveFhevmClientFrozenContext-p.js.map +1 -1
  20. package/_cjs/core/host-contracts/readKmsSignersContext-p.js +0 -7
  21. package/_cjs/core/host-contracts/readKmsSignersContext-p.js.map +1 -1
  22. package/_cjs/core/key/FheEncryptionKeyCache-p.js +3 -0
  23. package/_cjs/core/key/FheEncryptionKeyCache-p.js.map +1 -1
  24. package/_cjs/core/key/fetchFheEncryptionKey.js +13 -1
  25. package/_cjs/core/key/fetchFheEncryptionKey.js.map +1 -1
  26. package/_cjs/core/kms/SignedDecryptionPermit-p.js +1 -27
  27. package/_cjs/core/kms/SignedDecryptionPermit-p.js.map +1 -1
  28. package/_cjs/core/kms/SignedDecryptionPermitV2-p.js +22 -14
  29. package/_cjs/core/kms/SignedDecryptionPermitV2-p.js.map +1 -1
  30. package/_cjs/core/kms/decryptValuesFromPairs.js +5 -14
  31. package/_cjs/core/kms/decryptValuesFromPairs.js.map +1 -1
  32. package/_cjs/core/kms/fetchKmsSigncryptedSharesV2-p.js +8 -0
  33. package/_cjs/core/kms/fetchKmsSigncryptedSharesV2-p.js.map +1 -1
  34. package/_cjs/core/modules/decrypt/module/api-p.js +1 -1
  35. package/_cjs/core/modules/decrypt/module/api-p.js.map +1 -1
  36. package/_cjs/core/modules/decrypt/module/init-p.js +7 -1
  37. package/_cjs/core/modules/decrypt/module/init-p.js.map +1 -1
  38. package/_cjs/core/modules/encrypt/module/init-p.js +14 -2
  39. package/_cjs/core/modules/encrypt/module/init-p.js.map +1 -1
  40. package/_cjs/core/modules/relayer/cleartext/mock.js +5 -0
  41. package/_cjs/core/modules/relayer/cleartext/mock.js.map +1 -1
  42. package/_cjs/core/modules/relayer/module/RelayerAsyncRequest.js +20 -0
  43. package/_cjs/core/modules/relayer/module/RelayerAsyncRequest.js.map +1 -1
  44. package/_cjs/core/modules/relayer/module/fetchCoprocessorSignatures.js +1 -0
  45. package/_cjs/core/modules/relayer/module/fetchCoprocessorSignatures.js.map +1 -1
  46. package/_cjs/core/modules/relayer/module/fetchDelegatedUserDecryptV1.js +1 -0
  47. package/_cjs/core/modules/relayer/module/fetchDelegatedUserDecryptV1.js.map +1 -1
  48. package/_cjs/core/modules/relayer/module/fetchFeatures.js +35 -0
  49. package/_cjs/core/modules/relayer/module/fetchFeatures.js.map +1 -0
  50. package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js +1 -0
  51. package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
  52. package/_cjs/core/modules/relayer/module/fetchUserDecryptV1.js +1 -0
  53. package/_cjs/core/modules/relayer/module/fetchUserDecryptV1.js.map +1 -1
  54. package/_cjs/core/modules/relayer/module/fetchUserDecryptV2.js +1 -0
  55. package/_cjs/core/modules/relayer/module/fetchUserDecryptV2.js.map +1 -1
  56. package/_cjs/core/modules/relayer/module/index.js +2 -0
  57. package/_cjs/core/modules/relayer/module/index.js.map +1 -1
  58. package/_cjs/core/relayerFeatures/ensureRelayerFeatures-p.js +25 -0
  59. package/_cjs/core/relayerFeatures/ensureRelayerFeatures-p.js.map +1 -0
  60. package/_cjs/core/relayerFeatures/resolveRelayerFeatures-p.js +7 -0
  61. package/_cjs/core/relayerFeatures/resolveRelayerFeatures-p.js.map +1 -0
  62. package/_cjs/core/runtime/CoreFhevm-p.js +58 -2
  63. package/_cjs/core/runtime/CoreFhevm-p.js.map +1 -1
  64. package/_cjs/core/runtime/HyperWasmSolver-p.js +44 -4
  65. package/_cjs/core/runtime/HyperWasmSolver-p.js.map +1 -1
  66. package/_cjs/core/runtime/ProtocolVersionResolver-p.js +10 -4
  67. package/_cjs/core/runtime/ProtocolVersionResolver-p.js.map +1 -1
  68. package/_cjs/core/runtime/initFhevmDecryptRuntime-p.js +1 -1
  69. package/_cjs/core/runtime/initFhevmDecryptRuntime-p.js.map +1 -1
  70. package/_cjs/core/runtime/initFhevmRuntime-p.js +1 -1
  71. package/_cjs/core/runtime/initFhevmRuntime-p.js.map +1 -1
  72. package/_cjs/core/runtime/sdkProtocolApiVersion.js +1 -1
  73. package/_cjs/core/runtime/sdkProtocolApiVersion.js.map +1 -1
  74. package/_cjs/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.js +73 -0
  75. package/_cjs/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.js.map +1 -0
  76. package/_cjs/ethers/internal/ethereum-ct.js +2 -11
  77. package/_cjs/ethers/internal/ethereum-ct.js.map +1 -1
  78. package/_cjs/ethers/internal/ethereum.js +33 -0
  79. package/_cjs/ethers/internal/ethereum.js.map +1 -1
  80. package/_cjs/ethers/internal/utils.js +17 -0
  81. package/_cjs/ethers/internal/utils.js.map +1 -1
  82. package/_cjs/viem/internal/ethereum-ct.js +2 -8
  83. package/_cjs/viem/internal/ethereum-ct.js.map +1 -1
  84. package/_cjs/viem/internal/ethereum.js +34 -4
  85. package/_cjs/viem/internal/ethereum.js.map +1 -1
  86. package/_cjs/wasm/tfhe/loadTfheLib.js.map +1 -1
  87. package/_cjs/wasm/tkms/KmsLibApi.d.ts +1 -1
  88. package/_cjs/wasm/tkms/loadKmsLib.js +13 -4
  89. package/_cjs/wasm/tkms/loadKmsLib.js.map +3 -3
  90. package/_cjs/wasm/tkms/v0.14.0-1/kms_lib.d.ts +598 -0
  91. package/_cjs/wasm/tkms/v0.14.0-1/kms_lib.js +1887 -0
  92. package/_cjs/wasm/tkms/v0.14.0-1/kms_lib.js.map +7 -0
  93. package/_cjs/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm +0 -0
  94. package/_cjs/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.d.ts +3 -0
  95. package/_cjs/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.js +35 -0
  96. package/_cjs/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.js.map +7 -0
  97. package/_esm/core/_version.js +1 -1
  98. package/_esm/core/_version.js.map +1 -1
  99. package/_esm/core/actions/base/canUseUnifiedDecryptionPermit.js +21 -0
  100. package/_esm/core/actions/base/canUseUnifiedDecryptionPermit.js.map +1 -0
  101. package/_esm/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.js +0 -4
  102. package/_esm/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.js.map +1 -1
  103. package/_esm/core/actions/base/index.js +9 -2
  104. package/_esm/core/actions/base/index.js.map +1 -1
  105. package/_esm/core/actions/base/signUnifiedDecryptionPermit.js +7 -0
  106. package/_esm/core/actions/base/signUnifiedDecryptionPermit.js.map +1 -0
  107. package/_esm/core/actions/host/resolveChainId.js +3 -1
  108. package/_esm/core/actions/host/resolveChainId.js.map +1 -1
  109. package/_esm/core/clients/decorators/base.js +2 -0
  110. package/_esm/core/clients/decorators/base.js.map +1 -1
  111. package/_esm/core/errors/Erc1271Error.js +45 -0
  112. package/_esm/core/errors/Erc1271Error.js.map +1 -0
  113. package/_esm/core/frozenContext/fhevmClientFrozenContext-p.js.map +1 -1
  114. package/_esm/core/frozenContext/resolveFhevmClientFrozenContext-p.js +12 -1
  115. package/_esm/core/frozenContext/resolveFhevmClientFrozenContext-p.js.map +1 -1
  116. package/_esm/core/host-contracts/readKmsSignersContext-p.js +9 -40
  117. package/_esm/core/host-contracts/readKmsSignersContext-p.js.map +1 -1
  118. package/_esm/core/key/FheEncryptionKeyCache-p.js +3 -0
  119. package/_esm/core/key/FheEncryptionKeyCache-p.js.map +1 -1
  120. package/_esm/core/key/fetchFheEncryptionKey.js +13 -1
  121. package/_esm/core/key/fetchFheEncryptionKey.js.map +1 -1
  122. package/_esm/core/kms/SignedDecryptionPermit-p.js +6 -47
  123. package/_esm/core/kms/SignedDecryptionPermit-p.js.map +1 -1
  124. package/_esm/core/kms/SignedDecryptionPermitV2-p.js +35 -21
  125. package/_esm/core/kms/SignedDecryptionPermitV2-p.js.map +1 -1
  126. package/_esm/core/kms/decryptValuesFromPairs.js +14 -32
  127. package/_esm/core/kms/decryptValuesFromPairs.js.map +1 -1
  128. package/_esm/core/kms/fetchKmsSigncryptedSharesV2-p.js +11 -0
  129. package/_esm/core/kms/fetchKmsSigncryptedSharesV2-p.js.map +1 -1
  130. package/_esm/core/modules/decrypt/module/api-p.js +5 -3
  131. package/_esm/core/modules/decrypt/module/api-p.js.map +1 -1
  132. package/_esm/core/modules/decrypt/module/init-p.js +7 -1
  133. package/_esm/core/modules/decrypt/module/init-p.js.map +1 -1
  134. package/_esm/core/modules/encrypt/module/init-p.js +14 -2
  135. package/_esm/core/modules/encrypt/module/init-p.js.map +1 -1
  136. package/_esm/core/modules/relayer/cleartext/mock.js +5 -0
  137. package/_esm/core/modules/relayer/cleartext/mock.js.map +1 -1
  138. package/_esm/core/modules/relayer/module/RelayerAsyncRequest.js +20 -0
  139. package/_esm/core/modules/relayer/module/RelayerAsyncRequest.js.map +1 -1
  140. package/_esm/core/modules/relayer/module/fetchCoprocessorSignatures.js +1 -0
  141. package/_esm/core/modules/relayer/module/fetchCoprocessorSignatures.js.map +1 -1
  142. package/_esm/core/modules/relayer/module/fetchDelegatedUserDecryptV1.js +1 -0
  143. package/_esm/core/modules/relayer/module/fetchDelegatedUserDecryptV1.js.map +1 -1
  144. package/_esm/core/modules/relayer/module/fetchFeatures.js +68 -0
  145. package/_esm/core/modules/relayer/module/fetchFeatures.js.map +1 -0
  146. package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js +1 -0
  147. package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
  148. package/_esm/core/modules/relayer/module/fetchUserDecryptV1.js +1 -0
  149. package/_esm/core/modules/relayer/module/fetchUserDecryptV1.js.map +1 -1
  150. package/_esm/core/modules/relayer/module/fetchUserDecryptV2.js +1 -0
  151. package/_esm/core/modules/relayer/module/fetchUserDecryptV2.js.map +1 -1
  152. package/_esm/core/modules/relayer/module/index.js +2 -0
  153. package/_esm/core/modules/relayer/module/index.js.map +1 -1
  154. package/_esm/core/relayerFeatures/ensureRelayerFeatures-p.js +61 -0
  155. package/_esm/core/relayerFeatures/ensureRelayerFeatures-p.js.map +1 -0
  156. package/_esm/core/relayerFeatures/resolveRelayerFeatures-p.js +15 -0
  157. package/_esm/core/relayerFeatures/resolveRelayerFeatures-p.js.map +1 -0
  158. package/_esm/core/runtime/CoreFhevm-p.js +61 -2
  159. package/_esm/core/runtime/CoreFhevm-p.js.map +1 -1
  160. package/_esm/core/runtime/HyperWasmSolver-p.js +51 -6
  161. package/_esm/core/runtime/HyperWasmSolver-p.js.map +1 -1
  162. package/_esm/core/runtime/ProtocolVersionResolver-p.js +10 -4
  163. package/_esm/core/runtime/ProtocolVersionResolver-p.js.map +1 -1
  164. package/_esm/core/runtime/initFhevmDecryptRuntime-p.js +1 -1
  165. package/_esm/core/runtime/initFhevmDecryptRuntime-p.js.map +1 -1
  166. package/_esm/core/runtime/initFhevmRuntime-p.js +1 -1
  167. package/_esm/core/runtime/initFhevmRuntime-p.js.map +1 -1
  168. package/_esm/core/runtime/sdkProtocolApiVersion.js +8 -9
  169. package/_esm/core/runtime/sdkProtocolApiVersion.js.map +1 -1
  170. package/_esm/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.js +118 -0
  171. package/_esm/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.js.map +1 -0
  172. package/_esm/ethers/internal/ethereum-ct.js +4 -13
  173. package/_esm/ethers/internal/ethereum-ct.js.map +1 -1
  174. package/_esm/ethers/internal/ethereum.js +45 -2
  175. package/_esm/ethers/internal/ethereum.js.map +1 -1
  176. package/_esm/ethers/internal/utils.js +20 -0
  177. package/_esm/ethers/internal/utils.js.map +1 -1
  178. package/_esm/viem/internal/ethereum-ct.js +5 -11
  179. package/_esm/viem/internal/ethereum-ct.js.map +1 -1
  180. package/_esm/viem/internal/ethereum.js +37 -0
  181. package/_esm/viem/internal/ethereum.js.map +1 -1
  182. package/_esm/wasm/tkms/KmsLibApi.d.ts +1 -1
  183. package/_esm/wasm/tkms/loadKmsLib.js +11 -2
  184. package/_esm/wasm/tkms/v0.14.0-1/kms_lib.d.ts +598 -0
  185. package/_esm/wasm/tkms/v0.14.0-1/kms_lib.js +2055 -0
  186. package/_esm/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm +0 -0
  187. package/_esm/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.d.ts +3 -0
  188. package/_esm/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.js +7 -0
  189. package/_types/core/_version.d.ts.map +1 -1
  190. package/_types/core/actions/base/canUseUnifiedDecryptionPermit.d.ts +23 -0
  191. package/_types/core/actions/base/canUseUnifiedDecryptionPermit.d.ts.map +1 -0
  192. package/_types/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.d.ts.map +1 -1
  193. package/_types/core/actions/base/index.d.ts +3 -0
  194. package/_types/core/actions/base/index.d.ts.map +1 -1
  195. package/_types/core/actions/base/signUnifiedDecryptionPermit.d.ts +17 -0
  196. package/_types/core/actions/base/signUnifiedDecryptionPermit.d.ts.map +1 -0
  197. package/_types/core/actions/host/resolveChainId.d.ts.map +1 -1
  198. package/_types/core/clients/decorators/base.d.ts +14 -0
  199. package/_types/core/clients/decorators/base.d.ts.map +1 -1
  200. package/_types/core/errors/Erc1271Error.d.ts +46 -0
  201. package/_types/core/errors/Erc1271Error.d.ts.map +1 -0
  202. package/_types/core/frozenContext/fhevmClientFrozenContext-p.d.ts.map +1 -1
  203. package/_types/core/frozenContext/resolveFhevmClientFrozenContext-p.d.ts.map +1 -1
  204. package/_types/core/host-contracts/readKmsSignersContext-p.d.ts +9 -14
  205. package/_types/core/host-contracts/readKmsSignersContext-p.d.ts.map +1 -1
  206. package/_types/core/key/FheEncryptionKeyCache-p.d.ts.map +1 -1
  207. package/_types/core/key/fetchFheEncryptionKey.d.ts.map +1 -1
  208. package/_types/core/kms/SignedDecryptionPermit-p.d.ts.map +1 -1
  209. package/_types/core/kms/SignedDecryptionPermitV2-p.d.ts.map +1 -1
  210. package/_types/core/kms/decryptValuesFromPairs.d.ts.map +1 -1
  211. package/_types/core/kms/fetchKmsSigncryptedSharesV2-p.d.ts.map +1 -1
  212. package/_types/core/modules/decrypt/module/api-p.d.ts.map +1 -1
  213. package/_types/core/modules/decrypt/module/init-p.d.ts.map +1 -1
  214. package/_types/core/modules/encrypt/module/init-p.d.ts.map +1 -1
  215. package/_types/core/modules/ethereum/types.d.ts +47 -2
  216. package/_types/core/modules/ethereum/types.d.ts.map +1 -1
  217. package/_types/core/modules/relayer/cleartext/mock.d.ts.map +1 -1
  218. package/_types/core/modules/relayer/module/RelayerAsyncRequest.d.ts +3 -0
  219. package/_types/core/modules/relayer/module/RelayerAsyncRequest.d.ts.map +1 -1
  220. package/_types/core/modules/relayer/module/fetchCoprocessorSignatures.d.ts.map +1 -1
  221. package/_types/core/modules/relayer/module/fetchDelegatedUserDecryptV1.d.ts.map +1 -1
  222. package/_types/core/modules/relayer/module/fetchFeatures.d.ts +26 -0
  223. package/_types/core/modules/relayer/module/fetchFeatures.d.ts.map +1 -0
  224. package/_types/core/modules/relayer/module/fetchPublicDecrypt.d.ts.map +1 -1
  225. package/_types/core/modules/relayer/module/fetchUserDecryptV1.d.ts.map +1 -1
  226. package/_types/core/modules/relayer/module/fetchUserDecryptV2.d.ts.map +1 -1
  227. package/_types/core/modules/relayer/module/index.d.ts.map +1 -1
  228. package/_types/core/modules/relayer/types.d.ts +14 -2
  229. package/_types/core/modules/relayer/types.d.ts.map +1 -1
  230. package/_types/core/relayerFeatures/ensureRelayerFeatures-p.d.ts +55 -0
  231. package/_types/core/relayerFeatures/ensureRelayerFeatures-p.d.ts.map +1 -0
  232. package/_types/core/relayerFeatures/resolveRelayerFeatures-p.d.ts +39 -0
  233. package/_types/core/relayerFeatures/resolveRelayerFeatures-p.d.ts.map +1 -0
  234. package/_types/core/runtime/CoreFhevm-p.d.ts +5 -0
  235. package/_types/core/runtime/CoreFhevm-p.d.ts.map +1 -1
  236. package/_types/core/runtime/HyperWasmSolver-p.d.ts +1 -0
  237. package/_types/core/runtime/HyperWasmSolver-p.d.ts.map +1 -1
  238. package/_types/core/runtime/ProtocolVersionResolver-p.d.ts.map +1 -1
  239. package/_types/core/runtime/sdkProtocolApiVersion.d.ts +7 -8
  240. package/_types/core/runtime/sdkProtocolApiVersion.d.ts.map +1 -1
  241. package/_types/core/types/kms-p.d.ts +2 -2
  242. package/_types/core/types/kms-p.d.ts.map +1 -1
  243. package/_types/core/types/relayer-p.d.ts +1 -1
  244. package/_types/core/types/relayer-p.d.ts.map +1 -1
  245. package/_types/core/types/signedDecryptionPermit.d.ts +10 -3
  246. package/_types/core/types/signedDecryptionPermit.d.ts.map +1 -1
  247. package/_types/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.d.ts +49 -0
  248. package/_types/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.d.ts.map +1 -0
  249. package/_types/ethers/internal/ethereum-ct.d.ts.map +1 -1
  250. package/_types/ethers/internal/ethereum.d.ts +3 -1
  251. package/_types/ethers/internal/ethereum.d.ts.map +1 -1
  252. package/_types/ethers/internal/utils.d.ts +5 -0
  253. package/_types/ethers/internal/utils.d.ts.map +1 -1
  254. package/_types/viem/internal/ethereum-ct.d.ts.map +1 -1
  255. package/_types/viem/internal/ethereum.d.ts +3 -1
  256. package/_types/viem/internal/ethereum.d.ts.map +1 -1
  257. package/_types/wasm/tkms/KmsLibApi.d.ts +1 -1
  258. package/_types/wasm/tkms/v0.14.0-1/kms_lib.d.ts +598 -0
  259. package/_types/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.d.ts +3 -0
  260. package/core/_version.ts +1 -1
  261. package/core/actions/base/canUseUnifiedDecryptionPermit.ts +38 -0
  262. package/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.ts +0 -6
  263. package/core/actions/base/index.ts +24 -2
  264. package/core/actions/base/signUnifiedDecryptionPermit.ts +27 -0
  265. package/core/actions/host/resolveChainId.ts +3 -1
  266. package/core/clients/decorators/base.ts +21 -0
  267. package/core/errors/Erc1271Error.ts +85 -0
  268. package/core/frozenContext/fhevmClientFrozenContext-p.ts +1 -0
  269. package/core/frozenContext/resolveFhevmClientFrozenContext-p.ts +21 -8
  270. package/core/host-contracts/readKmsSignersContext-p.ts +9 -45
  271. package/core/key/FheEncryptionKeyCache-p.ts +6 -0
  272. package/core/key/fetchFheEncryptionKey.ts +17 -1
  273. package/core/kms/SignedDecryptionPermit-p.ts +6 -60
  274. package/core/kms/SignedDecryptionPermitV2-p.ts +54 -41
  275. package/core/kms/decryptValuesFromPairs.ts +14 -33
  276. package/core/kms/fetchKmsSigncryptedSharesV2-p.ts +15 -0
  277. package/core/modules/decrypt/module/api-p.ts +5 -3
  278. package/core/modules/decrypt/module/init-p.ts +6 -1
  279. package/core/modules/encrypt/module/init-p.ts +15 -2
  280. package/core/modules/ethereum/types.ts +55 -1
  281. package/core/modules/relayer/cleartext/mock.ts +11 -0
  282. package/core/modules/relayer/module/RelayerAsyncRequest.ts +55 -0
  283. package/core/modules/relayer/module/fetchCoprocessorSignatures.ts +1 -0
  284. package/core/modules/relayer/module/fetchDelegatedUserDecryptV1.ts +1 -0
  285. package/core/modules/relayer/module/fetchFeatures.ts +75 -0
  286. package/core/modules/relayer/module/fetchPublicDecrypt.ts +1 -0
  287. package/core/modules/relayer/module/fetchUserDecryptV1.ts +1 -0
  288. package/core/modules/relayer/module/fetchUserDecryptV2.ts +1 -0
  289. package/core/modules/relayer/module/index.ts +2 -0
  290. package/core/modules/relayer/types.ts +26 -2
  291. package/core/relayerFeatures/ensureRelayerFeatures-p.ts +84 -0
  292. package/core/relayerFeatures/resolveRelayerFeatures-p.ts +47 -0
  293. package/core/runtime/CoreFhevm-p.ts +71 -0
  294. package/core/runtime/HyperWasmSolver-p.ts +57 -8
  295. package/core/runtime/ProtocolVersionResolver-p.ts +12 -4
  296. package/core/runtime/initFhevmDecryptRuntime-p.ts +1 -1
  297. package/core/runtime/initFhevmRuntime-p.ts +1 -1
  298. package/core/runtime/sdkProtocolApiVersion.ts +8 -9
  299. package/core/types/kms-p.ts +2 -2
  300. package/core/types/relayer-p.ts +4 -2
  301. package/core/types/signedDecryptionPermit.ts +10 -3
  302. package/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.ts +164 -0
  303. package/ethers/internal/ethereum-ct.ts +5 -15
  304. package/ethers/internal/ethereum.ts +58 -3
  305. package/ethers/internal/utils.ts +27 -0
  306. package/package.json +2 -2
  307. package/viem/internal/ethereum-ct.ts +6 -14
  308. package/viem/internal/ethereum.ts +48 -1
  309. package/wasm/tkms/KmsLibApi.d.ts +1 -1
  310. package/wasm/tkms/loadKmsLib.js +11 -2
  311. package/wasm/tkms/v0.14.0-1/kms_lib.d.ts +598 -0
  312. package/wasm/tkms/v0.14.0-1/kms_lib.js +2055 -0
  313. package/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm +0 -0
  314. package/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.d.ts +3 -0
  315. package/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.js +7 -0
  316. package/_cjs/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.js +0 -30
  317. package/_cjs/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.js.map +0 -1
  318. package/_esm/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.js +0 -27
  319. package/_esm/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.js.map +0 -1
  320. package/_types/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.d.ts +0 -14
  321. package/_types/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.d.ts.map +0 -1
  322. package/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.ts +0 -43
@@ -114,8 +114,10 @@ export type FetchUserDecryptPayloadV2 = {
114
114
  // Hex encoded bytes with 0x prefix. Default: 0x00
115
115
  readonly extraData: BytesHex;
116
116
  };
117
- // Hex encoded signature with 0x prefix.
118
- readonly signature: Bytes65Hex;
117
+ // Hex encoded signature with 0x prefix. Variable length: a 65-byte EOA ECDSA
118
+ // signature, an ERC-1271 smart-contract-wallet blob, or the empty `0x`
119
+ // pre-approved-hash flow. The relayer /v3 route forwards it verbatim.
120
+ readonly signature: BytesHex;
119
121
  };
120
122
 
121
123
  export type FetchDelegatedUserDecryptPayload = {
@@ -3,10 +3,14 @@ import type { Bytes65Hex, BytesHex, ChecksummedAddress } from './primitives.js';
3
3
 
4
4
  /**
5
5
  * Common fields shared by all signed decryption permit versions.
6
+ *
7
+ * @typeParam Signature - The permit signature hex type. Defaults to the strict
8
+ * 65-byte {@link Bytes65Hex} used by the EOA path; the unified V2 permit widens
9
+ * it to a variable-length {@link BytesHex} to carry ERC-1271 blobs.
6
10
  */
7
- export type SignedDecryptionPermitBase = {
11
+ export type SignedDecryptionPermitBase<Signature extends BytesHex = Bytes65Hex> = {
8
12
  /** The EIP-712 signature. */
9
- readonly signature: Bytes65Hex;
13
+ readonly signature: Signature;
10
14
  /** The account that signed the permit. */
11
15
  readonly signerAddress: ChecksummedAddress;
12
16
  /**
@@ -53,9 +57,12 @@ export type SignedDecryptionPermitV1 = SignedDecryptionPermitBase & {
53
57
  * a separate delegated variant. The `encryptedDataOwnerAddress` is read from
54
58
  * `eip712.message.userAddress` and may differ from `signerAddress`.
55
59
  *
60
+ * The `signature` is widened to {@link BytesHex} to carry ERC-1271 blobs (see
61
+ * the `Signature` type parameter on {@link SignedDecryptionPermitBase}).
62
+ *
56
63
  * Discriminate from {@link SignedDecryptionPermitV1} with `permit.version === 2`.
57
64
  */
58
- export type SignedDecryptionPermitV2 = SignedDecryptionPermitBase & {
65
+ export type SignedDecryptionPermitV2 = SignedDecryptionPermitBase<BytesHex> & {
59
66
  readonly version: 2;
60
67
  readonly eip712: KmsUserDecryptEip712V2;
61
68
  };
@@ -0,0 +1,164 @@
1
+ import type { EthCallResult } from '../../modules/ethereum/types.js';
2
+ import type { FhevmRuntime } from '../../types/coreFhevmRuntime.js';
3
+ import type { KmsUserDecryptEip712V2 } from '../../types/kms.js';
4
+ import type { Bytes32Hex, Bytes65Hex, BytesHex, ChecksummedAddress } from '../../types/primitives.js';
5
+ import {
6
+ Erc1271EmptySigOnEoaError,
7
+ Erc1271EoaMismatchNoCodeError,
8
+ Erc1271RejectedError,
9
+ Erc1271WrongMagicError,
10
+ } from '../../errors/Erc1271Error.js';
11
+ import { getTrustedClient } from '../../runtime/CoreFhevm-p.js';
12
+
13
+ ////////////////////////////////////////////////////////////////////////////////
14
+
15
+ /**
16
+ * ERC-1271 magic return value of `isValidSignature(bytes32,bytes)`:
17
+ * `bytes4(keccak256("isValidSignature(bytes32,bytes)"))`. It doubles as the
18
+ * function selector, so it also prefixes the STATICCALL calldata.
19
+ */
20
+ export const ERC1271_MAGIC_VALUE = '0x1626ba7e' as const;
21
+
22
+ /**
23
+ * Gas cap for the `isValidSignature` STATICCALL. Matches the relayer / KMS
24
+ * default (`erc1271_gas_limit = 100000`) so all three layers bound the wallet's
25
+ * verification the same way.
26
+ */
27
+ export const ERC1271_GAS_LIMIT = 100_000n;
28
+
29
+ ////////////////////////////////////////////////////////////////////////////////
30
+
31
+ /** Byte length of a `0x`-prefixed hex string. */
32
+ function byteLengthOfHex(hex: string): number {
33
+ return (hex.length - 2) / 2;
34
+ }
35
+
36
+ ////////////////////////////////////////////////////////////////////////////////
37
+
38
+ export type VerifyErc1271UserDecryptContext = {
39
+ readonly runtime: FhevmRuntime;
40
+ readonly client: NonNullable<object>;
41
+ };
42
+
43
+ export type VerifyErc1271UserDecryptParameters = {
44
+ /** The claimed identity the signature must authenticate — the contract wallet. */
45
+ readonly userAddress: ChecksummedAddress;
46
+ /** The unified EIP-712 typed data the user signed (domain + struct + message). */
47
+ readonly eip712: KmsUserDecryptEip712V2;
48
+ /** The opaque signature blob (65-byte EOA, multisig concat, or empty `0x`). */
49
+ readonly signature: BytesHex;
50
+ };
51
+
52
+ ////////////////////////////////////////////////////////////////////////////////
53
+ // verifyErc1271UserDecrypt
54
+ ////////////////////////////////////////////////////////////////////////////////
55
+
56
+ /**
57
+ * Precautionary client-side port of the shared crate's `verify_signature`
58
+ * (`shared/user-decryption-signature/src/lib.rs`), validating a user-decryption
59
+ * signature against `userAddress` per RFC-012:
60
+ *
61
+ * 1. If the signature is 65 bytes and `ecrecover(digest) === userAddress`,
62
+ * accept locally (EOA fast path, no RPC).
63
+ * 2. Otherwise STATICCALL `IERC1271(userAddress).isValidSignature(digest, sig)`
64
+ * and accept iff it returns the magic value `0x1626ba7e`.
65
+ *
66
+ * This check is **precautionary, not authoritative** (the KMS runs the same
67
+ * algorithm and gates key release):
68
+ * - A **definitive** local failure (wrong magic / revert / malformed returndata /
69
+ * empty signature or ecrecover mismatch on an EOA) throws — fail-fast, matching
70
+ * the relayer's sync 400.
71
+ * - An **inconclusive** outcome (no read provider, or an RPC transport error)
72
+ * logs a warning and returns, forwarding the request to the KMS.
73
+ *
74
+ * @throws {@link Erc1271VerificationError} on a definitive local rejection.
75
+ */
76
+ export async function verifyErc1271UserDecrypt(
77
+ context: VerifyErc1271UserDecryptContext,
78
+ parameters: VerifyErc1271UserDecryptParameters,
79
+ ): Promise<void> {
80
+ const { userAddress, eip712, signature } = parameters;
81
+ const ethereum = context.runtime.ethereum;
82
+
83
+ const { domain, primaryType, message } = eip712;
84
+ const fields = eip712.types[primaryType];
85
+ const types = { [primaryType]: [...fields] };
86
+
87
+ const digest: Bytes32Hex = ethereum.hashTypedData({ domain, types, primaryType, message });
88
+
89
+ const sigByteLength = byteLengthOfHex(signature);
90
+
91
+ // 1. EOA fast path — local, no RPC. Only meaningful for a 65-byte signature.
92
+ // An unparsable blob (or a recovered address that isn't userAddress) simply
93
+ // falls through to the ERC-1271 STATICCALL, never rejecting outright.
94
+ if (sigByteLength === 65) {
95
+ try {
96
+ const recovered = await ethereum.recoverTypedDataAddress({
97
+ domain,
98
+ types,
99
+ primaryType,
100
+ message,
101
+ signature: signature as Bytes65Hex,
102
+ });
103
+ if (recovered.toLowerCase() === userAddress.toLowerCase()) {
104
+ return;
105
+ }
106
+ } catch {
107
+ // Unparsable 65-byte blob (e.g. a Safe eth_sign / approveHash shape) —
108
+ // fall through to ERC-1271.
109
+ }
110
+ }
111
+
112
+ // 2. ERC-1271 STATICCALL. The magic value doubles as the function selector.
113
+ const encodedArgs = ethereum.encode({ types: ['bytes32', 'bytes'], values: [digest, signature] });
114
+ const calldata = `${ERC1271_MAGIC_VALUE}${encodedArgs.slice(2)}` as BytesHex;
115
+
116
+ let result: EthCallResult;
117
+ try {
118
+ const trustedClient = getTrustedClient(context);
119
+ result = await ethereum.call(trustedClient, {
120
+ to: userAddress,
121
+ data: calldata,
122
+ gas: ERC1271_GAS_LIMIT,
123
+ });
124
+ } catch (err) {
125
+ // Inconclusive: no read provider or a transport-level error. The KMS is the
126
+ // authority — degrade gracefully and forward rather than hard-failing.
127
+ const reason = err instanceof Error ? err.message : String(err);
128
+ context.runtime.config.logger?.warn?.(
129
+ `ERC-1271 user-decryption signature check could not complete for userAddress ${userAddress}; ` +
130
+ `forwarding to the KMS (authoritative). Reason: ${reason}`,
131
+ );
132
+ return;
133
+ }
134
+
135
+ if (!result.success) {
136
+ // A clean EVM revert is a definitive rejection.
137
+ throw new Erc1271RejectedError({ userAddress, detail: `isValidSignature call reverted: ${result.reason}` });
138
+ }
139
+
140
+ const returndata = result.data;
141
+ const returnByteLength = byteLengthOfHex(returndata);
142
+
143
+ if (returnByteLength === 0) {
144
+ // STATICCALL to a no-code address succeeds with empty returndata — the
145
+ // dominant signal that userAddress is an EOA.
146
+ if (sigByteLength === 0) {
147
+ throw new Erc1271EmptySigOnEoaError({ userAddress });
148
+ }
149
+ throw new Erc1271EoaMismatchNoCodeError({ userAddress });
150
+ }
151
+
152
+ // Solidity ABI-encodes `bytes4` as a full 32-byte word; a non-compliant
153
+ // fallback returning fewer bytes is rejected before matching the magic value.
154
+ if (returnByteLength < 32) {
155
+ throw new Erc1271RejectedError({ userAddress, detail: `returndata length ${returnByteLength} < 32` });
156
+ }
157
+
158
+ const magicValue = returndata.slice(0, 10).toLowerCase();
159
+ if (magicValue === ERC1271_MAGIC_VALUE) {
160
+ return;
161
+ }
162
+
163
+ throw new Erc1271WrongMagicError({ userAddress, magicValue });
164
+ }
@@ -3,8 +3,6 @@ import type {
3
3
  GeneratePrivateKeyReturnType,
4
4
  GetPublicKeyParameters,
5
5
  GetPublicKeyReturnType,
6
- HashTypedDataParameters,
7
- HashTypedDataReturnType,
8
6
  MnemonicToAccountParameters,
9
7
  MnemonicToAccountReturnType,
10
8
  RecoverAddressParameters,
@@ -13,19 +11,19 @@ import type {
13
11
  SignReturnType,
14
12
  } from '../../core/modules/ethereum/types-ct.js';
15
13
  import type { BytesHex, ChecksummedAddress } from '../../core/types/primitives.js';
16
- import type { TypedDataField } from 'ethers';
17
14
  import {
15
+ call,
18
16
  decode,
19
17
  encode,
20
18
  encodePacked,
21
19
  getChainId,
20
+ hashTypedData,
22
21
  readContract,
23
22
  recoverTypedDataAddress,
24
23
  signTypedData,
25
24
  } from './ethereum.js';
26
- import { SigningKey, HDNodeWallet, Wallet, TypedDataEncoder } from 'ethers';
25
+ import { SigningKey, HDNodeWallet, Wallet } from 'ethers';
27
26
  import { sign, recoverAddress } from '../../core/base/sign.js';
28
- import { asBytes32Hex } from '../../core/base/bytes.js';
29
27
 
30
28
  ////////////////////////////////////////////////////////////////////////////////
31
29
 
@@ -36,9 +34,11 @@ export const cleartextEthereumModule: CleartextEthereumModuleFactory = () => {
36
34
  encode,
37
35
  encodePacked,
38
36
  recoverTypedDataAddress,
37
+ hashTypedData,
39
38
  signTypedData,
40
39
  getChainId,
41
40
  readContract,
41
+ call,
42
42
  mnemonicToAccount: (parameters: MnemonicToAccountParameters): MnemonicToAccountReturnType => {
43
43
  const signer = HDNodeWallet.fromPhrase(parameters.mnemonic, undefined, parameters.path);
44
44
  return {
@@ -60,16 +60,6 @@ export const cleartextEthereumModule: CleartextEthereumModuleFactory = () => {
60
60
  const recoveredAddress = recoverAddress(parameters);
61
61
  return Promise.resolve(recoveredAddress);
62
62
  },
63
- hashTypedData: (parameters: HashTypedDataParameters): HashTypedDataReturnType => {
64
- const primaryTypeFields = parameters.types[parameters.primaryType];
65
- if (primaryTypeFields === undefined) {
66
- throw new Error(`Primary type "${parameters.primaryType}" not found in types`);
67
- }
68
- const typesToHash: Record<string, TypedDataField[]> = {
69
- [parameters.primaryType]: [...primaryTypeFields],
70
- };
71
- return asBytes32Hex(TypedDataEncoder.hash(parameters.domain, typesToHash, parameters.message));
72
- },
73
63
  }),
74
64
  });
75
65
  };
@@ -5,8 +5,12 @@ import type {
5
5
  EncodePackedReturnType,
6
6
  EncodeParameters,
7
7
  EncodeReturnType,
8
+ EthCallParameters,
9
+ EthCallResult,
8
10
  EthereumModuleFactory,
9
11
  GetChainIdReturnType,
12
+ HashTypedDataParameters,
13
+ HashTypedDataReturnType,
10
14
  TrustedClient,
11
15
  ReadContractParameters,
12
16
  RecoverTypedDataAddressParameters,
@@ -17,10 +21,10 @@ import type {
17
21
  } from '../../core/modules/ethereum/types.js';
18
22
  import type { ethers as EthersT } from 'ethers';
19
23
  import type { TypedDataField } from 'ethers';
20
- import type { BytesHex } from '../../core/types/primitives.js';
24
+ import type { Bytes32Hex, BytesHex } from '../../core/types/primitives.js';
21
25
  import { asChecksummedAddress } from '../../core/base/address.js';
22
- import { AbiCoder, solidityPacked, verifyTypedData } from 'ethers';
23
- import { getEthersContract, getNetwork } from './utils.js';
26
+ import { AbiCoder, TypedDataEncoder, solidityPacked, verifyTypedData } from 'ethers';
27
+ import { getEthersContract, getEthersProvider, getNetwork } from './utils.js';
24
28
 
25
29
  ////////////////////////////////////////////////////////////////////////////////
26
30
  // encodePacked
@@ -78,6 +82,26 @@ export function decode(parameters: DecodeParameters): DecodeReturnType {
78
82
  return abiCoder.decode(parameters.types, parameters.encodedData);
79
83
  }
80
84
 
85
+ ////////////////////////////////////////////////////////////////////////////////
86
+ // hashTypedData
87
+ ////////////////////////////////////////////////////////////////////////////////
88
+
89
+ export function hashTypedData(parameters: HashTypedDataParameters): HashTypedDataReturnType {
90
+ const { primaryType, types, domain, message } = parameters;
91
+
92
+ // ethers rejects EIP712Domain in the types map and expects a single primary
93
+ // struct; mirror recoverTypedDataAddress/signTypedData by filtering to it.
94
+ const primaryTypeFields = types[primaryType];
95
+ if (primaryTypeFields === undefined) {
96
+ throw new Error(`Primary type "${primaryType}" not found in types`);
97
+ }
98
+ const typesToHash: Record<string, TypedDataField[]> = {
99
+ [primaryType]: primaryTypeFields,
100
+ };
101
+
102
+ return TypedDataEncoder.hash(domain, typesToHash, message) as Bytes32Hex;
103
+ }
104
+
81
105
  ////////////////////////////////////////////////////////////////////////////////
82
106
  // readContract
83
107
  ////////////////////////////////////////////////////////////////////////////////
@@ -91,6 +115,35 @@ export async function readContract(
91
115
  return result;
92
116
  }
93
117
 
118
+ ////////////////////////////////////////////////////////////////////////////////
119
+ // call (raw eth_call / STATICCALL)
120
+ ////////////////////////////////////////////////////////////////////////////////
121
+
122
+ export async function call(
123
+ hostPublicClient: TrustedClient<EthersT.ContractRunner>,
124
+ parameters: EthCallParameters,
125
+ ): Promise<EthCallResult> {
126
+ const provider = getEthersProvider(hostPublicClient);
127
+ try {
128
+ const data = await provider.call({
129
+ to: parameters.to,
130
+ data: parameters.data,
131
+ ...(parameters.gas !== undefined ? { gasLimit: parameters.gas } : {}),
132
+ });
133
+ // ethers' `Provider.call` always resolves to a hex string ('0x' for empty).
134
+ return { success: true, data: data as BytesHex };
135
+ } catch (err) {
136
+ // ethers tags a clean EVM revert as CALL_EXCEPTION — a definitive rejection.
137
+ // Anything else is transport-level and rethrown so the precautionary caller
138
+ // can degrade gracefully.
139
+ if (typeof err === 'object' && err !== null && (err as { code?: unknown }).code === 'CALL_EXCEPTION') {
140
+ const reason = err instanceof Error ? err.message : 'isValidSignature call reverted';
141
+ return { success: false, reason };
142
+ }
143
+ throw err;
144
+ }
145
+ }
146
+
94
147
  ////////////////////////////////////////////////////////////////////////////////
95
148
  // getChainId
96
149
  ////////////////////////////////////////////////////////////////////////////////
@@ -157,9 +210,11 @@ export const ethereumModule: EthereumModuleFactory = () => {
157
210
  encode,
158
211
  encodePacked,
159
212
  recoverTypedDataAddress,
213
+ hashTypedData,
160
214
  signTypedData,
161
215
  getChainId,
162
216
  readContract,
217
+ call,
163
218
  }),
164
219
  });
165
220
  };
@@ -30,6 +30,33 @@ export async function getNetwork(hostPublicClient: TrustedClient<EthersT.Contrac
30
30
  throw new Error('Cannot get network: client is neither a Provider nor a ContractRunner with a provider.');
31
31
  }
32
32
 
33
+ /**
34
+ * Get an ethers `Provider` from an unknown client.
35
+ * Supports a `Provider` directly, or a `ContractRunner` that carries one.
36
+ */
37
+ export function getEthersProvider(hostPublicClient: TrustedClient<EthersT.ContractRunner>): EthersT.Provider {
38
+ const runner = trustedClientToEthersContractRunner(hostPublicClient);
39
+
40
+ if ((runner as unknown) === undefined || (runner as unknown) === null) {
41
+ throw new Error('Cannot get provider: client is null or undefined.');
42
+ }
43
+
44
+ const runnerRecord = runner as unknown as Record<string, unknown>;
45
+ if (
46
+ typeof runner === 'object' &&
47
+ typeof runnerRecord.call === 'function' &&
48
+ typeof runnerRecord.getNetwork === 'function'
49
+ ) {
50
+ return runner as unknown as EthersT.Provider;
51
+ }
52
+
53
+ if (runner.provider != null) {
54
+ return runner.provider;
55
+ }
56
+
57
+ throw new Error('Cannot get provider: client is neither a Provider nor a ContractRunner with a provider.');
58
+ }
59
+
33
60
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters
34
61
  export function getEthersContract<C>(
35
62
  hostPublicClient: TrustedClient<EthersT.ContractRunner>,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fhevm/sdk",
3
3
  "description": "TypeScript Interface for FHEVM",
4
- "version": "0.13.2",
4
+ "version": "0.14.0-13",
5
5
  "type": "module",
6
6
  "main": "./_cjs/index.js",
7
7
  "module": "./_esm/index.js",
@@ -103,7 +103,7 @@
103
103
  "dependencies": {
104
104
  "@noble/curves": "2.0.1",
105
105
  "@noble/hashes": "2.0.1",
106
- "wasm-feature-detect": "^1.8.0"
106
+ "wasm-feature-detect": "1.8.0"
107
107
  },
108
108
  "repository": {
109
109
  "type": "git",
@@ -3,8 +3,6 @@ import type {
3
3
  GeneratePrivateKeyReturnType,
4
4
  GetPublicKeyParameters,
5
5
  GetPublicKeyReturnType,
6
- HashTypedDataParameters,
7
- HashTypedDataReturnType,
8
6
  MnemonicToAccountParameters,
9
7
  MnemonicToAccountReturnType,
10
8
  RecoverAddressParameters,
@@ -15,16 +13,18 @@ import type {
15
13
  import type { Bytes65Hex, BytesHex, ChecksummedAddress } from '../../core/types/primitives.js';
16
14
  import { generatePrivateKey, mnemonicToAccount, privateKeyToAccount, sign } from 'viem/accounts';
17
15
  import {
16
+ call,
18
17
  decode,
19
18
  encode,
20
19
  encodePacked,
21
20
  getChainId,
21
+ hashTypedData,
22
22
  readContract,
23
23
  recoverTypedDataAddress,
24
24
  signTypedData,
25
25
  } from './ethereum.js';
26
- import { asBytes32Hex, bytesToHex } from '../../core/base/bytes.js';
27
- import { hashTypedData, recoverAddress } from 'viem';
26
+ import { bytesToHex } from '../../core/base/bytes.js';
27
+ import { recoverAddress } from 'viem';
28
28
 
29
29
  ////////////////////////////////////////////////////////////////////////////////
30
30
 
@@ -35,9 +35,11 @@ export const cleartextEthereumModule: CleartextEthereumModuleFactory = () => {
35
35
  encode,
36
36
  encodePacked,
37
37
  recoverTypedDataAddress,
38
+ hashTypedData,
38
39
  signTypedData,
39
40
  getChainId,
40
41
  readContract,
42
+ call,
41
43
  mnemonicToAccount: (parameters: MnemonicToAccountParameters): MnemonicToAccountReturnType => {
42
44
  const signer = mnemonicToAccount(parameters.mnemonic, { path: parameters.path });
43
45
  const pk = signer.getHdKey().privateKey;
@@ -58,16 +60,6 @@ export const cleartextEthereumModule: CleartextEthereumModuleFactory = () => {
58
60
  recoverAddress: (parameters: RecoverAddressParameters): Promise<RecoverAddressReturnType> => {
59
61
  return recoverAddress(parameters) as Promise<ChecksummedAddress>;
60
62
  },
61
- hashTypedData: (parameters: HashTypedDataParameters): HashTypedDataReturnType => {
62
- return asBytes32Hex(
63
- hashTypedData({
64
- domain: parameters.domain,
65
- types: parameters.types as Record<string, Array<{ name: string; type: string }>>,
66
- primaryType: parameters.primaryType,
67
- message: parameters.message,
68
- }),
69
- );
70
- },
71
63
  }),
72
64
  });
73
65
  };
@@ -6,8 +6,12 @@ import type {
6
6
  EncodePackedReturnType,
7
7
  EncodeParameters,
8
8
  EncodeReturnType,
9
+ EthCallParameters,
10
+ EthCallResult,
9
11
  EthereumModuleFactory,
10
12
  GetChainIdReturnType,
13
+ HashTypedDataParameters,
14
+ HashTypedDataReturnType,
11
15
  TrustedClient,
12
16
  ReadContractParameters,
13
17
  RecoverTypedDataAddressParameters,
@@ -16,7 +20,8 @@ import type {
16
20
  SignTypedDataReturnType,
17
21
  NativeSigner,
18
22
  } from '../../core/modules/ethereum/types.js';
19
- import type { BytesHex } from '../../core/types/primitives.js';
23
+ import type { Bytes32Hex, BytesHex } from '../../core/types/primitives.js';
24
+ import { BaseError, ExecutionRevertedError, hashTypedData as viemHashTypedData } from 'viem';
20
25
  import { recoverTypedDataAddress as viemRecoverTypedDataAddress } from 'viem';
21
26
  import { encodePacked as viemEncodePacked, encodeAbiParameters, decodeAbiParameters } from 'viem';
22
27
  import { asChecksummedAddress } from '../../core/base/address.js';
@@ -59,6 +64,19 @@ export function decode(parameters: DecodeParameters): DecodeReturnType {
59
64
  return [...decodeAbiParameters(abiParameters, parameters.encodedData as `0x${string}`)];
60
65
  }
61
66
 
67
+ ////////////////////////////////////////////////////////////////////////////////
68
+ // hashTypedData
69
+ ////////////////////////////////////////////////////////////////////////////////
70
+
71
+ export function hashTypedData(parameters: HashTypedDataParameters): HashTypedDataReturnType {
72
+ return viemHashTypedData({
73
+ domain: parameters.domain,
74
+ types: parameters.types,
75
+ primaryType: parameters.primaryType,
76
+ message: parameters.message,
77
+ }) as Bytes32Hex;
78
+ }
79
+
62
80
  ////////////////////////////////////////////////////////////////////////////////
63
81
  // readContract
64
82
  ////////////////////////////////////////////////////////////////////////////////
@@ -71,6 +89,33 @@ export async function readContract(
71
89
  return publicClient.readContract(parameters);
72
90
  }
73
91
 
92
+ ////////////////////////////////////////////////////////////////////////////////
93
+ // call (raw eth_call / STATICCALL)
94
+ ////////////////////////////////////////////////////////////////////////////////
95
+
96
+ export async function call(
97
+ hostPublicClient: TrustedClient<PublicClient>,
98
+ parameters: EthCallParameters,
99
+ ): Promise<EthCallResult> {
100
+ const publicClient = trustedClientToViemPublicClient(hostPublicClient);
101
+ try {
102
+ const { data } = await publicClient.call({
103
+ to: parameters.to,
104
+ data: parameters.data,
105
+ ...(parameters.gas !== undefined ? { gas: parameters.gas } : {}),
106
+ });
107
+ return { success: true, data: (data ?? '0x') as BytesHex };
108
+ } catch (err) {
109
+ // A clean EVM revert is a definitive on-chain rejection; anything else
110
+ // (network, timeout, rate limit, …) is transport-level and rethrown so the
111
+ // precautionary caller can degrade gracefully.
112
+ if (err instanceof BaseError && err.walk((e) => e instanceof ExecutionRevertedError) !== null) {
113
+ return { success: false, reason: err.shortMessage };
114
+ }
115
+ throw err;
116
+ }
117
+ }
118
+
74
119
  ////////////////////////////////////////////////////////////////////////////////
75
120
  // getChainId
76
121
  ////////////////////////////////////////////////////////////////////////////////
@@ -137,9 +182,11 @@ export const ethereumModule: EthereumModuleFactory = () => {
137
182
  encode,
138
183
  encodePacked,
139
184
  recoverTypedDataAddress,
185
+ hashTypedData,
140
186
  signTypedData,
141
187
  getChainId,
142
188
  readContract,
189
+ call,
143
190
  }),
144
191
  });
145
192
  };
@@ -31,7 +31,7 @@ export interface KmsLibApi {
31
31
  }
32
32
 
33
33
  // Default version
34
- export type TkmsVersion = '0.13.10' | '0.13.20-0';
34
+ export type TkmsVersion = '0.13.10' | '0.13.20-0' | '0.14.0-1';
35
35
 
36
36
  export type TkmsWasmBase64 = {
37
37
  readonly tkmsWasmBase64: string;
@@ -8,12 +8,13 @@
8
8
 
9
9
  ////////////////////////////////////////////////////////////////////////////////
10
10
 
11
- export const KMS_VERSIONS = Object.freeze(['0.13.10', '0.13.20-0']);
12
- export const DEFAULT_TKMS_VERSION = '0.13.20-0';
11
+ export const KMS_VERSIONS = Object.freeze(['0.13.10', '0.13.20-0', '0.14.0-1']);
12
+ export const DEFAULT_TKMS_VERSION = '0.14.0-1';
13
13
 
14
14
  const _loaders = {
15
15
  '0.13.10': () => import('./v0.13.10/kms_lib.js'),
16
16
  '0.13.20-0': () => import('./v0.13.20-0/kms_lib.js'),
17
+ '0.14.0-1': () => import('./v0.14.0-1/kms_lib.js'),
17
18
  };
18
19
 
19
20
  ////////////////////////////////////////////////////////////////////////////////
@@ -21,6 +22,7 @@ const _loaders = {
21
22
  const _wasmBase64Loaders = {
22
23
  '0.13.10': () => import('./v0.13.10/kms_lib_bg.wasm.base64.js'),
23
24
  '0.13.20-0': () => import('./v0.13.20-0/kms_lib_bg.wasm.base64.js'),
25
+ '0.14.0-1': () => import('./v0.14.0-1/kms_lib_bg.wasm.base64.js'),
24
26
  };
25
27
 
26
28
  ////////////////////////////////////////////////////////////////////////////////
@@ -40,6 +42,13 @@ const _assets = Object.freeze({
40
42
  sha256: 'be54c8f11daf048b897b41cf6e6735895490cdca77f2a01c01be0d6fbf369c81',
41
43
  }),
42
44
  }),
45
+ '0.14.0-1': Object.freeze({
46
+ wasm: Object.freeze({
47
+ filename: 'kms_lib_bg.v0.14.0-1.wasm',
48
+ localRelativePath: './v0.14.0-1/kms_lib_bg.wasm',
49
+ sha256: 'd4c2a1ed2567e7a3b2dfefb4c24e8a521110dd7c7648b533316647c06f6a9252',
50
+ }),
51
+ }),
43
52
  });
44
53
 
45
54
  ////////////////////////////////////////////////////////////////////////////////