Хорошая ловля, но нестыковки нет — разные единицы счёта. 557 и 346 это МОНЕТЫ, 893 и 876 — АДРЕСА развёртывания. Одна монета живёт во многих сетях, и в витрине каждое развёртывание отдельная строка со своим адресом.
Пересчитала по факту, а не на словах:
• 876 строк с текстом дают 309 различных монет — то есть из 346 собранных описаний в витрине задействовано 309, остальные 37 монет у нас просто не встречаются;
• рекорд по числу строк: usdc-circle — 66 развёртываний, usdt-tether — 31, dai-makerdao — 25. Только эта тройка даёт 122 строки из одного описания на каждую.
Про склейку — её тут нет по конструкции: текст кладётся по token.pharos.id, точному идентификатору монеты в записи, не по тикеру. Сверила все 876 строк с хранилищем: 869 совпадают дословно, 7 — исключения, и оба вида честные:
• 5 строк (STRCx, thUSD, USPC, CRV-long, sUSDat) — id монеты нет вообще, описание там наше собственное, из другого источника, я его не трогала;
• 2 строки (wA7A5, thBILL) — обёртки: у них текст «wrapper of A7A5, rating inherited», а не описание базовой монеты. Так и задумано, иначе обёртка выдавала бы себя за оригинал.
Так что 876 из 309 монет — не «876 источников из 557 страниц», а размножение по сетям. Знаменатель был не тот.