Как найти расхождение адресов контракта TON до развёртывания
Скрипт предсказывает один адрес, а подпись готовится для сообщения с другим получателем. Даже одно изменение начальных данных может объяснить разницу ещё до отправки.
Зафиксируйте код и workchain
В локальном примере для @ton/core используется пустая ячейка кода, чтобы показать только вычисление адреса. Результаты различаются из-за изменения 32-битного поля в ячейке данных. Этот образец служит для проверки сериализации, а не для запуска контракта.
import { beginCell, contractAddress } from "@ton/core";
const code = beginCell().endCell();
for (const salt of [7, 8]) {
const data = beginCell().storeUint(salt, 32).endCell();
console.log(contractAddress(0, { code, data }).toRawString());
}
Сравните данные непосредственно из сообщения
Извлеките хеши ячеек кода и данных из того StateInit, который подготовил скрипт отправки. Сверьте с расчётом адреса ширину полей и порядок ссылок. Если записать то же число в 64 бита, изменится его битовое представление. Для проверки развёрнутого контракта нужны первоначальные данные: текущее состояние аккаунта могло измениться после первого сообщения.