Ошибка: Exit code 36 — Wrong workchain

Причина и решение ошибки exit code 36 при неверном workchain или невалидном адресе назначения в TON.

Exit code 36 — Wrong workchain

Сообщение ушло на адрес с неверной или невалидной структурой (часто — не тот workchain). В action phase TVM код 36Invalid destination address in outbound message. В Wallet V4 тот же номер занят проверкой valid_until — смотри контекст (кошелёк vs исходящее сообщение контракта).


Причина

  • адрес собран с workchain: -1 (masterchain) вместо 0 (basechain), или наоборот;
  • в MsgAddress попали мусорные биты / неправильная длина;
  • raw-адрес перешёл в bounceable/non-bounceable форму с ошибкой парсинга;
  • для Wallet V4: истёк valid_until (подписанная tx «протухла»).

Решение

typescript
// @ton/core ^0.59
import { Address, beginCell, toNano, internal } from "@ton/core";

// Mainnet basechain — workchain 0
const dest = Address.parse("EQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HUn4bpAOg8xqB2N");

if (dest.workChain !== 0) {
  throw new Error(`Unexpected workchain: ${dest.workChain}`);
}

// При ручной сборке адреса не подставляй workchain «на глаз»
const rebuilt = new Address(0, dest.hash);

const message = internal({
  to: rebuilt,
  value: toNano("0.05"),
  body: beginCell().storeUint(0, 32).storeStringTail("ok").endCell(),
});

// Wallet V4: valid_until с запасом (unix seconds)
const validUntil = Math.floor(Date.now() / 1000) + 60;

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

Парси адреса через Address.parse / Address.parseFriendly, проверяй workChain перед send_raw_message. Для кошелька V4 всегда ставь свежий valid_until и не переиспользуй старые подписанные payload'ы.

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