Class WalletClientSigner

A signer that can sign messages and typed data.

Var

signerType - the type of the signer (e.g. local, hardware, etc.)

Var

inner - the inner client of

Method

getAddress - get the address of the signer

Method

signMessage - sign a message

Method

signTypedData - sign typed data

Implements

Constructors

  • Parameters

    • client: {
          account: undefined | Account;
          addChain: ((args) => Promise<void>);
          batch?: {
              multicall?: boolean | {
                  batchSize?: number;
                  wait?: number;
              };
          };
          cacheTime: number;
          ccipRead?: false | {
              request?: ((parameters) => Promise<`0x${string}`>);
          };
          chain: undefined | Chain;
          deployContract: (<const abi, chainOverride>(args) => Promise<`0x${string}`>);
          extend: (<const client>(fn) => Client<Transport, undefined | Chain, undefined | Account, WalletRpcSchema, {
              [K in string | number | symbol]: client[K]
          } & WalletActions<undefined | Chain, undefined | Account>>);
          getAddresses: (() => Promise<GetAddressesReturnType>);
          getChainId: (() => Promise<number>);
          getPermissions: (() => Promise<GetPermissionsReturnType>);
          key: string;
          name: string;
          pollingInterval: number;
          prepareTransactionRequest: (<const request, chainOverride, accountOverride>(args) => Promise<{
              [K in string | number | symbol]: (UnionRequiredBy<Extract<UnionOmit<(...), (...)> & ((...) extends (...)
                  ? (...)
                  : (...)) & ((...) extends (...)
                  ? (...)
                  : (...)), IsNever<(...)> extends true
                  ? unknown
                  : ExactPartial<(...)>> & {
                  chainId?: number;
              }, ParameterTypeToParameters<request["parameters"] extends readonly PrepareTransactionRequestParameterType[]
                  ? any[any][number]
                  : "nonce" | "type" | "gas" | "blobVersionedHashes" | "fees" | "chainId">> & (unknown extends request["kzg"]
                  ? {}
                  : Pick<request, "kzg">))[K]
          }>);
          request: EIP1193RequestFn<WalletRpcSchema>;
          requestAddresses: (() => Promise<RequestAddressesReturnType>);
          requestPermissions: ((args) => Promise<RequestPermissionsReturnType>);
          sendRawTransaction: ((args) => Promise<`0x${string}`>);
          sendTransaction: (<const request, chainOverride>(args) => Promise<`0x${string}`>);
          signMessage: ((args) => Promise<`0x${string}`>);
          signTransaction: (<chainOverride>(args) => Promise<`0x02${string}` | `0x01${string}` | `0x03${string}` | TransactionSerializedLegacy>);
          signTypedData: (<const typedData, primaryType>(args) => Promise<`0x${string}`>);
          switchChain: ((args) => Promise<void>);
          transport: TransportConfig<string, EIP1193RequestFn> & Record<string, any>;
          type: string;
          uid: string;
          watchAsset: ((args) => Promise<boolean>);
          writeContract: (<const abi, functionName, args, chainOverride>(args) => Promise<`0x${string}`>);
      }
      • account: undefined | Account

        The Account of the Client.

      • addChain: ((args) => Promise<void>)

        Adds an EVM chain to the wallet.

        Example

        import { createWalletClient, custom } from 'viem'
        import { optimism } from 'viem/chains'

        const client = createWalletClient({
        transport: custom(window.ethereum),
        })
        await client.addChain({ chain: optimism })
          • (args): Promise<void>
          • Parameters

            • args: AddChainParameters

              AddChainParameters

            Returns Promise<void>

      • Optional batch?: {
            multicall?: boolean | {
                batchSize?: number;
                wait?: number;
            };
        }

        Flags for batch settings.

        • Optional multicall?: boolean | {
              batchSize?: number;
              wait?: number;
          }

          Toggle to enable eth_call multicall aggregation.

      • cacheTime: number

        Time (in ms) that cached data will remain in memory.

      • Optional ccipRead?: false | {
            request?: ((parameters) => Promise<`0x${string}`>);
        }

        CCIP Read configuration.

      • chain: undefined | Chain

        Chain for the client.

      • deployContract: (<const abi, chainOverride>(args) => Promise<`0x${string}`>)

        Deploys a contract to the network, given bytecode and constructor arguments.

        Returns

        The Transaction hash. DeployContractReturnType

        Example

        import { createWalletClient, http } from 'viem'
        import { privateKeyToAccount } from 'viem/accounts'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        account: privateKeyToAccount('0x…'),
        chain: mainnet,
        transport: http(),
        })
        const hash = await client.deployContract({
        abi: [],
        account: '0x…,
        bytecode: '0x608060405260405161083e38038061083e833981016040819052610...',
        })
          • <const abi, chainOverride>(args): Promise<`0x${string}`>
          • Type Parameters

            • const abi extends Abi | readonly unknown[]
            • chainOverride extends undefined | Chain

            Parameters

            • args: DeployContractParameters<abi, undefined | Chain, undefined | Account, chainOverride>

              DeployContractParameters

            Returns Promise<`0x${string}`>

      • extend: (<const client>(fn) => Client<Transport, undefined | Chain, undefined | Account, WalletRpcSchema, {
            [K in string | number | symbol]: client[K]
        } & WalletActions<undefined | Chain, undefined | Account>>)
          • <const client>(fn): Client<Transport, undefined | Chain, undefined | Account, WalletRpcSchema, {
                [K in string | number | symbol]: client[K]
            } & WalletActions<undefined | Chain, undefined | Account>>
          • Type Parameters

            • const client extends {
                  account?: undefined;
                  batch?: undefined;
                  cacheTime?: undefined;
                  ccipRead?: undefined;
                  chain?: undefined;
                  key?: undefined;
                  name?: undefined;
                  pollingInterval?: undefined;
                  request?: undefined;
                  transport?: undefined;
                  type?: undefined;
                  uid?: undefined;
              } & ExactPartial<ExtendableProtectedActions<Transport, undefined | Chain, undefined | Account>>

            Parameters

            • fn: ((client) => client)
                • (client): client
                • Parameters

                  • client: Client<Transport, undefined | Chain, undefined | Account, WalletRpcSchema, WalletActions<undefined | Chain, undefined | Account>>

                  Returns client

            Returns Client<Transport, undefined | Chain, undefined | Account, WalletRpcSchema, {
                [K in string | number | symbol]: client[K]
            } & WalletActions<undefined | Chain, undefined | Account>>

      • getAddresses: (() => Promise<GetAddressesReturnType>)

        Returns a list of account addresses owned by the wallet or client.

        Returns

        List of account addresses owned by the wallet or client. GetAddressesReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const accounts = await client.getAddresses()
          • (): Promise<GetAddressesReturnType>
          • Returns Promise<GetAddressesReturnType>

      • getChainId: (() => Promise<number>)

        Returns the chain ID associated with the current network.

        Returns

        The current chain ID. GetChainIdReturnType

        Example

        import { createWalletClient, http } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const chainId = await client.getChainId()
        // 1
          • (): Promise<number>
          • Returns Promise<number>

      • getPermissions: (() => Promise<GetPermissionsReturnType>)

        Gets the wallets current permissions.

        Returns

        The wallet permissions. GetPermissionsReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const permissions = await client.getPermissions()
          • (): Promise<GetPermissionsReturnType>
          • Returns Promise<GetPermissionsReturnType>

      • key: string

        A key for the client.

      • name: string

        A name for the client.

      • pollingInterval: number

        Frequency (in ms) for polling enabled actions & events. Defaults to 4_000 milliseconds.

      • prepareTransactionRequest: (<const request, chainOverride, accountOverride>(args) => Promise<{
            [K in string | number | symbol]: (UnionRequiredBy<Extract<UnionOmit<(...), (...)> & ((...) extends (...)
                ? (...)
                : (...)) & ((...) extends (...)
                ? (...)
                : (...)), IsNever<(...)> extends true
                ? unknown
                : ExactPartial<(...)>> & {
                chainId?: number;
            }, ParameterTypeToParameters<request["parameters"] extends readonly PrepareTransactionRequestParameterType[]
                ? any[any][number]
                : "nonce" | "type" | "gas" | "blobVersionedHashes" | "fees" | "chainId">> & (unknown extends request["kzg"]
                ? {}
                : Pick<request, "kzg">))[K]
        }>)

        Prepares a transaction request for signing.

        Returns

        The transaction request. PrepareTransactionRequestReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const request = await client.prepareTransactionRequest({
        account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
        to: '0x0000000000000000000000000000000000000000',
        value: 1n,
        })

        Example

        // Account Hoisting
        import { createWalletClient, http } from 'viem'
        import { privateKeyToAccount } from 'viem/accounts'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        account: privateKeyToAccount('0x…'),
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const request = await client.prepareTransactionRequest({
        to: '0x0000000000000000000000000000000000000000',
        value: 1n,
        })
          • <const request, chainOverride, accountOverride>(args): Promise<{
                [K in string | number | symbol]: (UnionRequiredBy<Extract<UnionOmit<(...), (...)> & ((...) extends (...)
                    ? (...)
                    : (...)) & ((...) extends (...)
                    ? (...)
                    : (...)), IsNever<(...)> extends true
                    ? unknown
                    : ExactPartial<(...)>> & {
                    chainId?: number;
                }, ParameterTypeToParameters<request["parameters"] extends readonly PrepareTransactionRequestParameterType[]
                    ? any[any][number]
                    : "nonce" | "type" | "gas" | "blobVersionedHashes" | "fees" | "chainId">> & (unknown extends request["kzg"]
                    ? {}
                    : Pick<request, "kzg">))[K]
            }>
          • Type Parameters

            • const request extends (Omit<{
                  accessList?: undefined;
                  blobVersionedHashes: undefined;
                  blobs?: undefined;
                  data?: `0x${string}`;
                  from: `0x${string}`;
                  gas?: bigint;
                  gasPrice?: bigint;
                  kzg: undefined;
                  maxFeePerBlobGas?: undefined;
                  maxFeePerGas?: undefined;
                  maxPriorityFeePerGas?: undefined;
                  nonce?: number;
                  sidecars: undefined;
                  to?: null | `0x${string}`;
                  type?: "legacy";
                  value?: bigint;
              }, "from"> | Omit<{
                  accessList?: AccessList;
                  blobVersionedHashes: undefined;
                  blobs?: undefined;
                  data?: `0x${string}`;
                  from: `0x${string}`;
                  gas?: bigint;
                  gasPrice?: bigint;
                  kzg: undefined;
                  maxFeePerBlobGas?: undefined;
                  maxFeePerGas?: undefined;
                  maxPriorityFeePerGas?: undefined;
                  nonce?: number;
                  sidecars: undefined;
                  to?: null | `0x${string}`;
                  type?: "eip2930";
                  value?: bigint;
              }, "from"> | Omit<{
                  accessList?: AccessList;
                  blobVersionedHashes: undefined;
                  blobs?: undefined;
                  data?: `0x${string}`;
                  from: `0x${string}`;
                  gas?: bigint;
                  gasPrice?: undefined;
                  kzg: undefined;
                  maxFeePerBlobGas?: undefined;
                  maxFeePerGas?: bigint;
                  maxPriorityFeePerGas?: bigint;
                  nonce?: number;
                  sidecars: undefined;
                  to?: null | `0x${string}`;
                  type?: "eip1559";
                  value?: bigint;
              }, "from"> | Omit<{
                  accessList?: AccessList;
                  blobVersionedHashes?: readonly `0x${string}`[];
                  blobs: readonly `0x${string}`[] | readonly Uint8Array[];
                  data?: `0x${string}`;
                  from: `0x${string}`;
                  gas?: bigint;
                  gasPrice?: undefined;
                  kzg?: Kzg;
                  maxFeePerBlobGas: bigint;
                  maxFeePerGas?: bigint;
                  maxPriorityFeePerGas?: bigint;
                  nonce?: number;
                  sidecars?: readonly BlobSidecar<`0x${string}`>[];
                  to: null | `0x${string}`;
                  type?: "eip4844";
                  value?: bigint;
              }, "from">) & {
                  kzg?: Kzg;
              } & {
                  parameters?: readonly PrepareTransactionRequestParameterType[];
              }
            • chainOverride extends undefined | Chain = undefined
            • accountOverride extends undefined | `0x${string}` | Account = undefined

            Parameters

            Returns Promise<{
                [K in string | number | symbol]: (UnionRequiredBy<Extract<UnionOmit<(...), (...)> & ((...) extends (...)
                    ? (...)
                    : (...)) & ((...) extends (...)
                    ? (...)
                    : (...)), IsNever<(...)> extends true
                    ? unknown
                    : ExactPartial<(...)>> & {
                    chainId?: number;
                }, ParameterTypeToParameters<request["parameters"] extends readonly PrepareTransactionRequestParameterType[]
                    ? any[any][number]
                    : "nonce" | "type" | "gas" | "blobVersionedHashes" | "fees" | "chainId">> & (unknown extends request["kzg"]
                    ? {}
                    : Pick<request, "kzg">))[K]
            }>

      • request: EIP1193RequestFn<WalletRpcSchema>

        Request function wrapped with friendly error handling

      • requestAddresses: (() => Promise<RequestAddressesReturnType>)

        Requests a list of accounts managed by a wallet.

        Sends a request to the wallet, asking for permission to access the user's accounts. After the user accepts the request, it will return a list of accounts (addresses).

        This API can be useful for dapps that need to access the user's accounts in order to execute transactions or interact with smart contracts.

        Returns

        List of accounts managed by a wallet RequestAddressesReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const accounts = await client.requestAddresses()
          • (): Promise<RequestAddressesReturnType>
          • Returns Promise<RequestAddressesReturnType>

      • requestPermissions: ((args) => Promise<RequestPermissionsReturnType>)

        Requests permissions for a wallet.

        Returns

        The wallet permissions. RequestPermissionsReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const permissions = await client.requestPermissions({
        eth_accounts: {}
        })
          • (args): Promise<RequestPermissionsReturnType>
          • Parameters

            • args: {
                  eth_accounts: Record<string, any>;
              }

              RequestPermissionsParameters

              • eth_accounts: Record<string, any>

            Returns Promise<RequestPermissionsReturnType>

      • sendRawTransaction: ((args) => Promise<`0x${string}`>)

        Sends a signed transaction to the network

        Returns

        The transaction hash. SendRawTransactionReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'
        import { sendRawTransaction } from 'viem/wallet'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })

        const hash = await client.sendRawTransaction({
        serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'
        })
          • (args): Promise<`0x${string}`>
          • Parameters

            • args: SendRawTransactionParameters

            Returns Promise<`0x${string}`>

      • sendTransaction: (<const request, chainOverride>(args) => Promise<`0x${string}`>)

        Creates, signs, and sends a new transaction to the network.

        Returns

        The Transaction hash. SendTransactionReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const hash = await client.sendTransaction({
        account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
        to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
        value: 1000000000000000000n,
        })

        Example

        // Account Hoisting
        import { createWalletClient, http } from 'viem'
        import { privateKeyToAccount } from 'viem/accounts'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        account: privateKeyToAccount('0x…'),
        chain: mainnet,
        transport: http(),
        })
        const hash = await client.sendTransaction({
        to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
        value: 1000000000000000000n,
        })
          • <const request, chainOverride>(args): Promise<`0x${string}`>
          • Type Parameters

            • const request extends (Omit<{
                  accessList?: undefined;
                  blobVersionedHashes: undefined;
                  blobs?: undefined;
                  data?: `0x${string}`;
                  from: `0x${string}`;
                  gas?: bigint;
                  gasPrice?: bigint;
                  kzg: undefined;
                  maxFeePerBlobGas?: undefined;
                  maxFeePerGas?: undefined;
                  maxPriorityFeePerGas?: undefined;
                  nonce?: number;
                  sidecars: undefined;
                  to?: null | `0x${string}`;
                  type?: "legacy";
                  value?: bigint;
              }, "from"> | Omit<{
                  accessList?: AccessList;
                  blobVersionedHashes: undefined;
                  blobs?: undefined;
                  data?: `0x${string}`;
                  from: `0x${string}`;
                  gas?: bigint;
                  gasPrice?: bigint;
                  kzg: undefined;
                  maxFeePerBlobGas?: undefined;
                  maxFeePerGas?: undefined;
                  maxPriorityFeePerGas?: undefined;
                  nonce?: number;
                  sidecars: undefined;
                  to?: null | `0x${string}`;
                  type?: "eip2930";
                  value?: bigint;
              }, "from"> | Omit<{
                  accessList?: AccessList;
                  blobVersionedHashes: undefined;
                  blobs?: undefined;
                  data?: `0x${string}`;
                  from: `0x${string}`;
                  gas?: bigint;
                  gasPrice?: undefined;
                  kzg: undefined;
                  maxFeePerBlobGas?: undefined;
                  maxFeePerGas?: bigint;
                  maxPriorityFeePerGas?: bigint;
                  nonce?: number;
                  sidecars: undefined;
                  to?: null | `0x${string}`;
                  type?: "eip1559";
                  value?: bigint;
              }, "from"> | Omit<{
                  accessList?: AccessList;
                  blobVersionedHashes?: readonly `0x${string}`[];
                  blobs: readonly `0x${string}`[] | readonly Uint8Array[];
                  data?: `0x${string}`;
                  from: `0x${string}`;
                  gas?: bigint;
                  gasPrice?: undefined;
                  kzg?: Kzg;
                  maxFeePerBlobGas: bigint;
                  maxFeePerGas?: bigint;
                  maxPriorityFeePerGas?: bigint;
                  nonce?: number;
                  sidecars?: readonly BlobSidecar<`0x${string}`>[];
                  to: null | `0x${string}`;
                  type?: "eip4844";
                  value?: bigint;
              }, "from">) & {
                  kzg?: Kzg;
              }
            • chainOverride extends undefined | Chain = undefined

            Parameters

            • args: SendTransactionParameters<undefined | Chain, undefined | Account, chainOverride, request>

              SendTransactionParameters

            Returns Promise<`0x${string}`>

      • signMessage: ((args) => Promise<`0x${string}`>)

        Calculates an Ethereum-specific signature in EIP-191 format: keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)).

        With the calculated signature, you can:

        Returns

        The signed message. SignMessageReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const signature = await client.signMessage({
        account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
        message: 'hello world',
        })

        Example

        // Account Hoisting
        import { createWalletClient, http } from 'viem'
        import { privateKeyToAccount } from 'viem/accounts'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        account: privateKeyToAccount('0x…'),
        chain: mainnet,
        transport: http(),
        })
        const signature = await client.signMessage({
        message: 'hello world',
        })
          • (args): Promise<`0x${string}`>
          • Parameters

            • args: SignMessageParameters<undefined | Account>

              SignMessageParameters

            Returns Promise<`0x${string}`>

      • signTransaction: (<chainOverride>(args) => Promise<`0x02${string}` | `0x01${string}` | `0x03${string}` | TransactionSerializedLegacy>)

        Signs a transaction.

        Returns

        The signed message. SignTransactionReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const request = await client.prepareTransactionRequest({
        account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
        to: '0x0000000000000000000000000000000000000000',
        value: 1n,
        })
        const signature = await client.signTransaction(request)

        Example

        // Account Hoisting
        import { createWalletClient, http } from 'viem'
        import { privateKeyToAccount } from 'viem/accounts'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        account: privateKeyToAccount('0x…'),
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const request = await client.prepareTransactionRequest({
        to: '0x0000000000000000000000000000000000000000',
        value: 1n,
        })
        const signature = await client.signTransaction(request)
          • <chainOverride>(args): Promise<`0x02${string}` | `0x01${string}` | `0x03${string}` | TransactionSerializedLegacy>
          • Type Parameters

            • chainOverride extends undefined | Chain

            Parameters

            • args: SignTransactionParameters<undefined | Chain, undefined | Account, chainOverride>

              SignTransactionParameters

            Returns Promise<`0x02${string}` | `0x01${string}` | `0x03${string}` | TransactionSerializedLegacy>

      • signTypedData: (<const typedData, primaryType>(args) => Promise<`0x${string}`>)

        Signs typed data and calculates an Ethereum-specific signature in EIP-191 format: keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)).

        Returns

        The signed data. SignTypedDataReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const signature = await client.signTypedData({
        account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
        domain: {
        name: 'Ether Mail',
        version: '1',
        chainId: 1,
        verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
        },
        types: {
        Person: [
        { name: 'name', type: 'string' },
        { name: 'wallet', type: 'address' },
        ],
        Mail: [
        { name: 'from', type: 'Person' },
        { name: 'to', type: 'Person' },
        { name: 'contents', type: 'string' },
        ],
        },
        primaryType: 'Mail',
        message: {
        from: {
        name: 'Cow',
        wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
        },
        to: {
        name: 'Bob',
        wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
        },
        contents: 'Hello, Bob!',
        },
        })

        Example

        // Account Hoisting
        import { createWalletClient, http } from 'viem'
        import { privateKeyToAccount } from 'viem/accounts'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        account: privateKeyToAccount('0x…'),
        chain: mainnet,
        transport: http(),
        })
        const signature = await client.signTypedData({
        domain: {
        name: 'Ether Mail',
        version: '1',
        chainId: 1,
        verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
        },
        types: {
        Person: [
        { name: 'name', type: 'string' },
        { name: 'wallet', type: 'address' },
        ],
        Mail: [
        { name: 'from', type: 'Person' },
        { name: 'to', type: 'Person' },
        { name: 'contents', type: 'string' },
        ],
        },
        primaryType: 'Mail',
        message: {
        from: {
        name: 'Cow',
        wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
        },
        to: {
        name: 'Bob',
        wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
        },
        contents: 'Hello, Bob!',
        },
        })
          • <const typedData, primaryType>(args): Promise<`0x${string}`>
          • Type Parameters

            • const typedData extends {
                  address: undefined;
                  bool: undefined;
                  bytes: undefined;
                  bytes1: undefined;
                  bytes10: undefined;
                  bytes11: undefined;
                  bytes12: undefined;
                  bytes13: undefined;
                  bytes14: undefined;
                  bytes15: undefined;
                  bytes16: undefined;
                  bytes17: undefined;
                  bytes18: undefined;
                  bytes19: undefined;
                  bytes2: undefined;
                  bytes20: undefined;
                  bytes21: undefined;
                  bytes22: undefined;
                  bytes23: undefined;
                  bytes24: undefined;
                  bytes25: undefined;
                  bytes26: undefined;
                  bytes27: undefined;
                  bytes28: undefined;
                  bytes29: undefined;
                  bytes3: undefined;
                  bytes30: undefined;
                  bytes31: undefined;
                  bytes32: undefined;
                  bytes4: undefined;
                  bytes5: undefined;
                  bytes6: undefined;
                  bytes7: undefined;
                  bytes8: undefined;
                  bytes9: undefined;
                  int104: undefined;
                  int112: undefined;
                  int120: undefined;
                  int128: undefined;
                  int136: undefined;
                  int144: undefined;
                  int152: undefined;
                  int16: undefined;
                  int160: undefined;
                  int168: undefined;
                  int176: undefined;
                  int184: undefined;
                  int192: undefined;
                  int200: undefined;
                  int208: undefined;
                  int216: undefined;
                  int224: undefined;
                  int232: undefined;
                  int24: undefined;
                  int240: undefined;
                  int248: undefined;
                  int256: undefined;
                  int32: undefined;
                  int40: undefined;
                  int48: undefined;
                  int56: undefined;
                  int64: undefined;
                  int72: undefined;
                  int8: undefined;
                  int80: undefined;
                  int88: undefined;
                  int96: undefined;
                  string: undefined;
                  uint104: undefined;
                  uint112: undefined;
                  uint120: undefined;
                  uint128: undefined;
                  uint136: undefined;
                  uint144: undefined;
                  uint152: undefined;
                  uint16: undefined;
                  uint160: undefined;
                  uint168: undefined;
                  uint176: undefined;
                  uint184: undefined;
                  uint192: undefined;
                  uint200: undefined;
                  uint208: undefined;
                  uint216: undefined;
                  uint224: undefined;
                  uint232: undefined;
                  uint24: undefined;
                  uint240: undefined;
                  uint248: undefined;
                  uint256: undefined;
                  uint32: undefined;
                  uint40: undefined;
                  uint48: undefined;
                  uint56: undefined;
                  uint64: undefined;
                  uint72: undefined;
                  uint8: undefined;
                  uint80: undefined;
                  uint88: undefined;
                  uint96: undefined;
              } | {
                  [key: string]: unknown;
              }
            • primaryType extends string

            Parameters

            Returns Promise<`0x${string}`>

      • switchChain: ((args) => Promise<void>)

        Switch the target chain in a wallet.

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet, optimism } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        await client.switchChain({ id: optimism.id })
          • (args): Promise<void>
          • Parameters

            • args: SwitchChainParameters

              SwitchChainParameters

            Returns Promise<void>

      • transport: TransportConfig<string, EIP1193RequestFn> & Record<string, any>

        The RPC transport

      • type: string

        The type of client.

      • uid: string

        A unique ID for the client.

      • watchAsset: ((args) => Promise<boolean>)

        Adds an EVM chain to the wallet.

        Returns

        Boolean indicating if the token was successfully added. WatchAssetReturnType

        Example

        import { createWalletClient, custom } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const success = await client.watchAsset({
        type: 'ERC20',
        options: {
        address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
        decimals: 18,
        symbol: 'WETH',
        },
        })
          • (args): Promise<boolean>
          • Parameters

            • args: WatchAssetParams

              WatchAssetParameters

            Returns Promise<boolean>

      • writeContract: (<const abi, functionName, args, chainOverride>(args) => Promise<`0x${string}`>)

        Executes a write function on a contract.

        A "write" function on a Solidity contract modifies the state of the blockchain. These types of functions require gas to be executed, and hence a Transaction is needed to be broadcast in order to change the state.

        Internally, uses a Wallet Client to call the sendTransaction action with ABI-encoded data.

        Warning: The write internally sends a transaction – it does not validate if the contract write will succeed (the contract may throw an error). It is highly recommended to simulate the contract write with contract.simulate before you execute it.

        Returns

        A Transaction Hash. WriteContractReturnType

        Example

        import { createWalletClient, custom, parseAbi } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const hash = await client.writeContract({
        address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
        abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),
        functionName: 'mint',
        args: [69420],
        })

        Example

        // With Validation
        import { createWalletClient, custom, parseAbi } from 'viem'
        import { mainnet } from 'viem/chains'

        const client = createWalletClient({
        chain: mainnet,
        transport: custom(window.ethereum),
        })
        const { request } = await client.simulateContract({
        address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
        abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),
        functionName: 'mint',
        args: [69420],
        }
        const hash = await client.writeContract(request)
          • <const abi, functionName, args, chainOverride>(args): Promise<`0x${string}`>
          • Type Parameters

            • const abi extends Abi | readonly unknown[]
            • functionName extends string
            • args extends unknown
            • chainOverride extends undefined | Chain = undefined

            Parameters

            Returns Promise<`0x${string}`>

    • signerType: string

    Returns WalletClientSigner

Properties

getAddress: (() => Promise<`0x${string}`>) = ...

Type declaration

    • (): Promise<`0x${string}`>
    • Returns Promise<`0x${string}`>

inner: {
    account: undefined | Account;
    addChain: ((args) => Promise<void>);
    batch?: {
        multicall?: boolean | {
            batchSize?: number;
            wait?: number;
        };
    };
    cacheTime: number;
    ccipRead?: false | {
        request?: ((parameters) => Promise<`0x${string}`>);
    };
    chain: undefined | Chain;
    deployContract: (<const abi, chainOverride>(args) => Promise<`0x${string}`>);
    extend: (<const client>(fn) => Client<Transport, undefined | Chain, undefined | Account, WalletRpcSchema, {
        [K in string | number | symbol]: client[K]
    } & WalletActions<undefined | Chain, undefined | Account>>);
    getAddresses: (() => Promise<GetAddressesReturnType>);
    getChainId: (() => Promise<number>);
    getPermissions: (() => Promise<GetPermissionsReturnType>);
    key: string;
    name: string;
    pollingInterval: number;
    prepareTransactionRequest: (<const request, chainOverride, accountOverride>(args) => Promise<{
        [K in string | number | symbol]: (UnionRequiredBy<Extract<UnionOmit<(...), (...)> & ((...) extends (...)
            ? (...)
            : (...)) & ((...) extends (...)
            ? (...)
            : (...)), IsNever<(...)> extends true
            ? unknown
            : ExactPartial<(...)>> & {
            chainId?: number;
        }, ParameterTypeToParameters<request["parameters"] extends readonly PrepareTransactionRequestParameterType[]
            ? any[any][number]
            : "nonce" | "type" | "gas" | "blobVersionedHashes" | "fees" | "chainId">> & (unknown extends request["kzg"]
            ? {}
            : Pick<request, "kzg">))[K]
    }>);
    request: EIP1193RequestFn<WalletRpcSchema>;
    requestAddresses: (() => Promise<RequestAddressesReturnType>);
    requestPermissions: ((args) => Promise<RequestPermissionsReturnType>);
    sendRawTransaction: ((args) => Promise<`0x${string}`>);
    sendTransaction: (<const request, chainOverride>(args) => Promise<`0x${string}`>);
    signMessage: ((args) => Promise<`0x${string}`>);
    signTransaction: (<chainOverride>(args) => Promise<`0x02${string}` | `0x01${string}` | `0x03${string}` | TransactionSerializedLegacy>);
    signTypedData: (<const typedData, primaryType>(args) => Promise<`0x${string}`>);
    switchChain: ((args) => Promise<void>);
    transport: TransportConfig<string, EIP1193RequestFn> & Record<string, any>;
    type: string;
    uid: string;
    watchAsset: ((args) => Promise<boolean>);
    writeContract: (<const abi, functionName, args, chainOverride>(args) => Promise<`0x${string}`>);
}

Type declaration

  • account: undefined | Account

    The Account of the Client.

  • addChain: ((args) => Promise<void>)

    Adds an EVM chain to the wallet.

    Example

    import { createWalletClient, custom } from 'viem'
    import { optimism } from 'viem/chains'

    const client = createWalletClient({
    transport: custom(window.ethereum),
    })
    await client.addChain({ chain: optimism })
      • (args): Promise<void>
      • Parameters

        • args: AddChainParameters

          AddChainParameters

        Returns Promise<void>

  • Optional batch?: {
        multicall?: boolean | {
            batchSize?: number;
            wait?: number;
        };
    }

    Flags for batch settings.

    • Optional multicall?: boolean | {
          batchSize?: number;
          wait?: number;
      }

      Toggle to enable eth_call multicall aggregation.

  • cacheTime: number

    Time (in ms) that cached data will remain in memory.

  • Optional ccipRead?: false | {
        request?: ((parameters) => Promise<`0x${string}`>);
    }

    CCIP Read configuration.

  • chain: undefined | Chain

    Chain for the client.

  • deployContract: (<const abi, chainOverride>(args) => Promise<`0x${string}`>)

    Deploys a contract to the network, given bytecode and constructor arguments.

    Returns

    The Transaction hash. DeployContractReturnType

    Example

    import { createWalletClient, http } from 'viem'
    import { privateKeyToAccount } from 'viem/accounts'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    account: privateKeyToAccount('0x…'),
    chain: mainnet,
    transport: http(),
    })
    const hash = await client.deployContract({
    abi: [],
    account: '0x…,
    bytecode: '0x608060405260405161083e38038061083e833981016040819052610...',
    })
      • <const abi, chainOverride>(args): Promise<`0x${string}`>
      • Type Parameters

        • const abi extends Abi | readonly unknown[]
        • chainOverride extends undefined | Chain

        Parameters

        • args: DeployContractParameters<abi, undefined | Chain, undefined | Account, chainOverride>

          DeployContractParameters

        Returns Promise<`0x${string}`>

  • extend: (<const client>(fn) => Client<Transport, undefined | Chain, undefined | Account, WalletRpcSchema, {
        [K in string | number | symbol]: client[K]
    } & WalletActions<undefined | Chain, undefined | Account>>)
      • <const client>(fn): Client<Transport, undefined | Chain, undefined | Account, WalletRpcSchema, {
            [K in string | number | symbol]: client[K]
        } & WalletActions<undefined | Chain, undefined | Account>>
      • Type Parameters

        • const client extends {
              account?: undefined;
              batch?: undefined;
              cacheTime?: undefined;
              ccipRead?: undefined;
              chain?: undefined;
              key?: undefined;
              name?: undefined;
              pollingInterval?: undefined;
              request?: undefined;
              transport?: undefined;
              type?: undefined;
              uid?: undefined;
          } & ExactPartial<ExtendableProtectedActions<Transport, undefined | Chain, undefined | Account>>

        Parameters

        • fn: ((client) => client)
            • (client): client
            • Parameters

              • client: Client<Transport, undefined | Chain, undefined | Account, WalletRpcSchema, WalletActions<undefined | Chain, undefined | Account>>

              Returns client

        Returns Client<Transport, undefined | Chain, undefined | Account, WalletRpcSchema, {
            [K in string | number | symbol]: client[K]
        } & WalletActions<undefined | Chain, undefined | Account>>

  • getAddresses: (() => Promise<GetAddressesReturnType>)

    Returns a list of account addresses owned by the wallet or client.

    Returns

    List of account addresses owned by the wallet or client. GetAddressesReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const accounts = await client.getAddresses()
      • (): Promise<GetAddressesReturnType>
      • Returns Promise<GetAddressesReturnType>

  • getChainId: (() => Promise<number>)

    Returns the chain ID associated with the current network.

    Returns

    The current chain ID. GetChainIdReturnType

    Example

    import { createWalletClient, http } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const chainId = await client.getChainId()
    // 1
      • (): Promise<number>
      • Returns Promise<number>

  • getPermissions: (() => Promise<GetPermissionsReturnType>)

    Gets the wallets current permissions.

    Returns

    The wallet permissions. GetPermissionsReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const permissions = await client.getPermissions()
      • (): Promise<GetPermissionsReturnType>
      • Returns Promise<GetPermissionsReturnType>

  • key: string

    A key for the client.

  • name: string

    A name for the client.

  • pollingInterval: number

    Frequency (in ms) for polling enabled actions & events. Defaults to 4_000 milliseconds.

  • prepareTransactionRequest: (<const request, chainOverride, accountOverride>(args) => Promise<{
        [K in string | number | symbol]: (UnionRequiredBy<Extract<UnionOmit<(...), (...)> & ((...) extends (...)
            ? (...)
            : (...)) & ((...) extends (...)
            ? (...)
            : (...)), IsNever<(...)> extends true
            ? unknown
            : ExactPartial<(...)>> & {
            chainId?: number;
        }, ParameterTypeToParameters<request["parameters"] extends readonly PrepareTransactionRequestParameterType[]
            ? any[any][number]
            : "nonce" | "type" | "gas" | "blobVersionedHashes" | "fees" | "chainId">> & (unknown extends request["kzg"]
            ? {}
            : Pick<request, "kzg">))[K]
    }>)

    Prepares a transaction request for signing.

    Returns

    The transaction request. PrepareTransactionRequestReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const request = await client.prepareTransactionRequest({
    account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
    to: '0x0000000000000000000000000000000000000000',
    value: 1n,
    })

    Example

    // Account Hoisting
    import { createWalletClient, http } from 'viem'
    import { privateKeyToAccount } from 'viem/accounts'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    account: privateKeyToAccount('0x…'),
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const request = await client.prepareTransactionRequest({
    to: '0x0000000000000000000000000000000000000000',
    value: 1n,
    })
      • <const request, chainOverride, accountOverride>(args): Promise<{
            [K in string | number | symbol]: (UnionRequiredBy<Extract<UnionOmit<(...), (...)> & ((...) extends (...)
                ? (...)
                : (...)) & ((...) extends (...)
                ? (...)
                : (...)), IsNever<(...)> extends true
                ? unknown
                : ExactPartial<(...)>> & {
                chainId?: number;
            }, ParameterTypeToParameters<request["parameters"] extends readonly PrepareTransactionRequestParameterType[]
                ? any[any][number]
                : "nonce" | "type" | "gas" | "blobVersionedHashes" | "fees" | "chainId">> & (unknown extends request["kzg"]
                ? {}
                : Pick<request, "kzg">))[K]
        }>
      • Type Parameters

        • const request extends (Omit<{
              accessList?: undefined;
              blobVersionedHashes: undefined;
              blobs?: undefined;
              data?: `0x${string}`;
              from: `0x${string}`;
              gas?: bigint;
              gasPrice?: bigint;
              kzg: undefined;
              maxFeePerBlobGas?: undefined;
              maxFeePerGas?: undefined;
              maxPriorityFeePerGas?: undefined;
              nonce?: number;
              sidecars: undefined;
              to?: null | `0x${string}`;
              type?: "legacy";
              value?: bigint;
          }, "from"> | Omit<{
              accessList?: AccessList;
              blobVersionedHashes: undefined;
              blobs?: undefined;
              data?: `0x${string}`;
              from: `0x${string}`;
              gas?: bigint;
              gasPrice?: bigint;
              kzg: undefined;
              maxFeePerBlobGas?: undefined;
              maxFeePerGas?: undefined;
              maxPriorityFeePerGas?: undefined;
              nonce?: number;
              sidecars: undefined;
              to?: null | `0x${string}`;
              type?: "eip2930";
              value?: bigint;
          }, "from"> | Omit<{
              accessList?: AccessList;
              blobVersionedHashes: undefined;
              blobs?: undefined;
              data?: `0x${string}`;
              from: `0x${string}`;
              gas?: bigint;
              gasPrice?: undefined;
              kzg: undefined;
              maxFeePerBlobGas?: undefined;
              maxFeePerGas?: bigint;
              maxPriorityFeePerGas?: bigint;
              nonce?: number;
              sidecars: undefined;
              to?: null | `0x${string}`;
              type?: "eip1559";
              value?: bigint;
          }, "from"> | Omit<{
              accessList?: AccessList;
              blobVersionedHashes?: readonly `0x${string}`[];
              blobs: readonly `0x${string}`[] | readonly Uint8Array[];
              data?: `0x${string}`;
              from: `0x${string}`;
              gas?: bigint;
              gasPrice?: undefined;
              kzg?: Kzg;
              maxFeePerBlobGas: bigint;
              maxFeePerGas?: bigint;
              maxPriorityFeePerGas?: bigint;
              nonce?: number;
              sidecars?: readonly BlobSidecar<`0x${string}`>[];
              to: null | `0x${string}`;
              type?: "eip4844";
              value?: bigint;
          }, "from">) & {
              kzg?: Kzg;
          } & {
              parameters?: readonly PrepareTransactionRequestParameterType[];
          }
        • chainOverride extends undefined | Chain = undefined
        • accountOverride extends undefined | `0x${string}` | Account = undefined

        Parameters

        Returns Promise<{
            [K in string | number | symbol]: (UnionRequiredBy<Extract<UnionOmit<(...), (...)> & ((...) extends (...)
                ? (...)
                : (...)) & ((...) extends (...)
                ? (...)
                : (...)), IsNever<(...)> extends true
                ? unknown
                : ExactPartial<(...)>> & {
                chainId?: number;
            }, ParameterTypeToParameters<request["parameters"] extends readonly PrepareTransactionRequestParameterType[]
                ? any[any][number]
                : "nonce" | "type" | "gas" | "blobVersionedHashes" | "fees" | "chainId">> & (unknown extends request["kzg"]
                ? {}
                : Pick<request, "kzg">))[K]
        }>

  • request: EIP1193RequestFn<WalletRpcSchema>

    Request function wrapped with friendly error handling

  • requestAddresses: (() => Promise<RequestAddressesReturnType>)

    Requests a list of accounts managed by a wallet.

    Sends a request to the wallet, asking for permission to access the user's accounts. After the user accepts the request, it will return a list of accounts (addresses).

    This API can be useful for dapps that need to access the user's accounts in order to execute transactions or interact with smart contracts.

    Returns

    List of accounts managed by a wallet RequestAddressesReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const accounts = await client.requestAddresses()
      • (): Promise<RequestAddressesReturnType>
      • Returns Promise<RequestAddressesReturnType>

  • requestPermissions: ((args) => Promise<RequestPermissionsReturnType>)

    Requests permissions for a wallet.

    Returns

    The wallet permissions. RequestPermissionsReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const permissions = await client.requestPermissions({
    eth_accounts: {}
    })
      • (args): Promise<RequestPermissionsReturnType>
      • Parameters

        • args: {
              eth_accounts: Record<string, any>;
          }

          RequestPermissionsParameters

          • eth_accounts: Record<string, any>

        Returns Promise<RequestPermissionsReturnType>

  • sendRawTransaction: ((args) => Promise<`0x${string}`>)

    Sends a signed transaction to the network

    Returns

    The transaction hash. SendRawTransactionReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'
    import { sendRawTransaction } from 'viem/wallet'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })

    const hash = await client.sendRawTransaction({
    serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'
    })
      • (args): Promise<`0x${string}`>
      • Parameters

        • args: SendRawTransactionParameters

        Returns Promise<`0x${string}`>

  • sendTransaction: (<const request, chainOverride>(args) => Promise<`0x${string}`>)

    Creates, signs, and sends a new transaction to the network.

    Returns

    The Transaction hash. SendTransactionReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const hash = await client.sendTransaction({
    account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
    to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
    value: 1000000000000000000n,
    })

    Example

    // Account Hoisting
    import { createWalletClient, http } from 'viem'
    import { privateKeyToAccount } from 'viem/accounts'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    account: privateKeyToAccount('0x…'),
    chain: mainnet,
    transport: http(),
    })
    const hash = await client.sendTransaction({
    to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',
    value: 1000000000000000000n,
    })
      • <const request, chainOverride>(args): Promise<`0x${string}`>
      • Type Parameters

        • const request extends (Omit<{
              accessList?: undefined;
              blobVersionedHashes: undefined;
              blobs?: undefined;
              data?: `0x${string}`;
              from: `0x${string}`;
              gas?: bigint;
              gasPrice?: bigint;
              kzg: undefined;
              maxFeePerBlobGas?: undefined;
              maxFeePerGas?: undefined;
              maxPriorityFeePerGas?: undefined;
              nonce?: number;
              sidecars: undefined;
              to?: null | `0x${string}`;
              type?: "legacy";
              value?: bigint;
          }, "from"> | Omit<{
              accessList?: AccessList;
              blobVersionedHashes: undefined;
              blobs?: undefined;
              data?: `0x${string}`;
              from: `0x${string}`;
              gas?: bigint;
              gasPrice?: bigint;
              kzg: undefined;
              maxFeePerBlobGas?: undefined;
              maxFeePerGas?: undefined;
              maxPriorityFeePerGas?: undefined;
              nonce?: number;
              sidecars: undefined;
              to?: null | `0x${string}`;
              type?: "eip2930";
              value?: bigint;
          }, "from"> | Omit<{
              accessList?: AccessList;
              blobVersionedHashes: undefined;
              blobs?: undefined;
              data?: `0x${string}`;
              from: `0x${string}`;
              gas?: bigint;
              gasPrice?: undefined;
              kzg: undefined;
              maxFeePerBlobGas?: undefined;
              maxFeePerGas?: bigint;
              maxPriorityFeePerGas?: bigint;
              nonce?: number;
              sidecars: undefined;
              to?: null | `0x${string}`;
              type?: "eip1559";
              value?: bigint;
          }, "from"> | Omit<{
              accessList?: AccessList;
              blobVersionedHashes?: readonly `0x${string}`[];
              blobs: readonly `0x${string}`[] | readonly Uint8Array[];
              data?: `0x${string}`;
              from: `0x${string}`;
              gas?: bigint;
              gasPrice?: undefined;
              kzg?: Kzg;
              maxFeePerBlobGas: bigint;
              maxFeePerGas?: bigint;
              maxPriorityFeePerGas?: bigint;
              nonce?: number;
              sidecars?: readonly BlobSidecar<`0x${string}`>[];
              to: null | `0x${string}`;
              type?: "eip4844";
              value?: bigint;
          }, "from">) & {
              kzg?: Kzg;
          }
        • chainOverride extends undefined | Chain = undefined

        Parameters

        • args: SendTransactionParameters<undefined | Chain, undefined | Account, chainOverride, request>

          SendTransactionParameters

        Returns Promise<`0x${string}`>

  • signMessage: ((args) => Promise<`0x${string}`>)

    Calculates an Ethereum-specific signature in EIP-191 format: keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)).

    With the calculated signature, you can:

    Returns

    The signed message. SignMessageReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const signature = await client.signMessage({
    account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
    message: 'hello world',
    })

    Example

    // Account Hoisting
    import { createWalletClient, http } from 'viem'
    import { privateKeyToAccount } from 'viem/accounts'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    account: privateKeyToAccount('0x…'),
    chain: mainnet,
    transport: http(),
    })
    const signature = await client.signMessage({
    message: 'hello world',
    })
      • (args): Promise<`0x${string}`>
      • Parameters

        • args: SignMessageParameters<undefined | Account>

          SignMessageParameters

        Returns Promise<`0x${string}`>

  • signTransaction: (<chainOverride>(args) => Promise<`0x02${string}` | `0x01${string}` | `0x03${string}` | TransactionSerializedLegacy>)

    Signs a transaction.

    Returns

    The signed message. SignTransactionReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const request = await client.prepareTransactionRequest({
    account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
    to: '0x0000000000000000000000000000000000000000',
    value: 1n,
    })
    const signature = await client.signTransaction(request)

    Example

    // Account Hoisting
    import { createWalletClient, http } from 'viem'
    import { privateKeyToAccount } from 'viem/accounts'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    account: privateKeyToAccount('0x…'),
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const request = await client.prepareTransactionRequest({
    to: '0x0000000000000000000000000000000000000000',
    value: 1n,
    })
    const signature = await client.signTransaction(request)
      • <chainOverride>(args): Promise<`0x02${string}` | `0x01${string}` | `0x03${string}` | TransactionSerializedLegacy>
      • Type Parameters

        • chainOverride extends undefined | Chain

        Parameters

        • args: SignTransactionParameters<undefined | Chain, undefined | Account, chainOverride>

          SignTransactionParameters

        Returns Promise<`0x02${string}` | `0x01${string}` | `0x03${string}` | TransactionSerializedLegacy>

  • signTypedData: (<const typedData, primaryType>(args) => Promise<`0x${string}`>)

    Signs typed data and calculates an Ethereum-specific signature in EIP-191 format: keccak256("\x19Ethereum Signed Message:\n" + len(message) + message)).

    Returns

    The signed data. SignTypedDataReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const signature = await client.signTypedData({
    account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',
    domain: {
    name: 'Ether Mail',
    version: '1',
    chainId: 1,
    verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
    },
    types: {
    Person: [
    { name: 'name', type: 'string' },
    { name: 'wallet', type: 'address' },
    ],
    Mail: [
    { name: 'from', type: 'Person' },
    { name: 'to', type: 'Person' },
    { name: 'contents', type: 'string' },
    ],
    },
    primaryType: 'Mail',
    message: {
    from: {
    name: 'Cow',
    wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
    },
    to: {
    name: 'Bob',
    wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
    },
    contents: 'Hello, Bob!',
    },
    })

    Example

    // Account Hoisting
    import { createWalletClient, http } from 'viem'
    import { privateKeyToAccount } from 'viem/accounts'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    account: privateKeyToAccount('0x…'),
    chain: mainnet,
    transport: http(),
    })
    const signature = await client.signTypedData({
    domain: {
    name: 'Ether Mail',
    version: '1',
    chainId: 1,
    verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
    },
    types: {
    Person: [
    { name: 'name', type: 'string' },
    { name: 'wallet', type: 'address' },
    ],
    Mail: [
    { name: 'from', type: 'Person' },
    { name: 'to', type: 'Person' },
    { name: 'contents', type: 'string' },
    ],
    },
    primaryType: 'Mail',
    message: {
    from: {
    name: 'Cow',
    wallet: '0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826',
    },
    to: {
    name: 'Bob',
    wallet: '0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB',
    },
    contents: 'Hello, Bob!',
    },
    })
      • <const typedData, primaryType>(args): Promise<`0x${string}`>
      • Type Parameters

        • const typedData extends {
              address: undefined;
              bool: undefined;
              bytes: undefined;
              bytes1: undefined;
              bytes10: undefined;
              bytes11: undefined;
              bytes12: undefined;
              bytes13: undefined;
              bytes14: undefined;
              bytes15: undefined;
              bytes16: undefined;
              bytes17: undefined;
              bytes18: undefined;
              bytes19: undefined;
              bytes2: undefined;
              bytes20: undefined;
              bytes21: undefined;
              bytes22: undefined;
              bytes23: undefined;
              bytes24: undefined;
              bytes25: undefined;
              bytes26: undefined;
              bytes27: undefined;
              bytes28: undefined;
              bytes29: undefined;
              bytes3: undefined;
              bytes30: undefined;
              bytes31: undefined;
              bytes32: undefined;
              bytes4: undefined;
              bytes5: undefined;
              bytes6: undefined;
              bytes7: undefined;
              bytes8: undefined;
              bytes9: undefined;
              int104: undefined;
              int112: undefined;
              int120: undefined;
              int128: undefined;
              int136: undefined;
              int144: undefined;
              int152: undefined;
              int16: undefined;
              int160: undefined;
              int168: undefined;
              int176: undefined;
              int184: undefined;
              int192: undefined;
              int200: undefined;
              int208: undefined;
              int216: undefined;
              int224: undefined;
              int232: undefined;
              int24: undefined;
              int240: undefined;
              int248: undefined;
              int256: undefined;
              int32: undefined;
              int40: undefined;
              int48: undefined;
              int56: undefined;
              int64: undefined;
              int72: undefined;
              int8: undefined;
              int80: undefined;
              int88: undefined;
              int96: undefined;
              string: undefined;
              uint104: undefined;
              uint112: undefined;
              uint120: undefined;
              uint128: undefined;
              uint136: undefined;
              uint144: undefined;
              uint152: undefined;
              uint16: undefined;
              uint160: undefined;
              uint168: undefined;
              uint176: undefined;
              uint184: undefined;
              uint192: undefined;
              uint200: undefined;
              uint208: undefined;
              uint216: undefined;
              uint224: undefined;
              uint232: undefined;
              uint24: undefined;
              uint240: undefined;
              uint248: undefined;
              uint256: undefined;
              uint32: undefined;
              uint40: undefined;
              uint48: undefined;
              uint56: undefined;
              uint64: undefined;
              uint72: undefined;
              uint8: undefined;
              uint80: undefined;
              uint88: undefined;
              uint96: undefined;
          } | {
              [key: string]: unknown;
          }
        • primaryType extends string

        Parameters

        Returns Promise<`0x${string}`>

  • switchChain: ((args) => Promise<void>)

    Switch the target chain in a wallet.

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet, optimism } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    await client.switchChain({ id: optimism.id })
      • (args): Promise<void>
      • Parameters

        • args: SwitchChainParameters

          SwitchChainParameters

        Returns Promise<void>

  • transport: TransportConfig<string, EIP1193RequestFn> & Record<string, any>

    The RPC transport

  • type: string

    The type of client.

  • uid: string

    A unique ID for the client.

  • watchAsset: ((args) => Promise<boolean>)

    Adds an EVM chain to the wallet.

    Returns

    Boolean indicating if the token was successfully added. WatchAssetReturnType

    Example

    import { createWalletClient, custom } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const success = await client.watchAsset({
    type: 'ERC20',
    options: {
    address: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2',
    decimals: 18,
    symbol: 'WETH',
    },
    })
      • (args): Promise<boolean>
      • Parameters

        • args: WatchAssetParams

          WatchAssetParameters

        Returns Promise<boolean>

  • writeContract: (<const abi, functionName, args, chainOverride>(args) => Promise<`0x${string}`>)

    Executes a write function on a contract.

    A "write" function on a Solidity contract modifies the state of the blockchain. These types of functions require gas to be executed, and hence a Transaction is needed to be broadcast in order to change the state.

    Internally, uses a Wallet Client to call the sendTransaction action with ABI-encoded data.

    Warning: The write internally sends a transaction – it does not validate if the contract write will succeed (the contract may throw an error). It is highly recommended to simulate the contract write with contract.simulate before you execute it.

    Returns

    A Transaction Hash. WriteContractReturnType

    Example

    import { createWalletClient, custom, parseAbi } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const hash = await client.writeContract({
    address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
    abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),
    functionName: 'mint',
    args: [69420],
    })

    Example

    // With Validation
    import { createWalletClient, custom, parseAbi } from 'viem'
    import { mainnet } from 'viem/chains'

    const client = createWalletClient({
    chain: mainnet,
    transport: custom(window.ethereum),
    })
    const { request } = await client.simulateContract({
    address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
    abi: parseAbi(['function mint(uint32 tokenId) nonpayable']),
    functionName: 'mint',
    args: [69420],
    }
    const hash = await client.writeContract(request)
      • <const abi, functionName, args, chainOverride>(args): Promise<`0x${string}`>
      • Type Parameters

        • const abi extends Abi | readonly unknown[]
        • functionName extends string
        • args extends unknown
        • chainOverride extends undefined | Chain = undefined

        Parameters

        Returns Promise<`0x${string}`>

signMessage: ((message) => Promise<`0x${string}`>) = ...

Type declaration

    • (message): Promise<`0x${string}`>
    • Parameters

      • message: SignableMessage

      Returns Promise<`0x${string}`>

signerType: string

Methods

  • Type Parameters

    • const TTypedData extends {
          address: undefined;
          bool: undefined;
          bytes: undefined;
          bytes1: undefined;
          bytes10: undefined;
          bytes11: undefined;
          bytes12: undefined;
          bytes13: undefined;
          bytes14: undefined;
          bytes15: undefined;
          bytes16: undefined;
          bytes17: undefined;
          bytes18: undefined;
          bytes19: undefined;
          bytes2: undefined;
          bytes20: undefined;
          bytes21: undefined;
          bytes22: undefined;
          bytes23: undefined;
          bytes24: undefined;
          bytes25: undefined;
          bytes26: undefined;
          bytes27: undefined;
          bytes28: undefined;
          bytes29: undefined;
          bytes3: undefined;
          bytes30: undefined;
          bytes31: undefined;
          bytes32: undefined;
          bytes4: undefined;
          bytes5: undefined;
          bytes6: undefined;
          bytes7: undefined;
          bytes8: undefined;
          bytes9: undefined;
          int104: undefined;
          int112: undefined;
          int120: undefined;
          int128: undefined;
          int136: undefined;
          int144: undefined;
          int152: undefined;
          int16: undefined;
          int160: undefined;
          int168: undefined;
          int176: undefined;
          int184: undefined;
          int192: undefined;
          int200: undefined;
          int208: undefined;
          int216: undefined;
          int224: undefined;
          int232: undefined;
          int24: undefined;
          int240: undefined;
          int248: undefined;
          int256: undefined;
          int32: undefined;
          int40: undefined;
          int48: undefined;
          int56: undefined;
          int64: undefined;
          int72: undefined;
          int8: undefined;
          int80: undefined;
          int88: undefined;
          int96: undefined;
          string: undefined;
          uint104: undefined;
          uint112: undefined;
          uint120: undefined;
          uint128: undefined;
          uint136: undefined;
          uint144: undefined;
          uint152: undefined;
          uint16: undefined;
          uint160: undefined;
          uint168: undefined;
          uint176: undefined;
          uint184: undefined;
          uint192: undefined;
          uint200: undefined;
          uint208: undefined;
          uint216: undefined;
          uint224: undefined;
          uint232: undefined;
          uint24: undefined;
          uint240: undefined;
          uint248: undefined;
          uint256: undefined;
          uint32: undefined;
          uint40: undefined;
          uint48: undefined;
          uint56: undefined;
          uint64: undefined;
          uint72: undefined;
          uint8: undefined;
          uint80: undefined;
          uint88: undefined;
          uint96: undefined;
      } | {
          [key: string]: unknown;
      }
    • TPrimaryType extends string = string

    Parameters

    • typedData: TypedDataDefinition<TTypedData, TPrimaryType, TTypedData extends {
              address: undefined;
              bool: undefined;
              bytes: undefined;
              bytes1: undefined;
              bytes10: undefined;
              bytes11: undefined;
              bytes12: undefined;
              bytes13: undefined;
              bytes14: undefined;
              bytes15: undefined;
              bytes16: undefined;
              bytes17: undefined;
              bytes18: undefined;
              bytes19: undefined;
              bytes2: undefined;
              bytes20: undefined;
              bytes21: undefined;
              bytes22: undefined;
              bytes23: undefined;
              bytes24: undefined;
              bytes25: undefined;
              bytes26: undefined;
              bytes27: undefined;
              bytes28: undefined;
              bytes29: undefined;
              bytes3: undefined;
              bytes30: undefined;
              bytes31: undefined;
              bytes32: undefined;
              bytes4: undefined;
              bytes5: undefined;
              bytes6: undefined;
              bytes7: undefined;
              bytes8: undefined;
              bytes9: undefined;
              int104: undefined;
              int112: undefined;
              int120: undefined;
              int128: undefined;
              int136: undefined;
              int144: undefined;
              int152: undefined;
              int16: undefined;
              int160: undefined;
              int168: undefined;
              int176: undefined;
              int184: undefined;
              int192: undefined;
              int200: undefined;
              int208: undefined;
              int216: undefined;
              int224: undefined;
              int232: undefined;
              int24: undefined;
              int240: undefined;
              int248: undefined;
              int256: undefined;
              int32: undefined;
              int40: undefined;
              int48: undefined;
              int56: undefined;
              int64: undefined;
              int72: undefined;
              int8: undefined;
              int80: undefined;
              int88: undefined;
              int96: undefined;
              string: undefined;
              uint104: undefined;
              uint112: undefined;
              uint120: undefined;
              uint128: undefined;
              uint136: undefined;
              uint144: undefined;
              uint152: undefined;
              uint16: undefined;
              uint160: undefined;
              uint168: undefined;
              uint176: undefined;
              uint184: undefined;
              uint192: undefined;
              uint200: undefined;
              uint208: undefined;
              uint216: undefined;
              uint224: undefined;
              uint232: undefined;
              uint24: undefined;
              uint240: undefined;
              uint248: undefined;
              uint256: undefined;
              uint32: undefined;
              uint40: undefined;
              uint48: undefined;
              uint56: undefined;
              uint64: undefined;
              uint72: undefined;
              uint8: undefined;
              uint80: undefined;
              uint88: undefined;
              uint96: undefined;
          }
          ? keyof TTypedData<TTypedData>
          : string>

    Returns Promise<`0x${string}`>