Деплой контракта в testnet через Blueprint

Задеплоишь Tact-контракт в TON testnet через Blueprint: проект, скрипт деплоя, проверка адреса и getter.

Деплой в testnet

Blueprint собирает контракт, поднимает кошелёк-отправитель и шлёт state-init на вычисленный адрес. Testnet нужен, чтобы проверить деплой и сообщения без риска mainnet-средств.


Проект и скрипт деплоя

bash
# Node.js 22+ · создать проект
npm create ton@latest counter-testnet
# выбери Tact · Counter (или empty) · затем:
cd counter-testnet
npm install
tact (fallback highlight)
// @tact-lang/compiler 1.6.13 (подтянется через шаблон Blueprint)
// contracts/counter.tact

message Add { amount: Int as uint32 }

contract Counter(
    id: Int as uint32,
    counter: Int as uint32,
) {
    receive() { cashback(sender()) }

    receive(msg: Add) {
        self.counter += msg.amount;
        cashback(sender());
    }

    get fun counter(): Int { return self.counter }
    get fun id(): Int { return self.id }
}
typescript
// @ton/blueprint ^0.27.0 · @ton/core ^0.60.0
// scripts/deployCounter.ts
import { toNano } from "@ton/core";
import { Counter } from "../build/Counter/tact_Counter";
import { NetworkProvider } from "@ton/blueprint";

export async function run(provider: NetworkProvider) {
  const id = Math.floor(Math.random() * 1_000_000);
  const counter = provider.open(
    await Counter.fromInit(BigInt(id), 0n),
  );

  await counter.send(
    provider.sender(),
    { value: toNano("0.05") },
    null, // пустое тело → receive()
  );

  await provider.waitForDeploy(counter.address);
  console.log("address", counter.address.toString());
  console.log("id", await counter.getId());
  console.log("counter", await counter.getCounter());
}
bash
# В интерактивном меню выбери testnet и способ мнемоники/кошелька
npx blueprint run deployCounter

Как это работает

  • fromInit(...) считает адрес из code+data до деплоя — тот же адрес получит сеть после успешной транзакции.
  • Первое сообщение с state-init активирует аккаунт; value: toNano("0.05") должно покрыть storage + gas.
  • waitForDeploy поллит аккаунт, пока он не станет active.
  • Путь build/Counter/tact_Counter зависит от имени контракта в .tact — после blueprint build смотри фактический export.

Частые ошибки

Деплой «успешен», а getter падает → попал не в тот network в меню Blueprint или смотришь адрес в другом эксплорере.

Недостаточно Gram на testnet-кошельке → возьми из официального testnet faucet до blueprint run.

Повторный деплой с теми же init-параметрами → адрес уже занят; смени id или используй уже задеплоенный инстанс.


Что дальше

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