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

# Using EVM Wallets

<Card title="Recommended: JavaScript SDK for React Native" icon="react" color="#4779FE">
  While this SDK is still supported, we recommend using newer [JavaScript SDK](/docs/javascript/reference/react-native-quickstart), which is optimized for React Native, but also comes with a host of other benefits.
</Card>

## 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
        import { ViemExtension } from '@dynamic-labs/legacy-viem-extension'

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

        ```typescript fetchViemPublicClient.ts
        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
      import { createClient } from '@dynamic-labs/legacy-client'
      import { ViemExtension } from '@dynamic-labs/legacy-viem-extension'

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

      ```typescript fetchViemWalletClient.ts
      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](/docs/react-native/wallets/using-wallets/evm/get-balance-for-all-wallets)
- [Get balance for a single wallet](/docs/react-native/wallets/using-wallets/evm/get-wallet-balance)
- [Send a transaction](/docs/react-native/wallets/using-wallets/evm/send-a-transaction)
- [Send balance using embedded wallet](/docs/react-native/wallets/using-wallets/general/send-balance)
- [Sign a message](/docs/react-native/wallets/using-wallets/evm/sign-a-message)
````
