Перейти до основного вмісту

Клітини як сховище даних

Все в TON зберігається в комірках. Комірка - це структура даних, що містить:

  • до 1023 біт даних (не байт!)
  • до 4 посилань на інші комірки

Біти та посилання не змішуються (вони зберігаються окремо). Циклічні посилання заборонені: для будь-якої комірки жодна з її нащадків не може мати цю початкову комірку як посилання.

Таким чином, всі клітинки утворюють орієнтовний ациклічний граф (ОАГ). Ось гарний малюнок для ілюстрації:

Спрямований ациклічний графік

Типи клітин

Наразі існує 5 типів клітин: звичайні та 4 екзотичні. До екзотичних відносяться наступні типи:

  • Обрізана комірка гілки
  • Комірка посилання на бібліотеку
  • Комірка Меркле, стійка до впливу вологи
  • Комірка оновлення Merkle
порада

Детальніше про екзотичні клітини див: [ТВМ Whitepaper, розділ 3] (https://ton.org/tvm.pdf).

Клітинні ароматизатори

Комірка - це непрозорий об'єкт, оптимізований для компактного зберігання.

Зокрема, вона дедублює дані: якщо є кілька еквівалентних підкомірок, на які є посилання в різних гілках, їхній вміст зберігається лише один раз. Однак, непрозорість означає, що комірку не можна змінювати або читати безпосередньо. Таким чином, з'являється 2 додаткових смаки комірок:

  • Builder для частково сконструйованих комірок, для яких можна визначити швидкі операції додавання бітових рядків, цілих чисел, інших комірок та посилань на інші комірки.
  • Slice для "розрізаних" комірок, що представляють або залишок частково розібраної комірки, або значення (підкомірку), що знаходиться всередині такої комірки і витягнуте з неї за допомогою інструкції синтаксичного аналізу.

Ще один особливий клітинний аромат використовується в TVM:

Серіалізація даних у комірки

Будь-який об'єкт в TON (повідомлення, черга повідомлень, блок, стан всього блокчейну, код контракту і дані) серіалізується в комірку.

Процес серіалізації описується схемою TL-B: формальним описом того, як цей об'єкт можна серіалізувати у Builder або як розібрати об'єкт заданого типу з Slice. TL-B для комірок - це те саме, що TL або ProtoBuf для байтових потоків.

Якщо ви хочете дізнатися більше про (де)серіалізацію комірок, ви можете прочитати статтю Cell & Bag of Cells.

Дивіться також