# signerToZeroDevSmartAccount() Implementation
For more details check out the ZeroDev docs [here](signerToZeroDevSmartAccount).
```tsx
import {
createKernelAccount,
createZeroDevPaymasterClient,
createKernelAccountClient,
KernelEIP1193Provider,
KernelAccountClient
} from "@zerodev/sdk"
import { signerToEcdsaValidator } from "@zerodev/ecdsa-validator"
import { ENTRYPOINT_ADDRESS_V07, providerToSmartAccountSigner } from "permissionless"
import { http, createPublicClient, EIP1193Provider } from "viem"
import { baseSepolia } from "viem/chains"
import { EntryPoint } from "permissionless/_types/types"
// Create a public client
const publicClient = createPublicClient({
transport: http(process.env.BUNDLER_RPC),
})
const entryPoint = ENTRYPOINT_ADDRESS_V07;
export const signerToZeroDevSmartAccount = async ({
signer,
}: {
signer: EIP1193Provider;
}): Promise<EIP1193Provider> => {
// Convert EIP1193Provider for the embedded wallet to a signer
const smartAccountSigner = await providerToSmartAccountSigner(
signer,
);
// Create an ECDSA validator
const ecdsaValidator = await signerToEcdsaValidator(publicClient, {
signer: smartAccountSigner,
entryPoint,
})
// Create a Kernel account
const account = await createKernelAccount(publicClient, {
plugins: {
sudo: ecdsaValidator,
},
entryPoint,
})
// Initialize a Kernel (smart account) client from the signer
const kernelClient = createKernelAccountClient({
account,
entryPoint,
chain: baseSepolia,
bundlerTransport: http(process.env.BUNDLER_RPC),
middleware: {
sponsorUserOperation: async ({ userOperation }) => {
const paymasterClient = createZeroDevPaymasterClient({
chain: baseSepolia,
transport: http(process.env.PAYMASTER_RPC),
entryPoint,
})
return paymasterClient.sponsorUserOperation({
userOperation,
entryPoint,
})
},
},
}) as KernelAccountClient<EntryPoint>
// Get an EIP1193Provider for the Kernel smart account and return it
const kernelProvider = new KernelEIP1193Provider(kernelClient);
return kernelProvider as EIP1193Provider;
};
```