Evor-porate all approvals in one click ⚡
A production-ready dApp that uses EIP-7702 to batch-revoke token approvals in a single transaction. No more clicking "Revoke" hundreds of times!
- ✅ Batch Revocation - Revoke up to 250 approvals in one transaction
- ✅ Multi-Token Support - ERC20, ERC721, and ERC1155
- ✅ EIP-7702 Powered - Temporarily delegate your EOA to execute batch operations
- ✅ Security Hardened - OpenZeppelin ReentrancyGuard + gas limits
- ✅ Gas Efficient - Save ~30% gas compared to traditional revocations
- ✅ 100x Faster - One transaction instead of hundreds
- ✅ Multi-Chain - Base, Base Sepolia, Ethereum Sepolia
| Approvals | Traditional Gas | EIP-7702 Gas | Savings | Time Saved* |
|---|---|---|---|---|
| 5 | 330,000 | 250,600 | 24.1% | 8s → 2s |
| 10 | 660,000 | 478,100 | 27.6% | 20s → 2s |
| 50 | 3,300,000 | 2,298,100 | 30.4% | 100s → 2s |
| 100 | 6,600,000 | 4,573,100 | 30.7% | 200s → 2s |
| 250 | 16,500,000 | 11,398,100 | 30.9% | 500s → 2s |
*Time based on Base (2s block time)
Traditional Approach:
⏱️ Time: 200 seconds (100 transactions × 2s blocks)
⛽ Gas: 6,600,000 gas
💰 Cost: ~$0.66 (@ 1 gwei, $3000 ETH)
🖱️ UX: Click "Approve" 100 times 😱
With Evor (EIP-7702):
⏱️ Time: 2 seconds (1 transaction)
⛽ Gas: 4,573,100 gas (-30.7%)
💰 Cost: ~$0.46 (@ 1 gwei, $3000 ETH)
🖱️ UX: Sign once, done! 🎉
Savings: 198 seconds + $0.20 + 99 fewer signatures
contract EvorDelegate is ReentrancyGuard {
uint256 public constant MAX_BATCH_SIZE = 250;
function revokeERC20(address[] tokens, address[] spenders) external nonReentrant;
function revokeForAll(address[] collections, address[] operators) external nonReentrant;
function revokeAll(...) external nonReentrant; // Mixed ERC20 + NFT
}Security Features:
- ✅ OpenZeppelin ReentrancyGuard
- ✅ 100k gas limit per external call
- ✅ 250 approval batch size limit
- ✅ Best-effort execution (continues on failure)
- ✅ Zero address validation
- ✅ Array length validation
| Network | Address | Explorer |
|---|---|---|
| Base Mainnet | 0xbdf5ec7f3d3bbe67bc5fe8232c495a5159df87bc |
BaseScan |
| Base Sepolia | 0xefa7e04f73321a5d585de268a7846932e3d3ee42 |
BaseScan |
- Smart Contracts: Solidity 0.8.24, OpenZeppelin
- Frontend: React 19, Vite, TypeScript
- Web3: Wagmi, Viem, EIP-7702
- Styling: TailwindCSS, shadcn/ui
- Development: Hardhat, Bun
node >= 18
bun >= 1.0# Clone the repo
git clone https://github.com/your-org/evor.git
cd evor
# Install dependencies
bun install
# Copy environment file
cp .env.example .env.local
# Add your WalletConnect Project ID (required)
# Get one at: https://cloud.reown.com
VITE_WALLETCONNECT_PROJECT_ID=your_project_id_here# Start dev server
bun run dev
# Compile contracts
bun run compile
# Deploy to Base Sepolia (testnet)
bun run deploy:base
# Deploy to Base Mainnet
bun run deploy:base-mainnet1. User connects wallet → Scans for approvals
2. User clicks "Revoke" → Signs EIP-7702 authorization
3. Authorization delegates EOA → EvorDelegate contract code
4. Single transaction → Batch revokes all approvals
5. Delegation cleared → EOA returns to normal
// User's EOA temporarily becomes:
contract YourEOA is EvorDelegate {
// Can now call batch revocation functions
// While still being your EOA (same address)
}
// After transaction:
// Returns to normal EOA (delegation cleared)- ✅ Audited patterns - Uses OpenZeppelin standards
- ✅ Reentrancy protected - ReentrancyGuard on all public functions
- ✅ Gas griefing prevented - 100k gas limit per call
- ✅ Batch size limited - Max 250 to prevent out-of-gas
- ✅ Best-effort execution - Continues if one token fails
- ✅ No fund access - Only revokes approvals, never touches tokens
- 🔑 You control everything - Only you can sign transactions
- 🔓 Auto-clear delegation - Delegation removed after revocation (optional)
- 👀 Transparent - See exactly what will be revoked before signing
- ⚡ Stateless contract - No storage, no admin, no backdoors
- ❌ Does not give anyone else control of your wallet
- ❌ Does not move your tokens
- ❌ Does not grant new approvals
- ❌ Does not persist after transaction (if delegation cleared)
- 🧹 Security cleanup - Remove all approvals after airdrop hunting
- 🔐 Wallet hygiene - Regular approval maintenance
- 🚨 Emergency response - Quickly revoke suspicious approvals
- 💼 Portfolio migration - Clean slate before moving to new wallet
- "Revoked 150 approvals in 2 seconds instead of 5 minutes!" - DeFi Degen
- "Finally cleaned up my airdrop wallet, saved $2 in gas!" - NFT Collector
- "The UX is incredible, one click and done" - Crypto Normie
contracts/EvorDelegate.sol- Main delegate contractsrc/App.tsx- Main application logicsrc/hooks/useApprovalScanner.ts- Approval detectionscripts/deploy-evor-delegate.ts- Deployment script
# Test deployment
bun run scripts/test-debug-revoke.ts
# Test batch operations
bun run demo:batch
# Check approvals
bun run test:check-approvalsContributions welcome! Please:
- Fork the repo
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a PR
MIT License - see LICENSE file
- EIP-7702 - Making EOAs programmable
- OpenZeppelin - Secure contract libraries
- Base - Fast, low-cost L2
- Wagmi - React hooks for Ethereum
- Live App: evor.app
- Contract: View on BaseScan
Built with ❤️ for a safer, cleaner Web3
Evor-porate those approvals! ⚡