Как найти шард аккаунта TON после разделения
Сборщик блоков запомнил шард аккаунта, а затем родительский шард разделился. Для маршрутизации нужны префикс идентификатора аккаунта и состав шардов на интересующей высоте.
Сопоставьте начало идентификатора с префиксами
Допустим, в одной рабочей цепочке действуют три префикса из примера. Первый байт a0 в двоичной записи начинается с 10, значит, аккаунт относится ко второму шарду этой конфигурации. В примере префиксы записаны обычными битовыми строками без служебной кодировки идентификатора шарда.
const active = ["0", "10", "11"];
for (const firstByte of [0x20, 0xa0, 0xe1]) {
const bits = firstByte.toString(2).padStart(8, "0");
console.log(bits, active.find(prefix => bits.startsWith(prefix)));
}
Учитывайте конфигурацию на момент события
Возьмите состав шардов из данных соответствующего блока мастерчейна. Если до разделения действовали префиксы 0 и 1, тот же аккаунт тогда относился к 1. Записывайте workchain, идентификатор шарда и ссылку на блок вместе. Извлекайте префикс из декодированного идентификатора аккаунта: отображаемая строка адреса содержит ещё и служебные поля.