> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dynamic.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Using EVM Wallets

## Check if a wallet is an Ethereum wallet

```tsx theme={"system"}
      const wallet = dynamicClient.wallets.primary

      if (!wallet) {
        throw new Error('Wallet is not found')
      }

      if (wallet.chain !== 'EVM') {
        throw new Error('Wallet is not a EVM wallet')
      }
```

### Read only actions/Viem Public Client

If you want to read data from the blockchain, you will want a ["Public Client"](https://viem.sh/docs/clients/public.html) (Viem terminology)

<CodeGroup>
  ```typescript createClient.ts theme={"system"}
  import { ViemExtension } from '@dynamic-labs/viem-extension'

  export const dynamicClient = createClient({
    environmentId: 'YOUR-ENVIRONMENT-ID',
  }).extend(ViemExtension())
  ```

  ```typescript fetchViemPublicClient.ts theme={"system"}
  import { mainnet } from 'viem/chains'

  const publicViemClient = dynamicClient.viem.createPublicClient({ chain: mainnet })
  ```
</CodeGroup>

### Write actions/Viem Wallet Client

If you want to write data to the blockchain, you will need a ["Wallet Client"](https://viem.sh/docs/clients/wallet.html) (Viem terminology), or a ["Signer"](https://docs.ethers.io/v5/api/signer/) (Ethers terminology). Both allow you to sign transactions with the private key.

<CodeGroup>
  ```typescript dynamicClient.ts theme={"system"}
  import { createClient } from '@dynamic-labs/client'
  import { ViemExtension } from '@dynamic-labs/viem-extension'

  export const dynamicClient = createClient({
    environmentId: 'YOUR-ENVIRONMENT-ID',
  }).extend(ViemExtension())
  ```

  ```typescript fetchViemWalletClient.ts theme={"system"}
  import { dynamicClient } from './dynamicClient';

  const walletViemClient = dynamicClient.viem.createWalletClient({
    wallet: dynamicClient.wallets.primary,
  })
  ```
</CodeGroup>

## Send multiple transactions atomically

If you want to send multiple transactions atomically, you can use the `sendCalls` method. This requires the wallet to support EIP-5792.

Coming soon.

## Examples

We've included a few examples of how to use the EVM wallet connector in this section:

* [Get balance for all connected wallets](/react-native/wallets/using-wallets/evm/get-balance-for-all-wallets)
* [Get balance for a single wallet](/react-native/wallets/using-wallets/evm/get-wallet-balance)
* [Send a transaction](/react-native/wallets/using-wallets/evm/send-a-transaction)
* [Send balance using embedded wallet](/react-native/wallets/using-wallets/general/send-balance)
* [Sign a message](/react-native/wallets/using-wallets/evm/sign-a-message)
