Ошибка: Sandbox — blockchain not initialized

Причина и решение ошибки «blockchain not initialized» в тестах @ton/sandbox.

Sandbox: «blockchain not initialized» в тестах

Код обращается к Blockchain / открытому контракту до Blockchain.create(), либо использует объект после того, как sandbox-контекст уже уничтожен.


Причина

  • openContract / treasury вызвали на модульном уровне, вне beforeEach/beforeAll;
  • забыли await Blockchain.create();
  • переиспользуешь blockchain между файлами после завершения suite;
  • async-тест стартовал, но create() ещё не завершился.

Решение

typescript
// @ton/sandbox ^0.22, @ton/core ^0.59, vitest/jest
import { Blockchain, SandboxContract, TreasuryContract } from "@ton/sandbox";
import { toNano } from "@ton/core";
import { Counter } from "../build/Counter/tact_Counter";

describe("Counter", () => {
  let blockchain: Blockchain;
  let deployer: SandboxContract<TreasuryContract>;
  let counter: SandboxContract<Counter>;

  beforeEach(async () => {
    blockchain = await Blockchain.create(); // обязательно первым
    deployer = await blockchain.treasury("deployer");
    counter = blockchain.openContract(await Counter.fromInit(0n));

    await counter.send(
      deployer.getSender(),
      { value: toNano("0.05") },
      { $$type: "Deploy", queryId: 0n },
    );
  });

  it("increments", async () => {
    await counter.send(deployer.getSender(), { value: toNano("0.05") }, "inc");
    expect(await counter.getValue()).toBe(1n);
  });
});

Не делай так:

typescript
// Плохо — blockchain ещё undefined
const blockchain = undefined as unknown as Blockchain;
const counter = blockchain.openContract(await Counter.fromInit(0n));

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

Создавай sandbox только в beforeEach/beforeAll с await. Все treasury / openContract — после create(). Не храни sandbox в глобальных синглтонах между test runs.

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