Как сравнивать полезную нагрузку TON при разной упаковке BOC
Два сервиса выгрузили одно подписанное сообщение в формате bag of cells (BOC), но файлы побайтно различаются. Разберите контейнеры, чтобы определить, изменилась ли корневая ячейка.
Сериализуйте одну ячейку двумя способами
В примере для @ton/core параметры индекса и контрольной суммы меняют байты контейнера. Первое сравнение выведет false. После декодирования второе вернёт true: у корневых ячеек совпадает хеш представления.
import { beginCell, Cell } from "@ton/core";
const root = beginCell().storeUint(42, 8).endCell();
const bare = root.toBoc({ idx: false, crc32: false });
const indexed = root.toBoc({ idx: true, crc32: true });
console.log(bare.equals(indexed));
console.log(Cell.fromBoc(bare)[0].hash().equals(Cell.fromBoc(indexed)[0].hash()));
Выберите проверку под задачу импорта
Для полезной нагрузки с одним корнем сначала проверьте число корней, затем сопоставьте их хеши. Если в архиве несколько корней, чтение только первого потеряет часть входных данных. Если внешний манифест подписывает конкретный файл BOC, отдельно проверьте заданный в нём байтовый хеш. У совпадающих корневых ячеек файлы упаковки могут различаться.