Skip to content

btc-vision/btc-runtime

Repository files navigation

OPNet Smart Contract Runtime

Bitcoin AssemblyScript TypeScript NodeJS WebAssembly NPM

code style: prettier

Overview

The OPNet Smart Contract Runtime is the framework for building decentralized applications on Bitcoin L1. Written in AssemblyScript and compiled to WebAssembly, it enables smart contract development on Bitcoin with similar expressiveness to Solidity.

Unlike Bitcoin Layer 2 solutions, OPNet operates directly on Bitcoin's base layer, inheriting Bitcoin's security guarantees and decentralization properties while adding programmable smart contract capabilities.

What is OPNet?

OPNet (Open Protocol Network) is a consensus-layer built on Bitcoin L1. It allows developers to write smart contracts in AssemblyScript or similar that compile to WebAssembly (WASM) and execute deterministically across all network nodes. Think of it as "Solidity for Bitcoin" - you get the programmability of Ethereum with the security of Bitcoin.

Why AssemblyScript?

AssemblyScript compiles to WebAssembly, which provides:

  • Deterministic execution across all platforms and nodes
  • Near-native performance for compute-intensive operations
  • Memory safety through WASM's sandboxed environment
  • Familiar syntax for TypeScript/JavaScript developers

Floating-Point Arithmetic is Prohibited

Floating-point arithmetic (f32, f64) is strictly prohibited in blockchain and smart contract environments. Floating-point operations are non-deterministic across different CPU architectures, compilers, and platforms due to differences in rounding, precision, and IEEE 754 implementation details.

Always use integer arithmetic (u128, u256) for all blockchain computations. For decimal values, use fixed-point representation (e.g., store currency as smallest units like satoshis). This library provides full support for 128-bit and 256-bit integer operations through @btc-vision/as-bignum.

Security Audit

Verichains

Audited by Verichains Security Report

This runtime has been professionally audited by Verichains.

See SECURITY.md for details.

Installation

npm install @btc-vision/btc-runtime

Quick Start

import { u256 } from '@btc-vision/as-bignum/assembly';
import {
    Blockchain,
    BytesWriter,
    Calldata,
    OP20,
    OP20InitParameters,
} from '@btc-vision/btc-runtime/runtime';

@final
export class MyToken extends OP20 {
    public override onDeployment(_calldata: Calldata): void {
        const maxSupply: u256 = u256.fromString('1000000000000000000000000');
        const decimals: u8 = 18;
        const name: string = 'MyToken';
        const symbol: string = 'MTK';

        this.instantiate(new OP20InitParameters(maxSupply, decimals, name, symbol));
        this._mint(Blockchain.tx.origin, maxSupply);
    }
}

Solidity Comparison

Solidity/EVM OPNet/btc-runtime
contract MyContract class MyContract extends OP_NET
constructor() onDeployment(calldata)
msg.sender Blockchain.tx.sender
tx.origin Blockchain.tx.origin
block.number Blockchain.block.number
mapping(address => uint) AddressMemoryMap + StoredU256
emit Transfer(...) this.emitEvent(new TransferEvent(...))
ERC20 OP20
ERC721 OP721
require(condition, "msg") if (!condition) throw new Revert("msg")

Documentation

Documentation is available in docs/:

Running Tests

npm test

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run tests: npm test
  5. Submit a pull request

See the pull request template for requirements.

Reporting Issues

License

Apache-2.0

Links

About

Assemblyscript btc runtime

Resources

License

Security policy

Stars

Watchers

Forks

Packages

No packages published

Contributors 11