TASM
Дизассемблер TVM-байткода: преобразует cell с компилированным TVM-кодом в human-readable mnemonics (PUSHINT, IFJMP, CHKSIGN, HASHCU и т.д.). Стандартный инструмент аудита и forensics смарт-контрактов TON.
Синонимы: tvm assembly, ton disassembler, tasm disasm
TASM (TVM Assembly) — формат и инструмент дизассемблирования TVM-байткода. Берёт code:Cell контракта (по сути, бинарный поток TVM-инструкций) и переводит его в читаемый текст с мнемониками TVM-операций: PUSHINT 100500, HASHCU, CHKSIGNU, THROWIFNOT 70, IFJMPREF { ... } и т.д.
Зачем нужен
- Forensics: чтобы понять, что делает «непонятный» смарт-контракт, у которого нет публикованных исходников, дизассемблируете его в TASM и читаете построчно. На этом строился разбор drain TAC-моста — 2399 строк TASM bridge-admin контракта.
- Аудит: даже когда исходники открыты, аудитор сверяет TASM-output с тем, что декларируют исходники. FunC/Tact/Tolk компиляторы небезошибочные, и реальная семантика — всегда в байткоде.
- Поиск security-маркеров: grep по TASM на наличие/отсутствие
CHKSIGN,CHKSIGNU,ACCEPT,COMMIT,RANDOMIZE. Если bridge-контракт не содержит ни однойCHKSIGN-инструкции — это сразу red flag (как и оказалось с TAC).
Инструменты
@ton-community/disasm— официальный CLI-дизассемблер от TON Community.- Tonviewer (
https://tonviewer.com/<address>?section=code) показывает TASM-вью прямо в браузере для любого деплойнутого контракта. - Tonscan — аналогично, в вкладке кода контракта.
- Stack-style и continuation-aware: хороший дизассемблер показывает не плоский список опкодов, а вложенные
IFJMPREF { ... }-блоки, что критично для понимания control flow.
Что TASM не сделает
Дизассемблер не восстанавливает имена переменных, типы, исходный язык. Понимание TASM требует знания семантики TVM-стека — это поднимает кривую входа, но даёт прямой доступ к реальной семантике контракта.