Не все знают, что получить
code и data уже задеплоенного контракта в TON можно буквально в несколько строк.На примере Jetton Master:
const jettonMasterAddress = await ui.inputAddress("Jetton Master");
const jettonMasterState = (await provider.getContractState(jettonMasterAddress)).state;
if (jettonMasterState.type != "active") {
console.error("Jetton Master is not active");
return;
}
const jettonMasterCode = Cell.fromBoc(jettonMasterState.code!)[0];
const jettonMasterData = Cell.fromBoc(jettonMasterState.data!)[0];
Что происходит:
•
getContractState() получает текущее состояние контракта из блокчейна.•
state.code — сериализованный BOC с кодом смарт-контракта.•
state.data — BOC с данными (storage) контракта.•
Cell.fromBoc(...)[0] преобразует BOC обратно в Cell, с которой уже можно работать: парсить, сравнивать, дизассемблировать или использовать в тестах.🔥 Такой прием полезен, если вы хотите:
• проанализировать чужой контракт,
• сравнить код после обновления,
• получить storage для дебага,
• написать тесты на основе реального состояния сети.
Этот способ работает не только с Jetton Master, а практически с любым активным TON-контрактом.
@dnevnik_ton