Защита скомпрометированного кошелька от sweeper-ботов.
ETH и ERC-20 токены автоматически уходят на безопасный адрес при поступлении.
Взломанный кошелёк (делегирован на AutoForwarder)
│
├─ ETH входит ──► receive() ──► немедленно на destination
│
└─ ERC-20 входит ──► монитор обнаруживает ──► sweep() ──► на destination
Используется EIP-7702 — взломанный кошелёк один раз делегируется на контракт и остаётся делегированным постоянно. Sweeper-бот не успевает перехватить средства.
| Сеть | Chain ID |
|---|---|
| Base | 8453 |
| Ink | 57073 |
npm install
cp .env.example .env
# Заполни .env
# 1. Скомпилировать контракт
npm run compile
# 2. Задеплоить на нужные сети
npm run deploy:base
npm run deploy:ink
# 3. Добавить адреса в .env (FORWARDER_BASE, FORWARDER_INK)
# 4. Установить делегацию
npm run delegate:base
npm run delegate:ink
# 5. Запустить мониторинг
npm start| Команда | Описание |
|---|---|
npm run compile |
Компиляция AutoForwarder.sol |
npm run deploy:base |
Деплой + делегация на Base |
npm run deploy:ink |
Деплой + делегация на Ink |
npm run deploy:all |
Деплой на обе сети |
npm run delegate:base |
Переустановить делегацию на Base |
npm run delegate:ink |
Переустановить делегацию на Ink |
npm run delegate:all |
Переустановить делегацию везде |
npm start |
Запустить мониторинг |
SOURCE_PRIVATE_KEY=0x... # Скомпрометированный кошелёк
SPONSOR_PRIVATE_KEY=0x... # Платит газ (нужен ETH на каждой сети)
DESTINATION_ADDRESS=0x... # Безопасный адрес получателя
FORWARDER_BASE=0x... # Заполняется после deploy:base
FORWARDER_INK=0x... # Заполняется после deploy:ink
RPC_URL_BASE=https://mainnet.base.org
RPC_URL_INK=https://rpc-gel.inkonchain.com
POLL_INTERVAL_MS=8000 # Интервал проверки (мс)
SPONSOR_MIN_BALANCE=0.01 # Порог предупреждения о балансеОткрой src/monitor.ts, найди KNOWN_TOKENS и добавь адреса:
const KNOWN_TOKENS = {
base: [
"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", // USDC
"0xАдресТвоегоТокена",
],
ink: [
"0xАдресТвоегоТокена",
],
};npm install -g pm2
pm2 start "npm start" --name auto-forwarder
pm2 save
pm2 startupauto-forwarder/
├── contracts/
│ └── AutoForwarder.sol Смарт-контракт с receive() и sweep()
├── scripts/
│ └── deploy.ts Hardhat deploy скрипт
├── src/
│ ├── networks.ts Конфигурация сетей
│ ├── delegate.ts Установка EIP-7702 делегации
│ └── monitor.ts Мониторинг + sweep
├── hardhat.config.ts
├── package.json
└── .env.example
- ✅
destinationжёстко задан в контракте — изменить невозможно - ✅ ETH форвардится мгновенно через
receive() - ✅
sweep()может вызвать любой адрес — токены всё равно уйдут наdestination - ✅ Контракт не хранит средства
⚠️ Держите спонсора пополненным — без газаsweep()не сработает⚠️ Не коммитьте.envв репозиторий
- eip7702-rescue-web — веб-интерфейс для разового rescue
- EIP-7702-Revoker-Extension — расширение для отзыва делегации
MIT