Коротко о проекте
| Факт | Значение |
|---|---|
| Сети из коробки | 4 — Robinhood 46630 · Flop · Arc 5042002 · vibe/vibe |
| Тесты | pytest · контрактные сценарии · CI |
| Генерация | BIP-39 · ~60 кошельков/сек · AES-256-GCM |
| RPC-слой | мульти-RPC · EMA · circuit breaker · TTL-кэши |
| Управление | CLI auto.py · Rich-меню main.py · портал + Telegram-бот |
| Дистрибуция | exe через PyInstaller · Docker + compose |
Как устроено
main.py — меню для человека, auto.py — тот же пайплайн для скрипта. Оба делят одно ядро core/. Один NetworkManager на сессию — латентность, кэши и монитор общие. Запись в БД идёт через BatchWriter батчами, с паузой после серии сбоев.
| Модуль | Отвечает за |
|---|---|
| network | Пинг 30с, проба 2500мс, ретраи ×3, failover, receipt-бюджет 30с |
| workpool | Очередь приоритетов, retire без cancel, respawn с backoff |
| batchwriter | flush 2с/500 строк, dropped_count, cooldown 30с |
| vibevibe | ABI, EIP-712 TradeIntent, gas default 300000 |
| database | wallets/actions_log/nonces/cycle_history, VACUUM, бэкапы |
| doctor | Конфиг → ключ → БД → RPC → кран → лицензия, exit code |
| web_gui | Локальная веб-панель: кнопки, WebSocket-лог, топ и история (main.py → G, 127.0.0.1:8080) |
Детали каждого слоя — devdocs/ в репозитории (ядро, портал, конфиги, Tier-2 про реальные RPC/контракты).
Портал и Telegram
python -m portal поднимает aiohttp (веб + API) и, если есть токен, Telegram-бота. Секреты — только через env. Если портал выставляют не на loopback и способа входа нет, он отказывается стартовать.
| env | Назначение |
|---|---|
| PORTAL_SECRET | Подпись сессий, мин. 16 символов |
| TELEGRAM_BOT_TOKEN | Токен от BotFather |
| TELEGRAM_ALLOW_IDS | Default-deny список user_id |
| TELEGRAM_OWNER_ID | user_id владельца, панель /admin |
| FARMER_MASTER_KEY | Мастер-ключ БД / PIN веб-входа |
| GOOGLE_CLIENT_ID/SECRET | Google OAuth 2.0 + PKCE |
| PORTAL_DB / PORTAL_FARM_CONFIG | Путь к БД / конфиг фермера |
@harvest_testnet_bot
Старт/стоп/пауза, поле и статистика, ссылки, экспорт CSV/JSON, кнопки под сообщениями, команды: /start, /menu, /status, /monitor, /doctor, /diag, /history, /pnl, /balance, /wallets, /profiles, /export, /network, /pause, /resume, /stop, /faucet, /rpc, /scheduler, /alerts, /admin (только владелец), /cmd, /cfg, /check, /ref, /cancel, /help — плюс конструкторы /cmd (готовая команда), /cfg (готовый YAML файлом), /check (проверка YAML валидатором) и /ref (справочник). Стиль сообщений — как этот сайт: секции harvest // X, маркеры [RUN]/[STOP]/[ok], эмодзи только в статусе home. Значения экранируются, колбэки — с generic-ответами об ошибках.
VPS / Docker
Готовый кит: Dockerfile + compose, long-polling без публичного URL, Caddy для HTTPS позже, .env-шаблон, healthcheck, volume для данных.
Безопасность — по умолчанию закрыто
Шифрование
Сиды — AES-256-GCM (nonce 12B, AAD wallet-seed). Файлы экспорта — AES-256-CBC v2: PBKDF2-SHA256 100k, раздельные ключи шифрования и MAC, HMAC-проверка до записи.
Redaction
RPC-URL чистятся везде: credentials до @ и query-токены стираются. https://user:pass@host/?api_key=X → https://host/. Логи, история циклов, CLI-вывод.
Fail-closed
Нет мастер-ключа при шифрованных сидах — отказ. Портал default-deny, single-instance лок на БД, ограничение прав файлов, лимиты логина 5/10мин per-IP.
Нашли уязвимость — не открывайте публичный issue. Напишите через private vulnerability reporting на GitHub или напрямую мейнтейнеру. Поддерживается последний релиз; стараюсь ответить в течение 48 часов.
Проверки и вопросы
python -m pytest tests -q
- wait_for_receipt: EMA-бюджет поллинга, failover при серии ошибок, деградация частоты, None по бюджету без отката nonce, кросс-чек на вторичной ноде.
- Линт: ruff · flake8 · black (120) · mypy · bandit. CI гоняет то же, что можно запустить локально; покрытие core/portal — это гейт в CI, а не цифра для хвастовства на сайте.
- Нагрузочный тест — opt-in:
$env:HARVEST_LOAD=1; python -m pytest tests/test_load_opt.py -q.
Q1 Это для мейннета?
Q2 Где мои ключи из демо-генератора?
Q3 Что делать с 0x0-контрактами в конфиге?
Q4 Почему поле пустое?
Q5 Вы обещаете дроп?
Лицензия MIT
Свободно используйте, копируйте, изменяйте, публикуйте и продавайте — с сохранением уведомления об авторстве. Без гарантий.