# createSmartAccountClient | @aa-sdk/core

> Creates a smart account client using the provided configuration. This client handles various Ethereum transactions and message signing operations.

> For the complete documentation index, see [llms.txt](/docs/llms.txt).

{/* This file is auto-generated by TypeDoc. Do not edit manually. */}

```ts
function createSmartAccountClient<TTransport, TChain, TAccount, TContext>(
  config,
): SmartAccountClient<TTransport, TChain, TAccount>;
```

Defined in: [aa-sdk/core/src/client/smartAccountClient.ts:131](https://github.com/alchemyplatform/aa-sdk/blob/main/aa-sdk/core/src/client/smartAccountClient.ts#L131)

## Type Parameters

<table>
  <thead>
    <tr>
      <th align="left">Type Parameter</th>
      <th align="left">Default type</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `TTransport` *extends* [`Transport`](https://viem.sh)
      </td>

      <td>
        [`Transport`](https://viem.sh)
      </td>
    </tr>

    <tr>
      <td>
        `TChain` *extends* `undefined` | [`Chain`](https://viem.sh)
      </td>

      <td>
        `undefined` | [`Chain`](https://viem.sh)
      </td>
    </tr>

    <tr>
      <td>
        `TAccount` *extends*
        | `undefined`
        | [`SmartContractAccount`](../type-aliases/SmartContractAccount)
      </td>

      <td>
        | `undefined`
        | [`SmartContractAccount`](../type-aliases/SmartContractAccount)
      </td>
    </tr>

    <tr>
      <td>
        `TContext` *extends*
        | `undefined`
        | [`UserOperationContext`](../type-aliases/UserOperationContext)
      </td>

      <td>
        | `undefined`
        | [`UserOperationContext`](../type-aliases/UserOperationContext)
      </td>
    </tr>

  </tbody>
</table>

## Parameters

<table>
  <thead>
    <tr>
      <th align="left">Parameter</th>
      <th align="left">Type</th>
      <th align="left">Description</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>
        `config`
      </td>

      <td>
        \{ `account?`: `TAccount`; `addBreadCrumb?`: \<`T`>(`crumb`) => `T`; `customMiddleware?`: [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>; `dummyPaymasterAndData?`: [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>; `feeEstimator?`: [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>; `gasEstimator?`: [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>; `opts?`: `Object`; `paymasterAndData?`: [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>; `signUserOperation?`: [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>; `userOperationSimulator?`: [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>; }
      </td>

      <td>
        The configuration for creating the smart account client
      </td>
    </tr>

    <tr>
      <td>
        `config.account?`
      </td>

      <td>
        `TAccount`
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        `config.addBreadCrumb?`
      </td>

      <td>
        \<`T`>(`crumb`) => `T`
      </td>

      <td>
        A function that adds a breadcrumb to the current context
        Note, most implementations will override the client with the default alchemy transport and this
        leads to the fact that a transport could be overwritten and not known until later.
      </td>
    </tr>

    <tr>
      <td>
        `config.customMiddleware?`
      </td>

      <td>
        [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        `config.dummyPaymasterAndData?`
      </td>

      <td>
        [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        `config.feeEstimator?`
      </td>

      <td>
        [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        `config.gasEstimator?`
      </td>

      <td>
        [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        `config.opts?`
      </td>

      <td>
        `Object`
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        `config.paymasterAndData?`
      </td>

      <td>
        [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        `config.signUserOperation?`
      </td>

      <td>
        [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>
      </td>

      <td>
        ‐
      </td>
    </tr>

    <tr>
      <td>
        `config.userOperationSimulator?`
      </td>

      <td>
        [`ClientMiddlewareFn`](../type-aliases/ClientMiddlewareFn)\<`TContext`>
      </td>

      <td>
        ‐
      </td>
    </tr>

  </tbody>
</table>

## Returns

[`SmartAccountClient`](../type-aliases/SmartAccountClient)\<`TTransport`, `TChain`, `TAccount`>

A smart account client capable of handling transactions, message signing, and other operations on a smart account