Ошибка: Exit code 8 — Cell overflow

Причина и решение ошибки exit code 8 (cell overflow) при записи в builder/cell в TON.

Exit code 8 — Cell overflow

Compute phase: в один cell пытаются записать больше 1023 бит или больше 4 ссылок. Builder не может завершить end_cell().


Причина

  • длинная строка / комментарий без разбиения на refs;
  • пятый store_ref в ту же cell;
  • несколько больших store_uint подряд без новой cell;
  • сериализация структуры «в лоб» без дерева.

Решение

func (fallback highlight)
cell pack_comment(slice text) inline {
    ;; комментарий: op=0 + snake-string по ячейкам
    return begin_cell()
        .store_uint(0, 32)
        .store_slice(text) ;; если text длинный — режь и клади хвост в ref
        .end_cell();
}

cell pack_large(slice part1, slice part2) inline {
    return begin_cell()
        .store_slice(part1)
        .store_ref(
            begin_cell()
                .store_slice(part2)
                .end_cell()
        )
        .end_cell();
}
typescript
// @ton/core ^0.59
import { beginCell } from "@ton/core";

// Максимум 4 ref на cell
const leaf = beginCell().storeStringTail("tail").endCell();
const root = beginCell()
  .storeUint(1, 32)
  .storeRef(leaf) // 1
  .endCell();

// Не делай storeRef пять раз в один builder

Как избежать в будущем

Считай биты при сборке: ≤1023 data bits, ≤4 refs. Длинные строки — snake format через refs. В Tact большие структуры сами раскладываются по ячейкам — не дублируй ручной pack поверх.

Материалы gramdocs.tech носят образовательный характер и не являются финансовой, юридической или инвестиционной рекомендацией. Работа с блокчейном TON и токеном Gram связана с рисками потери средств. Правовая информация