Skip to main content

Check if a wallet is an Ethereum wallet

  • React
  • React Native
  • JavaScript
import { isEthereumWallet } from '@dynamic-labs/ethereum';

if (!isEthereumWallet(wallet)) {
  throw new Error('This wallet is not a Ethereum wallet');
}

Read only actions/Viem Public Client

If you want to read data from the blockchain, you will want a “Public Client” (Viem terminology)
  • React
  • React Native
  • JavaScript
 import { useDynamicContext } from '@dynamic-labs/sdk-react-core';

const { primaryWallet } = useDynamicContext();

const getEnsName = async () => {
  const publicClient = await primaryWallet?.getPublicClient()

  // Now you can use the public client to read data from the blockchain
  const ens = await publicClient?.getEnsName({ address: primaryWallet.address })
  return ens
}

Write actions/Viem Wallet Client

If you want to write data to the blockchain, you will need a “Wallet Client” (Viem terminology), or a “Signer” (Ethers terminology). Both allow you to sign transactions with the private key.
  • React
  • React Native
  • JavaScript
import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
import { isEthereumWallet } from '@dynamic-labs/ethereum';
const { primaryWallet } = useDynamicContext();

const sendTransaction = async () => {
  if(!primaryWallet || !isEthereumWallet(primaryWallet)) {
    return;
  }

  const walletClient = await primaryWallet.getWalletClient();

  // Now you can use the wallet client to write data to the blockchain
  const tx = await walletClient?.sendTransaction({
    to: '0x1234567890abcdef',
    value: '1000000000000000000'
  });
  return tx
}

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.
  • React
  • React Native
  • JavaScript
import { parseEther } from 'viem';
import { useDynamicContext } from '@dynamic-labs/sdk-react-core';
import { isEthereumWallet } from '@dynamic-labs/ethereum';

const { primaryWallet } = useDynamicContext();

const sendTransactions = async () => {
  if(!primaryWallet || !isEthereumWallet(primaryWallet) || !primaryWallet.isAtomicSupported()) {
    return;
  }

  // Now you can use the wallet client to write data to the blockchain
  const { id } = await primaryWallet.sendCalls({
    calls: [
      {
        to: '0x1111111111111111111111111111111111111111',
        value: parseEther('0.001'),
      },
      {
        to: '0x2222222222222222222222222222222222222222',
        value: parseEther('0.001'),
      },
    ],
    version: '2.0.0',
  });

  return id
}

Examples

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