Cells и bag of cells: как TON хранит данные
Ячейка — базовая единица данных в TON: до 1023 бит и до 4 ссылок. Как устроены Cell, BoC и зачем это разработчику.
Что такое Cell
Cell (ячейка) — атомарная единица данных в TON. В одной ячейке:
- до 1023 бит данных
- до 4 ссылок на другие ячейки
Код контракта, его storage, сообщения, блоки — всё собирается из ячеек. Дерево/DAG ячеек называют bag of cells (BoC).
Зачем такая модель
Вместо «плоского» массива байт TON даёт дерево ссылок. Это позволяет:
- разделять большие структуры на куски с известным хешем
- передавать в сообщениях только нужные ветки
- мержить и сравнивать данные по хешам ячеек
beginCell() → пишешь биты/ссылки → endCell(). toBoc() сериализует дерево в бинарный Bag of Cells.
Как это работает
storeUint/storeCoins/storeAddress— упаковка типичных полей TL-BstoreRef(cell)— одна из максимум четырёх ссылок- Хеш ячейки зависит от битов и хешей дочерних ячеек
- Контрактный
data— обычно одна корневая ячейка storage
При разборе чужих данных используй cell.beginParse() (slice) и читай поля в том же порядке, в каком их записали.
Частые ошибки
Превысить 1023 бит или 4 ссылки в одной ячейке → компилятор/endCell упадёт; дроби структуру на дочерние ячейки.
Читать slice не в том порядке → получишь мусор или ошибку парсинга; схема хранения = контракт между писателем и читателем.
Путать Cell и BoC → Cell — узел дерева; BoC — сериализованный пакет одного или нескольких корней для передачи/хранения.
Что дальше
- TVM — виртуальная машина TON — как VM читает ячейки кода и данных
- Адреса в TON — адрес считается из workchain + хеша StateInit
- Внутренние и внешние сообщения — тело сообщения тоже ячейки
Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация