A decentralized public good enabling gasless, automated ENS domain renewals through intent-based transactions and off-chain solvers.
flowchart LR
User[Domain Owner]
Solver[Solver]
MV[MessageVerification]
RC[ENSController]
RT[RewardToken]
User -->|Sign Intent| Solver
Solver -->|Monitor| Solver
Solver -->|Execute ETH| MV
MV -->|Verify| MV
MV -->|Renew ETH| RC
MV -->|Reward| RT
MV -->|Refund| Solver
style MV fill:#b9b,stroke:#111
style RC fill:#b9b,stroke:#111
style RT fill:#b9b,stroke:#222
style User fill:#c8d,stroke:#222
style Solver fill:#c8d,stroke:#111
Users generate signed intents specifying: target ENS domain names, maximum price parameters (renewal fee + gas fee + solver reward), renewal conditions (expiration threshold, gas price threshold).
- REST API endpoints for intent submission and validation
- Local mempool implementation for intent storage and management
- Continuous monitoring of: ENS domain expiration timestamps, Ethereum network gas prices, user token balances.
- Eliminates manual renewal tracking
- Reduces gas costs thanks to execution timing
- Improves UX through gasless intent submission
- Ensures ENS domains for individuals and important projects in web3 don't expire
User friendly UI with intent creation and management.
Deployed to local fork of Ethereum Sepolia.
Current flow:
- User signs action using
sign message
Metamask feature which should contain array of ENS names and a numeric value which represents reward for executing each action. - Backend solver submits tx on-chain.
- Contract verifies signatures and token balances.
- Auto-renew ENS names if conditions are met (
X
days until expiry date, gas price at or belowY
).
curl -X POST http://localhost:3000/api/verify-intent
-H "Content-Type: application/json"
-d '{
"names": ["test1", "test2"],
"value": "123456789",
"signature": "0x4c1ffe17790d5773ba5c357893adc5a94e44cd8fd437363bc639597e6c054eef6f591b3bd95dbbf822b663b75817fcb5b68ecbcb4c05daf68d6aa16c2224d3db1b"
}'
curl http://localhost:3000/api/intents/0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
curl http://localhost:3000/api/expiry-dates
## Setup
1. Install dependencies:
```bash
npm install [email protected] express dotenv
- Dotenv onfiguration:
RPC_URL=your_rpc_url
CONTRACT_ADDRESS=your_contract_address
TOKEN_ADDRESS=your_token_address // for the payment token - should be WETH mock
PORT=3000
- Run API server:
node server.js