@zerodev/sdk 4.6.10 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,11 @@
1
1
  import type { ZeroDevProvider } from "../provider.js";
2
2
  import { type UserOperationStruct, type BigNumberish } from "@alchemy/aa-core";
3
+ import { BaseError } from "viem";
3
4
  import { type PaymasterAndBundlerProviders } from "../paymaster/types.js";
5
+ export declare class Eip1559FeesNotSupportedError extends BaseError {
6
+ name: string;
7
+ constructor();
8
+ }
4
9
  export declare const withZeroDevGasEstimator: (provider: ZeroDevProvider) => ZeroDevProvider;
5
10
  export declare const estimateCreationGas: (provider: ZeroDevProvider, initCode?: string) => Promise<bigint>;
6
11
  export declare const getPreVerificationGas: (userOp: Partial<UserOperationStruct>) => Promise<number>;
@@ -1,9 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getFeeData = exports.eip1559GasPrice = exports.GAS_PRICE_RPC_METHODS_BY_BUNDLER = exports.getPreVerificationGas = exports.estimateCreationGas = exports.withZeroDevGasEstimator = void 0;
3
+ exports.getFeeData = exports.eip1559GasPrice = exports.GAS_PRICE_RPC_METHODS_BY_BUNDLER = exports.getPreVerificationGas = exports.estimateCreationGas = exports.withZeroDevGasEstimator = exports.Eip1559FeesNotSupportedError = void 0;
4
4
  const aa_core_1 = require("@alchemy/aa-core");
5
+ const viem_1 = require("viem");
5
6
  const constants_js_1 = require("../constants.js");
6
7
  const calc_pre_verification_gas_js_1 = require("../utils/calc-pre-verification-gas.js");
8
+ class Eip1559FeesNotSupportedError extends viem_1.BaseError {
9
+ constructor() {
10
+ super("Chain does not support EIP-1559 fees.");
11
+ Object.defineProperty(this, "name", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: "Eip1559FeesNotSupportedError"
16
+ });
17
+ }
18
+ }
19
+ exports.Eip1559FeesNotSupportedError = Eip1559FeesNotSupportedError;
7
20
  const withZeroDevGasEstimator = (provider) => {
8
21
  provider.withFeeDataGetter(async (struct) => {
9
22
  let overrides = await (0, aa_core_1.resolveProperties)({
@@ -57,11 +70,10 @@ const withZeroDevGasEstimator = (provider) => {
57
70
  userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(request, constants_js_1.ENTRYPOINT_ADDRESS);
58
71
  const { preVerificationGas, verificationGasLimit, callGasLimit } = userOpGasEstimates;
59
72
  request.preVerificationGas =
60
- (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;
73
+ BigInt(preVerificationGas) ?? request.preVerificationGas;
61
74
  request.verificationGasLimit =
62
75
  BigInt(verificationGasLimit) ?? request.verificationGasLimit;
63
- request.callGasLimit =
64
- (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;
76
+ request.callGasLimit = BigInt(callGasLimit) ?? request.callGasLimit;
65
77
  return {
66
78
  ...struct,
67
79
  ...request,
@@ -105,20 +117,15 @@ const eip1559GasPrice = async (provider) => {
105
117
  if (provider.bundlerProvider === "PIMLICO") {
106
118
  fee = fee.standard.maxPriorityFeePerGas;
107
119
  }
108
- const tip = BigInt(fee);
109
- const buffer = (tip / 100n) *
110
- BigInt(provider.feeOptions.maxPriorityFeePerGasBufferPercentage);
111
- let maxPriorityFeePerGas = tip + buffer;
112
- maxPriorityFeePerGas =
113
- maxPriorityFeePerGas < provider.minPriorityFeePerBid
114
- ? provider.minPriorityFeePerBid
115
- : maxPriorityFeePerGas;
116
- const maxFeePerGas = ((block.baseFeePerGas
117
- ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas
118
- : maxPriorityFeePerGas) *
119
- (BigInt(100) +
120
- BigInt(provider.feeOptions.maxFeePerGasBufferPercentage))) /
121
- 100n;
120
+ if (typeof block.baseFeePerGas !== "bigint")
121
+ throw new Eip1559FeesNotSupportedError();
122
+ const baseFeeMultiplier = 1.2;
123
+ const decimals = baseFeeMultiplier.toString().split(".")[1].length;
124
+ const denominator = 10 ** decimals;
125
+ const multiply = (base) => (base * BigInt(baseFeeMultiplier * denominator)) / BigInt(denominator);
126
+ const maxPriorityFeePerGas = BigInt(fee);
127
+ const baseFeePerGas = multiply(block.baseFeePerGas);
128
+ const maxFeePerGas = baseFeePerGas + maxPriorityFeePerGas;
122
129
  return { maxFeePerGas, maxPriorityFeePerGas };
123
130
  };
124
131
  exports.eip1559GasPrice = eip1559GasPrice;
@@ -1 +1 @@
1
- {"version":3,"file":"gas-estimator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZeroDevProvider } from \"../provider.js\";\nimport {\n deepHexlify,\n type Hex,\n type UserOperationStruct,\n resolveProperties,\n type BigNumberish,\n type UserOperationEstimateGasResponse,\n} from \"@alchemy/aa-core\";\nimport { ENTRYPOINT_ADDRESS } from \"../constants.js\";\nimport { calcPreVerificationGas } from \"../utils/calc-pre-verification-gas.js\";\nimport { type PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\nexport const withZeroDevGasEstimator = (\n provider: ZeroDevProvider\n): ZeroDevProvider => {\n provider.withFeeDataGetter(async (struct) => {\n let overrides = await resolveProperties({\n maxFeePerGas: struct.maxFeePerGas,\n maxPriorityFeePerGas: struct.maxPriorityFeePerGas,\n });\n\n if (provider.bundlerProvider === \"GELATO\") {\n return { maxFeePerGas: 0n, maxPriorityFeePerGas: 0n };\n }\n\n let maxFeePerGas, maxPriorityFeePerGas;\n\n try {\n ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(\n provider\n ));\n } catch (error: any) {\n console.warn(\n \"getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price.\"\n );\n }\n\n if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {\n const feeData = await getFeeData(provider);\n maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;\n maxPriorityFeePerGas = feeData.maxPriorityFeePerGas\n ? BigInt(feeData.maxPriorityFeePerGas)\n : 0n;\n }\n\n if (overrides.maxFeePerGas || overrides.maxPriorityFeePerGas) {\n return {\n maxFeePerGas: overrides.maxFeePerGas ?? maxFeePerGas,\n maxPriorityFeePerGas:\n overrides.maxPriorityFeePerGas ?? maxPriorityFeePerGas,\n };\n }\n return { maxFeePerGas, maxPriorityFeePerGas };\n });\n\n provider.withGasEstimator(async (struct) => {\n if (\n struct.callGasLimit !== undefined &&\n struct.verificationGasLimit !== undefined &&\n struct.preVerificationGas !== undefined\n ) {\n return struct;\n }\n const initCode = await provider.account?.getInitCode();\n const initGas = await estimateCreationGas(provider, initCode);\n const partialStruct: UserOperationStruct = {\n ...struct,\n callGasLimit:\n initCode !== undefined && initCode.length > 2\n ? BigInt(\"1000000\")\n : BigInt(55000),\n verificationGasLimit: BigInt(110000) + initGas,\n preVerificationGas: BigInt(100000),\n };\n\n partialStruct.preVerificationGas = await getPreVerificationGas(\n partialStruct\n );\n\n const request = deepHexlify(await resolveProperties(partialStruct));\n let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;\n userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(\n request,\n ENTRYPOINT_ADDRESS\n );\n const { preVerificationGas, verificationGasLimit, callGasLimit } =\n userOpGasEstimates;\n request.preVerificationGas =\n (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;\n request.verificationGasLimit =\n BigInt(verificationGasLimit) ?? request.verificationGasLimit;\n request.callGasLimit =\n (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;\n\n return {\n ...struct,\n ...request,\n };\n });\n\n return provider;\n};\n\nexport const estimateCreationGas = async (\n provider: ZeroDevProvider,\n initCode?: string\n): Promise<bigint> => {\n if (initCode == null || initCode === \"0x\") return BigInt(0);\n const deployerAddress = initCode.substring(0, 42) as Hex;\n const deployerCallData = (\"0x\" + initCode.substring(42)) as Hex;\n return await provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: deployerAddress,\n data: deployerCallData,\n });\n};\n\n/**\n * should cover cost of putting calldata on-chain, and some overhead.\n * actual overhead depends on the expected bundle size\n */\nexport const getPreVerificationGas = async (\n userOp: Partial<UserOperationStruct>\n): Promise<number> => {\n const p = await resolveProperties(userOp);\n return calcPreVerificationGas(p);\n};\n\nexport const GAS_PRICE_RPC_METHODS_BY_BUNDLER: {\n [K in PaymasterAndBundlerProviders]: string;\n} = {\n STACKUP: \"eth_maxPriorityFeePerGas\",\n ALCHEMY: \"rundler_maxPriorityFeePerGas\",\n PIMLICO: \"pimlico_getUserOperationGasPrice\",\n GELATO: \"eth_maxPriorityFeePerGas\",\n};\n\nexport const eip1559GasPrice = async (provider: ZeroDevProvider) => {\n let [fee, block] = await Promise.all([\n provider.rpcClient.request({\n method:\n // @ts-expect-error\n GAS_PRICE_RPC_METHODS_BY_BUNDLER[provider.bundlerProvider] ??\n \"eth_maxPriorityFeePerGas\",\n params: [],\n }) as any,\n provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n ]);\n\n if (provider.bundlerProvider === \"PIMLICO\") {\n fee = fee.standard.maxPriorityFeePerGas;\n }\n\n const tip = BigInt(fee);\n const buffer =\n (tip / 100n) *\n BigInt(provider.feeOptions.maxPriorityFeePerGasBufferPercentage);\n let maxPriorityFeePerGas = tip + buffer;\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n const maxFeePerGas =\n ((block.baseFeePerGas\n ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas\n : maxPriorityFeePerGas) *\n (BigInt(100) +\n BigInt(provider.feeOptions.maxFeePerGasBufferPercentage))) /\n 100n;\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\ninterface FeeData {\n maxFeePerGas: BigNumberish | null;\n maxPriorityFeePerGas: BigNumberish | null;\n}\n\nexport const getFeeData = async (\n provider: ZeroDevProvider\n): Promise<FeeData> => {\n const { block, gasPrice } = await resolveProperties({\n block: provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n gasPrice: provider.rpcClient.getGasPrice().catch((error) => {\n console.warn(\"Legacy: Failed to get gas price\", error);\n return null;\n }),\n });\n\n let maxFeePerGas = null;\n let maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas != null) {\n // Set the tip to the min of the tip for the last block and 1.5 gwei\n const minimumTip = BigInt(\"1500000000\");\n maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;\n if (\n maxPriorityFeePerGas == null ||\n maxPriorityFeePerGas - BigInt(0) ||\n maxPriorityFeePerGas > minimumTip\n ) {\n maxPriorityFeePerGas = minimumTip;\n }\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n maxFeePerGas =\n block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);\n }\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\n"]}
1
+ {"version":3,"file":"gas-estimator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZeroDevProvider } from \"../provider.js\";\nimport {\n deepHexlify,\n type Hex,\n type UserOperationStruct,\n resolveProperties,\n type BigNumberish,\n type UserOperationEstimateGasResponse,\n} from \"@alchemy/aa-core\";\nimport { BaseError } from \"viem\";\nimport { ENTRYPOINT_ADDRESS } from \"../constants.js\";\nimport { calcPreVerificationGas } from \"../utils/calc-pre-verification-gas.js\";\nimport { type PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\n// @dev implement Eip1559FeesNotSupportedError message for compatibility with viem\nexport class Eip1559FeesNotSupportedError extends BaseError {\n override name = \"Eip1559FeesNotSupportedError\";\n constructor() {\n super(\"Chain does not support EIP-1559 fees.\");\n }\n}\n\nexport const withZeroDevGasEstimator = (\n provider: ZeroDevProvider\n): ZeroDevProvider => {\n provider.withFeeDataGetter(async (struct) => {\n let overrides = await resolveProperties({\n maxFeePerGas: struct.maxFeePerGas,\n maxPriorityFeePerGas: struct.maxPriorityFeePerGas,\n });\n\n if (provider.bundlerProvider === \"GELATO\") {\n return { maxFeePerGas: 0n, maxPriorityFeePerGas: 0n };\n }\n\n let maxFeePerGas, maxPriorityFeePerGas;\n\n try {\n ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(\n provider\n ));\n } catch (error: any) {\n console.warn(\n \"getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price.\"\n );\n }\n\n if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {\n const feeData = await getFeeData(provider);\n maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;\n maxPriorityFeePerGas = feeData.maxPriorityFeePerGas\n ? BigInt(feeData.maxPriorityFeePerGas)\n : 0n;\n }\n\n if (overrides.maxFeePerGas || overrides.maxPriorityFeePerGas) {\n return {\n maxFeePerGas: overrides.maxFeePerGas ?? maxFeePerGas,\n maxPriorityFeePerGas:\n overrides.maxPriorityFeePerGas ?? maxPriorityFeePerGas,\n };\n }\n return { maxFeePerGas, maxPriorityFeePerGas };\n });\n\n provider.withGasEstimator(async (struct) => {\n if (\n struct.callGasLimit !== undefined &&\n struct.verificationGasLimit !== undefined &&\n struct.preVerificationGas !== undefined\n ) {\n return struct;\n }\n const initCode = await provider.account?.getInitCode();\n const initGas = await estimateCreationGas(provider, initCode);\n const partialStruct: UserOperationStruct = {\n ...struct,\n callGasLimit:\n initCode !== undefined && initCode.length > 2\n ? BigInt(\"1000000\")\n : BigInt(55000),\n verificationGasLimit: BigInt(110000) + initGas,\n preVerificationGas: BigInt(100000),\n };\n\n partialStruct.preVerificationGas = await getPreVerificationGas(\n partialStruct\n );\n\n const request = deepHexlify(await resolveProperties(partialStruct));\n let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;\n userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(\n request,\n ENTRYPOINT_ADDRESS\n );\n const { preVerificationGas, verificationGasLimit, callGasLimit } =\n userOpGasEstimates;\n request.preVerificationGas =\n BigInt(preVerificationGas) ?? request.preVerificationGas;\n request.verificationGasLimit =\n BigInt(verificationGasLimit) ?? request.verificationGasLimit;\n request.callGasLimit = BigInt(callGasLimit) ?? request.callGasLimit;\n\n return {\n ...struct,\n ...request,\n };\n });\n\n return provider;\n};\n\nexport const estimateCreationGas = async (\n provider: ZeroDevProvider,\n initCode?: string\n): Promise<bigint> => {\n if (initCode == null || initCode === \"0x\") return BigInt(0);\n const deployerAddress = initCode.substring(0, 42) as Hex;\n const deployerCallData = (\"0x\" + initCode.substring(42)) as Hex;\n return await provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: deployerAddress,\n data: deployerCallData,\n });\n};\n\n/**\n * should cover cost of putting calldata on-chain, and some overhead.\n * actual overhead depends on the expected bundle size\n */\nexport const getPreVerificationGas = async (\n userOp: Partial<UserOperationStruct>\n): Promise<number> => {\n const p = await resolveProperties(userOp);\n return calcPreVerificationGas(p);\n};\n\nexport const GAS_PRICE_RPC_METHODS_BY_BUNDLER: {\n [K in PaymasterAndBundlerProviders]: string;\n} = {\n STACKUP: \"eth_maxPriorityFeePerGas\",\n ALCHEMY: \"rundler_maxPriorityFeePerGas\",\n PIMLICO: \"pimlico_getUserOperationGasPrice\",\n GELATO: \"eth_maxPriorityFeePerGas\",\n};\n\nexport const eip1559GasPrice = async (provider: ZeroDevProvider) => {\n let [fee, block] = await Promise.all([\n provider.rpcClient.request({\n method:\n // @ts-expect-error\n GAS_PRICE_RPC_METHODS_BY_BUNDLER[provider.bundlerProvider] ??\n \"eth_maxPriorityFeePerGas\",\n params: [],\n }) as any,\n provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n ]);\n\n if (provider.bundlerProvider === \"PIMLICO\") {\n fee = fee.standard.maxPriorityFeePerGas;\n }\n\n if (typeof block.baseFeePerGas !== \"bigint\")\n throw new Eip1559FeesNotSupportedError();\n\n // use default values of viem\n const baseFeeMultiplier = 1.2;\n const decimals = baseFeeMultiplier.toString().split(\".\")[1].length;\n const denominator = 10 ** decimals;\n const multiply = (base: bigint) =>\n (base * BigInt(baseFeeMultiplier * denominator)) / BigInt(denominator);\n\n const maxPriorityFeePerGas = BigInt(fee);\n\n const baseFeePerGas = multiply(block.baseFeePerGas);\n const maxFeePerGas = baseFeePerGas + maxPriorityFeePerGas;\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\ninterface FeeData {\n maxFeePerGas: BigNumberish | null;\n maxPriorityFeePerGas: BigNumberish | null;\n}\n\nexport const getFeeData = async (\n provider: ZeroDevProvider\n): Promise<FeeData> => {\n const { block, gasPrice } = await resolveProperties({\n block: provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n gasPrice: provider.rpcClient.getGasPrice().catch((error) => {\n console.warn(\"Legacy: Failed to get gas price\", error);\n return null;\n }),\n });\n\n let maxFeePerGas = null;\n let maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas != null) {\n // Set the tip to the min of the tip for the last block and 1.5 gwei\n const minimumTip = BigInt(\"1500000000\");\n maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;\n if (\n maxPriorityFeePerGas == null ||\n maxPriorityFeePerGas - BigInt(0) ||\n maxPriorityFeePerGas > minimumTip\n ) {\n maxPriorityFeePerGas = minimumTip;\n }\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n maxFeePerGas =\n block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);\n }\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n} from \"./base.js\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n getContract,\n parseAbiParameters,\n type LocalAccount,\n createWalletClient,\n type WalletClient,\n http,\n custom,\n type Transport,\n type Chain,\n type Account,\n publicActions,\n getFunctionSelector,\n type PublicClient,\n toBytes,\n} from \"viem\";\nimport { WeightedValidatorAbi } from \"../abis/WeightedValidatorAbi.js\";\nimport { getChainId, getRecoveryData } from \"../api/index.js\";\nimport {\n CHAIN_ID_TO_NODE,\n DUMMY_ECDSA_SIG,\n RECOVERY_ACTION,\n RECOVERY_VALIDATOR_ADDRESS,\n} from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\nimport type { EthereumProvider } from \"./types.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\n\ninterface WeightedGuardians {\n [guardian: Address]: number;\n}\nexport interface RecoveryValidatorParams extends KernelBaseValidatorParams {\n guardians?: WeightedGuardians;\n threshold?: number;\n delaySeconds?: number;\n accountSigner?: SmartAccountSigner;\n localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n walletClient?: WalletClient<Transport, Chain>;\n signatures?: Hex;\n recoveryId?: string;\n isSignerSmartContract?: boolean;\n}\n\nexport type RecoveryConfig = Required<\n Pick<RecoveryValidatorParams, \"guardians\" | \"threshold\" | \"delaySeconds\">\n>;\n\nexport function isLocalAccount(account: any): account is LocalAccount<string> {\n return account && account.signTransaction !== undefined;\n}\n\nexport function isEthereumProvider(\n provider: any\n): provider is EthereumProvider {\n return provider && provider.request !== undefined;\n}\n\ntype WalletClientAccountType<T> = T extends LocalAccount<string>\n ? Account\n : T extends EthereumProvider\n ? undefined\n : never;\n\nexport const recoverySelector = getFunctionSelector(\n \"doRecovery(address, bytes)\"\n);\n\nexport class RecoveryValidator extends KernelBaseValidator {\n protected guardians?: WeightedGuardians;\n protected threshold?: number;\n protected delaySeconds: number;\n protected accountSigner?: SmartAccountSigner;\n protected localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n protected signatures?: Hex;\n protected recoveryId?: string;\n protected isSignerSmartContract?: boolean;\n walletClient?: WalletClient<\n Transport,\n Chain,\n WalletClientAccountType<typeof this.localAccountOrProvider>\n >;\n\n constructor(params: RecoveryValidatorParams) {\n super(params);\n this.guardians = params.guardians;\n this.threshold = params.threshold;\n this.delaySeconds = params.delaySeconds ?? 0;\n this.accountSigner = params.accountSigner;\n this.mode = params.mode ?? ValidatorMode.plugin;\n this.localAccountOrProvider = params.localAccountOrProvider;\n this.signatures = params.signatures;\n this.validAfter = params.validAfter ?? 0;\n this.validUntil = params.validUntil ?? 0;\n this.executor = params.executor ?? RECOVERY_ACTION;\n this.selector = params.selector ?? recoverySelector;\n this.recoveryId = params.recoveryId;\n this.isSignerSmartContract = params.isSignerSmartContract;\n if (isLocalAccount(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n account: params.localAccountOrProvider,\n chain: this.chain ?? polygonMumbai,\n transport: http(\n this.rpcUrl ?? CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]\n ),\n }).extend(publicActions);\n } else if (isEthereumProvider(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n chain: this.chain ?? polygonMumbai,\n transport: custom(params.localAccountOrProvider),\n }).extend(publicActions);\n } else if (params.walletClient) {\n this.walletClient = params.walletClient.extend(publicActions);\n } else if (params.localAccountOrProvider) {\n throw Error(\"Incorrect localAccountOrProvider type\");\n }\n }\n\n public static async init(\n params: RecoveryValidatorParams\n ): Promise<RecoveryValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new RecoveryValidator({ ...params, chain });\n return instance;\n }\n\n getNonceKey(): bigint {\n return BigInt(this.validatorAddress);\n }\n\n setRecoverySignatures(signatures: Hex) {\n this.signatures = signatures;\n }\n\n async getRecoverySignatures(): Promise<Hex | undefined> {\n if (this.recoveryId) {\n const { signatures } = await getRecoveryData(this.recoveryId);\n this.setRecoverySignatures(signatures);\n }\n return this.signatures;\n }\n\n getRecoveryConfig(): RecoveryConfig {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return {\n guardians: this.guardians,\n threshold: this.threshold,\n delaySeconds: this.delaySeconds,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await Promise.resolve(this.accountSigner);\n }\n\n async getEnableData(): Promise<Hex> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return encodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n [\n Object.keys(this.guardians) as Address[],\n Object.values(this.guardians),\n this.threshold,\n this.delaySeconds,\n ]\n );\n }\n\n encodeEnable(recoveryData: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"enable\",\n args: [recoveryData],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n encodeApprove(callDataAndNonceHash: Hex, kernelAccountAddress: Address): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approve\",\n args: [callDataAndNonceHash, kernelAccountAddress],\n });\n }\n\n encodeApproveWithSig(\n callDataAndNonceHash: Hex,\n kernelAccountAddress: Address,\n sigs: Hex\n ): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approveWithSig\",\n args: [callDataAndNonceHash, kernelAccountAddress, sigs],\n });\n }\n\n encodeVeto(callDataAndNonceHash: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"veto\",\n args: [callDataAndNonceHash],\n });\n }\n\n encodeRenew(\n guardians: Address[],\n weights: number[],\n threshold: number,\n delay: number\n ): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"renew\",\n args: [guardians, weights, threshold, delay],\n });\n }\n\n encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex {\n return encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n }\n\n static async fetchRecoveryConfigFromContract(\n kernelAccountAddress: Address,\n publicClient: PublicClient<Transport, Chain>\n ): Promise<RecoveryConfig> {\n try {\n const [, threshold, delaySeconds, firstGuardian] =\n await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n const guardians: WeightedGuardians = {};\n\n let nextGuardian = firstGuardian;\n const sentinelValue = \"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\"; \n while (\n nextGuardian.toLowerCase() !== sentinelValue.toLowerCase()\n ) {\n const guardianStorage = await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"guardian\",\n args: [nextGuardian, kernelAccountAddress],\n });\n guardians[nextGuardian] = guardianStorage[0];\n nextGuardian = guardianStorage[1];\n }\n return {\n threshold,\n delaySeconds,\n guardians,\n };\n } catch (error) {\n throw Error(\"Failed to fetch config from contract\");\n }\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n try {\n const kernel = getContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n publicClient: this.publicClient,\n });\n const execDetail = await kernel.read.getExecution([selector]);\n const enableData = await this.publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] ===\n Object.values(this.guardians).reduce((a, c) => a + c, 0) &&\n enableData[1] === this.threshold &&\n enableData[2] === this.delaySeconds &&\n this.isGuardiansEnabled(kernelAccountAddress)\n );\n } catch (error) {\n return false;\n }\n }\n\n async isGuardiansEnabled(kernelAccountAddress: Address): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n const weightedValidator = getContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n publicClient: this.publicClient,\n });\n for (const [addr, weight] of Object.entries(this.guardians)) {\n const result = await weightedValidator.read.guardian([\n addr as Address,\n kernelAccountAddress,\n ]);\n if (result[0] !== weight) {\n return false;\n }\n }\n return true;\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n let dummySignature: Hex = \"0x\";\n if (this.signatures) {\n const totalSigs = this.signatures.substring(2).length / 130;\n for (let i = 0; i < totalSigs; i++) {\n dummySignature = concatHex([dummySignature, DUMMY_ECDSA_SIG]);\n }\n // Hack - Fix this to not send original signatures\n return this.signatures;\n }\n return DUMMY_ECDSA_SIG;\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await this.accountSigner.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return fixSignedData(await this.accountSigner.signTypedData(params));\n }\n\n async signRecoveryHash(recoveryHash: Hex): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n return await this.signTypedData({\n domain: {\n name: \"WeightedECDSAValidator\",\n version: \"0.0.3\",\n chainId: this.chain.id,\n verifyingContract: this.validatorAddress,\n },\n types: {\n Approve: [{ name: \"callDataAndNonceHash\", type: \"bytes32\" }],\n },\n message: {\n callDataAndNonceHash: recoveryHash,\n },\n primaryType: \"Approve\",\n });\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n if (this.isSignerSmartContract) {\n return this.signatures ?? DUMMY_ECDSA_SIG;\n }\n \n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.signMessage(formattedMessage);\n }\n}\n"]}
1
+ {"version":3,"file":"recovery-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n} from \"./base.js\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n getContract,\n parseAbiParameters,\n type LocalAccount,\n createWalletClient,\n type WalletClient,\n http,\n custom,\n type Transport,\n type Chain,\n type Account,\n publicActions,\n getFunctionSelector,\n type PublicClient,\n toBytes,\n} from \"viem\";\nimport { WeightedValidatorAbi } from \"../abis/WeightedValidatorAbi.js\";\nimport { getChainId, getRecoveryData } from \"../api/index.js\";\nimport {\n CHAIN_ID_TO_NODE,\n DUMMY_ECDSA_SIG,\n RECOVERY_ACTION,\n RECOVERY_VALIDATOR_ADDRESS,\n} from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\nimport type { EthereumProvider } from \"./types.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\n\ninterface WeightedGuardians {\n [guardian: Address]: number;\n}\nexport interface RecoveryValidatorParams extends KernelBaseValidatorParams {\n guardians?: WeightedGuardians;\n threshold?: number;\n delaySeconds?: number;\n accountSigner?: SmartAccountSigner;\n localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n walletClient?: WalletClient<Transport, Chain>;\n signatures?: Hex;\n recoveryId?: string;\n isSignerSmartContract?: boolean;\n}\n\nexport type RecoveryConfig = Required<\n Pick<RecoveryValidatorParams, \"guardians\" | \"threshold\" | \"delaySeconds\">\n>;\n\nexport function isLocalAccount(account: any): account is LocalAccount<string> {\n return account && account.signTransaction !== undefined;\n}\n\nexport function isEthereumProvider(\n provider: any\n): provider is EthereumProvider {\n return provider && provider.request !== undefined;\n}\n\ntype WalletClientAccountType<T> = T extends LocalAccount<string>\n ? Account\n : T extends EthereumProvider\n ? undefined\n : never;\n\nexport const recoverySelector = getFunctionSelector(\n \"doRecovery(address, bytes)\"\n);\n\nexport class RecoveryValidator extends KernelBaseValidator {\n protected guardians?: WeightedGuardians;\n protected threshold?: number;\n protected delaySeconds: number;\n protected accountSigner?: SmartAccountSigner;\n protected localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n protected signatures?: Hex;\n protected recoveryId?: string;\n protected isSignerSmartContract?: boolean;\n walletClient?: WalletClient<\n Transport,\n Chain,\n WalletClientAccountType<typeof this.localAccountOrProvider>\n >;\n\n constructor(params: RecoveryValidatorParams) {\n super(params);\n this.guardians = params.guardians;\n this.threshold = params.threshold;\n this.delaySeconds = params.delaySeconds ?? 0;\n this.accountSigner = params.accountSigner;\n this.mode = params.mode ?? ValidatorMode.plugin;\n this.localAccountOrProvider = params.localAccountOrProvider;\n this.signatures = params.signatures;\n this.validAfter = params.validAfter ?? 0;\n this.validUntil = params.validUntil ?? 0;\n this.executor = params.executor ?? RECOVERY_ACTION;\n this.selector = params.selector ?? recoverySelector;\n this.recoveryId = params.recoveryId;\n this.isSignerSmartContract = params.isSignerSmartContract;\n if (isLocalAccount(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n account: params.localAccountOrProvider,\n chain: this.chain ?? polygonMumbai,\n transport: http(\n this.rpcUrl ?? CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]\n ),\n }).extend(publicActions);\n } else if (isEthereumProvider(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n chain: this.chain ?? polygonMumbai,\n transport: custom(params.localAccountOrProvider),\n }).extend(publicActions);\n } else if (params.walletClient) {\n this.walletClient = params.walletClient.extend(publicActions);\n } else if (params.localAccountOrProvider) {\n throw Error(\"Incorrect localAccountOrProvider type\");\n }\n }\n\n public static async init(\n params: RecoveryValidatorParams\n ): Promise<RecoveryValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new RecoveryValidator({ ...params, chain });\n return instance;\n }\n\n getNonceKey(): bigint {\n return BigInt(this.validatorAddress);\n }\n\n setRecoverySignatures(signatures: Hex) {\n this.signatures = signatures;\n }\n\n async getRecoverySignatures(): Promise<Hex | undefined> {\n if (this.recoveryId) {\n const { signatures } = await getRecoveryData(this.recoveryId);\n this.setRecoverySignatures(signatures);\n }\n return this.signatures;\n }\n\n getRecoveryConfig(): RecoveryConfig {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return {\n guardians: this.guardians,\n threshold: this.threshold,\n delaySeconds: this.delaySeconds,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await Promise.resolve(this.accountSigner);\n }\n\n async getEnableData(): Promise<Hex> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return encodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n [\n Object.keys(this.guardians) as Address[],\n Object.values(this.guardians),\n this.threshold,\n this.delaySeconds,\n ]\n );\n }\n\n encodeEnable(recoveryData: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"enable\",\n args: [recoveryData],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n encodeApprove(callDataAndNonceHash: Hex, kernelAccountAddress: Address): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approve\",\n args: [callDataAndNonceHash, kernelAccountAddress],\n });\n }\n\n encodeApproveWithSig(\n callDataAndNonceHash: Hex,\n kernelAccountAddress: Address,\n sigs: Hex\n ): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approveWithSig\",\n args: [callDataAndNonceHash, kernelAccountAddress, sigs],\n });\n }\n\n encodeVeto(callDataAndNonceHash: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"veto\",\n args: [callDataAndNonceHash],\n });\n }\n\n encodeRenew(\n guardians: Address[],\n weights: number[],\n threshold: number,\n delay: number\n ): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"renew\",\n args: [guardians, weights, threshold, delay],\n });\n }\n\n encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex {\n return encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n }\n\n static async fetchRecoveryConfigFromContract(\n kernelAccountAddress: Address,\n publicClient: PublicClient<Transport, Chain>\n ): Promise<RecoveryConfig> {\n try {\n const [, threshold, delaySeconds, firstGuardian] =\n await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n const guardians: WeightedGuardians = {};\n\n let nextGuardian = firstGuardian;\n const sentinelValue = \"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\";\n while (nextGuardian.toLowerCase() !== sentinelValue.toLowerCase()) {\n const guardianStorage = await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"guardian\",\n args: [nextGuardian, kernelAccountAddress],\n });\n guardians[nextGuardian] = guardianStorage[0];\n nextGuardian = guardianStorage[1];\n }\n return {\n threshold,\n delaySeconds,\n guardians,\n };\n } catch (error) {\n throw Error(\"Failed to fetch config from contract\");\n }\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n try {\n const kernel = getContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n publicClient: this.publicClient,\n });\n const execDetail = await kernel.read.getExecution([selector]);\n const enableData = await this.publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] ===\n Object.values(this.guardians).reduce((a, c) => a + c, 0) &&\n enableData[1] === this.threshold &&\n enableData[2] === this.delaySeconds &&\n this.isGuardiansEnabled(kernelAccountAddress)\n );\n } catch (error) {\n return false;\n }\n }\n\n async isGuardiansEnabled(kernelAccountAddress: Address): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n const weightedValidator = getContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n publicClient: this.publicClient,\n });\n for (const [addr, weight] of Object.entries(this.guardians)) {\n const result = await weightedValidator.read.guardian([\n addr as Address,\n kernelAccountAddress,\n ]);\n if (result[0] !== weight) {\n return false;\n }\n }\n return true;\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n let dummySignature: Hex = \"0x\";\n if (this.signatures) {\n const totalSigs = this.signatures.substring(2).length / 130;\n for (let i = 0; i < totalSigs; i++) {\n dummySignature = concatHex([dummySignature, DUMMY_ECDSA_SIG]);\n }\n // Hack - Fix this to not send original signatures\n return this.signatures;\n }\n return DUMMY_ECDSA_SIG;\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await this.accountSigner.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return fixSignedData(await this.accountSigner.signTypedData(params));\n }\n\n async signRecoveryHash(recoveryHash: Hex): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n return await this.signTypedData({\n domain: {\n name: \"WeightedECDSAValidator\",\n version: \"0.0.3\",\n chainId: this.chain.id,\n verifyingContract: this.validatorAddress,\n },\n types: {\n Approve: [{ name: \"callDataAndNonceHash\", type: \"bytes32\" }],\n },\n message: {\n callDataAndNonceHash: recoveryHash,\n },\n primaryType: \"Approve\",\n });\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n if (this.isSignerSmartContract) {\n return this.signatures ?? DUMMY_ECDSA_SIG;\n }\n\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.signMessage(formattedMessage);\n }\n}\n"]}
@@ -196,7 +196,7 @@ class RecoveryProvider extends base_js_1.ValidatorProvider {
196
196
  });
197
197
  return await walletClient.waitForTransactionReceipt({
198
198
  hash,
199
- timeout: 180000
199
+ timeout: 180000,
200
200
  });
201
201
  }
202
202
  async signRecovery(enableData) {
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/recovery-provider.ts"],"names":[],"mappings":";;;AAAA,uCAGmB;AACnB,8EAI4C;AAE5C,8CAKyB;AACzB,wCAA4C;AAC5C,kDAA+E;AAC/E,+BAWc;AACd,uEAAiE;AACjE,qEAA+D;AAC/D,0CAAqE;AAQrE,MAAa,gBAAiB,SAAQ,2BAGrC;IAGC,YAAY,MAA8B;QACxC,MAAM,KAAK,GACT,OAAO,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,KAAK,QAAQ;YACpD,CAAC,CAAC,IAAA,mBAAQ,EAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;YAC5C,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,IAAI,sBAAa,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,yCAAiB,CAAC;YACtC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,KAAK;YACL,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,gBAAgB,EACd,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,gBAAgB;gBAC9C,yCAA0B;YAC5B,GAAG,MAAM,CAAC,IAAI,EAAE,eAAe;SAChC,CAAC,CAAC;QACH,KAAK,CACH;YACE,GAAG,MAAM;YACT,IAAI,EAAE;gBACJ,GAAG,MAAM,CAAC,IAAI;gBACd,cAAc,EAAE,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE;aAC1D;SACF,EACD,SAAS,CACV,CAAC;QAzBJ;;;;;WAAoB;QACpB;;;;;WAAiB;QA4UjB;;;;mBAAqB,IAAI,CAAC,wBAAwB;WAAC;QAnTjD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,MAA8B;QAE9B,MAAM,OAAO,GAAG,MAAM,IAAA,qBAAU,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACtC;QACD,MAAM,KAAK,GAAG,IAAA,mBAAQ,EAAC,OAAO,CAAC,CAAC;QAChC,IAAI,cAAc,EAChB,UAAU,EACV,UAAU,EACV,wBAAwB,EACxB,cAAc,CAAC;QACjB,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,CAAC;gBACC,UAAU,EAAE,cAAc;gBAC1B,UAAU;gBACV,cAAc,EAAE,wBAAwB;gBACxC,UAAU;aACX,GAAG,MAAM,IAAA,0BAAe,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAC9C,cAAc,GAAG,gBAAgB,CAAC,yBAAyB,CACzD,wBAAwB,CACzB,CAAC;SACH;aAAM,IACL,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc;YAC1C,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS;gBACvC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,MAAM;gBAC/D,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,KAAK,SAAS,CAAC,EACtD;YACA,MAAM,YAAY,GAAG,IAAA,yBAAkB,EAAC;gBACtC,SAAS,EAAE,IAAA,WAAI,EACb,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM;oBAChC,+BAAgB,CAAC,KAAK,EAAE,EAAE,IAAI,sBAAa,CAAC,EAAE,CAAC,CAClD;gBACD,KAAK,EAAE,KAAK,IAAI,sBAAa;aAC9B,CAAC,CAAC;YACH,cAAc,GAAG,MAAM,yCAAiB,CAAC,+BAA+B,CACtE,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,EAC1C,YAAY,CACb,CAAC;SACH;QACD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC;YACpC,UAAU;YACV,GAAG,MAAM;YACT,IAAI,EAAE;gBACJ,GAAG,MAAM,CAAC,IAAI;gBACd,cAAc,EAAE;oBACd,KAAK;oBACL,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc;iBAC/B;gBACD,aAAa,EAAE;oBACb,cAAc;oBACd,GAAG,MAAM,CAAC,IAAI,EAAE,aAAa;iBAC9B;gBACD,eAAe,EAAE;oBACf,UAAU;oBACV,GAAG,cAAc;oBACjB,GAAG,MAAM,CAAC,IAAI,EAAE,eAAe;iBAChC;aACF;SACF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,eAAe,EAAE,CAAC;QAC3D,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACrD,OAAO,MAAM,YAAY,CAAC,YAAY,CAAC;YACrC,GAAG,EAAE,sCAAgB;YACrB,OAAO,EAAE,oBAAoB;YAC7B,YAAY,EAAE,qBAAqB;SACpC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,UAAe;QAC1C,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,IAAA,yBAAkB,EAAC;YAClC,GAAG,EAAE,wCAAiB;YACtB,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE,CAAC,uBAAuB,EAAE,UAAU,CAAC;SAC5C,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzD,MAAM,uBAAuB,GAAG,IAAA,0BAAmB,EACjD,IAAA,yBAAkB,EAAC,+CAA+C,CAAC,EACnE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAC1B,CAAC;QACF,OAAO,IAAA,gBAAS,EAAC,uBAAuB,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAC7C;QACD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,sBAAsB,EAAE,CAAC;QACxE,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;QACrE,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,iBAAiB,EAAE,CAAC;QACvE,IACE,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,eAAe,CAAC,oBAAoB,EAAE,QAAQ,CAAC,EACzE;YACA,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;SACvC;QACD,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;YAClD,MAAM,EAAE,oBAAoB;YAC5B,IAAI,EAAE,kBAAkB;SACzB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAC7C;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,aAAa,EAAE,CAAC;QAC7D,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,GAAG,IAAA,0BAAmB,EAChE,IAAA,yBAAkB,EAChB,uEAAuE,CACxE,EACD,UAAU,CACX,CAAC;QACF,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,WAAW,CAC5D,CAAC,GAAG,SAAS,CAAC,EACd,CAAC,GAAG,OAAO,CAAC,EACZ,SAAS,EACT,KAAK,CACN,CAAC;QACF,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;YAClD,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,gBAAgB;YAC5C,IAAI,EAAE,gBAAgB;SACvB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,UAAe;QACpC,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,MAAM,IAAA,2BAAgB,EACvC,UAAU,EACV,MAAM,IAAI,CAAC,UAAU,EAAE,EACvB,gBAAgB,CACjB,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,KAAK,CAAC,mCAAmC,CAAC,CAAC;SAClD;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,uBAAuB;QACrB,IAAI,cAAc,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxD,MAAM,YAAY,GAAG,IAAA,wBAAa,EAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,YAAY,CAAC;IACtB,CAAC;IAEM,MAAM,CAAC,yBAAyB,CACrC,cAAsB;QAEtB,MAAM,UAAU,GAAG,IAAA,wBAAa,EAAC,cAAc,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAmB,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,UAAgB;QACpC,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE;YACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;SACzD;QACD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC5D,iBAAiB,CAClB,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YAC3B,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;SAC3C;QACD,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAa,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC;QACZ,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;SAChC;aAAM;YACL,CAAC,OAAO,CAAC,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;SACnD;QACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC;YAC9C,OAAO;YACP,EAAE,EAAE,SAAS,CAAC,UAAU,EAAE;YAC1B,IAAI,EAAE,SAAS,CAAC,aAAa,CAC3B,oBAAqB,EACrB,oBAAqB,CACtB;SACF,CAAC,CAAC;QACH,OAAO,MAAM,YAAY,CAAC,yBAAyB,CAAC;YAClD,IAAI;YACJ,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAgB;QACjC,IAAI;YACF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACpB,MAAM,KAAK,CAAC,oBAAoB,CAAC,CAAC;aACnC;YACD,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;YACxD,IAAI,CAAC,iBAAiB,EAAE;gBACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;aACzD;YACD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC5D,iBAAiB,CAClB,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,gBAAgB,CACpD,oBAAoB,CACrB,CAAC;YACF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,wBAAa,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YACnE,IAAI,MAAM,KAAK,SAAS,EAAE;gBACxB,MAAM,KAAK,CAAC,+BAA+B,CAAC,CAAC;aAC9C;YACD,IAAI,CAAC,YAAY,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC5D;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACpB;IACH,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,UAAgB,EAChB,IAAU;QAEV,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE;YACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;SACzD;QACD,MAAM,UAAU,GACd,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;SACvC;QACD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACrD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC5D,iBAAiB,CAClB,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE;YAC3B,MAAM,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC1C;QACD,MAAM,YAAY,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,oBAAa,CAAC,CAAC;QAClE,IAAI,OAAO,CAAC;QACZ,IAAI,YAAY,CAAC,OAAO,EAAE;YACxB,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;SAChC;aAAM;YACL,CAAC,OAAO,CAAC,GAAG,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;SACnD;QACD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC;YAC9C,OAAO;YACP,EAAE,EAAE,SAAS,CAAC,UAAU,EAAE;YAC1B,IAAI,EAAE,SAAS,CAAC,oBAAoB,CAClC,oBAAoB,EACpB,oBAAoB,EACpB,IAAK,CACN;SACF,CAAC,CAAC;QACH,OAAO,MAAM,YAAY,CAAC,yBAAyB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAgB;QACnC,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE;YACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;SACzD;QACD,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;YACzB,MAAM,KAAK,CAAC,8BAA8B,CAAC,CAAC;SAC7C;QACD,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC5D,iBAAiB,CAClB,CAAC;QACF,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU,CAC1D,oBAAoB,CACrB,CAAC;QAEF,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC;YAClD,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,gBAAgB;YAC5C,IAAI,EAAE,eAAe;SACtB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAAgB;QACnC,MAAM,iBAAiB,GAAG,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE;YACtB,MAAM,KAAK,CAAC,0CAA0C,CAAC,CAAC;SACzD;QACD,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACjE,MAAM,yBAAyB,GAC7B,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC,oBAAoB,CAC5C,iBAAiB,EACjB,uBAAuB,CACxB,CAAC;QAEJ,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC;YAClC,MAAM,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;YAC/B,IAAI,EAAE,yBAAyB;SAChC,CAAC,CAAC;IACL,CAAC;CAMF;AAlVD,4CAkVC","sourcesContent":["import {\n ValidatorProvider,\n type ExtendedValidatorProviderParams,\n} from \"./base.js\";\nimport {\n RecoveryValidator,\n type RecoveryConfig,\n type RecoveryValidatorParams,\n} from \"../validator/recovery-validator.js\";\nimport { type Address, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport {\n getChainId,\n getRecoveryData,\n postRecoveryData,\n setSignatures,\n} from \"../api/index.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { CHAIN_ID_TO_NODE, RECOVERY_VALIDATOR_ADDRESS } from \"../constants.js\";\nimport {\n encodeAbiParameters,\n encodeFunctionData,\n parseAbiParameters,\n type Hex,\n keccak256,\n publicActions,\n type TransactionReceipt,\n createPublicClient,\n http,\n decodeAbiParameters,\n} from \"viem\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { base64ToBytes, bytesToBase64, getChain } from \"../utils.js\";\n\nexport interface RecoveryProviderParams\n extends ExtendedValidatorProviderParams<RecoveryValidatorParams> {\n recoveryId?: string;\n enableData?: Hex;\n}\n\nexport class RecoveryProvider extends ValidatorProvider<\n RecoveryValidator,\n RecoveryValidatorParams\n> {\n recoveryId?: string;\n enableData?: Hex;\n constructor(params: RecoveryProviderParams) {\n const chain =\n typeof params.opts?.providerConfig?.chain === \"number\"\n ? getChain(params.opts.providerConfig.chain)\n : params.opts?.providerConfig?.chain ?? polygonMumbai;\n const validator = new RecoveryValidator({\n projectId: params.projectId,\n chain,\n recoveryId: params.recoveryId,\n validatorAddress:\n params.opts?.validatorConfig?.validatorAddress ??\n RECOVERY_VALIDATOR_ADDRESS,\n ...params.opts?.validatorConfig,\n });\n super(\n {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: { ...params.opts?.providerConfig, chain },\n },\n },\n validator\n );\n this.recoveryId = params.recoveryId;\n this.enableData = params.enableData;\n }\n\n public static async init(\n params: RecoveryProviderParams\n ): Promise<RecoveryProvider> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n let accountAddress,\n enableData,\n signatures,\n serializedRecoveryConfig,\n recoveryConfig;\n if (params.recoveryId) {\n ({\n scwAddress: accountAddress,\n enableData,\n recoveryConfig: serializedRecoveryConfig,\n signatures,\n } = await getRecoveryData(params.recoveryId));\n recoveryConfig = RecoveryProvider.deserializeRecoveryConfig(\n serializedRecoveryConfig\n );\n } else if (\n params.opts?.accountConfig?.accountAddress &&\n (!params.opts?.validatorConfig?.guardians ||\n !Object.entries(params.opts?.validatorConfig?.guardians).length ||\n params.opts.validatorConfig.threshold === undefined)\n ) {\n const publicClient = createPublicClient({\n transport: http(\n params.opts.providerConfig?.rpcUrl ??\n CHAIN_ID_TO_NODE[chain?.id ?? polygonMumbai.id]\n ),\n chain: chain ?? polygonMumbai,\n });\n recoveryConfig = await RecoveryValidator.fetchRecoveryConfigFromContract(\n params.opts?.accountConfig?.accountAddress,\n publicClient\n );\n }\n const instance = new RecoveryProvider({\n enableData,\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n accountConfig: {\n accountAddress,\n ...params.opts?.accountConfig,\n },\n validatorConfig: {\n signatures,\n ...recoveryConfig,\n ...params.opts?.validatorConfig,\n },\n },\n });\n return instance;\n }\n\n async getDefaultValidator(): Promise<Address> {\n const publicClient = this.getValidator().getPublicClient();\n const kernelAccountAddress = await this.getAddress();\n return await publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n }\n\n async encodeCalldataAndNonce(enableData: Hex): Promise<Hex> {\n const defaultValidatorAddress = await this.getDefaultValidator();\n const callData = encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n const sender = await this.getAddress();\n const nonce = await (await this.getAccount()).getNonce();\n const encodedCallDataAndNonce = encodeAbiParameters(\n parseAbiParameters(\"address sender, bytes calldata, uint256 nonce\"),\n [sender, callData, nonce]\n );\n return keccak256(encodedCallDataAndNonce);\n }\n\n async enableRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const { selector } = await this.getValidator().getPluginValidatorData();\n const kernelAccountAddress = await this.defaultProvider.getAddress();\n const encodedSetExecData = await this.getAccount().encodeSetExection();\n if (\n await this.getValidator().isPluginEnabled(kernelAccountAddress, selector)\n ) {\n throw Error(\"Plugin already enabled\");\n }\n return await this.defaultProvider.sendUserOperation({\n target: kernelAccountAddress,\n data: encodedSetExecData,\n });\n }\n\n async renewRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const enableData = await this.getValidator().getEnableData();\n const [guardians, weights, threshold, delay] = decodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n enableData\n );\n const encodedRenewData = await this.getValidator().encodeRenew(\n [...guardians],\n [...weights],\n threshold,\n delay\n );\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedRenewData,\n });\n }\n\n async initiateRecovery(enableData: Hex): Promise<string> {\n const serializedConfig = this.serializeRecoveryConfig();\n const recoveryId = await postRecoveryData(\n enableData,\n await this.getAddress(),\n serializedConfig\n );\n console.log(recoveryId);\n this.enableData = enableData;\n if (!recoveryId) {\n throw Error(\"Unable to generate the recoveryId\");\n }\n return recoveryId;\n }\n\n serializeRecoveryConfig(): string {\n let recoveryConfig = this.getValidator().getRecoveryConfig();\n const jsonString = JSON.stringify(recoveryConfig);\n const uint8Array = new TextEncoder().encode(jsonString);\n const base64String = bytesToBase64(uint8Array);\n return base64String;\n }\n\n public static deserializeRecoveryConfig(\n recoveryConfig: string\n ): RecoveryConfig {\n const uint8Array = base64ToBytes(recoveryConfig);\n const jsonString = new TextDecoder().decode(uint8Array);\n return JSON.parse(jsonString) as RecoveryConfig;\n }\n\n async approveRecovery(enableData?: Hex): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitialized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApprove(\n callDataAndNonceHash!,\n kernelAccountAddress!\n ),\n });\n return await walletClient.waitForTransactionReceipt({\n hash,\n timeout: 180000 // 3 minutes\n });\n }\n\n async signRecovery(enableData?: Hex) {\n try {\n if (!this.recoveryId) {\n throw Error(\"RecoveryId not set\");\n }\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const sig = await this.getValidator().signRecoveryHash(\n callDataAndNonceHash\n );\n const { result, data } = await setSignatures(this.recoveryId, sig);\n if (result !== \"success\") {\n throw Error(\"Failed to save the signatures\");\n }\n this.getValidator().setRecoverySignatures(data.signatures);\n } catch (error) {\n console.log(error);\n }\n }\n\n async approveRecoveryWithSig(\n enableData?: Hex,\n sigs?: Hex\n ): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const signatures =\n sigs ?? (await this.getValidator().getRecoverySignatures());\n if (!signatures) {\n throw Error(\"Signatures are not set\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitilized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApproveWithSig(\n callDataAndNonceHash,\n kernelAccountAddress,\n sigs!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async cancelRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const encodedVetoData = await this.getValidator().encodeVeto(\n callDataAndNonceHash\n );\n\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedVetoData,\n });\n }\n\n async submitRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const defaultValidatorAddress = await this.getDefaultValidator();\n const encodedRecoveryActionData =\n await this.getValidator().encodeRecoveryAction(\n fetchedEnableData,\n defaultValidatorAddress\n );\n\n return await this.sendUserOperation({\n target: await this.getAddress(),\n data: encodedRecoveryActionData,\n });\n }\n\n // [TODO]\n // changeGuardian = this.sendEnableUserOperation;\n\n deleteRecoveryData = this.sendDisableUserOperation;\n}\n"]}
1
+ {"version":3,"file":"recovery-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/recovery-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ValidatorProvider,\n type ExtendedValidatorProviderParams,\n} from \"./base.js\";\nimport {\n RecoveryValidator,\n type RecoveryConfig,\n type RecoveryValidatorParams,\n} from \"../validator/recovery-validator.js\";\nimport { type Address, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport {\n getChainId,\n getRecoveryData,\n postRecoveryData,\n setSignatures,\n} from \"../api/index.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { CHAIN_ID_TO_NODE, RECOVERY_VALIDATOR_ADDRESS } from \"../constants.js\";\nimport {\n encodeAbiParameters,\n encodeFunctionData,\n parseAbiParameters,\n type Hex,\n keccak256,\n publicActions,\n type TransactionReceipt,\n createPublicClient,\n http,\n decodeAbiParameters,\n} from \"viem\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { base64ToBytes, bytesToBase64, getChain } from \"../utils.js\";\n\nexport interface RecoveryProviderParams\n extends ExtendedValidatorProviderParams<RecoveryValidatorParams> {\n recoveryId?: string;\n enableData?: Hex;\n}\n\nexport class RecoveryProvider extends ValidatorProvider<\n RecoveryValidator,\n RecoveryValidatorParams\n> {\n recoveryId?: string;\n enableData?: Hex;\n constructor(params: RecoveryProviderParams) {\n const chain =\n typeof params.opts?.providerConfig?.chain === \"number\"\n ? getChain(params.opts.providerConfig.chain)\n : params.opts?.providerConfig?.chain ?? polygonMumbai;\n const validator = new RecoveryValidator({\n projectId: params.projectId,\n chain,\n recoveryId: params.recoveryId,\n validatorAddress:\n params.opts?.validatorConfig?.validatorAddress ??\n RECOVERY_VALIDATOR_ADDRESS,\n ...params.opts?.validatorConfig,\n });\n super(\n {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: { ...params.opts?.providerConfig, chain },\n },\n },\n validator\n );\n this.recoveryId = params.recoveryId;\n this.enableData = params.enableData;\n }\n\n public static async init(\n params: RecoveryProviderParams\n ): Promise<RecoveryProvider> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n let accountAddress,\n enableData,\n signatures,\n serializedRecoveryConfig,\n recoveryConfig;\n if (params.recoveryId) {\n ({\n scwAddress: accountAddress,\n enableData,\n recoveryConfig: serializedRecoveryConfig,\n signatures,\n } = await getRecoveryData(params.recoveryId));\n recoveryConfig = RecoveryProvider.deserializeRecoveryConfig(\n serializedRecoveryConfig\n );\n } else if (\n params.opts?.accountConfig?.accountAddress &&\n (!params.opts?.validatorConfig?.guardians ||\n !Object.entries(params.opts?.validatorConfig?.guardians).length ||\n params.opts.validatorConfig.threshold === undefined)\n ) {\n const publicClient = createPublicClient({\n transport: http(\n params.opts.providerConfig?.rpcUrl ??\n CHAIN_ID_TO_NODE[chain?.id ?? polygonMumbai.id]\n ),\n chain: chain ?? polygonMumbai,\n });\n recoveryConfig = await RecoveryValidator.fetchRecoveryConfigFromContract(\n params.opts?.accountConfig?.accountAddress,\n publicClient\n );\n }\n const instance = new RecoveryProvider({\n enableData,\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n accountConfig: {\n accountAddress,\n ...params.opts?.accountConfig,\n },\n validatorConfig: {\n signatures,\n ...recoveryConfig,\n ...params.opts?.validatorConfig,\n },\n },\n });\n return instance;\n }\n\n async getDefaultValidator(): Promise<Address> {\n const publicClient = this.getValidator().getPublicClient();\n const kernelAccountAddress = await this.getAddress();\n return await publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n }\n\n async encodeCalldataAndNonce(enableData: Hex): Promise<Hex> {\n const defaultValidatorAddress = await this.getDefaultValidator();\n const callData = encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n const sender = await this.getAddress();\n const nonce = await (await this.getAccount()).getNonce();\n const encodedCallDataAndNonce = encodeAbiParameters(\n parseAbiParameters(\"address sender, bytes calldata, uint256 nonce\"),\n [sender, callData, nonce]\n );\n return keccak256(encodedCallDataAndNonce);\n }\n\n async enableRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const { selector } = await this.getValidator().getPluginValidatorData();\n const kernelAccountAddress = await this.defaultProvider.getAddress();\n const encodedSetExecData = await this.getAccount().encodeSetExection();\n if (\n await this.getValidator().isPluginEnabled(kernelAccountAddress, selector)\n ) {\n throw Error(\"Plugin already enabled\");\n }\n return await this.defaultProvider.sendUserOperation({\n target: kernelAccountAddress,\n data: encodedSetExecData,\n });\n }\n\n async renewRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const enableData = await this.getValidator().getEnableData();\n const [guardians, weights, threshold, delay] = decodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n enableData\n );\n const encodedRenewData = await this.getValidator().encodeRenew(\n [...guardians],\n [...weights],\n threshold,\n delay\n );\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedRenewData,\n });\n }\n\n async initiateRecovery(enableData: Hex): Promise<string> {\n const serializedConfig = this.serializeRecoveryConfig();\n const recoveryId = await postRecoveryData(\n enableData,\n await this.getAddress(),\n serializedConfig\n );\n console.log(recoveryId);\n this.enableData = enableData;\n if (!recoveryId) {\n throw Error(\"Unable to generate the recoveryId\");\n }\n return recoveryId;\n }\n\n serializeRecoveryConfig(): string {\n let recoveryConfig = this.getValidator().getRecoveryConfig();\n const jsonString = JSON.stringify(recoveryConfig);\n const uint8Array = new TextEncoder().encode(jsonString);\n const base64String = bytesToBase64(uint8Array);\n return base64String;\n }\n\n public static deserializeRecoveryConfig(\n recoveryConfig: string\n ): RecoveryConfig {\n const uint8Array = base64ToBytes(recoveryConfig);\n const jsonString = new TextDecoder().decode(uint8Array);\n return JSON.parse(jsonString) as RecoveryConfig;\n }\n\n async approveRecovery(enableData?: Hex): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitialized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApprove(\n callDataAndNonceHash!,\n kernelAccountAddress!\n ),\n });\n return await walletClient.waitForTransactionReceipt({\n hash,\n timeout: 180000, // 3 minutes\n });\n }\n\n async signRecovery(enableData?: Hex) {\n try {\n if (!this.recoveryId) {\n throw Error(\"RecoveryId not set\");\n }\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const sig = await this.getValidator().signRecoveryHash(\n callDataAndNonceHash\n );\n const { result, data } = await setSignatures(this.recoveryId, sig);\n if (result !== \"success\") {\n throw Error(\"Failed to save the signatures\");\n }\n this.getValidator().setRecoverySignatures(data.signatures);\n } catch (error) {\n console.log(error);\n }\n }\n\n async approveRecoveryWithSig(\n enableData?: Hex,\n sigs?: Hex\n ): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const signatures =\n sigs ?? (await this.getValidator().getRecoverySignatures());\n if (!signatures) {\n throw Error(\"Signatures are not set\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitilized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApproveWithSig(\n callDataAndNonceHash,\n kernelAccountAddress,\n sigs!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async cancelRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const encodedVetoData = await this.getValidator().encodeVeto(\n callDataAndNonceHash\n );\n\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedVetoData,\n });\n }\n\n async submitRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const defaultValidatorAddress = await this.getDefaultValidator();\n const encodedRecoveryActionData =\n await this.getValidator().encodeRecoveryAction(\n fetchedEnableData,\n defaultValidatorAddress\n );\n\n return await this.sendUserOperation({\n target: await this.getAddress(),\n data: encodedRecoveryActionData,\n });\n }\n\n // [TODO]\n // changeGuardian = this.sendEnableUserOperation;\n\n deleteRecoveryData = this.sendDisableUserOperation;\n}\n"]}
@@ -1,6 +1,11 @@
1
1
  import type { ZeroDevProvider } from "../provider.js";
2
2
  import { type UserOperationStruct, type BigNumberish } from "@alchemy/aa-core";
3
+ import { BaseError } from "viem";
3
4
  import { type PaymasterAndBundlerProviders } from "../paymaster/types.js";
5
+ export declare class Eip1559FeesNotSupportedError extends BaseError {
6
+ name: string;
7
+ constructor();
8
+ }
4
9
  export declare const withZeroDevGasEstimator: (provider: ZeroDevProvider) => ZeroDevProvider;
5
10
  export declare const estimateCreationGas: (provider: ZeroDevProvider, initCode?: string) => Promise<bigint>;
6
11
  export declare const getPreVerificationGas: (userOp: Partial<UserOperationStruct>) => Promise<number>;
@@ -1,7 +1,19 @@
1
1
  import { deepHexlify, resolveProperties, } from "@alchemy/aa-core";
2
+ import { BaseError } from "viem";
2
3
  import { ENTRYPOINT_ADDRESS } from "../constants.js";
3
4
  import { calcPreVerificationGas } from "../utils/calc-pre-verification-gas.js";
4
5
  import {} from "../paymaster/types.js";
6
+ export class Eip1559FeesNotSupportedError extends BaseError {
7
+ constructor() {
8
+ super("Chain does not support EIP-1559 fees.");
9
+ Object.defineProperty(this, "name", {
10
+ enumerable: true,
11
+ configurable: true,
12
+ writable: true,
13
+ value: "Eip1559FeesNotSupportedError"
14
+ });
15
+ }
16
+ }
5
17
  export const withZeroDevGasEstimator = (provider) => {
6
18
  provider.withFeeDataGetter(async (struct) => {
7
19
  let overrides = await resolveProperties({
@@ -55,11 +67,10 @@ export const withZeroDevGasEstimator = (provider) => {
55
67
  userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(request, ENTRYPOINT_ADDRESS);
56
68
  const { preVerificationGas, verificationGasLimit, callGasLimit } = userOpGasEstimates;
57
69
  request.preVerificationGas =
58
- (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;
70
+ BigInt(preVerificationGas) ?? request.preVerificationGas;
59
71
  request.verificationGasLimit =
60
72
  BigInt(verificationGasLimit) ?? request.verificationGasLimit;
61
- request.callGasLimit =
62
- (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;
73
+ request.callGasLimit = BigInt(callGasLimit) ?? request.callGasLimit;
63
74
  return {
64
75
  ...struct,
65
76
  ...request,
@@ -100,20 +111,15 @@ export const eip1559GasPrice = async (provider) => {
100
111
  if (provider.bundlerProvider === "PIMLICO") {
101
112
  fee = fee.standard.maxPriorityFeePerGas;
102
113
  }
103
- const tip = BigInt(fee);
104
- const buffer = (tip / 100n) *
105
- BigInt(provider.feeOptions.maxPriorityFeePerGasBufferPercentage);
106
- let maxPriorityFeePerGas = tip + buffer;
107
- maxPriorityFeePerGas =
108
- maxPriorityFeePerGas < provider.minPriorityFeePerBid
109
- ? provider.minPriorityFeePerBid
110
- : maxPriorityFeePerGas;
111
- const maxFeePerGas = ((block.baseFeePerGas
112
- ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas
113
- : maxPriorityFeePerGas) *
114
- (BigInt(100) +
115
- BigInt(provider.feeOptions.maxFeePerGasBufferPercentage))) /
116
- 100n;
114
+ if (typeof block.baseFeePerGas !== "bigint")
115
+ throw new Eip1559FeesNotSupportedError();
116
+ const baseFeeMultiplier = 1.2;
117
+ const decimals = baseFeeMultiplier.toString().split(".")[1].length;
118
+ const denominator = 10 ** decimals;
119
+ const multiply = (base) => (base * BigInt(baseFeeMultiplier * denominator)) / BigInt(denominator);
120
+ const maxPriorityFeePerGas = BigInt(fee);
121
+ const baseFeePerGas = multiply(block.baseFeePerGas);
122
+ const maxFeePerGas = baseFeePerGas + maxPriorityFeePerGas;
117
123
  return { maxFeePerGas, maxPriorityFeePerGas };
118
124
  };
119
125
  export const getFeeData = async (provider) => {
@@ -1 +1 @@
1
- {"version":3,"file":"gas-estimator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZeroDevProvider } from \"../provider.js\";\nimport {\n deepHexlify,\n type Hex,\n type UserOperationStruct,\n resolveProperties,\n type BigNumberish,\n type UserOperationEstimateGasResponse,\n} from \"@alchemy/aa-core\";\nimport { ENTRYPOINT_ADDRESS } from \"../constants.js\";\nimport { calcPreVerificationGas } from \"../utils/calc-pre-verification-gas.js\";\nimport { type PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\nexport const withZeroDevGasEstimator = (\n provider: ZeroDevProvider\n): ZeroDevProvider => {\n provider.withFeeDataGetter(async (struct) => {\n let overrides = await resolveProperties({\n maxFeePerGas: struct.maxFeePerGas,\n maxPriorityFeePerGas: struct.maxPriorityFeePerGas,\n });\n\n if (provider.bundlerProvider === \"GELATO\") {\n return { maxFeePerGas: 0n, maxPriorityFeePerGas: 0n };\n }\n\n let maxFeePerGas, maxPriorityFeePerGas;\n\n try {\n ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(\n provider\n ));\n } catch (error: any) {\n console.warn(\n \"getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price.\"\n );\n }\n\n if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {\n const feeData = await getFeeData(provider);\n maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;\n maxPriorityFeePerGas = feeData.maxPriorityFeePerGas\n ? BigInt(feeData.maxPriorityFeePerGas)\n : 0n;\n }\n\n if (overrides.maxFeePerGas || overrides.maxPriorityFeePerGas) {\n return {\n maxFeePerGas: overrides.maxFeePerGas ?? maxFeePerGas,\n maxPriorityFeePerGas:\n overrides.maxPriorityFeePerGas ?? maxPriorityFeePerGas,\n };\n }\n return { maxFeePerGas, maxPriorityFeePerGas };\n });\n\n provider.withGasEstimator(async (struct) => {\n if (\n struct.callGasLimit !== undefined &&\n struct.verificationGasLimit !== undefined &&\n struct.preVerificationGas !== undefined\n ) {\n return struct;\n }\n const initCode = await provider.account?.getInitCode();\n const initGas = await estimateCreationGas(provider, initCode);\n const partialStruct: UserOperationStruct = {\n ...struct,\n callGasLimit:\n initCode !== undefined && initCode.length > 2\n ? BigInt(\"1000000\")\n : BigInt(55000),\n verificationGasLimit: BigInt(110000) + initGas,\n preVerificationGas: BigInt(100000),\n };\n\n partialStruct.preVerificationGas = await getPreVerificationGas(\n partialStruct\n );\n\n const request = deepHexlify(await resolveProperties(partialStruct));\n let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;\n userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(\n request,\n ENTRYPOINT_ADDRESS\n );\n const { preVerificationGas, verificationGasLimit, callGasLimit } =\n userOpGasEstimates;\n request.preVerificationGas =\n (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;\n request.verificationGasLimit =\n BigInt(verificationGasLimit) ?? request.verificationGasLimit;\n request.callGasLimit =\n (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;\n\n return {\n ...struct,\n ...request,\n };\n });\n\n return provider;\n};\n\nexport const estimateCreationGas = async (\n provider: ZeroDevProvider,\n initCode?: string\n): Promise<bigint> => {\n if (initCode == null || initCode === \"0x\") return BigInt(0);\n const deployerAddress = initCode.substring(0, 42) as Hex;\n const deployerCallData = (\"0x\" + initCode.substring(42)) as Hex;\n return await provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: deployerAddress,\n data: deployerCallData,\n });\n};\n\n/**\n * should cover cost of putting calldata on-chain, and some overhead.\n * actual overhead depends on the expected bundle size\n */\nexport const getPreVerificationGas = async (\n userOp: Partial<UserOperationStruct>\n): Promise<number> => {\n const p = await resolveProperties(userOp);\n return calcPreVerificationGas(p);\n};\n\nexport const GAS_PRICE_RPC_METHODS_BY_BUNDLER: {\n [K in PaymasterAndBundlerProviders]: string;\n} = {\n STACKUP: \"eth_maxPriorityFeePerGas\",\n ALCHEMY: \"rundler_maxPriorityFeePerGas\",\n PIMLICO: \"pimlico_getUserOperationGasPrice\",\n GELATO: \"eth_maxPriorityFeePerGas\",\n};\n\nexport const eip1559GasPrice = async (provider: ZeroDevProvider) => {\n let [fee, block] = await Promise.all([\n provider.rpcClient.request({\n method:\n // @ts-expect-error\n GAS_PRICE_RPC_METHODS_BY_BUNDLER[provider.bundlerProvider] ??\n \"eth_maxPriorityFeePerGas\",\n params: [],\n }) as any,\n provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n ]);\n\n if (provider.bundlerProvider === \"PIMLICO\") {\n fee = fee.standard.maxPriorityFeePerGas;\n }\n\n const tip = BigInt(fee);\n const buffer =\n (tip / 100n) *\n BigInt(provider.feeOptions.maxPriorityFeePerGasBufferPercentage);\n let maxPriorityFeePerGas = tip + buffer;\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n const maxFeePerGas =\n ((block.baseFeePerGas\n ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas\n : maxPriorityFeePerGas) *\n (BigInt(100) +\n BigInt(provider.feeOptions.maxFeePerGasBufferPercentage))) /\n 100n;\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\ninterface FeeData {\n maxFeePerGas: BigNumberish | null;\n maxPriorityFeePerGas: BigNumberish | null;\n}\n\nexport const getFeeData = async (\n provider: ZeroDevProvider\n): Promise<FeeData> => {\n const { block, gasPrice } = await resolveProperties({\n block: provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n gasPrice: provider.rpcClient.getGasPrice().catch((error) => {\n console.warn(\"Legacy: Failed to get gas price\", error);\n return null;\n }),\n });\n\n let maxFeePerGas = null;\n let maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas != null) {\n // Set the tip to the min of the tip for the last block and 1.5 gwei\n const minimumTip = BigInt(\"1500000000\");\n maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;\n if (\n maxPriorityFeePerGas == null ||\n maxPriorityFeePerGas - BigInt(0) ||\n maxPriorityFeePerGas > minimumTip\n ) {\n maxPriorityFeePerGas = minimumTip;\n }\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n maxFeePerGas =\n block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);\n }\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\n"]}
1
+ {"version":3,"file":"gas-estimator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ZeroDevProvider } from \"../provider.js\";\nimport {\n deepHexlify,\n type Hex,\n type UserOperationStruct,\n resolveProperties,\n type BigNumberish,\n type UserOperationEstimateGasResponse,\n} from \"@alchemy/aa-core\";\nimport { BaseError } from \"viem\";\nimport { ENTRYPOINT_ADDRESS } from \"../constants.js\";\nimport { calcPreVerificationGas } from \"../utils/calc-pre-verification-gas.js\";\nimport { type PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\n// @dev implement Eip1559FeesNotSupportedError message for compatibility with viem\nexport class Eip1559FeesNotSupportedError extends BaseError {\n override name = \"Eip1559FeesNotSupportedError\";\n constructor() {\n super(\"Chain does not support EIP-1559 fees.\");\n }\n}\n\nexport const withZeroDevGasEstimator = (\n provider: ZeroDevProvider\n): ZeroDevProvider => {\n provider.withFeeDataGetter(async (struct) => {\n let overrides = await resolveProperties({\n maxFeePerGas: struct.maxFeePerGas,\n maxPriorityFeePerGas: struct.maxPriorityFeePerGas,\n });\n\n if (provider.bundlerProvider === \"GELATO\") {\n return { maxFeePerGas: 0n, maxPriorityFeePerGas: 0n };\n }\n\n let maxFeePerGas, maxPriorityFeePerGas;\n\n try {\n ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(\n provider\n ));\n } catch (error: any) {\n console.warn(\n \"getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price.\"\n );\n }\n\n if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {\n const feeData = await getFeeData(provider);\n maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;\n maxPriorityFeePerGas = feeData.maxPriorityFeePerGas\n ? BigInt(feeData.maxPriorityFeePerGas)\n : 0n;\n }\n\n if (overrides.maxFeePerGas || overrides.maxPriorityFeePerGas) {\n return {\n maxFeePerGas: overrides.maxFeePerGas ?? maxFeePerGas,\n maxPriorityFeePerGas:\n overrides.maxPriorityFeePerGas ?? maxPriorityFeePerGas,\n };\n }\n return { maxFeePerGas, maxPriorityFeePerGas };\n });\n\n provider.withGasEstimator(async (struct) => {\n if (\n struct.callGasLimit !== undefined &&\n struct.verificationGasLimit !== undefined &&\n struct.preVerificationGas !== undefined\n ) {\n return struct;\n }\n const initCode = await provider.account?.getInitCode();\n const initGas = await estimateCreationGas(provider, initCode);\n const partialStruct: UserOperationStruct = {\n ...struct,\n callGasLimit:\n initCode !== undefined && initCode.length > 2\n ? BigInt(\"1000000\")\n : BigInt(55000),\n verificationGasLimit: BigInt(110000) + initGas,\n preVerificationGas: BigInt(100000),\n };\n\n partialStruct.preVerificationGas = await getPreVerificationGas(\n partialStruct\n );\n\n const request = deepHexlify(await resolveProperties(partialStruct));\n let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;\n userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(\n request,\n ENTRYPOINT_ADDRESS\n );\n const { preVerificationGas, verificationGasLimit, callGasLimit } =\n userOpGasEstimates;\n request.preVerificationGas =\n BigInt(preVerificationGas) ?? request.preVerificationGas;\n request.verificationGasLimit =\n BigInt(verificationGasLimit) ?? request.verificationGasLimit;\n request.callGasLimit = BigInt(callGasLimit) ?? request.callGasLimit;\n\n return {\n ...struct,\n ...request,\n };\n });\n\n return provider;\n};\n\nexport const estimateCreationGas = async (\n provider: ZeroDevProvider,\n initCode?: string\n): Promise<bigint> => {\n if (initCode == null || initCode === \"0x\") return BigInt(0);\n const deployerAddress = initCode.substring(0, 42) as Hex;\n const deployerCallData = (\"0x\" + initCode.substring(42)) as Hex;\n return await provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: deployerAddress,\n data: deployerCallData,\n });\n};\n\n/**\n * should cover cost of putting calldata on-chain, and some overhead.\n * actual overhead depends on the expected bundle size\n */\nexport const getPreVerificationGas = async (\n userOp: Partial<UserOperationStruct>\n): Promise<number> => {\n const p = await resolveProperties(userOp);\n return calcPreVerificationGas(p);\n};\n\nexport const GAS_PRICE_RPC_METHODS_BY_BUNDLER: {\n [K in PaymasterAndBundlerProviders]: string;\n} = {\n STACKUP: \"eth_maxPriorityFeePerGas\",\n ALCHEMY: \"rundler_maxPriorityFeePerGas\",\n PIMLICO: \"pimlico_getUserOperationGasPrice\",\n GELATO: \"eth_maxPriorityFeePerGas\",\n};\n\nexport const eip1559GasPrice = async (provider: ZeroDevProvider) => {\n let [fee, block] = await Promise.all([\n provider.rpcClient.request({\n method:\n // @ts-expect-error\n GAS_PRICE_RPC_METHODS_BY_BUNDLER[provider.bundlerProvider] ??\n \"eth_maxPriorityFeePerGas\",\n params: [],\n }) as any,\n provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n ]);\n\n if (provider.bundlerProvider === \"PIMLICO\") {\n fee = fee.standard.maxPriorityFeePerGas;\n }\n\n if (typeof block.baseFeePerGas !== \"bigint\")\n throw new Eip1559FeesNotSupportedError();\n\n // use default values of viem\n const baseFeeMultiplier = 1.2;\n const decimals = baseFeeMultiplier.toString().split(\".\")[1].length;\n const denominator = 10 ** decimals;\n const multiply = (base: bigint) =>\n (base * BigInt(baseFeeMultiplier * denominator)) / BigInt(denominator);\n\n const maxPriorityFeePerGas = BigInt(fee);\n\n const baseFeePerGas = multiply(block.baseFeePerGas);\n const maxFeePerGas = baseFeePerGas + maxPriorityFeePerGas;\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\ninterface FeeData {\n maxFeePerGas: BigNumberish | null;\n maxPriorityFeePerGas: BigNumberish | null;\n}\n\nexport const getFeeData = async (\n provider: ZeroDevProvider\n): Promise<FeeData> => {\n const { block, gasPrice } = await resolveProperties({\n block: provider.rpcClient.getBlock({ blockTag: \"latest\" }),\n gasPrice: provider.rpcClient.getGasPrice().catch((error) => {\n console.warn(\"Legacy: Failed to get gas price\", error);\n return null;\n }),\n });\n\n let maxFeePerGas = null;\n let maxPriorityFeePerGas = null;\n\n if (block && block.baseFeePerGas != null) {\n // Set the tip to the min of the tip for the last block and 1.5 gwei\n const minimumTip = BigInt(\"1500000000\");\n maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;\n if (\n maxPriorityFeePerGas == null ||\n maxPriorityFeePerGas - BigInt(0) ||\n maxPriorityFeePerGas > minimumTip\n ) {\n maxPriorityFeePerGas = minimumTip;\n }\n maxPriorityFeePerGas =\n maxPriorityFeePerGas < provider.minPriorityFeePerBid\n ? provider.minPriorityFeePerBid\n : maxPriorityFeePerGas;\n maxFeePerGas =\n block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);\n }\n\n return { maxFeePerGas, maxPriorityFeePerGas };\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n} from \"./base.js\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n getContract,\n parseAbiParameters,\n type LocalAccount,\n createWalletClient,\n type WalletClient,\n http,\n custom,\n type Transport,\n type Chain,\n type Account,\n publicActions,\n getFunctionSelector,\n type PublicClient,\n toBytes,\n} from \"viem\";\nimport { WeightedValidatorAbi } from \"../abis/WeightedValidatorAbi.js\";\nimport { getChainId, getRecoveryData } from \"../api/index.js\";\nimport {\n CHAIN_ID_TO_NODE,\n DUMMY_ECDSA_SIG,\n RECOVERY_ACTION,\n RECOVERY_VALIDATOR_ADDRESS,\n} from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\nimport type { EthereumProvider } from \"./types.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\n\ninterface WeightedGuardians {\n [guardian: Address]: number;\n}\nexport interface RecoveryValidatorParams extends KernelBaseValidatorParams {\n guardians?: WeightedGuardians;\n threshold?: number;\n delaySeconds?: number;\n accountSigner?: SmartAccountSigner;\n localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n walletClient?: WalletClient<Transport, Chain>;\n signatures?: Hex;\n recoveryId?: string;\n isSignerSmartContract?: boolean;\n}\n\nexport type RecoveryConfig = Required<\n Pick<RecoveryValidatorParams, \"guardians\" | \"threshold\" | \"delaySeconds\">\n>;\n\nexport function isLocalAccount(account: any): account is LocalAccount<string> {\n return account && account.signTransaction !== undefined;\n}\n\nexport function isEthereumProvider(\n provider: any\n): provider is EthereumProvider {\n return provider && provider.request !== undefined;\n}\n\ntype WalletClientAccountType<T> = T extends LocalAccount<string>\n ? Account\n : T extends EthereumProvider\n ? undefined\n : never;\n\nexport const recoverySelector = getFunctionSelector(\n \"doRecovery(address, bytes)\"\n);\n\nexport class RecoveryValidator extends KernelBaseValidator {\n protected guardians?: WeightedGuardians;\n protected threshold?: number;\n protected delaySeconds: number;\n protected accountSigner?: SmartAccountSigner;\n protected localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n protected signatures?: Hex;\n protected recoveryId?: string;\n protected isSignerSmartContract?: boolean;\n walletClient?: WalletClient<\n Transport,\n Chain,\n WalletClientAccountType<typeof this.localAccountOrProvider>\n >;\n\n constructor(params: RecoveryValidatorParams) {\n super(params);\n this.guardians = params.guardians;\n this.threshold = params.threshold;\n this.delaySeconds = params.delaySeconds ?? 0;\n this.accountSigner = params.accountSigner;\n this.mode = params.mode ?? ValidatorMode.plugin;\n this.localAccountOrProvider = params.localAccountOrProvider;\n this.signatures = params.signatures;\n this.validAfter = params.validAfter ?? 0;\n this.validUntil = params.validUntil ?? 0;\n this.executor = params.executor ?? RECOVERY_ACTION;\n this.selector = params.selector ?? recoverySelector;\n this.recoveryId = params.recoveryId;\n this.isSignerSmartContract = params.isSignerSmartContract;\n if (isLocalAccount(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n account: params.localAccountOrProvider,\n chain: this.chain ?? polygonMumbai,\n transport: http(\n this.rpcUrl ?? CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]\n ),\n }).extend(publicActions);\n } else if (isEthereumProvider(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n chain: this.chain ?? polygonMumbai,\n transport: custom(params.localAccountOrProvider),\n }).extend(publicActions);\n } else if (params.walletClient) {\n this.walletClient = params.walletClient.extend(publicActions);\n } else if (params.localAccountOrProvider) {\n throw Error(\"Incorrect localAccountOrProvider type\");\n }\n }\n\n public static async init(\n params: RecoveryValidatorParams\n ): Promise<RecoveryValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new RecoveryValidator({ ...params, chain });\n return instance;\n }\n\n getNonceKey(): bigint {\n return BigInt(this.validatorAddress);\n }\n\n setRecoverySignatures(signatures: Hex) {\n this.signatures = signatures;\n }\n\n async getRecoverySignatures(): Promise<Hex | undefined> {\n if (this.recoveryId) {\n const { signatures } = await getRecoveryData(this.recoveryId);\n this.setRecoverySignatures(signatures);\n }\n return this.signatures;\n }\n\n getRecoveryConfig(): RecoveryConfig {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return {\n guardians: this.guardians,\n threshold: this.threshold,\n delaySeconds: this.delaySeconds,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await Promise.resolve(this.accountSigner);\n }\n\n async getEnableData(): Promise<Hex> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return encodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n [\n Object.keys(this.guardians) as Address[],\n Object.values(this.guardians),\n this.threshold,\n this.delaySeconds,\n ]\n );\n }\n\n encodeEnable(recoveryData: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"enable\",\n args: [recoveryData],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n encodeApprove(callDataAndNonceHash: Hex, kernelAccountAddress: Address): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approve\",\n args: [callDataAndNonceHash, kernelAccountAddress],\n });\n }\n\n encodeApproveWithSig(\n callDataAndNonceHash: Hex,\n kernelAccountAddress: Address,\n sigs: Hex\n ): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approveWithSig\",\n args: [callDataAndNonceHash, kernelAccountAddress, sigs],\n });\n }\n\n encodeVeto(callDataAndNonceHash: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"veto\",\n args: [callDataAndNonceHash],\n });\n }\n\n encodeRenew(\n guardians: Address[],\n weights: number[],\n threshold: number,\n delay: number\n ): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"renew\",\n args: [guardians, weights, threshold, delay],\n });\n }\n\n encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex {\n return encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n }\n\n static async fetchRecoveryConfigFromContract(\n kernelAccountAddress: Address,\n publicClient: PublicClient<Transport, Chain>\n ): Promise<RecoveryConfig> {\n try {\n const [, threshold, delaySeconds, firstGuardian] =\n await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n const guardians: WeightedGuardians = {};\n\n let nextGuardian = firstGuardian;\n const sentinelValue = \"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\"; \n while (\n nextGuardian.toLowerCase() !== sentinelValue.toLowerCase()\n ) {\n const guardianStorage = await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"guardian\",\n args: [nextGuardian, kernelAccountAddress],\n });\n guardians[nextGuardian] = guardianStorage[0];\n nextGuardian = guardianStorage[1];\n }\n return {\n threshold,\n delaySeconds,\n guardians,\n };\n } catch (error) {\n throw Error(\"Failed to fetch config from contract\");\n }\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n try {\n const kernel = getContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n publicClient: this.publicClient,\n });\n const execDetail = await kernel.read.getExecution([selector]);\n const enableData = await this.publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] ===\n Object.values(this.guardians).reduce((a, c) => a + c, 0) &&\n enableData[1] === this.threshold &&\n enableData[2] === this.delaySeconds &&\n this.isGuardiansEnabled(kernelAccountAddress)\n );\n } catch (error) {\n return false;\n }\n }\n\n async isGuardiansEnabled(kernelAccountAddress: Address): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n const weightedValidator = getContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n publicClient: this.publicClient,\n });\n for (const [addr, weight] of Object.entries(this.guardians)) {\n const result = await weightedValidator.read.guardian([\n addr as Address,\n kernelAccountAddress,\n ]);\n if (result[0] !== weight) {\n return false;\n }\n }\n return true;\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n let dummySignature: Hex = \"0x\";\n if (this.signatures) {\n const totalSigs = this.signatures.substring(2).length / 130;\n for (let i = 0; i < totalSigs; i++) {\n dummySignature = concatHex([dummySignature, DUMMY_ECDSA_SIG]);\n }\n // Hack - Fix this to not send original signatures\n return this.signatures;\n }\n return DUMMY_ECDSA_SIG;\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await this.accountSigner.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return fixSignedData(await this.accountSigner.signTypedData(params));\n }\n\n async signRecoveryHash(recoveryHash: Hex): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n return await this.signTypedData({\n domain: {\n name: \"WeightedECDSAValidator\",\n version: \"0.0.3\",\n chainId: this.chain.id,\n verifyingContract: this.validatorAddress,\n },\n types: {\n Approve: [{ name: \"callDataAndNonceHash\", type: \"bytes32\" }],\n },\n message: {\n callDataAndNonceHash: recoveryHash,\n },\n primaryType: \"Approve\",\n });\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n if (this.isSignerSmartContract) {\n return this.signatures ?? DUMMY_ECDSA_SIG;\n }\n \n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.signMessage(formattedMessage);\n }\n}\n"]}
1
+ {"version":3,"file":"recovery-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n} from \"./base.js\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n getContract,\n parseAbiParameters,\n type LocalAccount,\n createWalletClient,\n type WalletClient,\n http,\n custom,\n type Transport,\n type Chain,\n type Account,\n publicActions,\n getFunctionSelector,\n type PublicClient,\n toBytes,\n} from \"viem\";\nimport { WeightedValidatorAbi } from \"../abis/WeightedValidatorAbi.js\";\nimport { getChainId, getRecoveryData } from \"../api/index.js\";\nimport {\n CHAIN_ID_TO_NODE,\n DUMMY_ECDSA_SIG,\n RECOVERY_ACTION,\n RECOVERY_VALIDATOR_ADDRESS,\n} from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\nimport type { EthereumProvider } from \"./types.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\n\ninterface WeightedGuardians {\n [guardian: Address]: number;\n}\nexport interface RecoveryValidatorParams extends KernelBaseValidatorParams {\n guardians?: WeightedGuardians;\n threshold?: number;\n delaySeconds?: number;\n accountSigner?: SmartAccountSigner;\n localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n walletClient?: WalletClient<Transport, Chain>;\n signatures?: Hex;\n recoveryId?: string;\n isSignerSmartContract?: boolean;\n}\n\nexport type RecoveryConfig = Required<\n Pick<RecoveryValidatorParams, \"guardians\" | \"threshold\" | \"delaySeconds\">\n>;\n\nexport function isLocalAccount(account: any): account is LocalAccount<string> {\n return account && account.signTransaction !== undefined;\n}\n\nexport function isEthereumProvider(\n provider: any\n): provider is EthereumProvider {\n return provider && provider.request !== undefined;\n}\n\ntype WalletClientAccountType<T> = T extends LocalAccount<string>\n ? Account\n : T extends EthereumProvider\n ? undefined\n : never;\n\nexport const recoverySelector = getFunctionSelector(\n \"doRecovery(address, bytes)\"\n);\n\nexport class RecoveryValidator extends KernelBaseValidator {\n protected guardians?: WeightedGuardians;\n protected threshold?: number;\n protected delaySeconds: number;\n protected accountSigner?: SmartAccountSigner;\n protected localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n protected signatures?: Hex;\n protected recoveryId?: string;\n protected isSignerSmartContract?: boolean;\n walletClient?: WalletClient<\n Transport,\n Chain,\n WalletClientAccountType<typeof this.localAccountOrProvider>\n >;\n\n constructor(params: RecoveryValidatorParams) {\n super(params);\n this.guardians = params.guardians;\n this.threshold = params.threshold;\n this.delaySeconds = params.delaySeconds ?? 0;\n this.accountSigner = params.accountSigner;\n this.mode = params.mode ?? ValidatorMode.plugin;\n this.localAccountOrProvider = params.localAccountOrProvider;\n this.signatures = params.signatures;\n this.validAfter = params.validAfter ?? 0;\n this.validUntil = params.validUntil ?? 0;\n this.executor = params.executor ?? RECOVERY_ACTION;\n this.selector = params.selector ?? recoverySelector;\n this.recoveryId = params.recoveryId;\n this.isSignerSmartContract = params.isSignerSmartContract;\n if (isLocalAccount(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n account: params.localAccountOrProvider,\n chain: this.chain ?? polygonMumbai,\n transport: http(\n this.rpcUrl ?? CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]\n ),\n }).extend(publicActions);\n } else if (isEthereumProvider(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n chain: this.chain ?? polygonMumbai,\n transport: custom(params.localAccountOrProvider),\n }).extend(publicActions);\n } else if (params.walletClient) {\n this.walletClient = params.walletClient.extend(publicActions);\n } else if (params.localAccountOrProvider) {\n throw Error(\"Incorrect localAccountOrProvider type\");\n }\n }\n\n public static async init(\n params: RecoveryValidatorParams\n ): Promise<RecoveryValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new RecoveryValidator({ ...params, chain });\n return instance;\n }\n\n getNonceKey(): bigint {\n return BigInt(this.validatorAddress);\n }\n\n setRecoverySignatures(signatures: Hex) {\n this.signatures = signatures;\n }\n\n async getRecoverySignatures(): Promise<Hex | undefined> {\n if (this.recoveryId) {\n const { signatures } = await getRecoveryData(this.recoveryId);\n this.setRecoverySignatures(signatures);\n }\n return this.signatures;\n }\n\n getRecoveryConfig(): RecoveryConfig {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return {\n guardians: this.guardians,\n threshold: this.threshold,\n delaySeconds: this.delaySeconds,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await Promise.resolve(this.accountSigner);\n }\n\n async getEnableData(): Promise<Hex> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return encodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n [\n Object.keys(this.guardians) as Address[],\n Object.values(this.guardians),\n this.threshold,\n this.delaySeconds,\n ]\n );\n }\n\n encodeEnable(recoveryData: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"enable\",\n args: [recoveryData],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n encodeApprove(callDataAndNonceHash: Hex, kernelAccountAddress: Address): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approve\",\n args: [callDataAndNonceHash, kernelAccountAddress],\n });\n }\n\n encodeApproveWithSig(\n callDataAndNonceHash: Hex,\n kernelAccountAddress: Address,\n sigs: Hex\n ): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approveWithSig\",\n args: [callDataAndNonceHash, kernelAccountAddress, sigs],\n });\n }\n\n encodeVeto(callDataAndNonceHash: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"veto\",\n args: [callDataAndNonceHash],\n });\n }\n\n encodeRenew(\n guardians: Address[],\n weights: number[],\n threshold: number,\n delay: number\n ): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"renew\",\n args: [guardians, weights, threshold, delay],\n });\n }\n\n encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex {\n return encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n }\n\n static async fetchRecoveryConfigFromContract(\n kernelAccountAddress: Address,\n publicClient: PublicClient<Transport, Chain>\n ): Promise<RecoveryConfig> {\n try {\n const [, threshold, delaySeconds, firstGuardian] =\n await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n const guardians: WeightedGuardians = {};\n\n let nextGuardian = firstGuardian;\n const sentinelValue = \"0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF\";\n while (nextGuardian.toLowerCase() !== sentinelValue.toLowerCase()) {\n const guardianStorage = await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"guardian\",\n args: [nextGuardian, kernelAccountAddress],\n });\n guardians[nextGuardian] = guardianStorage[0];\n nextGuardian = guardianStorage[1];\n }\n return {\n threshold,\n delaySeconds,\n guardians,\n };\n } catch (error) {\n throw Error(\"Failed to fetch config from contract\");\n }\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n try {\n const kernel = getContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n publicClient: this.publicClient,\n });\n const execDetail = await kernel.read.getExecution([selector]);\n const enableData = await this.publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] ===\n Object.values(this.guardians).reduce((a, c) => a + c, 0) &&\n enableData[1] === this.threshold &&\n enableData[2] === this.delaySeconds &&\n this.isGuardiansEnabled(kernelAccountAddress)\n );\n } catch (error) {\n return false;\n }\n }\n\n async isGuardiansEnabled(kernelAccountAddress: Address): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n const weightedValidator = getContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n publicClient: this.publicClient,\n });\n for (const [addr, weight] of Object.entries(this.guardians)) {\n const result = await weightedValidator.read.guardian([\n addr as Address,\n kernelAccountAddress,\n ]);\n if (result[0] !== weight) {\n return false;\n }\n }\n return true;\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n let dummySignature: Hex = \"0x\";\n if (this.signatures) {\n const totalSigs = this.signatures.substring(2).length / 130;\n for (let i = 0; i < totalSigs; i++) {\n dummySignature = concatHex([dummySignature, DUMMY_ECDSA_SIG]);\n }\n // Hack - Fix this to not send original signatures\n return this.signatures;\n }\n return DUMMY_ECDSA_SIG;\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await this.accountSigner.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return fixSignedData(await this.accountSigner.signTypedData(params));\n }\n\n async signRecoveryHash(recoveryHash: Hex): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n return await this.signTypedData({\n domain: {\n name: \"WeightedECDSAValidator\",\n version: \"0.0.3\",\n chainId: this.chain.id,\n verifyingContract: this.validatorAddress,\n },\n types: {\n Approve: [{ name: \"callDataAndNonceHash\", type: \"bytes32\" }],\n },\n message: {\n callDataAndNonceHash: recoveryHash,\n },\n primaryType: \"Approve\",\n });\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n if (this.isSignerSmartContract) {\n return this.signatures ?? DUMMY_ECDSA_SIG;\n }\n\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.signMessage(formattedMessage);\n }\n}\n"]}
@@ -194,7 +194,7 @@ export class RecoveryProvider extends ValidatorProvider {
194
194
  });
195
195
  return await walletClient.waitForTransactionReceipt({
196
196
  hash,
197
- timeout: 180000
197
+ timeout: 180000,
198
198
  });
199
199
  }
200
200
  async signRecovery(enableData) {
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/recovery-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ValidatorProvider,\n type ExtendedValidatorProviderParams,\n} from \"./base.js\";\nimport {\n RecoveryValidator,\n type RecoveryConfig,\n type RecoveryValidatorParams,\n} from \"../validator/recovery-validator.js\";\nimport { type Address, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport {\n getChainId,\n getRecoveryData,\n postRecoveryData,\n setSignatures,\n} from \"../api/index.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { CHAIN_ID_TO_NODE, RECOVERY_VALIDATOR_ADDRESS } from \"../constants.js\";\nimport {\n encodeAbiParameters,\n encodeFunctionData,\n parseAbiParameters,\n type Hex,\n keccak256,\n publicActions,\n type TransactionReceipt,\n createPublicClient,\n http,\n decodeAbiParameters,\n} from \"viem\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { base64ToBytes, bytesToBase64, getChain } from \"../utils.js\";\n\nexport interface RecoveryProviderParams\n extends ExtendedValidatorProviderParams<RecoveryValidatorParams> {\n recoveryId?: string;\n enableData?: Hex;\n}\n\nexport class RecoveryProvider extends ValidatorProvider<\n RecoveryValidator,\n RecoveryValidatorParams\n> {\n recoveryId?: string;\n enableData?: Hex;\n constructor(params: RecoveryProviderParams) {\n const chain =\n typeof params.opts?.providerConfig?.chain === \"number\"\n ? getChain(params.opts.providerConfig.chain)\n : params.opts?.providerConfig?.chain ?? polygonMumbai;\n const validator = new RecoveryValidator({\n projectId: params.projectId,\n chain,\n recoveryId: params.recoveryId,\n validatorAddress:\n params.opts?.validatorConfig?.validatorAddress ??\n RECOVERY_VALIDATOR_ADDRESS,\n ...params.opts?.validatorConfig,\n });\n super(\n {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: { ...params.opts?.providerConfig, chain },\n },\n },\n validator\n );\n this.recoveryId = params.recoveryId;\n this.enableData = params.enableData;\n }\n\n public static async init(\n params: RecoveryProviderParams\n ): Promise<RecoveryProvider> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n let accountAddress,\n enableData,\n signatures,\n serializedRecoveryConfig,\n recoveryConfig;\n if (params.recoveryId) {\n ({\n scwAddress: accountAddress,\n enableData,\n recoveryConfig: serializedRecoveryConfig,\n signatures,\n } = await getRecoveryData(params.recoveryId));\n recoveryConfig = RecoveryProvider.deserializeRecoveryConfig(\n serializedRecoveryConfig\n );\n } else if (\n params.opts?.accountConfig?.accountAddress &&\n (!params.opts?.validatorConfig?.guardians ||\n !Object.entries(params.opts?.validatorConfig?.guardians).length ||\n params.opts.validatorConfig.threshold === undefined)\n ) {\n const publicClient = createPublicClient({\n transport: http(\n params.opts.providerConfig?.rpcUrl ??\n CHAIN_ID_TO_NODE[chain?.id ?? polygonMumbai.id]\n ),\n chain: chain ?? polygonMumbai,\n });\n recoveryConfig = await RecoveryValidator.fetchRecoveryConfigFromContract(\n params.opts?.accountConfig?.accountAddress,\n publicClient\n );\n }\n const instance = new RecoveryProvider({\n enableData,\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n accountConfig: {\n accountAddress,\n ...params.opts?.accountConfig,\n },\n validatorConfig: {\n signatures,\n ...recoveryConfig,\n ...params.opts?.validatorConfig,\n },\n },\n });\n return instance;\n }\n\n async getDefaultValidator(): Promise<Address> {\n const publicClient = this.getValidator().getPublicClient();\n const kernelAccountAddress = await this.getAddress();\n return await publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n }\n\n async encodeCalldataAndNonce(enableData: Hex): Promise<Hex> {\n const defaultValidatorAddress = await this.getDefaultValidator();\n const callData = encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n const sender = await this.getAddress();\n const nonce = await (await this.getAccount()).getNonce();\n const encodedCallDataAndNonce = encodeAbiParameters(\n parseAbiParameters(\"address sender, bytes calldata, uint256 nonce\"),\n [sender, callData, nonce]\n );\n return keccak256(encodedCallDataAndNonce);\n }\n\n async enableRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const { selector } = await this.getValidator().getPluginValidatorData();\n const kernelAccountAddress = await this.defaultProvider.getAddress();\n const encodedSetExecData = await this.getAccount().encodeSetExection();\n if (\n await this.getValidator().isPluginEnabled(kernelAccountAddress, selector)\n ) {\n throw Error(\"Plugin already enabled\");\n }\n return await this.defaultProvider.sendUserOperation({\n target: kernelAccountAddress,\n data: encodedSetExecData,\n });\n }\n\n async renewRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const enableData = await this.getValidator().getEnableData();\n const [guardians, weights, threshold, delay] = decodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n enableData\n );\n const encodedRenewData = await this.getValidator().encodeRenew(\n [...guardians],\n [...weights],\n threshold,\n delay\n );\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedRenewData,\n });\n }\n\n async initiateRecovery(enableData: Hex): Promise<string> {\n const serializedConfig = this.serializeRecoveryConfig();\n const recoveryId = await postRecoveryData(\n enableData,\n await this.getAddress(),\n serializedConfig\n );\n console.log(recoveryId);\n this.enableData = enableData;\n if (!recoveryId) {\n throw Error(\"Unable to generate the recoveryId\");\n }\n return recoveryId;\n }\n\n serializeRecoveryConfig(): string {\n let recoveryConfig = this.getValidator().getRecoveryConfig();\n const jsonString = JSON.stringify(recoveryConfig);\n const uint8Array = new TextEncoder().encode(jsonString);\n const base64String = bytesToBase64(uint8Array);\n return base64String;\n }\n\n public static deserializeRecoveryConfig(\n recoveryConfig: string\n ): RecoveryConfig {\n const uint8Array = base64ToBytes(recoveryConfig);\n const jsonString = new TextDecoder().decode(uint8Array);\n return JSON.parse(jsonString) as RecoveryConfig;\n }\n\n async approveRecovery(enableData?: Hex): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitialized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApprove(\n callDataAndNonceHash!,\n kernelAccountAddress!\n ),\n });\n return await walletClient.waitForTransactionReceipt({\n hash,\n timeout: 180000 // 3 minutes\n });\n }\n\n async signRecovery(enableData?: Hex) {\n try {\n if (!this.recoveryId) {\n throw Error(\"RecoveryId not set\");\n }\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const sig = await this.getValidator().signRecoveryHash(\n callDataAndNonceHash\n );\n const { result, data } = await setSignatures(this.recoveryId, sig);\n if (result !== \"success\") {\n throw Error(\"Failed to save the signatures\");\n }\n this.getValidator().setRecoverySignatures(data.signatures);\n } catch (error) {\n console.log(error);\n }\n }\n\n async approveRecoveryWithSig(\n enableData?: Hex,\n sigs?: Hex\n ): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const signatures =\n sigs ?? (await this.getValidator().getRecoverySignatures());\n if (!signatures) {\n throw Error(\"Signatures are not set\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitilized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApproveWithSig(\n callDataAndNonceHash,\n kernelAccountAddress,\n sigs!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async cancelRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const encodedVetoData = await this.getValidator().encodeVeto(\n callDataAndNonceHash\n );\n\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedVetoData,\n });\n }\n\n async submitRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const defaultValidatorAddress = await this.getDefaultValidator();\n const encodedRecoveryActionData =\n await this.getValidator().encodeRecoveryAction(\n fetchedEnableData,\n defaultValidatorAddress\n );\n\n return await this.sendUserOperation({\n target: await this.getAddress(),\n data: encodedRecoveryActionData,\n });\n }\n\n // [TODO]\n // changeGuardian = this.sendEnableUserOperation;\n\n deleteRecoveryData = this.sendDisableUserOperation;\n}\n"]}
1
+ {"version":3,"file":"recovery-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/recovery-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ValidatorProvider,\n type ExtendedValidatorProviderParams,\n} from \"./base.js\";\nimport {\n RecoveryValidator,\n type RecoveryConfig,\n type RecoveryValidatorParams,\n} from \"../validator/recovery-validator.js\";\nimport { type Address, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport {\n getChainId,\n getRecoveryData,\n postRecoveryData,\n setSignatures,\n} from \"../api/index.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { CHAIN_ID_TO_NODE, RECOVERY_VALIDATOR_ADDRESS } from \"../constants.js\";\nimport {\n encodeAbiParameters,\n encodeFunctionData,\n parseAbiParameters,\n type Hex,\n keccak256,\n publicActions,\n type TransactionReceipt,\n createPublicClient,\n http,\n decodeAbiParameters,\n} from \"viem\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { base64ToBytes, bytesToBase64, getChain } from \"../utils.js\";\n\nexport interface RecoveryProviderParams\n extends ExtendedValidatorProviderParams<RecoveryValidatorParams> {\n recoveryId?: string;\n enableData?: Hex;\n}\n\nexport class RecoveryProvider extends ValidatorProvider<\n RecoveryValidator,\n RecoveryValidatorParams\n> {\n recoveryId?: string;\n enableData?: Hex;\n constructor(params: RecoveryProviderParams) {\n const chain =\n typeof params.opts?.providerConfig?.chain === \"number\"\n ? getChain(params.opts.providerConfig.chain)\n : params.opts?.providerConfig?.chain ?? polygonMumbai;\n const validator = new RecoveryValidator({\n projectId: params.projectId,\n chain,\n recoveryId: params.recoveryId,\n validatorAddress:\n params.opts?.validatorConfig?.validatorAddress ??\n RECOVERY_VALIDATOR_ADDRESS,\n ...params.opts?.validatorConfig,\n });\n super(\n {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: { ...params.opts?.providerConfig, chain },\n },\n },\n validator\n );\n this.recoveryId = params.recoveryId;\n this.enableData = params.enableData;\n }\n\n public static async init(\n params: RecoveryProviderParams\n ): Promise<RecoveryProvider> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n let accountAddress,\n enableData,\n signatures,\n serializedRecoveryConfig,\n recoveryConfig;\n if (params.recoveryId) {\n ({\n scwAddress: accountAddress,\n enableData,\n recoveryConfig: serializedRecoveryConfig,\n signatures,\n } = await getRecoveryData(params.recoveryId));\n recoveryConfig = RecoveryProvider.deserializeRecoveryConfig(\n serializedRecoveryConfig\n );\n } else if (\n params.opts?.accountConfig?.accountAddress &&\n (!params.opts?.validatorConfig?.guardians ||\n !Object.entries(params.opts?.validatorConfig?.guardians).length ||\n params.opts.validatorConfig.threshold === undefined)\n ) {\n const publicClient = createPublicClient({\n transport: http(\n params.opts.providerConfig?.rpcUrl ??\n CHAIN_ID_TO_NODE[chain?.id ?? polygonMumbai.id]\n ),\n chain: chain ?? polygonMumbai,\n });\n recoveryConfig = await RecoveryValidator.fetchRecoveryConfigFromContract(\n params.opts?.accountConfig?.accountAddress,\n publicClient\n );\n }\n const instance = new RecoveryProvider({\n enableData,\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n accountConfig: {\n accountAddress,\n ...params.opts?.accountConfig,\n },\n validatorConfig: {\n signatures,\n ...recoveryConfig,\n ...params.opts?.validatorConfig,\n },\n },\n });\n return instance;\n }\n\n async getDefaultValidator(): Promise<Address> {\n const publicClient = this.getValidator().getPublicClient();\n const kernelAccountAddress = await this.getAddress();\n return await publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n }\n\n async encodeCalldataAndNonce(enableData: Hex): Promise<Hex> {\n const defaultValidatorAddress = await this.getDefaultValidator();\n const callData = encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n const sender = await this.getAddress();\n const nonce = await (await this.getAccount()).getNonce();\n const encodedCallDataAndNonce = encodeAbiParameters(\n parseAbiParameters(\"address sender, bytes calldata, uint256 nonce\"),\n [sender, callData, nonce]\n );\n return keccak256(encodedCallDataAndNonce);\n }\n\n async enableRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const { selector } = await this.getValidator().getPluginValidatorData();\n const kernelAccountAddress = await this.defaultProvider.getAddress();\n const encodedSetExecData = await this.getAccount().encodeSetExection();\n if (\n await this.getValidator().isPluginEnabled(kernelAccountAddress, selector)\n ) {\n throw Error(\"Plugin already enabled\");\n }\n return await this.defaultProvider.sendUserOperation({\n target: kernelAccountAddress,\n data: encodedSetExecData,\n });\n }\n\n async renewRecovery(): Promise<SendUserOperationResult> {\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const enableData = await this.getValidator().getEnableData();\n const [guardians, weights, threshold, delay] = decodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n enableData\n );\n const encodedRenewData = await this.getValidator().encodeRenew(\n [...guardians],\n [...weights],\n threshold,\n delay\n );\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedRenewData,\n });\n }\n\n async initiateRecovery(enableData: Hex): Promise<string> {\n const serializedConfig = this.serializeRecoveryConfig();\n const recoveryId = await postRecoveryData(\n enableData,\n await this.getAddress(),\n serializedConfig\n );\n console.log(recoveryId);\n this.enableData = enableData;\n if (!recoveryId) {\n throw Error(\"Unable to generate the recoveryId\");\n }\n return recoveryId;\n }\n\n serializeRecoveryConfig(): string {\n let recoveryConfig = this.getValidator().getRecoveryConfig();\n const jsonString = JSON.stringify(recoveryConfig);\n const uint8Array = new TextEncoder().encode(jsonString);\n const base64String = bytesToBase64(uint8Array);\n return base64String;\n }\n\n public static deserializeRecoveryConfig(\n recoveryConfig: string\n ): RecoveryConfig {\n const uint8Array = base64ToBytes(recoveryConfig);\n const jsonString = new TextDecoder().decode(uint8Array);\n return JSON.parse(jsonString) as RecoveryConfig;\n }\n\n async approveRecovery(enableData?: Hex): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitialized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApprove(\n callDataAndNonceHash!,\n kernelAccountAddress!\n ),\n });\n return await walletClient.waitForTransactionReceipt({\n hash,\n timeout: 180000, // 3 minutes\n });\n }\n\n async signRecovery(enableData?: Hex) {\n try {\n if (!this.recoveryId) {\n throw Error(\"RecoveryId not set\");\n }\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const sig = await this.getValidator().signRecoveryHash(\n callDataAndNonceHash\n );\n const { result, data } = await setSignatures(this.recoveryId, sig);\n if (result !== \"success\") {\n throw Error(\"Failed to save the signatures\");\n }\n this.getValidator().setRecoverySignatures(data.signatures);\n } catch (error) {\n console.log(error);\n }\n }\n\n async approveRecoveryWithSig(\n enableData?: Hex,\n sigs?: Hex\n ): Promise<TransactionReceipt> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const signatures =\n sigs ?? (await this.getValidator().getRecoverySignatures());\n if (!signatures) {\n throw Error(\"Signatures are not set\");\n }\n const kernelAccountAddress = await this.getAddress();\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const validator = this.getValidator();\n if (!validator.walletClient) {\n throw Error(\"WalletClient uninitilized\");\n }\n const walletClient = validator.walletClient.extend(publicActions);\n let account;\n if (walletClient.account) {\n account = walletClient.account;\n } else {\n [account] = await walletClient.requestAddresses();\n }\n const hash = await walletClient.sendTransaction({\n account,\n to: validator.getAddress(),\n data: validator.encodeApproveWithSig(\n callDataAndNonceHash,\n kernelAccountAddress,\n sigs!\n ),\n });\n return await walletClient.waitForTransactionReceipt({ hash });\n }\n\n async cancelRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n if (!this.defaultProvider) {\n throw Error(\"DefaultProvider uninitilised\");\n }\n const callDataAndNonceHash = await this.encodeCalldataAndNonce(\n fetchedEnableData\n );\n const encodedVetoData = await this.getValidator().encodeVeto(\n callDataAndNonceHash\n );\n\n return await this.defaultProvider.sendUserOperation({\n target: this.getValidator().validatorAddress,\n data: encodedVetoData,\n });\n }\n\n async submitRecovery(enableData?: Hex): Promise<SendUserOperationResult> {\n const fetchedEnableData = enableData ?? this.enableData;\n if (!fetchedEnableData) {\n throw Error(\"Unable to fetch enable data for Recovery\");\n }\n const defaultValidatorAddress = await this.getDefaultValidator();\n const encodedRecoveryActionData =\n await this.getValidator().encodeRecoveryAction(\n fetchedEnableData,\n defaultValidatorAddress\n );\n\n return await this.sendUserOperation({\n target: await this.getAddress(),\n data: encodedRecoveryActionData,\n });\n }\n\n // [TODO]\n // changeGuardian = this.sendEnableUserOperation;\n\n deleteRecoveryData = this.sendDisableUserOperation;\n}\n"]}
@@ -1,6 +1,11 @@
1
1
  import type { ZeroDevProvider } from "../provider.js";
2
2
  import { type UserOperationStruct, type BigNumberish } from "@alchemy/aa-core";
3
+ import { BaseError } from "viem";
3
4
  import { type PaymasterAndBundlerProviders } from "../paymaster/types.js";
5
+ export declare class Eip1559FeesNotSupportedError extends BaseError {
6
+ name: string;
7
+ constructor();
8
+ }
4
9
  export declare const withZeroDevGasEstimator: (provider: ZeroDevProvider) => ZeroDevProvider;
5
10
  export declare const estimateCreationGas: (provider: ZeroDevProvider, initCode?: string) => Promise<bigint>;
6
11
  export declare const getPreVerificationGas: (userOp: Partial<UserOperationStruct>) => Promise<number>;
@@ -1 +1 @@
1
- {"version":3,"file":"gas-estimator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAGL,KAAK,mBAAmB,EAExB,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAE1E,eAAO,MAAM,uBAAuB,aACxB,eAAe,KACxB,eAuFF,CAAC;AAEF,eAAO,MAAM,mBAAmB,aACpB,eAAe,aACd,MAAM,KAChB,QAAQ,MAAM,CAShB,CAAC;AAMF,eAAO,MAAM,qBAAqB,WACxB,QAAQ,mBAAmB,CAAC,KACnC,QAAQ,MAAM,CAGhB,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE;KAC5C,CAAC,IAAI,4BAA4B,GAAG,MAAM;CAM5C,CAAC;AAEF,eAAO,MAAM,eAAe,aAAoB,eAAe;;;EAkC9D,CAAC;AACF,UAAU,OAAO;IACf,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,oBAAoB,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,UAAU,aACX,eAAe,KACxB,QAAQ,OAAO,CAgCjB,CAAC"}
1
+ {"version":3,"file":"gas-estimator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/middleware/gas-estimator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAGL,KAAK,mBAAmB,EAExB,KAAK,YAAY,EAElB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAGjC,OAAO,EAAE,KAAK,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAG1E,qBAAa,4BAA6B,SAAQ,SAAS;IAChD,IAAI,SAAkC;;CAIhD;AAED,eAAO,MAAM,uBAAuB,aACxB,eAAe,KACxB,eAsFF,CAAC;AAEF,eAAO,MAAM,mBAAmB,aACpB,eAAe,aACd,MAAM,KAChB,QAAQ,MAAM,CAShB,CAAC;AAMF,eAAO,MAAM,qBAAqB,WACxB,QAAQ,mBAAmB,CAAC,KACnC,QAAQ,MAAM,CAGhB,CAAC;AAEF,eAAO,MAAM,gCAAgC,EAAE;KAC5C,CAAC,IAAI,4BAA4B,GAAG,MAAM;CAM5C,CAAC;AAEF,eAAO,MAAM,eAAe,aAAoB,eAAe;;;EAgC9D,CAAC;AACF,UAAU,OAAO;IACf,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,oBAAoB,EAAE,YAAY,GAAG,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,UAAU,aACX,eAAe,KACxB,QAAQ,OAAO,CAgCjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,mBAAmB,EAEnB,KAAK,yBAAyB,EAC/B,MAAM,WAAW,CAAC;AACnB,OAAO,EAML,KAAK,YAAY,EAEjB,KAAK,YAAY,EAGjB,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,OAAO,EAGZ,KAAK,YAAY,EAElB,MAAM,MAAM,CAAC;AAWd,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAInD,UAAU,iBAAiB;IACzB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAC;CAC7B;AACD,MAAM,WAAW,uBAAwB,SAAQ,yBAAyB;IACxE,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,sBAAsB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC;IACjE,YAAY,CAAC,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9C,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,cAAc,GAAG,QAAQ,CACnC,IAAI,CAAC,uBAAuB,EAAE,WAAW,GAAG,WAAW,GAAG,cAAc,CAAC,CAC1E,CAAC;AAEF,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,CAE5E;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,GAAG,GACZ,QAAQ,IAAI,gBAAgB,CAE9B;AAED,KAAK,uBAAuB,CAAC,CAAC,IAAI,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,GAC5D,OAAO,GACP,CAAC,SAAS,gBAAgB,GAC1B,SAAS,GACT,KAAK,CAAC;AAEV,eAAO,MAAM,gBAAgB,eAE5B,CAAC;AAEF,qBAAa,iBAAkB,SAAQ,mBAAmB;IACxD,SAAS,CAAC,SAAS,CAAC,EAAE,iBAAiB,CAAC;IACxC,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IAC7C,SAAS,CAAC,sBAAsB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC;IAC3E,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC;IAC3B,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAC1C,YAAY,CAAC,EAAE,YAAY,CACzB,SAAS,EACT,KAAK,EACL,uBAAuB,CAAC,OAAO,IAAI,CAAC,sBAAsB,CAAC,CAC5D,CAAC;gBAEU,MAAM,EAAE,uBAAuB;WAmCvB,IAAI,CACtB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,iBAAiB,CAAC;IAU7B,WAAW,IAAI,MAAM;IAIrB,qBAAqB,CAAC,UAAU,EAAE,GAAG;IAI/B,qBAAqB,IAAI,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAQvD,iBAAiB,IAAI,cAAc;IAgB7B,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAOrC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC;IAsBnC,YAAY,CAAC,YAAY,EAAE,GAAG,GAAG,GAAG;IAQpC,aAAa,CAAC,WAAW,GAAE,GAAU,GAAG,GAAG;IAQ3C,aAAa,CAAC,oBAAoB,EAAE,GAAG,EAAE,oBAAoB,EAAE,OAAO,GAAG,GAAG;IAQ5E,oBAAoB,CAClB,oBAAoB,EAAE,GAAG,EACzB,oBAAoB,EAAE,OAAO,EAC7B,IAAI,EAAE,GAAG,GACR,GAAG;IAQN,UAAU,CAAC,oBAAoB,EAAE,GAAG,GAAG,GAAG;IAQ1C,WAAW,CACT,SAAS,EAAE,OAAO,EAAE,EACpB,OAAO,EAAE,MAAM,EAAE,EACjB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,GAAG;IAQN,oBAAoB,CAAC,UAAU,EAAE,GAAG,EAAE,uBAAuB,EAAE,OAAO,GAAG,GAAG;WAQ/D,+BAA+B,CAC1C,oBAAoB,EAAE,OAAO,EAC7B,YAAY,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,GAC3C,OAAO,CAAC,cAAc,CAAC;IAoCpB,eAAe,CACnB,oBAAoB,EAAE,OAAO,EAC7B,QAAQ,EAAE,GAAG,GACZ,OAAO,CAAC,OAAO,CAAC;IAwCb,kBAAkB,CAAC,oBAAoB,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BnE,uBAAuB,IAAI,OAAO,CAAC,GAAG,CAAC;IAavC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAOvD,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAOxD,gBAAgB,CAAC,YAAY,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAqBjD,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC;CAmB7D"}
1
+ {"version":3,"file":"recovery-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerodev/sdk",
3
- "version": "4.6.10",
3
+ "version": "4.7.0",
4
4
  "description": "A collection of ERC-4337 compliant smart contract account interfaces",
5
5
  "author": "ZeroDev",
6
6
  "license": "MIT",
@@ -7,10 +7,19 @@ import {
7
7
  type BigNumberish,
8
8
  type UserOperationEstimateGasResponse,
9
9
  } from "@alchemy/aa-core";
10
+ import { BaseError } from "viem";
10
11
  import { ENTRYPOINT_ADDRESS } from "../constants.js";
11
12
  import { calcPreVerificationGas } from "../utils/calc-pre-verification-gas.js";
12
13
  import { type PaymasterAndBundlerProviders } from "../paymaster/types.js";
13
14
 
15
+ // @dev implement Eip1559FeesNotSupportedError message for compatibility with viem
16
+ export class Eip1559FeesNotSupportedError extends BaseError {
17
+ override name = "Eip1559FeesNotSupportedError";
18
+ constructor() {
19
+ super("Chain does not support EIP-1559 fees.");
20
+ }
21
+ }
22
+
14
23
  export const withZeroDevGasEstimator = (
15
24
  provider: ZeroDevProvider
16
25
  ): ZeroDevProvider => {
@@ -87,11 +96,10 @@ export const withZeroDevGasEstimator = (
87
96
  const { preVerificationGas, verificationGasLimit, callGasLimit } =
88
97
  userOpGasEstimates;
89
98
  request.preVerificationGas =
90
- (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;
99
+ BigInt(preVerificationGas) ?? request.preVerificationGas;
91
100
  request.verificationGasLimit =
92
101
  BigInt(verificationGasLimit) ?? request.verificationGasLimit;
93
- request.callGasLimit =
94
- (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;
102
+ request.callGasLimit = BigInt(callGasLimit) ?? request.callGasLimit;
95
103
 
96
104
  return {
97
105
  ...struct,
@@ -152,22 +160,20 @@ export const eip1559GasPrice = async (provider: ZeroDevProvider) => {
152
160
  fee = fee.standard.maxPriorityFeePerGas;
153
161
  }
154
162
 
155
- const tip = BigInt(fee);
156
- const buffer =
157
- (tip / 100n) *
158
- BigInt(provider.feeOptions.maxPriorityFeePerGasBufferPercentage);
159
- let maxPriorityFeePerGas = tip + buffer;
160
- maxPriorityFeePerGas =
161
- maxPriorityFeePerGas < provider.minPriorityFeePerBid
162
- ? provider.minPriorityFeePerBid
163
- : maxPriorityFeePerGas;
164
- const maxFeePerGas =
165
- ((block.baseFeePerGas
166
- ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas
167
- : maxPriorityFeePerGas) *
168
- (BigInt(100) +
169
- BigInt(provider.feeOptions.maxFeePerGasBufferPercentage))) /
170
- 100n;
163
+ if (typeof block.baseFeePerGas !== "bigint")
164
+ throw new Eip1559FeesNotSupportedError();
165
+
166
+ // use default values of viem
167
+ const baseFeeMultiplier = 1.2;
168
+ const decimals = baseFeeMultiplier.toString().split(".")[1].length;
169
+ const denominator = 10 ** decimals;
170
+ const multiply = (base: bigint) =>
171
+ (base * BigInt(baseFeeMultiplier * denominator)) / BigInt(denominator);
172
+
173
+ const maxPriorityFeePerGas = BigInt(fee);
174
+
175
+ const baseFeePerGas = multiply(block.baseFeePerGas);
176
+ const maxFeePerGas = baseFeePerGas + maxPriorityFeePerGas;
171
177
 
172
178
  return { maxFeePerGas, maxPriorityFeePerGas };
173
179
  };
@@ -287,10 +287,8 @@ export class RecoveryValidator extends KernelBaseValidator {
287
287
  const guardians: WeightedGuardians = {};
288
288
 
289
289
  let nextGuardian = firstGuardian;
290
- const sentinelValue = "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
291
- while (
292
- nextGuardian.toLowerCase() !== sentinelValue.toLowerCase()
293
- ) {
290
+ const sentinelValue = "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
291
+ while (nextGuardian.toLowerCase() !== sentinelValue.toLowerCase()) {
294
292
  const guardianStorage = await publicClient.readContract({
295
293
  abi: WeightedValidatorAbi,
296
294
  address: RECOVERY_VALIDATOR_ADDRESS,
@@ -434,7 +432,7 @@ export class RecoveryValidator extends KernelBaseValidator {
434
432
  if (this.isSignerSmartContract) {
435
433
  return this.signatures ?? DUMMY_ECDSA_SIG;
436
434
  }
437
-
435
+
438
436
  const hash = getUserOperationHash(
439
437
  {
440
438
  ...userOp,
@@ -264,7 +264,7 @@ export class RecoveryProvider extends ValidatorProvider<
264
264
  });
265
265
  return await walletClient.waitForTransactionReceipt({
266
266
  hash,
267
- timeout: 180000 // 3 minutes
267
+ timeout: 180000, // 3 minutes
268
268
  });
269
269
  }
270
270