Безопасный скрипт для закрытия пустых SPL Token аккаунтов в Solana блокчейне
Улучшенная и безопасная версия скрипта для автоматического закрытия пустых SPL Token аккаунтов и возврата заблокированной арендной платы (SOL).
Создан с помощью Claude.ai Sonnet 4
При получении токенов или NFT в кошельке Solana для каждого актива создается отдельный SPL Token аккаунт. После отправки всех токенов такие аккаунты остаются пустыми, но продолжают блокировать SOL в виде арендной платы (~0.00203928 SOL за аккаунт).
Этот скрипт решает проблему путем:
- 🔍 Сканирования всех SPL Token аккаунтов кошелька
- 🗑️ Фильтрации пустых аккаунтов (баланс = 0)
- 📦 Пакетной обработки для оптимизации газа
- 🔄 Повторных попыток при ошибках сети
- 💰 Возврата заблокированных SOL на основной кошелек
- Хранение приватных ключей в файле
- Отсутствие валидации входных данных
- Нет проверки баланса перед операциями
- Неоптимальный размер батчей
- Слабая обработка ошибок
- Интерактивное введение ключей вместо хранения в файлах
- Валидация приватных ключей с проверкой формата
- Очистка памяти после использования ключей
- Защита от исчерпания баланса
- Оптимизированные батчи (15 аккаунтов вместо 20)
- Умные задержки между транзакциями
- Предварительная оценка комиссий
- Проверка баланса SOL перед операциями
- Свежие blockhash для каждой транзакции
- Подтверждение транзакций с таймаутом
- Retry-логика с экспоненциальным backoff
- Graceful error handling
- Детальная статистика по каждому кошельку
- Отслеживание ошибок и их причин
- Цветное логирование процесса
- Точный расчет возвращенных средств
git clone <repository-url>
cd secure-sol-cleanernpm installСкопируйте файл примера и настройте параметры:
cp .env.example .envОтредактируйте .env файл:
# RPC URL для подключения к Solana
RPC_URL=https://api.mainnet-beta.solana.com
# Размер батча (количество аккаунтов в одной транзакции)
BATCH_SIZE=15
# Задержка между транзакциями (в секундах)
DELAY_FROM=30
DELAY_TO=120
# Максимальное количество попыток
MAX_RETRIES=3
# Таймаут подтверждения (в миллисекундах)
CONFIRMATION_TIMEOUT=60000npm run buildnpm start- Введите приватный ключ в формате Base58 когда система запросит
- Дождитесь анализа кошелька и токен аккаунтов
- Подтвердите операцию после просмотра статистики
- Наблюдайте за процессом в реальном времени
🚀 Запуск безопасного очистителя SOL аккаунтов
🔗 RPC: https://api.mainnet-beta.solana.com
📦 Размер батча: 15
⏱️ Задержка: 30-120с
✅ Подключение к Solana успешно. Версия: 1.16.0
Введите приватный ключ (Base58): [скрыто]
🔍 Обработка кошелька: 7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuA7pPX5G
💰 Баланс SOL: 0.125000
📊 Найдено токен аккаунтов: 45
🗑️ Пустых аккаунтов найдено: 32
💵 Оценочная комиссия: 0.001000 SOL
📦 Создано батчей: 3
🔄 Обработка батча 1/3 (15 аккаунтов)
✅ Батч выполнен. Подпись: 5Kc2...x9mP
💰 Возвращено: 0.030589 SOL
⏳ Задержка 45с перед следующим батчем...
📈 Статистика для кошелька:
• Закрыто аккаунтов: 32
• Возвращено lamports: 65,257,696
• Возвращено SOL: 0.065258
| Параметр | Описание | Рекомендуемое значение |
|---|---|---|
RPC_URL |
URL RPC узла Solana | https://api.mainnet-beta.solana.com |
BATCH_SIZE |
Количество аккаунтов в батче | 15 (10-20) |
DELAY_FROM |
Минимальная задержка (сек) | 30 |
DELAY_TO |
Максимальная задержка (сек) | 120 |
MAX_RETRIES |
Количество повторных попыток | 3 |
CONFIRMATION_TIMEOUT |
Таймаут подтверждения (мс) | 60000 |
Бесплатные:
https://api.mainnet-beta.solana.com(базовый)https://solana-api.projectserum.com(альтернативный)
Платные (рекомендуется):
- Helius:
https://mainnet.helius-rpc.com/?api-key=YOUR_KEY - QuickNode:
https://your-endpoint.solana-mainnet.quiknode.pro/YOUR_KEY/ - Alchemy:
https://solana-mainnet.g.alchemy.com/v2/YOUR_KEY
secure-sol-cleaner/
├── src/
│ └── index.ts # Основной код
├── dist/ # Скомпилированный JS
├── package.json # Зависимости
├── tsconfig.json # Конфигурация TypeScript
├── .env.example # Пример настроек
└── README.md # Документация
npm run build # Компиляция TypeScript
npm start # Сборка и запуск
npm run dev # Запуск в режиме разработки
npm run clean # Очистка dist папки
npm run lint # Проверка кода
npm test # Запуск тестов- Node.js: >= 16.0.0
- NPM: >= 7.0.0
- TypeScript: >= 5.0.0
- Размер аккаунта: 165 байт
- Арендная плата: 2,039,280 lamports (~0.00203928 SOL)
- Минимальный баланс: Должен поддерживаться для активного аккаунта
- Базовая комиссия: ~5,000 lamports (~0.000005 SOL)
- За инструкцию: ~5,000 lamports на закрытие аккаунта
- Батч из 15 аккаунтов: ~80,000 lamports (~0.00008 SOL)
Пустых аккаунтов: 50
Возврат арендной платы: 50 × 0.00203928 = 0.10196 SOL
Комиссии (4 батча): 4 × 0.00008 = 0.00032 SOL
Чистая прибыль: 0.10196 - 0.00032 = 0.10164 SOL