This guide shows you how to use Dynamic as a signer for Alchemy Smart Accounts.
Install the sdk
By default, the latest version of the Dynamic SDK ships with Viem. If you need to use Ethers, please refer to this guide.
In this example, we are installing only the Ethereum connectors in order to
keep bundle size light. If you need any others, you can find the references
here.
npm i -s @dynamic-labs/sdk-react-core @dynamic-labs/ethereum
Add Dynamic to your application
In order to use Dynamic, you should wrap your app with DynamicContextProvider at the highest possible level i.e.
import { DynamicContextProvider } from '@dynamic-labs/sdk-react-core'
import { EthereumWalletConnectors } from '@dynamic-labs/ethereum'
import Home from './Home'
const DYNAMIC_ENVIRONMENT_ID = 'XXXXX'
const App = () => {
return (
<div className="app">
<DynamicContextProvider
settings={{
environmentId: DYNAMIC_ENVIRONMENT_ID,
walletConnectors: [EthereumWalletConnectors],
}}
>
<Home />
</DynamicContextProvider>
</div>
)
}
export default App
Create a SmartAccountSigner
Next, inside any component which is wrapped by the above DynamicContextProvider, use the useDynamicContext hook to fetch your provider, and create a SmartAccountSigner:
import { WalletClientSigner, type SmartAccountSigner } from '@alchemy/aa-core'
import { useDynamicContext } from '@dynamic-labs/sdk-react-core'
import { isEthereumWallet } from '@dynamic-labs/ethereum'
const { primaryWallet } = useDynamicContext()
if (!isEthereumWallet(primaryWallet)) {
throw new Error('This wallet is not a Ethereum wallet');
}
const dynamicProvider = await primaryWallet?.getWalletClient()
export const dynamicSigner: SmartAccountSigner = new WalletClientSigner(
dynamicProvider,
'dynamic'
)
Use it with Light Account
Let’s see it in action with aa-alchemy and LightSmartContractAccount from aa-accounts: