Untitled
unknown
plain_text
5 months ago
2.0 kB
8
Indexable
export const authenticate = async (passkeyValidator: any, publicClient: any, isRegister: boolean) => { const sessionPrivateKey = generatePrivateKey(); const sessionKeySigner = privateKeyToAccount(sessionPrivateKey); const ecdsaSigner = await toECDSASigner({ signer: sessionKeySigner }); const permissionValidator = await toPermissionValidator(publicClient, { kernelVersion: '0.3.1', signer: ecdsaSigner, policies: getPolicies(), entryPoint: ENTRYPOINT_ADDRESS_V07 }); const sessionKeyAccount = await createKernelAccount(publicClient, { kernelVersion: '0.3.1', entryPoint: ENTRYPOINT_ADDRESS_V07, plugins: { sudo: passkeyValidator, regular: permissionValidator } }); const sessionSigner = await serializePermissionAccount(sessionKeyAccount, sessionPrivateKey); localStorage.setItem('zerodev:session', sessionSigner); const kernelPaymaster = createZeroDevPaymasterClient({ entryPoint: ENTRYPOINT_ADDRESS_V07, chain: CHAIN, transport: http(PAYMASTER_RPC) }); const smartAccount = createKernelAccountClient({ account: sessionKeyAccount as any, chain: CHAIN, bundlerTransport: http(BUNDLER_URL), entryPoint: ENTRYPOINT_ADDRESS_V07, middleware: { sponsorUserOperation: kernelPaymaster.sponsorUserOperation } }); if (isRegister) { const usdcDetails = usdcAddressFinder(CHAIN); const data = encodeFunctionData({ abi: usdcABI, args: ["0x04E66B135c6021cc19c26188071C01cc2b47bfDa" as `0x${string}`, 0n], functionName: 'transfer', }); const userOpHash = await smartAccount.sendUserOperation({ userOperation: { callData: await sessionKeyAccount.encodeCallData({ to: usdcDetails.address, value: BigInt(0), data, }), }, } as any); const bundlerClient = smartAccount.extend(bundlerActions(ENTRYPOINT_ADDRESS_V07)); const res = await bundlerClient.waitForUserOperationReceipt({ hash: userOpHash, }); } };
Editor is loading...
Leave a Comment