Bankrun (TS)
Bankrun fornece testes VM Solana in-process rápidos a partir de TypeScript sem executar solana-test-validator. Use quando sua equipe vive em testes Anchor TS mas precisa de velocidade estilo LiteSVM.
Busque em todas as páginas da documentação
Bankrun fornece testes VM Solana in-process rápidos a partir de TypeScript sem executar solana-test-validator. Use quando sua equipe vive em testes Anchor TS mas precisa de velocidade estilo LiteSVM.
Cartão de receita de referência rápida - pronto para copiar e colar.
import { startAnchor, BankrunProvider } from "anchor-bankrun";
import { Program } from "@coral-xyz/anchor";
const context = await startAnchor("", [], []);
const provider = new BankrunProvider(context);
const program = new Program(idl, provider);Quando usar:
chai em vez de #[test] Rust.import { startAnchor, BankrunProvider } from "anchor-bankrun";
import { Program, BN } from "@coral-xyz/anchor";
import { Keypair, PublicKey } from "@solana/web3.js";
import { describe, it } from "node:test";
import assert from "node:assert/strict";
describe("vault bankrun", async () => {
const context = await startAnchor(".", [], []);
const provider = new BankrunProvider(context);
const program = new Program(idl as any, provider);
it("deposits tokens", async () => {
const user = Keypair.generate();
context.setAccount(user.publicKey, {
lamports: 1_000_000_000,
data: Buffer.alloc(0),
owner: PublicKey.default,
executable: false,
});
const [vaultPda] = PublicKey.findProgramAddressSync(
[Buffer.from("vault"), user.publicKey.toBuffer()],
program.programId
);
await program.methods
.deposit(new BN(500_000))
.accounts({ user: user.publicKey, vault: vaultPda })
.signers([user])
.rpc();
const vault = await program.account.vault.fetch(vaultPda);
assert.equal(vault.balance.toNumber(), 500_000);
});
});O que isso demonstra:
startAnchor carrega programas do workspace na VM in-process.BankrunProvider conecta cliente Anchor sem RPC localhost.context.setAccount semeia estado de conta antes das instruções..so carregam de caminhos do workspace.| Aspecto | Bankrun | anchor test (validador) |
|---|---|---|
| Startup | ~ms | segundos |
| Fidelidade RPC | Alta para programas | Completa |
| SPL Token | Suportado | Nativo |
| Fork DeFi | Limitado | Surfpool / clone |
// Avance clock para ix dependentes de tempo
context.warpToSlot(100n);anchor build antes dos testes.spl_token.so na lista de programas startAnchor.setAccount.package.json..signers([user]) em ix mutante. Correção: Espelhe padrões de teste de validador.| Alternativa | Use quando | Não use quando |
|---|---|---|
| LiteSVM (Rust) | Equipe Rust-first | Devs só TypeScript |
| anchor test | RPC completo necessário | Velocidade crítica inner-loop |
| Surfpool | Fork mainnet DeFi | Lógica de programa simples |
Não - mantenha E2E validador para caminhos específicos de RPC; Bankrun cobre a maior parte dos testes de lógica Anchor.
Use versão anchor-bankrun alinhada ao seu release Anchor - verifique README do pacote.
Suporte evolui - verifique ALT/tx versionada para sua versão bankrun; fallback para validador se não suportado.
Habilite logs verbosos do provider ou capture erros de transação e imprima campo simulation logs.
Sim - npm test só com bankrun; mais rápido e sem conflitos de porta.
Passe array de caminhos de programa para startAnchor para dependências CPI.
Igual testes de validador - findProgramAddressSync + program.methods...accounts.
assert.rejects em rpc() esperando códigos de erro Anchor.
Bankrun usa modelo provider web3.js - testes kit podem mirar RPC bankrun se exposto; caminho Anchor usa web3.js.
Quando instrução precisa de contas reais de pool/oracle mainnet não facilmente mockadas.
Versões da stack: Esta página foi escrita para Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0 e LiteSVM 0.6.x.
Revisado por Chris St. John·Última atualização: 16 de jul. de 2026