Как выбрать состояние для восстановления замороженного аккаунта TON

Команда сохранила файл развёртывания, но контракт успел много раз изменить данные до заморозки. Для восстановления нужно состояние, соответствующее хешу, который остался у замороженного аккаунта.

Сравните кандидатов локально

Прочитайте хеш замороженного состояния из записи аккаунта. Соберите ячейки StateInit из архивных кода и данных. В примере для @ton/core два минимальных состояния различаются значением одного счётчика. Сравнение вернёт false. При реальном восстановлении учитывайте все поля архивного StateInit, включая библиотеки, если они использовались.

import { beginCell, storeStateInit } from "@ton/core";
const hashState = data => beginCell()
  .store(storeStateInit({ code: beginCell().endCell(), data }))
  .endCell().hash();
const original = beginCell().storeUint(1, 8).endCell();
const latest = beginCell().storeUint(2, 8).endCell();
console.log(hashState(original).equals(hashState(latest)));

Определите возможности резервной копии

До формирования сообщения сравните хеш кандидата с хешем замороженного состояния в сети. Если после развёртывания данные изменились, одного исходного архива развёртывания недостаточно. Сохранённый хеш позволяет проверить найденный вариант, но восстановить по нему отсутствующее дерево ячеек нельзя. После совпадения остаётся покрыть долг за хранение и выполнить условия перехода аккаунта из замороженного состояния.

docs.ton.org TON account states