Skip to main content

Check if a wallet is an Ethereum wallet

    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)
     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.
    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.
    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: