Перейти к основному содержимому

Ячейки как хранилище данных

В 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.

См. также

Was this article useful?