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 — она «иммутабельна». Чтобы прочитать данные:
- Cell превращается в slice — read-only «курсор», по которому можно последовательно вычитывать биты, числа, ссылки.
- Чтобы создать новую 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 — вы знаете содержимое всего поддерева, не имея его на руках.