Approval Model
Zedkr uses standard ERC20 approve to pull fees. The router is the only address that can spend tokens, and only up to the per-transaction fee cap.
How it works
typescript
// Approve once - the router can then pull fees for every future transaction
const usdt = new ethers.Contract(USDT_ADDRESS, ["function approve(address,uint256)"], signer);
await usdt.approve(ROUTER_ADDRESS, ethers.MaxUint256);Safety properties
The fee cap (set in the router) limits the maximum the router can pull per transaction, even with MaxUint256 approval
The intent's maxFee field gives users a second layer of control, they sign exactly what they agree to pay
Only the official Zedkr router address can use the approval, no other contract
Users can revoke approval at any time with approve(ROUTER, 0)
Warning
Always verify the router address before approving. Only approve the official Zedkr router shown in the SDK, never a random address claiming to be it.