When it works
Gasless requires:- The source token supports Permit2 or EIP-2612 permit (most major tokens do).
- The user has a balance ≥ intent amount (no transfer happens until settlement).
- The intent’s
deadlinehasn’t passed.
zap() (user pays gas).
SDK flow
Three intent types
The SDK picks the right EIP-712 type set for you (
DzapUserIntentSwapTypes, DzapUserIntentBridgeTypes, DzapUserIntentSwapBridgeTypes).
Why executorFeesHash and swapDataHash?
Both are committed at signature time. The solver can’t:
- Inflate fees after you sign (the fee struct is hashed in).
- Substitute a worse swap path (the calldata is hashed in).
When gasless isn’t right
- High-value swaps — solvers may demand a wider spread for big intents; check the quote’s effective rate.
- Tokens without permit support — falls back to a standard approval; not gasless.
- You want immediate finality — gasless intents settle when a solver picks them up. Usually fast, but not synchronous.