@fhevm/sdk 0.13.2-1 → 0.14.0-12
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.
- package/_cjs/core/_version.js +1 -1
- package/_cjs/core/_version.js.map +1 -1
- package/_cjs/core/actions/base/canUseUnifiedDecryptionPermit.js +11 -0
- package/_cjs/core/actions/base/canUseUnifiedDecryptionPermit.js.map +1 -0
- package/_cjs/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.js +0 -4
- package/_cjs/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.js.map +1 -1
- package/_cjs/core/actions/base/index.js +7 -1
- package/_cjs/core/actions/base/index.js.map +1 -1
- package/_cjs/core/actions/base/signUnifiedDecryptionPermit.js +10 -0
- package/_cjs/core/actions/base/signUnifiedDecryptionPermit.js.map +1 -0
- package/_cjs/core/actions/host/resolveChainId.js +3 -1
- package/_cjs/core/actions/host/resolveChainId.js.map +1 -1
- package/_cjs/core/clients/decorators/base.js +2 -0
- package/_cjs/core/clients/decorators/base.js.map +1 -1
- package/_cjs/core/errors/Erc1271Error.js +48 -0
- package/_cjs/core/errors/Erc1271Error.js.map +1 -0
- package/_cjs/core/frozenContext/fhevmClientFrozenContext-p.js.map +1 -1
- package/_cjs/core/frozenContext/resolveFhevmClientFrozenContext-p.js +11 -1
- package/_cjs/core/frozenContext/resolveFhevmClientFrozenContext-p.js.map +1 -1
- package/_cjs/core/host-contracts/readKmsSignersContext-p.js +0 -7
- package/_cjs/core/host-contracts/readKmsSignersContext-p.js.map +1 -1
- package/_cjs/core/key/FheEncryptionKeyCache-p.js +3 -0
- package/_cjs/core/key/FheEncryptionKeyCache-p.js.map +1 -1
- package/_cjs/core/key/fetchFheEncryptionKey.js +13 -1
- package/_cjs/core/key/fetchFheEncryptionKey.js.map +1 -1
- package/_cjs/core/kms/SignedDecryptionPermit-p.js +1 -27
- package/_cjs/core/kms/SignedDecryptionPermit-p.js.map +1 -1
- package/_cjs/core/kms/SignedDecryptionPermitV2-p.js +22 -14
- package/_cjs/core/kms/SignedDecryptionPermitV2-p.js.map +1 -1
- package/_cjs/core/kms/decryptValuesFromPairs.js +5 -14
- package/_cjs/core/kms/decryptValuesFromPairs.js.map +1 -1
- package/_cjs/core/kms/fetchKmsSigncryptedSharesV2-p.js +8 -0
- package/_cjs/core/kms/fetchKmsSigncryptedSharesV2-p.js.map +1 -1
- package/_cjs/core/modules/decrypt/module/api-p.js +1 -1
- package/_cjs/core/modules/decrypt/module/api-p.js.map +1 -1
- package/_cjs/core/modules/decrypt/module/init-p.js +7 -1
- package/_cjs/core/modules/decrypt/module/init-p.js.map +1 -1
- package/_cjs/core/modules/encrypt/module/init-p.js +14 -2
- package/_cjs/core/modules/encrypt/module/init-p.js.map +1 -1
- package/_cjs/core/modules/relayer/cleartext/mock.js +5 -0
- package/_cjs/core/modules/relayer/cleartext/mock.js.map +1 -1
- package/_cjs/core/modules/relayer/module/RelayerAsyncRequest.js +20 -0
- package/_cjs/core/modules/relayer/module/RelayerAsyncRequest.js.map +1 -1
- package/_cjs/core/modules/relayer/module/fetchCoprocessorSignatures.js +1 -0
- package/_cjs/core/modules/relayer/module/fetchCoprocessorSignatures.js.map +1 -1
- package/_cjs/core/modules/relayer/module/fetchDelegatedUserDecryptV1.js +1 -0
- package/_cjs/core/modules/relayer/module/fetchDelegatedUserDecryptV1.js.map +1 -1
- package/_cjs/core/modules/relayer/module/fetchFeatures.js +35 -0
- package/_cjs/core/modules/relayer/module/fetchFeatures.js.map +1 -0
- package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js +1 -0
- package/_cjs/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
- package/_cjs/core/modules/relayer/module/fetchUserDecryptV1.js +1 -0
- package/_cjs/core/modules/relayer/module/fetchUserDecryptV1.js.map +1 -1
- package/_cjs/core/modules/relayer/module/fetchUserDecryptV2.js +1 -0
- package/_cjs/core/modules/relayer/module/fetchUserDecryptV2.js.map +1 -1
- package/_cjs/core/modules/relayer/module/index.js +2 -0
- package/_cjs/core/modules/relayer/module/index.js.map +1 -1
- package/_cjs/core/relayerFeatures/ensureRelayerFeatures-p.js +25 -0
- package/_cjs/core/relayerFeatures/ensureRelayerFeatures-p.js.map +1 -0
- package/_cjs/core/relayerFeatures/resolveRelayerFeatures-p.js +7 -0
- package/_cjs/core/relayerFeatures/resolveRelayerFeatures-p.js.map +1 -0
- package/_cjs/core/runtime/CoreFhevm-p.js +58 -2
- package/_cjs/core/runtime/CoreFhevm-p.js.map +1 -1
- package/_cjs/core/runtime/HyperWasmSolver-p.js +44 -4
- package/_cjs/core/runtime/HyperWasmSolver-p.js.map +1 -1
- package/_cjs/core/runtime/ProtocolVersionResolver-p.js +10 -4
- package/_cjs/core/runtime/ProtocolVersionResolver-p.js.map +1 -1
- package/_cjs/core/runtime/initFhevmDecryptRuntime-p.js +1 -1
- package/_cjs/core/runtime/initFhevmDecryptRuntime-p.js.map +1 -1
- package/_cjs/core/runtime/initFhevmRuntime-p.js +1 -1
- package/_cjs/core/runtime/initFhevmRuntime-p.js.map +1 -1
- package/_cjs/core/runtime/sdkProtocolApiVersion.js +1 -1
- package/_cjs/core/runtime/sdkProtocolApiVersion.js.map +1 -1
- package/_cjs/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.js +73 -0
- package/_cjs/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.js.map +1 -0
- package/_cjs/ethers/internal/ethereum-ct.js +2 -11
- package/_cjs/ethers/internal/ethereum-ct.js.map +1 -1
- package/_cjs/ethers/internal/ethereum.js +33 -0
- package/_cjs/ethers/internal/ethereum.js.map +1 -1
- package/_cjs/ethers/internal/utils.js +17 -0
- package/_cjs/ethers/internal/utils.js.map +1 -1
- package/_cjs/viem/internal/ethereum-ct.js +2 -8
- package/_cjs/viem/internal/ethereum-ct.js.map +1 -1
- package/_cjs/viem/internal/ethereum.js +34 -4
- package/_cjs/viem/internal/ethereum.js.map +1 -1
- package/_cjs/wasm/tfhe/loadTfheLib.js.map +1 -1
- package/_cjs/wasm/tkms/KmsLibApi.d.ts +1 -1
- package/_cjs/wasm/tkms/loadKmsLib.js +13 -4
- package/_cjs/wasm/tkms/loadKmsLib.js.map +3 -3
- package/_cjs/wasm/tkms/v0.14.0-1/kms_lib.d.ts +598 -0
- package/_cjs/wasm/tkms/v0.14.0-1/kms_lib.js +1887 -0
- package/_cjs/wasm/tkms/v0.14.0-1/kms_lib.js.map +7 -0
- package/_cjs/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm +0 -0
- package/_cjs/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.d.ts +3 -0
- package/_cjs/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.js +35 -0
- package/_cjs/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.js.map +7 -0
- package/_esm/core/_version.js +1 -1
- package/_esm/core/_version.js.map +1 -1
- package/_esm/core/actions/base/canUseUnifiedDecryptionPermit.js +21 -0
- package/_esm/core/actions/base/canUseUnifiedDecryptionPermit.js.map +1 -0
- package/_esm/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.js +0 -4
- package/_esm/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.js.map +1 -1
- package/_esm/core/actions/base/index.js +9 -2
- package/_esm/core/actions/base/index.js.map +1 -1
- package/_esm/core/actions/base/signUnifiedDecryptionPermit.js +7 -0
- package/_esm/core/actions/base/signUnifiedDecryptionPermit.js.map +1 -0
- package/_esm/core/actions/host/resolveChainId.js +3 -1
- package/_esm/core/actions/host/resolveChainId.js.map +1 -1
- package/_esm/core/clients/decorators/base.js +2 -0
- package/_esm/core/clients/decorators/base.js.map +1 -1
- package/_esm/core/errors/Erc1271Error.js +45 -0
- package/_esm/core/errors/Erc1271Error.js.map +1 -0
- package/_esm/core/frozenContext/fhevmClientFrozenContext-p.js.map +1 -1
- package/_esm/core/frozenContext/resolveFhevmClientFrozenContext-p.js +12 -1
- package/_esm/core/frozenContext/resolveFhevmClientFrozenContext-p.js.map +1 -1
- package/_esm/core/host-contracts/readKmsSignersContext-p.js +9 -40
- package/_esm/core/host-contracts/readKmsSignersContext-p.js.map +1 -1
- package/_esm/core/key/FheEncryptionKeyCache-p.js +3 -0
- package/_esm/core/key/FheEncryptionKeyCache-p.js.map +1 -1
- package/_esm/core/key/fetchFheEncryptionKey.js +13 -1
- package/_esm/core/key/fetchFheEncryptionKey.js.map +1 -1
- package/_esm/core/kms/SignedDecryptionPermit-p.js +6 -47
- package/_esm/core/kms/SignedDecryptionPermit-p.js.map +1 -1
- package/_esm/core/kms/SignedDecryptionPermitV2-p.js +35 -21
- package/_esm/core/kms/SignedDecryptionPermitV2-p.js.map +1 -1
- package/_esm/core/kms/decryptValuesFromPairs.js +14 -32
- package/_esm/core/kms/decryptValuesFromPairs.js.map +1 -1
- package/_esm/core/kms/fetchKmsSigncryptedSharesV2-p.js +11 -0
- package/_esm/core/kms/fetchKmsSigncryptedSharesV2-p.js.map +1 -1
- package/_esm/core/modules/decrypt/module/api-p.js +5 -3
- package/_esm/core/modules/decrypt/module/api-p.js.map +1 -1
- package/_esm/core/modules/decrypt/module/init-p.js +7 -1
- package/_esm/core/modules/decrypt/module/init-p.js.map +1 -1
- package/_esm/core/modules/encrypt/module/init-p.js +14 -2
- package/_esm/core/modules/encrypt/module/init-p.js.map +1 -1
- package/_esm/core/modules/relayer/cleartext/mock.js +5 -0
- package/_esm/core/modules/relayer/cleartext/mock.js.map +1 -1
- package/_esm/core/modules/relayer/module/RelayerAsyncRequest.js +20 -0
- package/_esm/core/modules/relayer/module/RelayerAsyncRequest.js.map +1 -1
- package/_esm/core/modules/relayer/module/fetchCoprocessorSignatures.js +1 -0
- package/_esm/core/modules/relayer/module/fetchCoprocessorSignatures.js.map +1 -1
- package/_esm/core/modules/relayer/module/fetchDelegatedUserDecryptV1.js +1 -0
- package/_esm/core/modules/relayer/module/fetchDelegatedUserDecryptV1.js.map +1 -1
- package/_esm/core/modules/relayer/module/fetchFeatures.js +68 -0
- package/_esm/core/modules/relayer/module/fetchFeatures.js.map +1 -0
- package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js +1 -0
- package/_esm/core/modules/relayer/module/fetchPublicDecrypt.js.map +1 -1
- package/_esm/core/modules/relayer/module/fetchUserDecryptV1.js +1 -0
- package/_esm/core/modules/relayer/module/fetchUserDecryptV1.js.map +1 -1
- package/_esm/core/modules/relayer/module/fetchUserDecryptV2.js +1 -0
- package/_esm/core/modules/relayer/module/fetchUserDecryptV2.js.map +1 -1
- package/_esm/core/modules/relayer/module/index.js +2 -0
- package/_esm/core/modules/relayer/module/index.js.map +1 -1
- package/_esm/core/relayerFeatures/ensureRelayerFeatures-p.js +61 -0
- package/_esm/core/relayerFeatures/ensureRelayerFeatures-p.js.map +1 -0
- package/_esm/core/relayerFeatures/resolveRelayerFeatures-p.js +15 -0
- package/_esm/core/relayerFeatures/resolveRelayerFeatures-p.js.map +1 -0
- package/_esm/core/runtime/CoreFhevm-p.js +61 -2
- package/_esm/core/runtime/CoreFhevm-p.js.map +1 -1
- package/_esm/core/runtime/HyperWasmSolver-p.js +51 -6
- package/_esm/core/runtime/HyperWasmSolver-p.js.map +1 -1
- package/_esm/core/runtime/ProtocolVersionResolver-p.js +10 -4
- package/_esm/core/runtime/ProtocolVersionResolver-p.js.map +1 -1
- package/_esm/core/runtime/initFhevmDecryptRuntime-p.js +1 -1
- package/_esm/core/runtime/initFhevmDecryptRuntime-p.js.map +1 -1
- package/_esm/core/runtime/initFhevmRuntime-p.js +1 -1
- package/_esm/core/runtime/initFhevmRuntime-p.js.map +1 -1
- package/_esm/core/runtime/sdkProtocolApiVersion.js +8 -9
- package/_esm/core/runtime/sdkProtocolApiVersion.js.map +1 -1
- package/_esm/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.js +118 -0
- package/_esm/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.js.map +1 -0
- package/_esm/ethers/internal/ethereum-ct.js +4 -13
- package/_esm/ethers/internal/ethereum-ct.js.map +1 -1
- package/_esm/ethers/internal/ethereum.js +45 -2
- package/_esm/ethers/internal/ethereum.js.map +1 -1
- package/_esm/ethers/internal/utils.js +20 -0
- package/_esm/ethers/internal/utils.js.map +1 -1
- package/_esm/viem/internal/ethereum-ct.js +5 -11
- package/_esm/viem/internal/ethereum-ct.js.map +1 -1
- package/_esm/viem/internal/ethereum.js +37 -0
- package/_esm/viem/internal/ethereum.js.map +1 -1
- package/_esm/wasm/tkms/KmsLibApi.d.ts +1 -1
- package/_esm/wasm/tkms/loadKmsLib.js +11 -2
- package/_esm/wasm/tkms/v0.14.0-1/kms_lib.d.ts +598 -0
- package/_esm/wasm/tkms/v0.14.0-1/kms_lib.js +2055 -0
- package/_esm/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm +0 -0
- package/_esm/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.d.ts +3 -0
- package/_esm/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.js +7 -0
- package/_types/core/_version.d.ts.map +1 -1
- package/_types/core/actions/base/canUseUnifiedDecryptionPermit.d.ts +23 -0
- package/_types/core/actions/base/canUseUnifiedDecryptionPermit.d.ts.map +1 -0
- package/_types/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.d.ts.map +1 -1
- package/_types/core/actions/base/index.d.ts +3 -0
- package/_types/core/actions/base/index.d.ts.map +1 -1
- package/_types/core/actions/base/signUnifiedDecryptionPermit.d.ts +17 -0
- package/_types/core/actions/base/signUnifiedDecryptionPermit.d.ts.map +1 -0
- package/_types/core/actions/host/resolveChainId.d.ts.map +1 -1
- package/_types/core/clients/decorators/base.d.ts +14 -0
- package/_types/core/clients/decorators/base.d.ts.map +1 -1
- package/_types/core/errors/Erc1271Error.d.ts +46 -0
- package/_types/core/errors/Erc1271Error.d.ts.map +1 -0
- package/_types/core/frozenContext/fhevmClientFrozenContext-p.d.ts.map +1 -1
- package/_types/core/frozenContext/resolveFhevmClientFrozenContext-p.d.ts.map +1 -1
- package/_types/core/host-contracts/readKmsSignersContext-p.d.ts +9 -14
- package/_types/core/host-contracts/readKmsSignersContext-p.d.ts.map +1 -1
- package/_types/core/key/FheEncryptionKeyCache-p.d.ts.map +1 -1
- package/_types/core/key/fetchFheEncryptionKey.d.ts.map +1 -1
- package/_types/core/kms/SignedDecryptionPermit-p.d.ts.map +1 -1
- package/_types/core/kms/SignedDecryptionPermitV2-p.d.ts.map +1 -1
- package/_types/core/kms/decryptValuesFromPairs.d.ts.map +1 -1
- package/_types/core/kms/fetchKmsSigncryptedSharesV2-p.d.ts.map +1 -1
- package/_types/core/modules/decrypt/module/api-p.d.ts.map +1 -1
- package/_types/core/modules/decrypt/module/init-p.d.ts.map +1 -1
- package/_types/core/modules/encrypt/module/init-p.d.ts.map +1 -1
- package/_types/core/modules/ethereum/types.d.ts +47 -2
- package/_types/core/modules/ethereum/types.d.ts.map +1 -1
- package/_types/core/modules/relayer/cleartext/mock.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/RelayerAsyncRequest.d.ts +3 -0
- package/_types/core/modules/relayer/module/RelayerAsyncRequest.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/fetchCoprocessorSignatures.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/fetchDelegatedUserDecryptV1.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/fetchFeatures.d.ts +26 -0
- package/_types/core/modules/relayer/module/fetchFeatures.d.ts.map +1 -0
- package/_types/core/modules/relayer/module/fetchPublicDecrypt.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/fetchUserDecryptV1.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/fetchUserDecryptV2.d.ts.map +1 -1
- package/_types/core/modules/relayer/module/index.d.ts.map +1 -1
- package/_types/core/modules/relayer/types.d.ts +14 -2
- package/_types/core/modules/relayer/types.d.ts.map +1 -1
- package/_types/core/relayerFeatures/ensureRelayerFeatures-p.d.ts +55 -0
- package/_types/core/relayerFeatures/ensureRelayerFeatures-p.d.ts.map +1 -0
- package/_types/core/relayerFeatures/resolveRelayerFeatures-p.d.ts +39 -0
- package/_types/core/relayerFeatures/resolveRelayerFeatures-p.d.ts.map +1 -0
- package/_types/core/runtime/CoreFhevm-p.d.ts +5 -0
- package/_types/core/runtime/CoreFhevm-p.d.ts.map +1 -1
- package/_types/core/runtime/HyperWasmSolver-p.d.ts +1 -0
- package/_types/core/runtime/HyperWasmSolver-p.d.ts.map +1 -1
- package/_types/core/runtime/ProtocolVersionResolver-p.d.ts.map +1 -1
- package/_types/core/runtime/sdkProtocolApiVersion.d.ts +7 -8
- package/_types/core/runtime/sdkProtocolApiVersion.d.ts.map +1 -1
- package/_types/core/types/kms-p.d.ts +2 -2
- package/_types/core/types/kms-p.d.ts.map +1 -1
- package/_types/core/types/relayer-p.d.ts +1 -1
- package/_types/core/types/relayer-p.d.ts.map +1 -1
- package/_types/core/types/signedDecryptionPermit.d.ts +10 -3
- package/_types/core/types/signedDecryptionPermit.d.ts.map +1 -1
- package/_types/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.d.ts +49 -0
- package/_types/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.d.ts.map +1 -0
- package/_types/ethers/internal/ethereum-ct.d.ts.map +1 -1
- package/_types/ethers/internal/ethereum.d.ts +3 -1
- package/_types/ethers/internal/ethereum.d.ts.map +1 -1
- package/_types/ethers/internal/utils.d.ts +5 -0
- package/_types/ethers/internal/utils.d.ts.map +1 -1
- package/_types/viem/internal/ethereum-ct.d.ts.map +1 -1
- package/_types/viem/internal/ethereum.d.ts +3 -1
- package/_types/viem/internal/ethereum.d.ts.map +1 -1
- package/_types/wasm/tkms/KmsLibApi.d.ts +1 -1
- package/_types/wasm/tkms/v0.14.0-1/kms_lib.d.ts +598 -0
- package/_types/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.d.ts +3 -0
- package/core/_version.ts +1 -1
- package/core/actions/base/canUseUnifiedDecryptionPermit.ts +38 -0
- package/core/actions/base/createUnsignedUnifiedDecryptionPermitEip712.ts +0 -6
- package/core/actions/base/index.ts +24 -2
- package/core/actions/base/signUnifiedDecryptionPermit.ts +27 -0
- package/core/actions/host/resolveChainId.ts +3 -1
- package/core/clients/decorators/base.ts +21 -0
- package/core/errors/Erc1271Error.ts +85 -0
- package/core/frozenContext/fhevmClientFrozenContext-p.ts +1 -0
- package/core/frozenContext/resolveFhevmClientFrozenContext-p.ts +21 -8
- package/core/host-contracts/readKmsSignersContext-p.ts +9 -45
- package/core/key/FheEncryptionKeyCache-p.ts +6 -0
- package/core/key/fetchFheEncryptionKey.ts +17 -1
- package/core/kms/SignedDecryptionPermit-p.ts +6 -60
- package/core/kms/SignedDecryptionPermitV2-p.ts +54 -41
- package/core/kms/decryptValuesFromPairs.ts +14 -33
- package/core/kms/fetchKmsSigncryptedSharesV2-p.ts +15 -0
- package/core/modules/decrypt/module/api-p.ts +5 -3
- package/core/modules/decrypt/module/init-p.ts +6 -1
- package/core/modules/encrypt/module/init-p.ts +15 -2
- package/core/modules/ethereum/types.ts +55 -1
- package/core/modules/relayer/cleartext/mock.ts +11 -0
- package/core/modules/relayer/module/RelayerAsyncRequest.ts +55 -0
- package/core/modules/relayer/module/fetchCoprocessorSignatures.ts +1 -0
- package/core/modules/relayer/module/fetchDelegatedUserDecryptV1.ts +1 -0
- package/core/modules/relayer/module/fetchFeatures.ts +75 -0
- package/core/modules/relayer/module/fetchPublicDecrypt.ts +1 -0
- package/core/modules/relayer/module/fetchUserDecryptV1.ts +1 -0
- package/core/modules/relayer/module/fetchUserDecryptV2.ts +1 -0
- package/core/modules/relayer/module/index.ts +2 -0
- package/core/modules/relayer/types.ts +26 -2
- package/core/relayerFeatures/ensureRelayerFeatures-p.ts +84 -0
- package/core/relayerFeatures/resolveRelayerFeatures-p.ts +47 -0
- package/core/runtime/CoreFhevm-p.ts +71 -0
- package/core/runtime/HyperWasmSolver-p.ts +57 -8
- package/core/runtime/ProtocolVersionResolver-p.ts +12 -4
- package/core/runtime/initFhevmDecryptRuntime-p.ts +1 -1
- package/core/runtime/initFhevmRuntime-p.ts +1 -1
- package/core/runtime/sdkProtocolApiVersion.ts +8 -9
- package/core/types/kms-p.ts +2 -2
- package/core/types/relayer-p.ts +4 -2
- package/core/types/signedDecryptionPermit.ts +10 -3
- package/core/utils-p/decrypt/verifyErc1271UserDecrypt-p.ts +164 -0
- package/ethers/internal/ethereum-ct.ts +5 -15
- package/ethers/internal/ethereum.ts +58 -3
- package/ethers/internal/utils.ts +27 -0
- package/package.json +2 -2
- package/viem/internal/ethereum-ct.ts +6 -14
- package/viem/internal/ethereum.ts +48 -1
- package/wasm/tkms/KmsLibApi.d.ts +1 -1
- package/wasm/tkms/loadKmsLib.js +11 -2
- package/wasm/tkms/v0.14.0-1/kms_lib.d.ts +598 -0
- package/wasm/tkms/v0.14.0-1/kms_lib.js +2055 -0
- package/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm +0 -0
- package/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.d.ts +3 -0
- package/wasm/tkms/v0.14.0-1/kms_lib_bg.wasm.base64.js +7 -0
- package/_cjs/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.js +0 -30
- package/_cjs/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.js.map +0 -1
- package/_esm/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.js +0 -27
- package/_esm/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.js.map +0 -1
- package/_types/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.d.ts +0 -14
- package/_types/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.d.ts.map +0 -1
- package/core/utils-p/decrypt/verifyKmsUserDecryptEip712V2.ts +0 -43
|
@@ -36,16 +36,38 @@ export {
|
|
|
36
36
|
fetchEncryptedValues,
|
|
37
37
|
} from './fetchEncryptedValues.js';
|
|
38
38
|
|
|
39
|
-
// v13
|
|
39
|
+
// V1 permit (protocol v13 and below) — kept for chains/relayers not yet on v14.
|
|
40
40
|
export {
|
|
41
41
|
type CreateUnsignedLegacyDecryptionPermitEip712Parameters,
|
|
42
42
|
type CreateUnsignedLegacyDecryptionPermitEip712ReturnType,
|
|
43
43
|
createUnsignedLegacyDecryptionPermitEip712,
|
|
44
44
|
} from './createUnsignedLegacyDecryptionPermitEip712.js';
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
export {
|
|
47
|
+
type CanUseUnifiedDecryptionPermitParameters,
|
|
48
|
+
type CanUseUnifiedDecryptionPermitReturnType,
|
|
49
|
+
canUseUnifiedDecryptionPermit,
|
|
50
|
+
} from './canUseUnifiedDecryptionPermit.js';
|
|
51
|
+
|
|
52
|
+
// V1 permit (protocol v13 and below) — kept for chains/relayers not yet on v14.
|
|
47
53
|
export {
|
|
48
54
|
type SignLegacyDecryptionPermitParameters,
|
|
49
55
|
type SignLegacyDecryptionPermitReturnType,
|
|
50
56
|
signLegacyDecryptionPermit,
|
|
51
57
|
} from './signLegacyDecryptionPermit.js';
|
|
58
|
+
|
|
59
|
+
// V2 permit (protocol v14 and above) — requires an SDK on protocol API v0.14.0+
|
|
60
|
+
// and a chain whose KMSVerifier/ProtocolConfig support the unified extraData v2.
|
|
61
|
+
export {
|
|
62
|
+
type CreateUnsignedUnifiedDecryptionPermitEip712Parameters,
|
|
63
|
+
type CreateUnsignedUnifiedDecryptionPermitEip712ReturnType,
|
|
64
|
+
createUnsignedUnifiedDecryptionPermitEip712,
|
|
65
|
+
} from './createUnsignedUnifiedDecryptionPermitEip712.js';
|
|
66
|
+
|
|
67
|
+
// V2 permit (protocol v14 and above) — requires an SDK on protocol API v0.14.0+
|
|
68
|
+
// and a chain whose KMSVerifier/ProtocolConfig support the unified extraData v2.
|
|
69
|
+
export {
|
|
70
|
+
type SignUnifiedDecryptionPermitParameters,
|
|
71
|
+
type SignUnifiedDecryptionPermitReturnType,
|
|
72
|
+
signUnifiedDecryptionPermit,
|
|
73
|
+
} from './signUnifiedDecryptionPermit.js';
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Fhevm } from '../../types/coreFhevmClient.js';
|
|
2
|
+
import type { FhevmChain } from '../../types/fhevmChain.js';
|
|
3
|
+
import type { SignedDecryptionPermit } from '../../types/signedDecryptionPermit.js';
|
|
4
|
+
import type { NativeSigner } from '../../modules/ethereum/types.js';
|
|
5
|
+
import type { TransportKeyPair } from '../decrypt/index.js';
|
|
6
|
+
import { signDecryptionPermitV2 as signUnifiedDecryptionPermit_ } from '../../kms/SignedDecryptionPermitV2-p.js';
|
|
7
|
+
import { initPublicAction } from '../../runtime/CoreFhevm-p.js';
|
|
8
|
+
|
|
9
|
+
export type SignUnifiedDecryptionPermitParameters = {
|
|
10
|
+
readonly contractAddresses: readonly string[];
|
|
11
|
+
readonly startTimestamp: number;
|
|
12
|
+
readonly durationSeconds: number;
|
|
13
|
+
readonly signerAddress: string;
|
|
14
|
+
readonly signer: NativeSigner;
|
|
15
|
+
readonly delegatorAddress?: string | undefined;
|
|
16
|
+
readonly transportKeyPair: TransportKeyPair;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type SignUnifiedDecryptionPermitReturnType = SignedDecryptionPermit;
|
|
20
|
+
|
|
21
|
+
export async function signUnifiedDecryptionPermit(
|
|
22
|
+
fhevm: Fhevm<FhevmChain>,
|
|
23
|
+
parameters: SignUnifiedDecryptionPermitParameters,
|
|
24
|
+
): Promise<SignUnifiedDecryptionPermitReturnType> {
|
|
25
|
+
const fhevmContext = await initPublicAction(fhevm);
|
|
26
|
+
return signUnifiedDecryptionPermit_(fhevm, { ...parameters, fhevmContext });
|
|
27
|
+
}
|
|
@@ -38,7 +38,9 @@ export async function resolveChainId(
|
|
|
38
38
|
const chainId = asUint64BigInt(await fhevm.runtime.ethereum.getChainId(trustedClient));
|
|
39
39
|
|
|
40
40
|
if (resolvedId !== chainId) {
|
|
41
|
-
|
|
41
|
+
const message = `Chain id mismatch: connected to chain ${chainId}, but expected chain ${resolvedId}`;
|
|
42
|
+
fhevm.runtime.config.logger?.error?.(message, undefined);
|
|
43
|
+
throw new Error(message);
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
return resolvedId;
|
|
@@ -49,6 +49,11 @@ import {
|
|
|
49
49
|
type SignLegacyDecryptionPermitParameters,
|
|
50
50
|
type SignLegacyDecryptionPermitReturnType,
|
|
51
51
|
} from '../../actions/base/signLegacyDecryptionPermit.js';
|
|
52
|
+
import {
|
|
53
|
+
signUnifiedDecryptionPermit,
|
|
54
|
+
type SignUnifiedDecryptionPermitParameters,
|
|
55
|
+
type SignUnifiedDecryptionPermitReturnType,
|
|
56
|
+
} from '../../actions/base/signUnifiedDecryptionPermit.js';
|
|
52
57
|
|
|
53
58
|
////////////////////////////////////////////////////////////////////////////////
|
|
54
59
|
|
|
@@ -145,6 +150,21 @@ export type BaseActions = {
|
|
|
145
150
|
readonly signLegacyDecryptionPermit: (
|
|
146
151
|
parameters: SignLegacyDecryptionPermitParameters,
|
|
147
152
|
) => Promise<SignLegacyDecryptionPermitReturnType>;
|
|
153
|
+
/**
|
|
154
|
+
* Signs a unified decryption permit (V2).
|
|
155
|
+
*
|
|
156
|
+
* Requires an SDK on protocol API v0.14.0+ and a chain whose KMSVerifier/ProtocolConfig
|
|
157
|
+
* support the unified extraData v2 — throws if the connected chain has not yet upgraded.
|
|
158
|
+
*
|
|
159
|
+
* - Without `delegatorAddress`: Alice signs to decrypt her own encrypted values.
|
|
160
|
+
* - With `delegatorAddress`: Bob signs to decrypt values belonging to `delegatorAddress` (Alice),
|
|
161
|
+
* after Alice has granted permission via `FHE.delegateUserDecryption()` on-chain.
|
|
162
|
+
*
|
|
163
|
+
* Inspect `isDelegated` on the returned permit to distinguish the two cases.
|
|
164
|
+
*/
|
|
165
|
+
readonly signUnifiedDecryptionPermit: (
|
|
166
|
+
parameters: SignUnifiedDecryptionPermitParameters,
|
|
167
|
+
) => Promise<SignUnifiedDecryptionPermitReturnType>;
|
|
148
168
|
/** Deserializes a previously serialized e2e transport key pair back into a usable key pair. */
|
|
149
169
|
readonly parseTransportKeyPair: (
|
|
150
170
|
parameters: ParseTransportKeyPairParameters,
|
|
@@ -176,6 +196,7 @@ function _baseActions(fhevm: Fhevm<FhevmChain>): BaseActions {
|
|
|
176
196
|
decryptPublicValuesWithSignatures: (parameters) => decryptPublicValuesWithSignatures(fhevm, parameters),
|
|
177
197
|
signDecryptionPermit: (parameters) => signDecryptionPermit(fhevm, parameters),
|
|
178
198
|
signLegacyDecryptionPermit: (parameters) => signLegacyDecryptionPermit(fhevm, parameters),
|
|
199
|
+
signUnifiedDecryptionPermit: (parameters) => signUnifiedDecryptionPermit(fhevm, parameters),
|
|
179
200
|
parseTransportKeyPair: (parameters) => parseTransportKeyPair(fhevm, parameters),
|
|
180
201
|
serializeTransportKeyPair: (parameters) => serializeTransportKeyPair(fhevm, parameters),
|
|
181
202
|
serializeSignedDecryptionPermit: (parameters) => serializeSignedDecryptionPermit(fhevm, parameters),
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { FhevmErrorBaseParams } from './FhevmErrorBase.js';
|
|
2
|
+
import type { Prettify } from '../types/utils.js';
|
|
3
|
+
import { FhevmErrorBase } from './FhevmErrorBase.js';
|
|
4
|
+
|
|
5
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
6
|
+
// Erc1271VerificationError
|
|
7
|
+
//
|
|
8
|
+
// Definitive, client-side rejections of a user-decryption signature, mirroring
|
|
9
|
+
// the shared `user-decryption-signature` crate's error taxonomy. Thrown
|
|
10
|
+
// fail-fast (matching the relayer's sync 400). Only definitive failures throw;
|
|
11
|
+
// see `verifyErc1271UserDecrypt` for how inconclusive outcomes are handled.
|
|
12
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
13
|
+
|
|
14
|
+
export type Erc1271VerificationErrorParams = Prettify<Omit<FhevmErrorBaseParams, 'name' | 'message'>>;
|
|
15
|
+
|
|
16
|
+
/** Base class for all definitive ERC-1271 / EOA signature rejections. */
|
|
17
|
+
export abstract class Erc1271VerificationError extends FhevmErrorBase {}
|
|
18
|
+
|
|
19
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
20
|
+
|
|
21
|
+
export type Erc1271EoaMismatchNoCodeErrorType = Erc1271EoaMismatchNoCodeError & {
|
|
22
|
+
name: 'Erc1271EoaMismatchNoCodeError';
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/** ecrecover did not match `userAddress` and `userAddress` has no contract code. */
|
|
26
|
+
export class Erc1271EoaMismatchNoCodeError extends Erc1271VerificationError {
|
|
27
|
+
constructor(params: Erc1271VerificationErrorParams & { userAddress: string }) {
|
|
28
|
+
super({
|
|
29
|
+
...params,
|
|
30
|
+
name: 'Erc1271EoaMismatchNoCodeError',
|
|
31
|
+
message: `ecrecover signer mismatch and userAddress ${params.userAddress} has no contract code on the host chain`,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
37
|
+
|
|
38
|
+
export type Erc1271EmptySigOnEoaErrorType = Erc1271EmptySigOnEoaError & {
|
|
39
|
+
name: 'Erc1271EmptySigOnEoaError';
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
/** An empty signature was supplied but `userAddress` has no contract code. */
|
|
43
|
+
export class Erc1271EmptySigOnEoaError extends Erc1271VerificationError {
|
|
44
|
+
constructor(params: Erc1271VerificationErrorParams & { userAddress: string }) {
|
|
45
|
+
super({
|
|
46
|
+
...params,
|
|
47
|
+
name: 'Erc1271EmptySigOnEoaError',
|
|
48
|
+
message: `empty signature is only valid for contracts; userAddress ${params.userAddress} has no contract code`,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
54
|
+
|
|
55
|
+
export type Erc1271WrongMagicErrorType = Erc1271WrongMagicError & {
|
|
56
|
+
name: 'Erc1271WrongMagicError';
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/** `isValidSignature` returned a non-magic value. */
|
|
60
|
+
export class Erc1271WrongMagicError extends Erc1271VerificationError {
|
|
61
|
+
constructor(params: Erc1271VerificationErrorParams & { userAddress: string; magicValue: string }) {
|
|
62
|
+
super({
|
|
63
|
+
...params,
|
|
64
|
+
name: 'Erc1271WrongMagicError',
|
|
65
|
+
message: `ERC-1271 isValidSignature returned non-magic value ${params.magicValue} for userAddress ${params.userAddress}`,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
71
|
+
|
|
72
|
+
export type Erc1271RejectedErrorType = Erc1271RejectedError & {
|
|
73
|
+
name: 'Erc1271RejectedError';
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/** `isValidSignature` reverted or returned malformed data. */
|
|
77
|
+
export class Erc1271RejectedError extends Erc1271VerificationError {
|
|
78
|
+
constructor(params: Erc1271VerificationErrorParams & { userAddress: string; detail: string }) {
|
|
79
|
+
super({
|
|
80
|
+
...params,
|
|
81
|
+
name: 'Erc1271RejectedError',
|
|
82
|
+
message: `ERC-1271 isValidSignature reverted or returned malformed data for userAddress ${params.userAddress}: ${params.detail}`,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -240,6 +240,7 @@ export function cloneFhevmClientFrozenContext(value: FhevmClientFrozenContext):
|
|
|
240
240
|
readonly pubKeyCrsVersion?: PubKeyCrsVersionResolution | undefined;
|
|
241
241
|
readonly tfheVersion?: TfheVersion | undefined;
|
|
242
242
|
readonly tkmsVersion?: TkmsVersion | undefined;
|
|
243
|
+
readonly relayerSupportsV3UserDecryptRoute: boolean;
|
|
243
244
|
};
|
|
244
245
|
|
|
245
246
|
const hostContractVersions: Partial<Record<HostContractName, HostContractVersion>> = {};
|
|
@@ -56,6 +56,11 @@ export async function resolveFhevmClientFrozenContext(fhevm: FhevmBase<FhevmChai
|
|
|
56
56
|
const kmsVerifierAddress: ChecksummedAddress = addressToChecksummedAddress(
|
|
57
57
|
asAddress(fhevm.chain.fhevm.contracts.kmsVerifier.address),
|
|
58
58
|
);
|
|
59
|
+
// ProtocolConfig only exists on v0.14+ deployments — absent on older chains.
|
|
60
|
+
const protocolConfigAddress: ChecksummedAddress | undefined =
|
|
61
|
+
fhevm.chain.fhevm.contracts.protocolConfig === undefined
|
|
62
|
+
? undefined
|
|
63
|
+
: addressToChecksummedAddress(asAddress(fhevm.chain.fhevm.contracts.protocolConfig.address));
|
|
59
64
|
|
|
60
65
|
// Design note — reads are intentionally NOT pinned to a block number.
|
|
61
66
|
// All protocol contracts (ACL, KMSVerifier, InputVerifier, ProtocolConfig, …)
|
|
@@ -63,18 +68,25 @@ export async function resolveFhevmClientFrozenContext(fhevm: FhevmBase<FhevmChai
|
|
|
63
68
|
// `getVersion()` in one step, so this batch either all observes the pre-upgrade
|
|
64
69
|
// versions or all observes the post-upgrade ones — never a mixed, half-applied
|
|
65
70
|
// state. Capturing the whole basis in one call is what keeps it coherent.
|
|
66
|
-
const [aclVersion, inputVerifierVersion, kmsVerifierVersion] =
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
71
|
+
const [aclVersion, inputVerifierVersion, kmsVerifierVersion, protocolConfigVersion] =
|
|
72
|
+
(await executeWithBatching<unknown>(
|
|
73
|
+
[
|
|
74
|
+
() => getHostContractVersion(fhevm, { address: aclAddress }),
|
|
75
|
+
() => getHostContractVersion(fhevm, { address: inputVerifierAddress }),
|
|
76
|
+
() => getHostContractVersion(fhevm, { address: kmsVerifierAddress }),
|
|
77
|
+
...(protocolConfigAddress === undefined
|
|
78
|
+
? []
|
|
79
|
+
: [() => getHostContractVersion(fhevm, { address: protocolConfigAddress })]),
|
|
80
|
+
],
|
|
81
|
+
fhevm.options.batchRpcCalls,
|
|
82
|
+
)) as [HostContractVersion, HostContractVersion, HostContractVersion, HostContractVersion | undefined];
|
|
74
83
|
|
|
75
84
|
assertIsHostContractVersionOf(aclVersion, 'ACL');
|
|
76
85
|
assertIsHostContractVersionOf(inputVerifierVersion, 'InputVerifier');
|
|
77
86
|
assertIsHostContractVersionOf(kmsVerifierVersion, 'KMSVerifier');
|
|
87
|
+
if (protocolConfigVersion !== undefined) {
|
|
88
|
+
assertIsHostContractVersionOf(protocolConfigVersion, 'ProtocolConfig');
|
|
89
|
+
}
|
|
78
90
|
|
|
79
91
|
const protocolContext = protocolContextFromAclVersion(fhevm.chain, aclVersion);
|
|
80
92
|
|
|
@@ -86,6 +98,7 @@ export async function resolveFhevmClientFrozenContext(fhevm: FhevmBase<FhevmChai
|
|
|
86
98
|
ACL: aclVersion,
|
|
87
99
|
InputVerifier: inputVerifierVersion,
|
|
88
100
|
KMSVerifier: kmsVerifierVersion,
|
|
101
|
+
...(protocolConfigVersion === undefined ? {} : { ProtocolConfig: protocolConfigVersion }),
|
|
89
102
|
},
|
|
90
103
|
protocolVersion: protocolContext.protocolVersion,
|
|
91
104
|
pubKeyCrsVersion: protocolContext.pubKeyCrsVersion,
|
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
} from '../kms/kmsExtraData-p.js';
|
|
16
16
|
import { getKmsContextSignersAndThresholdFromExtraData } from './getKmsContextSignersAndThresholdFromExtraData-p.js';
|
|
17
17
|
import { getKmsSignersAndThreshold } from './getKmsContextSignersAndThreshold-p.js';
|
|
18
|
-
import { SDK_PROTOCOL_API_MAJOR_VERSION, SDK_PROTOCOL_API_MINOR_VERSION } from '../runtime/sdkProtocolApiVersion.js';
|
|
19
18
|
|
|
20
19
|
////////////////////////////////////////////////////////////////////////////////
|
|
21
20
|
|
|
@@ -42,15 +41,6 @@ type ReturnType = KmsSignersContext;
|
|
|
42
41
|
//
|
|
43
42
|
// Invariant — a KmsSignersContext carries the key it was indexed by.
|
|
44
43
|
//
|
|
45
|
-
// CRITICAL RULE — a v13-capped SDK must NEVER produce extraData v2.
|
|
46
|
-
// The extraData version the SDK emits is gated by the RELAYER, not by the host
|
|
47
|
-
// contracts: a v13 relayer rejects an unknown v2 `extraData` in its request
|
|
48
|
-
// validation (HTTP 400 `validation_failed`), so the request never reaches the KMS.
|
|
49
|
-
// This matters most during a v13 -> v14 rollout: the host contracts can already
|
|
50
|
-
// support v2 while the relayer is still v13, so "the chain accepts v2" is NOT
|
|
51
|
-
// sufficient — the SDK stays at v1 until the relayer is known to accept v2.
|
|
52
|
-
// Hence the per-version cap enforced below.
|
|
53
|
-
//
|
|
54
44
|
////////////////////////////////////////////////////////////////////////////////
|
|
55
45
|
|
|
56
46
|
/**
|
|
@@ -58,25 +48,20 @@ type ReturnType = KmsSignersContext;
|
|
|
58
48
|
* indexed on the **best `extraData` this SDK can produce** for that context.
|
|
59
49
|
*
|
|
60
50
|
* This is the read used when *creating* a permit: the returned context's `extraData`
|
|
61
|
-
* is what the permit embeds and the user signs.
|
|
62
|
-
*
|
|
63
|
-
* - the on-chain KMSVerifier version (which encodings the contract supports), and
|
|
64
|
-
* - this SDK's protocol-API cap ({@link SDK_PROTOCOL_API_MINOR_VERSION}) — the most
|
|
65
|
-
* recent `extraData` version the SDK knows how to build and sign.
|
|
51
|
+
* is what the permit embeds and the user signs. "Best" is bounded by the on-chain
|
|
52
|
+
* KMSVerifier version — which encodings the contract supports.
|
|
66
53
|
*
|
|
67
|
-
* The returned encoding
|
|
54
|
+
* The returned encoding:
|
|
68
55
|
* - v11 (KMSVerifier < 0.2.0) → v0 (no context concept)
|
|
69
|
-
* - >= 0.2.0 but
|
|
56
|
+
* - >= 0.2.0 but KMSVerifier < 0.4.0,
|
|
70
57
|
* or no `protocolConfigAddress` → v1 (`contextId` only)
|
|
71
58
|
* - v14 chain (KMSVerifier >= 0.4.0, `protocolConfigAddress`
|
|
72
|
-
* set)
|
|
59
|
+
* set) → v2 (`contextId` + `epochId`)
|
|
73
60
|
*
|
|
74
|
-
* NOTE —
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* *already-chosen* permit `extraData` to the most precise context available — here we
|
|
79
|
-
* instead choose the most precise encoding we are *allowed to produce*.
|
|
61
|
+
* NOTE — this differs from {@link readKmsSignersContextFromPermitExtraData}, which
|
|
62
|
+
* resolves an *already-chosen* permit `extraData` to the most precise context
|
|
63
|
+
* available — here we instead choose the most precise encoding we are *allowed to
|
|
64
|
+
* produce*.
|
|
80
65
|
*/
|
|
81
66
|
export async function readCurrentKmsSignersContext(context: Context, parameters: Parameters): Promise<ReturnType> {
|
|
82
67
|
// This version comes from the frozen context — a snapshot, NOT necessarily the
|
|
@@ -93,16 +78,6 @@ export async function readCurrentKmsSignersContext(context: Context, parameters:
|
|
|
93
78
|
return _readCurrentKmsSignersContext_ProtocolApi_11(context, parameters);
|
|
94
79
|
}
|
|
95
80
|
|
|
96
|
-
// If SDK is restricted to protocol API v13 then the best extraData
|
|
97
|
-
// we can get it must be v1
|
|
98
|
-
// KMSVerifier.version >= 0.2.0, it supports at least API Protocol 13
|
|
99
|
-
if (SDK_PROTOCOL_API_MAJOR_VERSION === 0 && SDK_PROTOCOL_API_MINOR_VERSION <= 13) {
|
|
100
|
-
// -> KmsSignersContext.extraData.version == 1
|
|
101
|
-
return _readCurrentKmsSignersContext_ProtocolApi_12_13(context, parameters);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// API Protocol 14+
|
|
105
|
-
|
|
106
81
|
// KMSVerifier.version < 0.4.0, use only Protocol API v13
|
|
107
82
|
if (
|
|
108
83
|
isVersionStrictlyBefore(kmsVerifierVersion, { major: 0, minor: 4 }) ||
|
|
@@ -203,17 +178,6 @@ async function _readCurrentKmsSignersContext_ProtocolApi_14_or_higher(
|
|
|
203
178
|
context: Context,
|
|
204
179
|
parameters: Parameters,
|
|
205
180
|
): Promise<ReturnType> {
|
|
206
|
-
// Defense-in-depth for the CRITICAL RULE above: this is the only function that
|
|
207
|
-
// MINTS an extraData v2. It must never run under a v13-capped SDK. The caller
|
|
208
|
-
// (readCurrentKmsSignersContext) already gates on SDK_PROTOCOL_API_MINOR_VERSION,
|
|
209
|
-
// so reaching here with a capped SDK means that gate was bypassed/refactored away
|
|
210
|
-
// — fail loudly rather than silently emit a v2 the relayer would reject.
|
|
211
|
-
if (SDK_PROTOCOL_API_MAJOR_VERSION === 0 && SDK_PROTOCOL_API_MINOR_VERSION <= 13) {
|
|
212
|
-
throw new Error(
|
|
213
|
-
`Refusing to produce extraData v2: this SDK is capped at protocol API v0.${SDK_PROTOCOL_API_MINOR_VERSION} and must only emit extraData v1 (a v13 relayer rejects v2).`,
|
|
214
|
-
);
|
|
215
|
-
}
|
|
216
|
-
|
|
217
181
|
if (parameters.protocolConfigAddress === undefined) {
|
|
218
182
|
throw new Error('protocolConfigAddress is required on protocol v0.14.0+');
|
|
219
183
|
}
|
|
@@ -314,6 +314,12 @@ export class FheEncryptionKeyCache {
|
|
|
314
314
|
if (this.#cache.get(relayerUrl) === entry) {
|
|
315
315
|
this.#cache.delete(relayerUrl);
|
|
316
316
|
}
|
|
317
|
+
entry.owner
|
|
318
|
+
.deref()
|
|
319
|
+
?.config.logger?.error?.(
|
|
320
|
+
`FheEncryptionKeyCache: ${resolvedKind === 'bytes' ? 'fetch' : 'conversion to wasm'} failed for relayerUrl="${relayerUrl}". Evicting cache entry; the next call will re-fetch.`,
|
|
321
|
+
err,
|
|
322
|
+
);
|
|
317
323
|
throw err;
|
|
318
324
|
},
|
|
319
325
|
);
|
|
@@ -19,12 +19,28 @@ export async function fetchFheEncryptionKeyWasm(
|
|
|
19
19
|
): Promise<FheEncryptionKeyWasm> {
|
|
20
20
|
const relayerUrl = context.chain.fhevm.relayerUrl;
|
|
21
21
|
const runtime = context.runtime;
|
|
22
|
+
const logger = runtime.config.logger;
|
|
22
23
|
|
|
23
24
|
// Ensure a bytes fetch is in-flight
|
|
24
25
|
globalFheEncryptionKeyCache.ensureBytes({
|
|
25
26
|
owner: runtime,
|
|
26
27
|
relayerUrl,
|
|
27
|
-
fetcher: () =>
|
|
28
|
+
fetcher: async () => {
|
|
29
|
+
logger?.debug?.(
|
|
30
|
+
`Fetching FHE encryption key/CRS bytes from relayer "${relayerUrl}" (chainId=${context.chain.id}).`,
|
|
31
|
+
);
|
|
32
|
+
try {
|
|
33
|
+
const bytes = await runtime.relayer.fetchFheEncryptionKeyBytes(
|
|
34
|
+
{ relayerUrl, chainId: context.chain.id },
|
|
35
|
+
parameters,
|
|
36
|
+
);
|
|
37
|
+
logger?.debug?.(`Fetched FHE encryption key/CRS bytes from relayer "${relayerUrl}".`);
|
|
38
|
+
return bytes;
|
|
39
|
+
} catch (e) {
|
|
40
|
+
logger?.error?.(`Failed to fetch FHE encryption key/CRS bytes from relayer "${relayerUrl}".`, e);
|
|
41
|
+
throw e;
|
|
42
|
+
}
|
|
43
|
+
},
|
|
28
44
|
metadata: { chainId: context.chain.id, relayerUrl },
|
|
29
45
|
});
|
|
30
46
|
|
|
@@ -6,21 +6,14 @@ import type { ErrorMetadataParams } from '../base/errors/ErrorBase.js';
|
|
|
6
6
|
import type { NativeSigner } from '../modules/ethereum/types.js';
|
|
7
7
|
import type { TransportKeyPair } from './TransportKeyPair-p.js';
|
|
8
8
|
import type { FhevmClientFrozenContext } from '../types/fhevmClientFrozenContext-p.js';
|
|
9
|
-
import type { BytesHex } from '../types/primitives.js';
|
|
10
9
|
import { InvalidTypeError } from '../base/errors/InvalidTypeError.js';
|
|
11
10
|
import {
|
|
12
11
|
isSignedDecryptionPermitV1,
|
|
13
12
|
parseSignedDecryptionPermitV1,
|
|
14
13
|
signDecryptionPermitV1,
|
|
15
14
|
} from './SignedDecryptionPermitV1-p.js';
|
|
16
|
-
import {
|
|
17
|
-
isSignedDecryptionPermitV2,
|
|
18
|
-
parseSignedDecryptionPermitV2,
|
|
19
|
-
signDecryptionPermitV2,
|
|
20
|
-
} from './SignedDecryptionPermitV2-p.js';
|
|
15
|
+
import { isSignedDecryptionPermitV2, parseSignedDecryptionPermitV2 } from './SignedDecryptionPermitV2-p.js';
|
|
21
16
|
import { isRecordUintNumberProperty, isUintNumber } from '../base/uint.js';
|
|
22
|
-
import { SDK_PROTOCOL_API_MAJOR_VERSION, SDK_PROTOCOL_API_MINOR_VERSION } from '../runtime/sdkProtocolApiVersion.js';
|
|
23
|
-
import { createKmsExtraDataFromBytesHex, EXTRA_DATA_V2 } from './kmsExtraData-p.js';
|
|
24
17
|
|
|
25
18
|
////////////////////////////////////////////////////////////////////////////////
|
|
26
19
|
|
|
@@ -159,15 +152,11 @@ export async function signDecryptionPermit(
|
|
|
159
152
|
context: KmsSignDecryptionPermitContext,
|
|
160
153
|
parameters: KmsSignDecryptionPermitParameters,
|
|
161
154
|
): Promise<SignedDecryptionPermit> {
|
|
162
|
-
//
|
|
163
|
-
//
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
|
|
167
|
-
return await signDecryptionPermitV1(context, parameters);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
return await signDecryptionPermitV2(context, parameters);
|
|
155
|
+
// `signDecryptionPermit` (the public action wrapping this) is deprecated in
|
|
156
|
+
// favor of `signLegacyDecryptionPermit`/`signUnifiedDecryptionPermit`, but we
|
|
157
|
+
// deliberately keep it pinned to V1 here for good compatibility with callers
|
|
158
|
+
// that haven't migrated yet.
|
|
159
|
+
return await signDecryptionPermitV1(context, parameters);
|
|
171
160
|
}
|
|
172
161
|
|
|
173
162
|
////////////////////////////////////////////////////////////////////////////////
|
|
@@ -223,29 +212,6 @@ function _normalizeSerializedPermitDomainChainId(permit: unknown): unknown {
|
|
|
223
212
|
};
|
|
224
213
|
}
|
|
225
214
|
|
|
226
|
-
/**
|
|
227
|
-
* Reads the `extraData` version carried by a serialized permit, or `undefined` when
|
|
228
|
-
* the permit exposes no decodable `extraData` (missing, wrong type, or malformed —
|
|
229
|
-
* left to the downstream permit validation to report with proper context).
|
|
230
|
-
*
|
|
231
|
-
* Navigates `permit.eip712.message.extraData` defensively (the permit is untrusted
|
|
232
|
-
* input). Used to enforce the SDK protocol-API cap at parse time — see the CRITICAL
|
|
233
|
-
* RULE in `readKmsSignersContext-p.ts`.
|
|
234
|
-
*/
|
|
235
|
-
function _parsePermitExtraDataVersion(permit: unknown): number | undefined {
|
|
236
|
-
const extraData = (
|
|
237
|
-
permit as { readonly eip712?: { readonly message?: { readonly extraData?: unknown } } } | null | undefined
|
|
238
|
-
)?.eip712?.message?.extraData;
|
|
239
|
-
if (typeof extraData !== 'string') {
|
|
240
|
-
return undefined;
|
|
241
|
-
}
|
|
242
|
-
try {
|
|
243
|
-
return createKmsExtraDataFromBytesHex(extraData as BytesHex).version;
|
|
244
|
-
} catch {
|
|
245
|
-
return undefined;
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
|
|
249
215
|
export async function parseSignedDecryptionPermit(
|
|
250
216
|
context: KmsSignDecryptionPermitContext,
|
|
251
217
|
parameters: {
|
|
@@ -271,26 +237,6 @@ export async function parseSignedDecryptionPermit(
|
|
|
271
237
|
// version is 1 or 2
|
|
272
238
|
const version: 1 | 2 = sanitizedVersion as 1 | 2;
|
|
273
239
|
|
|
274
|
-
// Enforce the SDK protocol-API cap (see the CRITICAL RULE in readKmsSignersContext-p.ts):
|
|
275
|
-
// a v13-capped SDK must never accept a v2 permit, because a v13 relayer rejects it.
|
|
276
|
-
// A v2 can arrive two independent ways; each is rejected here with its own message,
|
|
277
|
-
// up front, instead of an opaque relayer 400 later (mirrors decryptValuesFromPairs).
|
|
278
|
-
if (SDK_PROTOCOL_API_MAJOR_VERSION === 0 && SDK_PROTOCOL_API_MINOR_VERSION <= 13) {
|
|
279
|
-
// (a) A V2-format permit.
|
|
280
|
-
if (version > 1) {
|
|
281
|
-
throw new Error(
|
|
282
|
-
`Refusing to parse a V2-format decryption permit (version ${version}): this SDK is capped at protocol API v0.${SDK_PROTOCOL_API_MINOR_VERSION} and only supports V1 permits. V2 permits require an SDK on protocol API v0.14.0 or later.`,
|
|
283
|
-
);
|
|
284
|
-
}
|
|
285
|
-
const extraDataVersion = _parsePermitExtraDataVersion(sanitizedPermit);
|
|
286
|
-
// (b) A v2 extraData — including one carried inside a V1-format permit.
|
|
287
|
-
if (extraDataVersion !== undefined && extraDataVersion >= EXTRA_DATA_V2) {
|
|
288
|
-
throw new Error(
|
|
289
|
-
`Refusing to parse a permit carrying extraData v2: this SDK is capped at protocol API v0.${SDK_PROTOCOL_API_MINOR_VERSION} and only accepts extraData v0/v1 (a v13 relayer rejects extraData v2). Use an SDK on protocol API v0.14.0 or later.`,
|
|
290
|
-
);
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
|
|
294
240
|
if (version === 1) {
|
|
295
241
|
return await parseSignedDecryptionPermitV1(context, { transportKeyPair, permit: sanitizedPermit, fhevmContext });
|
|
296
242
|
}
|