Как найти диапазон байтов DataItem внутри пакета ANS-104

Двоичный пакет Arweave хранит таблицу длин и идентификаторов до тел элементов. Второй элемент начинается далеко не сразу после первой записи длины.

Считайте смещения от конца заголовка

Прочитайте количество из 32-байтового префикса, проверьте размер таблицы и разберите записи по 64 байта. В примере область тел начинается после байта 159. Первый элемент занимает 1100 байтов, поэтому второй начинается со смещения 1260. Выберите подходящую целочисленную арифметику и проверьте границы до выделения памяти.

item count = 2
header bytes = 32 + 2 × 64 = 160
item lengths = 1100, 1350
body ranges = [160,1260), [1260,2610)

Проверьте извлечённый элемент

Для локальной обработки удобна исключающая верхняя граница. Если HTTP-сервер ожидает включительную границу, вычтите единицу. Перед индексацией сверьте ID элемента и его подпись по телу. Правдоподобная таблица длин задаёт границы, но не удостоверяет содержимое.

Источники