Dynamic Gasless Starter
Want to see smart wallets in action? Check out our Dynamic Gasless Starter - a Next.js demo that showcases gasless transactions with email-based wallet creation and token minting, all without users paying gas fees.
Quickstart
Prerequisites
- Create a Zerodev account and projects for each network you want to support, as well as a gas policy for each one. Make sure you use the V1 dashboard to configure your project.
- Visit the Sponsor Gas section of the dashboard, toggle on Zerodev and add your project IDs.
Configure Your SDK
The
@dynamic-labs/zerodev-extension depends on the Viem Extension, so before
going through this setup, make sure to have the Viem Extension set up and
working. Viem Extension SetupSetup
Install ZeroDevExtension
Install the @dynamic-labs/zerodev-extension package:- expo
- npm
- yarn
- bun
- pnpm
Shell
Resolve File Resolution Error (Optional)
Resolve File Resolution Error (Optional)
When running the ZeroDevExtension in your React Native application, you might encounter an error where Metro cannot resolve the This modification allows Metro to attempt to resolve
paymasterClient.js file. This issue occurs because Metro tries to load paymasterClient.js, but the actual file is named paymasterClient.ts.To fix this, you need to customize Metro’s resolver in your metro.config.js file to handle TypeScript file extensions properly.Generate metro.config.js for Expo Projects
If you don’t have ametro.config.js file in your project, you can generate one using the following command:Shell
Customize Metro Resolver
Add the following code to yourmetro.config.js file to instruct Metro to resolve .ts files when it cannot find the corresponding .js files:metro.config.js
.ts files when it fails to find .js files, which fixes the resolution error for the paymasterClient file.Events Polyfill
ZeroDevExtension requires a polyfill for the Node.js events module. You can install the events polyfill using one of the following commands:- expo
- npm
- yarn
- bun
- pnpm
Shell
You can also use the
ZerodevBundlerProvider.Alchemy or ZerodevBundlerProvider.Gelato provider to use the Alchemy or Gelato bundler services.You can either use PaymasterTypeEnum.SPONSOR to sponsor all transactions or PaymasterTypeEnum.NONE to send a non-sponsored transaction.Advanced Usage
You can find more advanced usage examples in our advanced usage guide.Note on 7702
EIP-7702 is the default for enabling gas sponsorship using Dynamic & Zerodev, but you can switch back to 4337 if you want using the dashboard settings.Why use 7702?
EIP-7702 introduces a new transaction type that allows a wallet to delegate execution to an address with a deployed smart account. This means:- No need to switch or manage multiple accounts and wallets.
- Users retain their existing EOA and gain smart account functionality.
- The transition is smooth and invisible to the end user.
Common questions
- Do all chains/networks support 7702? No, not all chains/networks support 7702. You can see a list of chains/networks that support 7702 here.
- When does the delegation (authorization) signing happen? The delegation authorization is signed automatically behind the scenes on the first transaction. If a paymaster is used, the paymaster will pay for the transaction.
- How long does the delegation remain active? The delegation stays active until the user delegates to a new address.
-
How does this work for existing EOAs (e.g. MetaMask)?
At the moment, delegation is a feature exclusive to embedded wallets. That’s because we need to sign the authorization in a very specific way that requires access to the private key. From what we’ve heard, external wallets like MetaMask are unlikely to expose the
signAuthorizationmethod, making it unclear how (or if) this flow will work with them.