Untitled
unknown
plain_text
a year ago
2.0 kB
13
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