Summary

The createWalletClientFromWallet utility function will take any Wallet from the Dynamic context and return a Viem WalletClient with the Account and Chain set.

This is useful if you want to interact with a particular wallet via viem or for other 3rd party packages that require a WalletClient from viem.

Example:

Signing message via viem with the primary wallet

import { useDynamicContext } from '@dynamic-labs/sdk-react-core'
import { createWalletClientFromWallet } from '@dynamic-labs/viem-utils'

const App = () => {
  const { primaryWallet } = useDynamicContext()

  const signMessage = async () => {
    if (!primaryWallet) return

    const walletClient = await createWalletClientFromWallet(primaryWallet)

    // No account is required by viem here, because the account is already setup.
    const signedMessage = await walletClient.signMessage({
      message: 'example message',
    })

    console.log({ signedMessage })
  }

  return <button onClick={() => signMessage()}>Sign message</button>
}

From the wallet client returned by the createWalletClientFromWallet, you can use it with other 3rd party packages that are viem compatible to interact with your primary wallet.