fixed Разные peer_hash для одного сида в bb_bt_tracker

Статус: Уже исправлено в движке

Описанная проблема была актуальна ранее, но в текущей версии движка она уже полностью решена.

Суть проблемы

При анонсе гибридного торрента (BitTorrent v1 + v2) клиент отправляет два запроса с разными info_hash:
  • Первый запрос с v1 info_hash (SHA-1, 20 байт)
  • Второй запрос с v2 info_hash (SHA-256, обрезанный до 20 байт)

Поскольку peer_hash = hash('xxh128', $passkey . $info_hash_hex . $port), каждый запрос генерировал свой peer_hash, создавая два разных пира в bb_bt_tracker для одного реального сида. Это приводило к удвоению счётчиков сидов/личей.

Как это уже решено

В движке реализован полноценный механизм дедупликации гибридных торрентов:

  1. При регистрации торрента (src/Torrent/Registry.php) движок определяет тип торрента (v1, v2 или гибридный) и сохраняет оба хэша: info_hash (SHA-1) и info_hash_v2 (SHA-256) в таблицу bb_bt_torrents.
  2. При announce (app/Http/Controllers/Tracker/AnnounceController.php) — если торрент является гибридным (имеет оба хэша), движок определяет "канонический" хэш через настройку tracker.hybrid_stat_protocol:
    • Значение 1 (по умолчанию) — каноническим считается v1 info_hash
    • Значение 2 — каноническим считается обрезанный v2 info_hash
  3. Флаг hybrid_unrecord — если клиент анонсирует с неканоническим хэшем, устанавливается флаг $hybrid_unrecord = true, который полностью блокирует запись в bb_bt_tracker (и INSERT, и UPDATE пропускаются). Пир записывается только при анонсе с каноническим хэшем.
  4. Кэширование — флаг hybrid_unrecord сохраняется в кэше, поэтому последующие анонсы с неканоническим хэшем также пропускаются без обращения к БД.

Настройка

В файле config/tracker.php доступны следующие параметры:

PHP:
'hybrid_stat_protocol' => 1,     // Какой хэш использовать для статистики (1 = v1, 2 = v2)
'disabled_v1_torrents' => false,  // Запрет загрузки v1-only торрентов
'disabled_v2_torrents' => false,  // Запрет загрузки v2-only торрентов

Никаких действий не требуется — механизм работает корректно.
 
Back
Top