К основному содержанию
T TON Adoption
← Словарь
NODE/03 · Term

Cell (структура данных TVM)

Базовая единица данных в TON — до 1023 бит и до 4 ссылок на другие cell. Все стейты, сообщения, контракты, NFT-метаданные сериализуются в дерево cell.

Синонимы: ячейка, ton cell, tvm cell

Cell — фундаментальная структура данных в TON. Любая информация в блокчейне — состояние контракта, сообщение, транзакция, метаданные NFT, конфигурация сети — представлена как дерево cell-ов. Это аналог байтовой памяти в Ethereum, но с принципиально другой моделью.

Анатомия cell

Каждая cell состоит из двух частей:

  • Bit-string — до 1023 бит произвольных данных. Любая последовательность нулей и единиц.
  • References — до 4 ссылок на другие cell-ы. Не «указатели», а именно ссылки в графе.

Это значит, что cell не имеет фиксированной структуры — это просто «контейнер» с данными и ссылками. Семантику задаёт код контракта, который читает cell.

Как работают с cell в коде

В TVM нет прямого доступа к cell — она «иммутабельна». Чтобы прочитать данные:

  1. Cell превращается в slice — read-only «курсор», по которому можно последовательно вычитывать биты, числа, ссылки.
  2. Чтобы создать новую cell, используется builder — write-only объект, в который пишут данные и ссылки. В конце builder.endCell() даёт готовую cell.

Этот паттерн — slice для чтения, builder для записи — единственный способ работы с cell в FunC, Tact и любом другом коде под TVM.

Зачем такая модель

  • Эффективная сериализация. Любое произвольное дерево данных сериализуется компактно и однозначно (см. также boc).
  • Меркл-доказательства из коробки. Хеш cell зависит от содержимого и хешей всех вложенных cell. Это даёт блокчейну дешёвые меркл-доказательства любого уровня вложенности — критично для шардинга и кросс-чейн-сообщений.
  • Дешевизна газа. Базовые операции с cell (загрузка, чтение примитивов, создание ссылок) выполнены в TVM как одиночные опкоды.

Примеры использования

  • Состояние jetton wallet — это одна cell, в которой записаны баланс, владелец, master-контракт и ссылка на байткод.
  • NFT с on-chain метаданными — cell с именем, описанием и ссылкой на cell с base64-картинкой.
  • TON-сообщение — cell с заголовком (отправитель, получатель, сумма) и ссылкой на payload.
  • Конфигурация сети — большое дерево cell, хранящее все параметры консенсуса, цены газа, минимумы стейка.

Типы cell

Помимо «обычных» (ordinary) cell, в TVM существуют специальные типы:

  • Pruned branch — заглушка вместо поддерева, нужна в меркл-доказательствах.
  • Library reference — ссылка на shared-библиотеку (используется в jetton wallet — все wallet-ы одного jetton-а ссылаются на одну общую cell с кодом).
  • Merkle proof / Merkle update — специальные cell для построения и проверки доказательств.

Эти типы важны для разработчиков и инфраструктурщиков, обычному пользователю с ними дела иметь не приходится.

Hash cell

Каждая cell имеет уникальный 256-битный хеш. Хеш зависит от:

  • содержимого bit-string,
  • типа cell (ordinary / pruned / merkle и т.д.),
  • хешей всех ссылочных cell.

Это и есть основа цепочки доказательств: если вы знаете хеш корневой cell — вы знаете содержимое всего поддерева, не имея его на руках.

См. также