3rd Party Signers

Account Kit is designed to be flexible and allow you to use any Signer you want. If you choose not use our signer, you can either:

  1. Use a 3rd party library as a Signer that integrates with Account Kit.
  2. Implement SmartAccountSigner (exported in @aa-sdk/core).
  3. If your Signer is an EIP-1193 compliant provider, you can leverage viem’s WalletClient and the WalletClientSigner (exported in @aa-sdk/core).

Then you can use your Signer as an owner on Smart Contracts exported from @account-kit/smart-contracts and with our infra Smart Account Clients exported from @account-kit/infra.

Third Party SDKs

If you’ve built an SDK or Guide that leverages any of the methods below to use as a 3rd Party Signer, we’re happy to include you in this list!

Please open a PR to add a link to your content in this section.

Implementing SmartAccountAuthenticator or SmartAccountSigner

Smart accounts in Account Kit expect an implementation of SmartAccountSigner to work in Account Kit. We also include a SmartAccountAuthenticator interface that extends SmartAccountSigner and wraps any SDKs you may wish to use as part of the implementation of your own Signer.

import type { 
import Address
Address
} from "abitype";
import type {
type Hex = `0x${string}`
Hex
,
type OneOf<union extends object, fallback extends object | undefined = undefined, keys extends KeyofUnion<union> = KeyofUnion<union>> = union extends infer item ? { [K in keyof (item & { [key in Exclude<keys, keyof item>]?: (fallback extends object ? key extends keyof fallback ? fallback[key] : undefined : undefined) | undefined; })]: (item & { [key in Exclude<keys, keyof item>]?: (fallback extends object ? key extends keyof fallback ? fallback[key] : undefined : undefined) | undefined; })[K]; } : never
OneOf
,
type SignableMessage = string | { raw: Hex | ByteArray; }
SignableMessage
,
type TypedData = { [x: string]: readonly TypedDataParameter[]; [x: `string[${string}]`]: undefined; [x: `function[${string}]`]: undefined; [x: `address[${string}]`]: undefined; [x: `bool[${string}]`]: undefined; [x: `bytes[${string}]`]: undefined; [x: `bytes1[${string}]`]: undefined; [x: `bytes2[${string}]`]: undefined; [x: `bytes3[${string}]`]: undefined; [x: `bytes4[${string}]`]: undefined; [x: `bytes5[${string}]`]: undefined; [x: `bytes6[${string}]`]: undefined; [x: `bytes7[${string}]`]: undefined; [x: `bytes8[${string}]`]: undefined; [x: `bytes9[${string}]`]: undefined; [x: `bytes10[${string}]`]: undefined; [x: `bytes11[${string}]`]: undefined; [x: `bytes12[${string}]`]: undefined; [x: `bytes13[${string}]`]: undefined; [x: `bytes14[${string}]`]: undefined; [x: `bytes15[${string}]`]: undefined; [x: `bytes16[${string}]`]: undefined; [x: `bytes17[${string}]`]: undefined; [x: `bytes18[${string}]`]: undefined; [x: `bytes19[${string}]`]: undefined; [x: `bytes20[${string}]`]: undefined; [x: `bytes21[${string}]`]: undefined; [x: `bytes22[${string}]`]: undefined; [x: `bytes23[${string}]`]: undefined; [x: `bytes24[${string}]`]: undefined; [x: `bytes25[${string}]`]: undefined; [x: `bytes26[${string}]`]: undefined; [x: `bytes27[${string}]`]: undefined; [x: `bytes28[${string}]`]: undefined; [x: `bytes29[${string}]`]: undefined; [x: `bytes30[${string}]`]: undefined; [x: `bytes31[${string}]`]: undefined; [x: `bytes32[${string}]`]: undefined; [x: `int[${ ...

EIP-712 Typed Data Specification

TypedData
,
type TypedDataDefinition<typedData extends TypedData | Record<string, unknown> = { [x: string]: readonly TypedDataParameter[]; [x: `string[${string}]`]: undefined; [x: `function[${string}]`]: undefined; [x: `address[${string}]`]: undefined; [x: `bool[${string}]`]: undefined; [x: `bytes[${string}]`]: undefined; [x: `bytes1[${string}]`]: undefined; [x: `bytes2[${string}]`]: undefined; [x: `bytes3[${string}]`]: undefined; [x: `bytes4[${string}]`]: undefined; [x: `bytes5[${string}]`]: undefined; [x: `bytes6[${string}]`]: undefined; [x: `bytes7[${string}]`]: undefined; [x: `bytes8[${string}]`]: undefined; [x: `bytes9[${string}]`]: undefined; [x: `bytes10[${string}]`]: undefined; [x: `bytes11[${string}]`]: undefined; [x: `bytes12[${string}]`]: undefined; [x: `bytes13[${string}]`]: undefined; [x: `bytes14[${string}]`]: undefined; [x: `bytes15[${string}]`]: undefined; [x: `bytes16[${string}]`]: undefined; [x: `bytes17[${string}]`]: undefined; [x: `bytes18[${string}]`]: undefined; [x: `bytes19[${string}]`]: undefined; [x: `bytes20[${string}]`]: undefined; [x: `bytes21[${string}]`]: undefined; [x: `bytes22[${string}]`]: undefined; [x: `bytes23[${string}]`]: undefined; [x: `bytes24[${string}]`]: undefined; [x: `bytes25[${string}]`]: undefined; [x: `bytes26[${string}]`]: undefined; [x: `bytes27[${string}]`]: undefined; [x: `bytes28[${string}]`]: undefined; [x: `bytes29[${string}]`]: undefined; [x: `bytes30[${string}]`]: undefined; [x: `bytes31[${string}]`]: undefined; [x: `bytes32[${string}]`]: undefined; [x: `int[${string}]`]: undefined; [x: `int8[${string}]`]: undefined; [x: `int16[${string}]`]: undefined; [ ... = primaryType extends "EIP712Domain" ? EIP712DomainDefinition<typedData, primaryType, typedData extends { [x: string]: readonly TypedDataParameter[]; [x: `string[${string}]`]: undefined; [x: `function[${string}]`]: undefined; [x: `address[${string}]`]: undefined; [x: `bool[${string}]`]: undefined; [x: `bytes[${string}]`]: undefined; [x: `bytes1[${string}]`]: undefined; [x: `bytes2[${string}]`]: undefined; [x: `bytes3[${string}]`]: undefined; [x: `bytes4[${string}]`]: undefined; [x: `bytes5[${string}]`]: undefined; [x: `bytes6[${string}]`]: undefined; [x: `bytes7[${string}]`]: undefined; [x: `bytes8[${string}]`]: undefined; [x: `bytes9[${string}]`]: undefined; [x: `bytes10[${string}]`]: undefined; [x: `bytes11[${string}]`]: undefined; [x: `bytes12[${string}]`]: undefined; [x: `bytes13[${string}]`]: undefined; [x: `bytes14[${string}]`]: undefined; [x: `bytes15[${string}]`]: undefined; [x: `bytes16[${string}]`]: undefined; [x: `bytes17[${string}]`]: undefined; [x: `bytes18[${string}]`]: undefined; [x: `bytes19[${string}]`]: undefined; [x: `bytes20[${string}]`]: undefined; [x: `bytes21[${string}]`]: undefined; [x: `bytes22[${string}]`]: undefined; [x: `bytes23[${string}]`]: undefined; [x: `bytes24[${string}]`]: undefined; [x: `bytes25[${string}]`]: undefined; [x: `bytes26[${string}]`]: undefined; [x: `bytes27[${string}]`]: undefined; [x: `bytes28[${string}]`]: undefined; [x: `bytes29[${string}]`]: undefined; [x: `bytes30[${string}]`]: undefined ...
TypedDataDefinition
,
type SignedAuthorization<uint32 = number> = { address: Address; chainId: uint32; nonce: uint32; } & Signature<uint32>
SignedAuthorization
,
} from "viem"; // [!region SmartAccountAuthenticator] /** * Extends the @interface SmartAccountSigner interface with authentication. * * @template AuthParams - the generic type of the authentication parameters * @template AuthDetails - the generic type of the authentication details * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc. */ export interface
interface SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>

Extends the

SmartAccountAuthenticator
<
function (type parameter) AuthParams in SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>

the generic type of the authentication parameters

AuthParams
,
function (type parameter) AuthDetails in SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>

the generic type of the authentication details

AuthDetails
,
function (type parameter) Inner in SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>

the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.

Inner
= any>
extends
interface SmartAccountSigner<Inner = any>

A signer that can sign messages and typed data.

SmartAccountSigner
<
function (type parameter) Inner in SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>

the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.

Inner
> {
SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>.authenticate: (params: AuthParams) => Promise<AuthDetails>
authenticate
: (
params: AuthParams
params
:
function (type parameter) AuthParams in SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>

the generic type of the authentication parameters

AuthParams
) =>
interface Promise<T>

Represents the completion of an asynchronous operation

Promise
<
function (type parameter) AuthDetails in SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>

the generic type of the authentication details

AuthDetails
>;
SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>.getAuthDetails: () => Promise<AuthDetails>
getAuthDetails
: () =>
interface Promise<T>

Represents the completion of an asynchronous operation

Promise
<
function (type parameter) AuthDetails in SmartAccountAuthenticator<AuthParams, AuthDetails, Inner = any>

the generic type of the authentication details

AuthDetails
>;
} // [!endregion SmartAccountAuthenticator] // [!region SmartAccountSigner] // TODO: This is a temporary type to be removed when viem is updated export type
type AuthorizationRequest<uint32 = number> = OneOf<{ address: Address; } | { contractAddress: Address; }> & { chainId: uint32; nonce: uint32; }
AuthorizationRequest
<
function (type parameter) uint32 in type AuthorizationRequest<uint32 = number>
uint32
= number> =
type OneOf<union extends object, fallback extends object | undefined = undefined, keys extends KeyofUnion<union> = KeyofUnion<union>> = union extends infer item ? { [K in keyof (item & { [key in Exclude<keys, keyof item>]?: (fallback extends object ? key extends keyof fallback ? fallback[key] : undefined : undefined) | undefined; })]: (item & { [key in Exclude<keys, keyof item>]?: (fallback extends object ? key extends keyof fallback ? fallback[key] : undefined : undefined) | undefined; })[K]; } : never
OneOf
<
| {
address: Address
address
:
import Address
Address
;
} | {
contractAddress: Address
contractAddress
:
import Address
Address
;
} > & { /** Chain ID. */
chainId: uint32 = number

Chain ID.

chainId
:
function (type parameter) uint32 in type AuthorizationRequest<uint32 = number>
uint32
;
/** Nonce of the EOA to delegate to. */
nonce: uint32 = number

Nonce of the EOA to delegate to.

nonce
:
function (type parameter) uint32 in type AuthorizationRequest<uint32 = number>
uint32
;
}; /** * A signer that can sign messages and typed data. * * @template Inner - the generic type of the inner client that the signer wraps to provide functionality such as signing, etc. */ export interface
interface SmartAccountSigner<Inner = any>

A signer that can sign messages and typed data.

SmartAccountSigner
<
function (type parameter) Inner in SmartAccountSigner<Inner = any>

the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.

Inner
= any> {
SmartAccountSigner<Inner = any>.signerType: string
signerType
: string;
SmartAccountSigner<Inner = any>.inner: Inner = any
inner
:
function (type parameter) Inner in SmartAccountSigner<Inner = any>

the generic type of the inner client that the signer wraps to provide functionality such as signing, etc.

Inner
;
SmartAccountSigner<Inner = any>.getAddress: () => Promise<Address>
getAddress
: () =>
interface Promise<T>

Represents the completion of an asynchronous operation

Promise
<
import Address
Address
>;
SmartAccountSigner<Inner = any>.signMessage: (message: SignableMessage) => Promise<Hex>
signMessage
: (
message: SignableMessage
message
:
type SignableMessage = string | { raw: Hex | ByteArray; }
SignableMessage
) =>
interface Promise<T>

Represents the completion of an asynchronous operation

Promise
<
type Hex = `0x${string}`
Hex
>;
SmartAccountSigner<Inner = any>.signTypedData: <const TTypedData extends TypedData | Record<string, unknown>, TPrimaryType extends keyof TTypedData | "EIP712Domain" = keyof TTypedData>(params: TypedDataDefinition<TTypedData, TPrimaryType>) => Promise<Hex>
signTypedData
: <
const
function (type parameter) TTypedData in <const TTypedData extends TypedData | Record<string, unknown>, TPrimaryType extends keyof TTypedData | "EIP712Domain" = keyof TTypedData>(params: TypedDataDefinition<TTypedData, TPrimaryType>): Promise<Hex>
TTypedData
extends
type TypedData = { [x: string]: readonly TypedDataParameter[]; [x: `string[${string}]`]: undefined; [x: `function[${string}]`]: undefined; [x: `address[${string}]`]: undefined; [x: `bool[${string}]`]: undefined; [x: `bytes[${string}]`]: undefined; [x: `bytes1[${string}]`]: undefined; [x: `bytes2[${string}]`]: undefined; [x: `bytes3[${string}]`]: undefined; [x: `bytes4[${string}]`]: undefined; [x: `bytes5[${string}]`]: undefined; [x: `bytes6[${string}]`]: undefined; [x: `bytes7[${string}]`]: undefined; [x: `bytes8[${string}]`]: undefined; [x: `bytes9[${string}]`]: undefined; [x: `bytes10[${string}]`]: undefined; [x: `bytes11[${string}]`]: undefined; [x: `bytes12[${string}]`]: undefined; [x: `bytes13[${string}]`]: undefined; [x: `bytes14[${string}]`]: undefined; [x: `bytes15[${string}]`]: undefined; [x: `bytes16[${string}]`]: undefined; [x: `bytes17[${string}]`]: undefined; [x: `bytes18[${string}]`]: undefined; [x: `bytes19[${string}]`]: undefined; [x: `bytes20[${string}]`]: undefined; [x: `bytes21[${string}]`]: undefined; [x: `bytes22[${string}]`]: undefined; [x: `bytes23[${string}]`]: undefined; [x: `bytes24[${string}]`]: undefined; [x: `bytes25[${string}]`]: undefined; [x: `bytes26[${string}]`]: undefined; [x: `bytes27[${string}]`]: undefined; [x: `bytes28[${string}]`]: undefined; [x: `bytes29[${string}]`]: undefined; [x: `bytes30[${string}]`]: undefined; [x: `bytes31[${string}]`]: undefined; [x: `bytes32[${string}]`]: undefined; [x: `int[${ ...

EIP-712 Typed Data Specification

TypedData
|
type Record<K extends keyof any, T> = { [P in K]: T; }

Construct a type with a set of properties K of type T

Record
<string, unknown>,
function (type parameter) TPrimaryType in <const TTypedData extends TypedData | Record<string, unknown>, TPrimaryType extends keyof TTypedData | "EIP712Domain" = keyof TTypedData>(params: TypedDataDefinition<TTypedData, TPrimaryType>): Promise<Hex>
TPrimaryType
extends keyof
function (type parameter) TTypedData in <const TTypedData extends TypedData | Record<string, unknown>, TPrimaryType extends keyof TTypedData | "EIP712Domain" = keyof TTypedData>(params: TypedDataDefinition<TTypedData, TPrimaryType>): Promise<Hex>
TTypedData
| "EIP712Domain" = keyof
function (type parameter) TTypedData in <const TTypedData extends TypedData | Record<string, unknown>, TPrimaryType extends keyof TTypedData | "EIP712Domain" = keyof TTypedData>(params: TypedDataDefinition<TTypedData, TPrimaryType>): Promise<Hex>
TTypedData
,
>(
params: TypedDataDefinition<TTypedData, TPrimaryType>
params
:
type TypedDataDefinition<typedData extends TypedData | Record<string, unknown> = { [x: string]: readonly TypedDataParameter[]; [x: `string[${string}]`]: undefined; [x: `function[${string}]`]: undefined; [x: `address[${string}]`]: undefined; [x: `bool[${string}]`]: undefined; [x: `bytes[${string}]`]: undefined; [x: `bytes1[${string}]`]: undefined; [x: `bytes2[${string}]`]: undefined; [x: `bytes3[${string}]`]: undefined; [x: `bytes4[${string}]`]: undefined; [x: `bytes5[${string}]`]: undefined; [x: `bytes6[${string}]`]: undefined; [x: `bytes7[${string}]`]: undefined; [x: `bytes8[${string}]`]: undefined; [x: `bytes9[${string}]`]: undefined; [x: `bytes10[${string}]`]: undefined; [x: `bytes11[${string}]`]: undefined; [x: `bytes12[${string}]`]: undefined; [x: `bytes13[${string}]`]: undefined; [x: `bytes14[${string}]`]: undefined; [x: `bytes15[${string}]`]: undefined; [x: `bytes16[${string}]`]: undefined; [x: `bytes17[${string}]`]: undefined; [x: `bytes18[${string}]`]: undefined; [x: `bytes19[${string}]`]: undefined; [x: `bytes20[${string}]`]: undefined; [x: `bytes21[${string}]`]: undefined; [x: `bytes22[${string}]`]: undefined; [x: `bytes23[${string}]`]: undefined; [x: `bytes24[${string}]`]: undefined; [x: `bytes25[${string}]`]: undefined; [x: `bytes26[${string}]`]: undefined; [x: `bytes27[${string}]`]: undefined; [x: `bytes28[${string}]`]: undefined; [x: `bytes29[${string}]`]: undefined; [x: `bytes30[${string}]`]: undefined; [x: `bytes31[${string}]`]: undefined; [x: `bytes32[${string}]`]: undefined; [x: `int[${string}]`]: undefined; [x: `int8[${string}]`]: undefined; [x: `int16[${string}]`]: undefined; [ ... = primaryType extends "EIP712Domain" ? EIP712DomainDefinition<typedData, primaryType, typedData extends { [x: string]: readonly TypedDataParameter[]; [x: `string[${string}]`]: undefined; [x: `function[${string}]`]: undefined; [x: `address[${string}]`]: undefined; [x: `bool[${string}]`]: undefined; [x: `bytes[${string}]`]: undefined; [x: `bytes1[${string}]`]: undefined; [x: `bytes2[${string}]`]: undefined; [x: `bytes3[${string}]`]: undefined; [x: `bytes4[${string}]`]: undefined; [x: `bytes5[${string}]`]: undefined; [x: `bytes6[${string}]`]: undefined; [x: `bytes7[${string}]`]: undefined; [x: `bytes8[${string}]`]: undefined; [x: `bytes9[${string}]`]: undefined; [x: `bytes10[${string}]`]: undefined; [x: `bytes11[${string}]`]: undefined; [x: `bytes12[${string}]`]: undefined; [x: `bytes13[${string}]`]: undefined; [x: `bytes14[${string}]`]: undefined; [x: `bytes15[${string}]`]: undefined; [x: `bytes16[${string}]`]: undefined; [x: `bytes17[${string}]`]: undefined; [x: `bytes18[${string}]`]: undefined; [x: `bytes19[${string}]`]: undefined; [x: `bytes20[${string}]`]: undefined; [x: `bytes21[${string}]`]: undefined; [x: `bytes22[${string}]`]: undefined; [x: `bytes23[${string}]`]: undefined; [x: `bytes24[${string}]`]: undefined; [x: `bytes25[${string}]`]: undefined; [x: `bytes26[${string}]`]: undefined; [x: `bytes27[${string}]`]: undefined; [x: `bytes28[${string}]`]: undefined; [x: `bytes29[${string}]`]: undefined; [x: `bytes30[${string}]`]: undefined ...
TypedDataDefinition
<
function (type parameter) TTypedData in <const TTypedData extends TypedData | Record<string, unknown>, TPrimaryType extends keyof TTypedData | "EIP712Domain" = keyof TTypedData>(params: TypedDataDefinition<TTypedData, TPrimaryType>): Promise<Hex>
TTypedData
,
function (type parameter) TPrimaryType in <const TTypedData extends TypedData | Record<string, unknown>, TPrimaryType extends keyof TTypedData | "EIP712Domain" = keyof TTypedData>(params: TypedDataDefinition<TTypedData, TPrimaryType>): Promise<Hex>
TPrimaryType
>,
) =>
interface Promise<T>

Represents the completion of an asynchronous operation

Promise
<
type Hex = `0x${string}`
Hex
>;
SmartAccountSigner<Inner = any>.signAuthorization?: ((unsignedAuthorization: AuthorizationRequest<number>) => Promise<SignedAuthorization<number>>) | undefined
signAuthorization
?: (
unsignedAuthorization: AuthorizationRequest<number>
unsignedAuthorization
:
type AuthorizationRequest<uint32 = number> = OneOf<{ address: Address; } | { contractAddress: Address; }> & { chainId: uint32; nonce: uint32; }
AuthorizationRequest
<number>,
) =>
interface Promise<T>

Represents the completion of an asynchronous operation

Promise
<
type SignedAuthorization<uint32 = number> = { address: Address; chainId: uint32; nonce: uint32; } & Signature<uint32>
SignedAuthorization
<number>>;
} // [!endregion SmartAccountSigner]

Using WalletClientSigner

Viem allows you to create a WalletClient, which can be used to wrap local or JSON RPC based wallets. You can see the complete docs for leveraging the WalletClient here.

We support a SmartAccountSigner implementation called WalletClientSigner that makes it really easy to use a viem WalletClient as a signer on your Smart Contract Account. If your Signer is EIP-1193 compliant, it is really easy to use with WalletClient. Let’s take a look at a simple example:

import { 
class WalletClientSigner

Represents a wallet client signer for smart accounts, providing methods to get the address, sign messages, and sign typed data.

WalletClientSigner
, type
interface SmartAccountSigner<Inner = any>

A signer that can sign messages and typed data.

SmartAccountSigner
} from "@aa-sdk/core";
import {
function createWalletClient<transport extends Transport, chain extends Chain | undefined = undefined, accountOrAddress extends Account | Address | undefined = undefined, rpcSchema extends RpcSchema | undefined = undefined>(parameters: WalletClientConfig<transport, chain, accountOrAddress, rpcSchema>): WalletClient<transport, chain, ParseAccount<accountOrAddress>, rpcSchema>

Creates a Wallet Client with a given Transport configured for a Chain.

Docs: https://viem.sh/docs/clients/wallet

A Wallet Client is an interface to interact with Ethereum Account(s) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through Wallet Actions.

The Wallet Client supports signing over: JSON-RPC Accounts (e.g. Browser Extension Wallets, WalletConnect, etc). Local Accounts (e.g. private key/mnemonic wallets).

createWalletClient
,
function custom<provider extends EthereumProvider>(provider: provider, config?: CustomTransportConfig): CustomTransport
custom
} from "viem";
import {
const sepolia: { blockExplorers: { readonly default: { readonly name: "Etherscan"; readonly url: "https://sepolia.etherscan.io"; readonly apiUrl: "https://api-sepolia.etherscan.io/api"; }; }; ... 11 more ...; serializers?: ChainSerializers<...> | undefined; }
sepolia
} from "viem/chains";
const
const externalProvider: any
externalProvider
=
any
window
.
any
ethereum
; // or any other EIP-1193 provider
const
const walletClient: { account: undefined; batch?: { multicall?: boolean | Prettify<MulticallBatchOptions> | undefined; } | undefined; ... 33 more ...; extend: <const client extends { ...; } & ExactPartial<...>>(fn: (client: Client<...>) => client) => Client<...>; }
walletClient
=
createWalletClient<CustomTransport, { blockExplorers: { readonly default: { readonly name: "Etherscan"; readonly url: "https://sepolia.etherscan.io"; readonly apiUrl: "https://api-sepolia.etherscan.io/api"; }; }; ... 11 more ...; serializers?: ChainSerializers<...> | undefined; }, undefined, undefined>(parameters: { ...; }): { ...; }

Creates a Wallet Client with a given Transport configured for a Chain.

Docs: https://viem.sh/docs/clients/wallet

A Wallet Client is an interface to interact with Ethereum Account(s) and provides the ability to retrieve accounts, execute transactions, sign messages, etc. through Wallet Actions.

The Wallet Client supports signing over: JSON-RPC Accounts (e.g. Browser Extension Wallets, WalletConnect, etc). Local Accounts (e.g. private key/mnemonic wallets).

createWalletClient
({
chain?: Chain | { blockExplorers: { readonly default: { readonly name: "Etherscan"; readonly url: "https://sepolia.etherscan.io"; readonly apiUrl: "https://api-sepolia.etherscan.io/api"; }; }; ... 11 more ...; serializers?: ChainSerializers<...> | undefined; } | undefined

Chain for the client.

chain
:
const sepolia: { blockExplorers: { readonly default: { readonly name: "Etherscan"; readonly url: "https://sepolia.etherscan.io"; readonly apiUrl: "https://api-sepolia.etherscan.io/api"; }; }; ... 11 more ...; serializers?: ChainSerializers<...> | undefined; }
sepolia
, // can provide a different chain here
transport: CustomTransport

The RPC transport

transport
:
custom<any>(provider: any, config?: CustomTransportConfig): CustomTransport
custom
(
const externalProvider: any
externalProvider
),
}); export const
const signer: SmartAccountSigner<any>
signer
:
interface SmartAccountSigner<Inner = any>

A signer that can sign messages and typed data.

SmartAccountSigner
= new
new WalletClientSigner(client: WalletClient, signerType: string): WalletClientSigner

Initializes a signer with a given wallet client and signer type.

WalletClientSigner
(
const walletClient: { account: undefined; batch?: { multicall?: boolean | Prettify<MulticallBatchOptions> | undefined; } | undefined; ... 33 more ...; extend: <const client extends { ...; } & ExactPartial<...>>(fn: (client: Client<...>) => client) => Client<...>; }
walletClient
,
"json-rpc", // signerType );