К основному содержанию
T TON Adoption
← Словарь
NODE/03 · Term

Builder

Тип TVM для пошагового конструирования cell. В builder последовательно добавляют биты и ссылки, в конце он закрывается в готовый cell.

Синонимы: тип builder, ton builder

Builder — тип TVM, симметричный slice. Если slice — это курсор для чтения cell, то builder — это изменяемый буфер для построения нового cell. Шаг за шагом в builder добавляются биты, числа и ссылки на другие cell-ы, после чего он «запекается» в готовый cell.

Жизненный цикл

begin_cell()                  ;; создаёт пустой builder
   .store_uint(0xf8a7ea5, 32) ;; добавить 32-битный opcode
   .store_uint(0, 64)         ;; добавить query_id
   .store_coins(amount)       ;; добавить сумму в формате VarUInteger
   .store_slice(addr)         ;; добавить адрес-получателя
   .end_cell()                ;; запечатать в cell

После end_cell() cell иммутабелен, его можно класть в storage, в исходящее сообщение или в dictionary.

Что хранится в builder

В каждый момент builder помнит:

  • Текущий битовый буфер (накопленные биты, до 1023).
  • Список ссылок на дочерние cell (до 4 штук).

Превышение лимитов даёт ошибку компиляции / исполнения. Если данных больше лимита cell, нужно делать дерево — складывать часть данных в дочерний cell и хранить на него ссылку.

Builder vs Cell vs Slice

ТипНазначениеИзменяемость
Builderстроить новый cellmutable
Cellхранить данныеimmutable
Sliceчитать cellread-only cursor

Цикл «прочитать → пересобрать» в TVM — это всегда slice → builder → cell: парсим slice, по ходу пишем в builder, в конце запекаем.

В Tact и Tolk

В высокоуровневых языках builder обычно скрыт: компилятор сам генерирует код сериализации по схеме message/struct. Но при оптимизации горячих путей или при работе с произвольными форматами разработчик опускается до builder/slice вручную.

См. также