Ячейки как хранилище данных
В TON всё хранится в ячейках. Ячейка — это структура данных, содержащая:
- до 1023 бит данных (не байт!)
- д о 4 ссылок на другие ячейки
- ячейка хранит биты и ссылки раздельно
- циклические ссылки запрещены: для любой ячейки никто из её ячеек-«потомков» не может ссылаться на неё
Таким образом, все ячейки формируют направленный ациклический граф (DAG). Вот наглядная иллюстрация:


Типы ячеек
В настоящее время существует пять типов ячеек: один обычный и четыре так называемых «экзотических» (exotic). Экзотические типы следующие:
- Ячейка обрезанной ветви
- Ячейка ссылки на библиотеку
- Ячейка доказательства Меркла
- Ячейка обновления Меркла
Подробнее об экзотических ячейках см: TVM Whitepaper, раздел 3.
Разновидности ячеек
Ячейка — это непрозрачный объект, оптимизированный для компактного хранения.
Он устраняет дублирование данных: содержимое нескольких эквивалентных подъячеек, на которые ссылаются разные ветви, хранится только один раз. Однако нельзя напрямую изменять или считывать ячейку из-за её непрозрачности. Поэтому существуют два дополнительных варианта ячеек:
- Builder — для конструирования ячеек
- Slice — для чтения ячеек
Также в TVM используется ещё одна особая разновидность ячеек:
- Continuation — для ячеек с оп-кодами инструкций для виртуальной машины TON, см. обзор TVM.
Сериализация данных в ячейки
Любой объект в TON (сообщение, блок или состояние всего блокчейна) сериализуется в ячейку.
Процесс сериализации описывается схемой TL-B. Это формальное описание того, как определённый объект может быть сериализован в Builder или как прочитать объект заданного типа из Slice. TL-B для ячеек — это то же самое, что TL или ProtoBuf для байтовых потоков.
Если вы хотите узнать больше подробностей о (де)сериализации ячеек, вы можете прочитать статью Cell & Bag of Cells.