The official unit testing framework for OPNet smart contracts. Test your AssemblyScript contracts against the real OP_VM runtime with full TypeScript support, gas metering, state management, and built-in helpers for OP20/OP721 tokens.
npm install @btc-vision/unit-test-frameworkCheck out the full documentation in /docs!
- Getting Started - Installation & first test
- Writing Tests - Test patterns & lifecycle
- Built-in Contracts - OP20, OP721, OP721Extended helpers
- Assertions - Static & fluent assertion API
- Blockchain API - Blockchain simulator
- Contract Runtime - Custom contract wrappers
- Advanced Topics - Upgrades, signatures, gas profiling, consensus rules
- Examples - Real-world test examples
- API Reference - Full type reference
import { opnet, OPNetUnit, Assert, Blockchain, OP20 } from '@btc-vision/unit-test-framework';
import { Address } from '@btc-vision/transaction';
await opnet('My Token Tests', async (vm: OPNetUnit) => {
let token: OP20;
const deployer: Address = Blockchain.generateRandomAddress();
const receiver: Address = Blockchain.generateRandomAddress();
vm.beforeEach(async () => {
Blockchain.dispose();
Blockchain.clearContracts();
await Blockchain.init();
token = new OP20({
address: Blockchain.generateRandomAddress(),
deployer: deployer,
file: './path/to/MyToken.wasm',
decimals: 18,
});
Blockchain.register(token);
await token.init();
Blockchain.msgSender = deployer;
Blockchain.txOrigin = deployer;
});
vm.afterEach(() => {
token.dispose();
Blockchain.dispose();
});
await vm.it('should mint tokens', async () => {
await token.mint(receiver, 1000);
const balance = await token.balanceOf(receiver);
Assert.expect(balance).toEqual(Blockchain.expandToDecimal(1000, 18));
});
});Run with:
npx tsx test/my-token.test.ts- Node.js >= 22
- Rust toolchain (for building
@btc-vision/op-vm)
git clone https://github.com/btc-vision/unit-test-framework.git
cd unit-test-framework
npm install
npm run build# Run the full test suite (builds test contracts + runs all tests)
npm test
# Run a specific test file
npm run test:update-from-address
npm run test:storage
npm run test:gas
npm run test:ecdsaEnd-to-end test contracts live in test/e2e/contracts/. Each contract has:
contract/- AssemblyScript source andasconfig.jsonruntime/- TypeScriptContractRuntimewrapper
Build test contracts separately:
npm run build:test-contract- Fork the repository
- Create a feature branch
- Make your changes
- Run tests:
npm test - Submit a pull request
- Bugs: Open an issue on GitHub
- Security: See SECURITY.md - do not open public issues for vulnerabilities
See CHANGELOG.md for release history.