Клітини як сховище даних
Все в TON зберігається в комірках. Комірка - це структура даних, що містить:
- до 1023 біт даних (не байт!)
- до 4 посилань на інші комірки
Біти та посилання не змішуються (вони зберігаються окремо). Циклічні посилання заборонені: для будь-якої комірки жодна з її нащадків не може мати цю початкову комірку як посилання.
Таким чином, всі клітинки утворюють орієнтовний ациклічний граф (ОАГ). Ось гарний малюнок для ілюстрації:
Типи клітин
Наразі існує 5 типів клітин: звичайні та 4 екзотичні. До екзотичних відносяться наступні типи:
- Обрізана комірка гілки
- Комірка посилання на бібліотеку
- Комірка Меркле, стійка до впливу вологи
- Комірка оновлення Merkle
Детальніше про екзотичні клітини див: [ТВМ Whitepaper, розділ 3] (https://ton.org/tvm.pdf).
Клітинні ароматизатори
Комірка - це непрозорий об'єкт, оптимізований для компактного зберігання.
Зокрема, вона дедублює дані: якщо є кілька еквівалентних підкомірок, на які є посилання в різних гілках, їхній вміст зберігається лише один раз. Однак, непрозорість означає, що комірку не можна змінювати або читати безпосередньо. Таким чином, з'являється 2 додаткових смаки комірок:
- Builder для частково сконструйованих комірок, для яких можна визначити швидкі операції додавання бітових рядків, цілих чисел, інших комірок та посилань на інші комірки.
- Slice для "розрізаних" комірок, що представляють або залишок частково розібраної комірки, або значення (підкомірку), що знаходиться всередині такої комірки і витягнуте з неї за допомогою інструкції синтаксичного аналізу.
Ще один особливий клітинний аромат використовується в TVM:
- Продовження_ для комірок, що містять операційні коди (інструкції) для віртуальної машини TON, див. Огляд TVM з висоти пташиного польоту.
Серіалізація даних у комірки
Будь-який об'єкт в TON (повідомлення, черга повідомлень, блок, стан всього блокчейну, код контракту і дані) серіалізується в комірку.
Процес серіалізації описується схемою TL-B: формальним описом того, як цей об'єкт можна серіалізувати у Builder або як розібрати об'єкт заданого типу з Slice. TL-B для комірок - це те саме, що TL або ProtoBuf для байтових потоків.
Якщо ви хочете дізнатися більше про (де)серіалізацію комірок, ви можете прочитати статтю Cell & Bag of Cells.