Untitled
unknown
plain_text
5 months ago
3.6 kB
6
Indexable
'use client'; import { createPublicClient, encodeFunctionData, http, parseAbi, toFunctionSelector } from "viem"; import { bundlerActions, ENTRYPOINT_ADDRESS_V07 } from "permissionless"; import { KERNEL_V3_1 } from "@zerodev/sdk/constants"; import { getValidatorAddress, signerToEcdsaValidator } from "@zerodev/ecdsa-validator"; import { PasskeyValidatorContractVersion, toPasskeyValidator, toWebAuthnKey, WebAuthnMode } from "@zerodev/passkey-validator"; import { BUNDLER_URL, CHAIN, PASSKEY_SERVER_URL, PAYMASTER_RPC } from "@/constants/constants"; import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; import { createKernelAccount, createKernelAccountClient, createZeroDevPaymasterClient } from "@zerodev/sdk"; export const enableBackup = async () => { const publicClient = createPublicClient({ chain: CHAIN, transport: http(BUNDLER_URL) }); const webAuthnKey = await toWebAuthnKey({ passkeyServerHeaders: {}, passkeyName: 'Untitled', passkeyServerUrl: PASSKEY_SERVER_URL, mode: WebAuthnMode.Login }); const passkeyValidator = await toPasskeyValidator(publicClient, { webAuthnKey, entryPoint: ENTRYPOINT_ADDRESS_V07, kernelVersion: KERNEL_V3_1, validatorContractVersion: PasskeyValidatorContractVersion.V0_0_2 }); const guardianPrivateKey = generatePrivateKey(); const guardianSigner = privateKeyToAccount(guardianPrivateKey); const guardianValidator = await signerToEcdsaValidator(publicClient, { signer: guardianSigner, entryPoint: ENTRYPOINT_ADDRESS_V07, kernelVersion: KERNEL_V3_1 }); const recoveryExecutorAddress = '0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1'; const recoveryExecutorFunction = 'function doRecovery(address _validator, bytes calldata _data)'; const recoveryExecutorSelector = toFunctionSelector(recoveryExecutorFunction); const account = await createKernelAccount(publicClient, { entryPoint: ENTRYPOINT_ADDRESS_V07, kernelVersion: KERNEL_V3_1, plugins: { sudo: passkeyValidator, regular: guardianValidator, action: { address: recoveryExecutorAddress, selector: recoveryExecutorSelector, }, } }); const kernelPaymaster = createZeroDevPaymasterClient({ entryPoint: ENTRYPOINT_ADDRESS_V07, chain: CHAIN, transport: http(PAYMASTER_RPC) }); const smartAccount = createKernelAccountClient({ account, chain: CHAIN, bundlerTransport: http(BUNDLER_URL), entryPoint: ENTRYPOINT_ADDRESS_V07, middleware: { sponsorUserOperation: kernelPaymaster.sponsorUserOperation } }); const data = encodeFunctionData({ abi: parseAbi([recoveryExecutorFunction]), functionName: "doRecovery", args: [getValidatorAddress(ENTRYPOINT_ADDRESS_V07, KERNEL_V3_1), guardianSigner.address], }); const userOpHash = await smartAccount.sendUserOperation({ userOperation: { callData: await account.encodeCallData({ to: recoveryExecutorAddress, data, value: BigInt(0) }) }, }); const bundlerClient = smartAccount.extend(bundlerActions(ENTRYPOINT_ADDRESS_V07) as any) as any; const hash = await bundlerClient.waitForUserOperationReceipt({ hash: userOpHash, timeout: 10000000000 }); console.log(hash); };
Editor is loading...
Leave a Comment