@zerodev/sdk 4.0.18 → 4.0.19

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.
@@ -117,7 +117,8 @@ class RecoveryValidator extends base_js_1.KernelBaseValidator {
117
117
  getRecoveryConfig() {
118
118
  if (this.guardians === undefined ||
119
119
  !this.threshold ||
120
- Object.entries(this.guardians).length !== this.threshold) {
120
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
121
+ this.threshold) {
121
122
  throw Error("Recovery config unintialised");
122
123
  }
123
124
  return {
@@ -135,7 +136,8 @@ class RecoveryValidator extends base_js_1.KernelBaseValidator {
135
136
  async getEnableData() {
136
137
  if (this.guardians === undefined ||
137
138
  !this.threshold ||
138
- Object.entries(this.guardians).length !== this.threshold) {
139
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
140
+ this.threshold) {
139
141
  throw Error("Recovery config unintialised");
140
142
  }
141
143
  return (0, viem_1.encodeAbiParameters)((0, viem_1.parseAbiParameters)("address[] guardians, uint24[] weights, uint24 threshold, uint48 delay"), [
@@ -190,7 +192,8 @@ class RecoveryValidator extends base_js_1.KernelBaseValidator {
190
192
  async isPluginEnabled(kernelAccountAddress, selector) {
191
193
  if (this.guardians === undefined ||
192
194
  !this.threshold ||
193
- Object.entries(this.guardians).length !== this.threshold) {
195
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
196
+ this.threshold) {
194
197
  throw Error("Recovery config unintialised");
195
198
  }
196
199
  if (!this.publicClient) {
@@ -224,7 +227,8 @@ class RecoveryValidator extends base_js_1.KernelBaseValidator {
224
227
  async isGuardiansEnabled(kernelAccountAddress) {
225
228
  if (this.guardians === undefined ||
226
229
  !this.threshold ||
227
- Object.entries(this.guardians).length !== this.threshold) {
230
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
231
+ this.threshold) {
228
232
  throw Error("Recovery config unintialised");
229
233
  }
230
234
  const weightedValidator = (0, viem_1.getContract)({
@@ -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 getChain,\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} from \"viem\";\nimport { WeightedValidatorAbi } from \"../abis/WeightedValidatorAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport {\n CHAIN_ID_TO_NODE,\n DUMMY_ECDSA_SIG,\n RECOVERY_ACTION,\n} from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData } 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 guardianAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n walletClient?: WalletClient<Transport, Chain>;\n signatures?: Hex;\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 guardianAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n protected signatures?: Hex;\n walletClient?: WalletClient<\n Transport,\n Chain,\n WalletClientAccountType<typeof this.guardianAccountOrProvider>\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.guardianAccountOrProvider = params.guardianAccountOrProvider;\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 if (isLocalAccount(params.guardianAccountOrProvider)) {\n this.walletClient = createWalletClient({\n account: params.guardianAccountOrProvider,\n chain: this.chain ?? polygonMumbai,\n transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),\n }).extend(publicActions);\n } else if (isEthereumProvider(params.guardianAccountOrProvider)) {\n this.walletClient = createWalletClient({\n chain: this.chain ?? polygonMumbai,\n transport: custom(params.guardianAccountOrProvider),\n }).extend(publicActions);\n } else if (params.walletClient) {\n this.walletClient = params.walletClient.extend(publicActions);\n } else if (params.guardianAccountOrProvider) {\n throw Error(\"Incorrect guardianAccountOrProvider 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 getRecoverySignatures(): Hex | undefined {\n return this.signatures;\n }\n\n getRecoveryConfig(): RecoveryConfig {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.entries(this.guardians).length !== this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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.entries(this.guardians).length !== this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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 encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex {\n return encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\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.entries(this.guardians).length !== this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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.entries(this.guardians).length !== this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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 const signer = await this.signer();\n return await signer.signTypedData({\n domain: {\n name: \"WeightedECDSAValidator\",\n version: \"1\",\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 return this.signatures ?? DUMMY_ECDSA_SIG;\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 getChain,\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} from \"viem\";\nimport { WeightedValidatorAbi } from \"../abis/WeightedValidatorAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport {\n CHAIN_ID_TO_NODE,\n DUMMY_ECDSA_SIG,\n RECOVERY_ACTION,\n} from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData } 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 guardianAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n walletClient?: WalletClient<Transport, Chain>;\n signatures?: Hex;\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 guardianAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n protected signatures?: Hex;\n walletClient?: WalletClient<\n Transport,\n Chain,\n WalletClientAccountType<typeof this.guardianAccountOrProvider>\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.guardianAccountOrProvider = params.guardianAccountOrProvider;\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 if (isLocalAccount(params.guardianAccountOrProvider)) {\n this.walletClient = createWalletClient({\n account: params.guardianAccountOrProvider,\n chain: this.chain ?? polygonMumbai,\n transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),\n }).extend(publicActions);\n } else if (isEthereumProvider(params.guardianAccountOrProvider)) {\n this.walletClient = createWalletClient({\n chain: this.chain ?? polygonMumbai,\n transport: custom(params.guardianAccountOrProvider),\n }).extend(publicActions);\n } else if (params.walletClient) {\n this.walletClient = params.walletClient.extend(publicActions);\n } else if (params.guardianAccountOrProvider) {\n throw Error(\"Incorrect guardianAccountOrProvider 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 getRecoverySignatures(): Hex | undefined {\n return this.signatures;\n }\n\n getRecoveryConfig(): RecoveryConfig {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) !==\n this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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).reduce((a, c) => a + c, 0) !==\n this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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 encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex {\n return encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\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).reduce((a, c) => a + c, 0) !==\n this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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).reduce((a, c) => a + c, 0) !==\n this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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 const signer = await this.signer();\n return await signer.signTypedData({\n domain: {\n name: \"WeightedECDSAValidator\",\n version: \"1\",\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 return this.signatures ?? DUMMY_ECDSA_SIG;\n }\n}\n"]}
@@ -112,7 +112,8 @@ export class RecoveryValidator extends KernelBaseValidator {
112
112
  getRecoveryConfig() {
113
113
  if (this.guardians === undefined ||
114
114
  !this.threshold ||
115
- Object.entries(this.guardians).length !== this.threshold) {
115
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
116
+ this.threshold) {
116
117
  throw Error("Recovery config unintialised");
117
118
  }
118
119
  return {
@@ -130,7 +131,8 @@ export class RecoveryValidator extends KernelBaseValidator {
130
131
  async getEnableData() {
131
132
  if (this.guardians === undefined ||
132
133
  !this.threshold ||
133
- Object.entries(this.guardians).length !== this.threshold) {
134
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
135
+ this.threshold) {
134
136
  throw Error("Recovery config unintialised");
135
137
  }
136
138
  return encodeAbiParameters(parseAbiParameters("address[] guardians, uint24[] weights, uint24 threshold, uint48 delay"), [
@@ -185,7 +187,8 @@ export class RecoveryValidator extends KernelBaseValidator {
185
187
  async isPluginEnabled(kernelAccountAddress, selector) {
186
188
  if (this.guardians === undefined ||
187
189
  !this.threshold ||
188
- Object.entries(this.guardians).length !== this.threshold) {
190
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
191
+ this.threshold) {
189
192
  throw Error("Recovery config unintialised");
190
193
  }
191
194
  if (!this.publicClient) {
@@ -219,7 +222,8 @@ export class RecoveryValidator extends KernelBaseValidator {
219
222
  async isGuardiansEnabled(kernelAccountAddress) {
220
223
  if (this.guardians === undefined ||
221
224
  !this.threshold ||
222
- Object.entries(this.guardians).length !== this.threshold) {
225
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
226
+ this.threshold) {
223
227
  throw Error("Recovery config unintialised");
224
228
  }
225
229
  const weightedValidator = getContract({
@@ -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 getChain,\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} from \"viem\";\nimport { WeightedValidatorAbi } from \"../abis/WeightedValidatorAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport {\n CHAIN_ID_TO_NODE,\n DUMMY_ECDSA_SIG,\n RECOVERY_ACTION,\n} from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData } 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 guardianAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n walletClient?: WalletClient<Transport, Chain>;\n signatures?: Hex;\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 guardianAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n protected signatures?: Hex;\n walletClient?: WalletClient<\n Transport,\n Chain,\n WalletClientAccountType<typeof this.guardianAccountOrProvider>\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.guardianAccountOrProvider = params.guardianAccountOrProvider;\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 if (isLocalAccount(params.guardianAccountOrProvider)) {\n this.walletClient = createWalletClient({\n account: params.guardianAccountOrProvider,\n chain: this.chain ?? polygonMumbai,\n transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),\n }).extend(publicActions);\n } else if (isEthereumProvider(params.guardianAccountOrProvider)) {\n this.walletClient = createWalletClient({\n chain: this.chain ?? polygonMumbai,\n transport: custom(params.guardianAccountOrProvider),\n }).extend(publicActions);\n } else if (params.walletClient) {\n this.walletClient = params.walletClient.extend(publicActions);\n } else if (params.guardianAccountOrProvider) {\n throw Error(\"Incorrect guardianAccountOrProvider 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 getRecoverySignatures(): Hex | undefined {\n return this.signatures;\n }\n\n getRecoveryConfig(): RecoveryConfig {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.entries(this.guardians).length !== this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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.entries(this.guardians).length !== this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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 encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex {\n return encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\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.entries(this.guardians).length !== this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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.entries(this.guardians).length !== this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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 const signer = await this.signer();\n return await signer.signTypedData({\n domain: {\n name: \"WeightedECDSAValidator\",\n version: \"1\",\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 return this.signatures ?? DUMMY_ECDSA_SIG;\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 getChain,\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} from \"viem\";\nimport { WeightedValidatorAbi } from \"../abis/WeightedValidatorAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport {\n CHAIN_ID_TO_NODE,\n DUMMY_ECDSA_SIG,\n RECOVERY_ACTION,\n} from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData } 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 guardianAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n walletClient?: WalletClient<Transport, Chain>;\n signatures?: Hex;\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 guardianAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n protected signatures?: Hex;\n walletClient?: WalletClient<\n Transport,\n Chain,\n WalletClientAccountType<typeof this.guardianAccountOrProvider>\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.guardianAccountOrProvider = params.guardianAccountOrProvider;\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 if (isLocalAccount(params.guardianAccountOrProvider)) {\n this.walletClient = createWalletClient({\n account: params.guardianAccountOrProvider,\n chain: this.chain ?? polygonMumbai,\n transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),\n }).extend(publicActions);\n } else if (isEthereumProvider(params.guardianAccountOrProvider)) {\n this.walletClient = createWalletClient({\n chain: this.chain ?? polygonMumbai,\n transport: custom(params.guardianAccountOrProvider),\n }).extend(publicActions);\n } else if (params.walletClient) {\n this.walletClient = params.walletClient.extend(publicActions);\n } else if (params.guardianAccountOrProvider) {\n throw Error(\"Incorrect guardianAccountOrProvider 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 getRecoverySignatures(): Hex | undefined {\n return this.signatures;\n }\n\n getRecoveryConfig(): RecoveryConfig {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) !==\n this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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).reduce((a, c) => a + c, 0) !==\n this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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 encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex {\n return encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\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).reduce((a, c) => a + c, 0) !==\n this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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).reduce((a, c) => a + c, 0) !==\n this.threshold\n ) {\n throw Error(\"Recovery config unintialised\");\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 const signer = await this.signer();\n return await signer.signTypedData({\n domain: {\n name: \"WeightedECDSAValidator\",\n version: \"1\",\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 return this.signatures ?? DUMMY_ECDSA_SIG;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"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"}
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,EAGb,MAAM,MAAM,CAAC;AAUd,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,yBAAyB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC;IACpE,YAAY,CAAC,EAAE,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAC9C,UAAU,CAAC,EAAE,GAAG,CAAC;CAClB;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,yBAAyB,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC;IAC9E,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC;IAC3B,YAAY,CAAC,EAAE,YAAY,CACzB,SAAS,EACT,KAAK,EACL,uBAAuB,CAAC,OAAO,IAAI,CAAC,yBAAyB,CAAC,CAC/D,CAAC;gBAEU,MAAM,EAAE,uBAAuB;WA+BvB,IAAI,CACtB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,iBAAiB,CAAC;IAU7B,WAAW,IAAI,MAAM;IAIrB,qBAAqB,CAAC,UAAU,EAAE,GAAG;IAIrC,qBAAqB,IAAI,GAAG,GAAG,SAAS;IAIxC,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,oBAAoB,CAAC,UAAU,EAAE,GAAG,EAAE,uBAAuB,EAAE,OAAO,GAAG,GAAG;IAQtE,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;IAsBjD,UAAU,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC;CAM9D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerodev/sdk",
3
- "version": "4.0.18",
3
+ "version": "4.0.19",
4
4
  "description": "A collection of ERC-4337 compliant smart contract account interfaces",
5
5
  "author": "ZeroDev",
6
6
  "license": "MIT",
@@ -150,7 +150,8 @@ export class RecoveryValidator extends KernelBaseValidator {
150
150
  if (
151
151
  this.guardians === undefined ||
152
152
  !this.threshold ||
153
- Object.entries(this.guardians).length !== this.threshold
153
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
154
+ this.threshold
154
155
  ) {
155
156
  throw Error("Recovery config unintialised");
156
157
  }
@@ -172,7 +173,8 @@ export class RecoveryValidator extends KernelBaseValidator {
172
173
  if (
173
174
  this.guardians === undefined ||
174
175
  !this.threshold ||
175
- Object.entries(this.guardians).length !== this.threshold
176
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
177
+ this.threshold
176
178
  ) {
177
179
  throw Error("Recovery config unintialised");
178
180
  }
@@ -248,7 +250,8 @@ export class RecoveryValidator extends KernelBaseValidator {
248
250
  if (
249
251
  this.guardians === undefined ||
250
252
  !this.threshold ||
251
- Object.entries(this.guardians).length !== this.threshold
253
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
254
+ this.threshold
252
255
  ) {
253
256
  throw Error("Recovery config unintialised");
254
257
  }
@@ -287,7 +290,8 @@ export class RecoveryValidator extends KernelBaseValidator {
287
290
  if (
288
291
  this.guardians === undefined ||
289
292
  !this.threshold ||
290
- Object.entries(this.guardians).length !== this.threshold
293
+ Object.values(this.guardians).reduce((a, c) => a + c, 0) !==
294
+ this.threshold
291
295
  ) {
292
296
  throw Error("Recovery config unintialised");
293
297
  }