OP_NET Ecosystem Docs
OPSTAKE · Motoswap · MotoChef · OPScan · OP WALLET — the complete Bitcoin L1 DeFi stack. No bridges. No wrapped tokens. No Ethereum. BTC is gas.
Ecosystem At A Glance
Quick Links
OPSTAKE — BTC Staking
Lock native BTC on Bitcoin L1, earn auto-compounded yield up to 28.4% APY. Powered by OP_NET smart contracts. MotoChef BTC Staking module.
Getting Started
1. Install OP WALLET from the Chrome Web Store. 2. Get testnet BTC from the faucet at opnet-testnet.gitbook.io ↗. 3. Click Connect Wallet on this page. 4. Select your lock tier and click Stake Now.
Yield Tiers
| Lock Period | Base APY | Compound Boost | Effective APY | Min Stake |
| 7 Days | 8.0% | +0.2% | 8.2% | 0.001 BTC |
| 30 Days | 14.0% | +0.6% | 14.6% | 0.001 BTC |
| 90 Days | 21.0% | +1.2% | 22.2% | 0.001 BTC |
| 180 Days | 28.4% | +2.4% | 30.8% | 0.001 BTC |
Auto-Compound Mechanics
When enabled, the MotoChef smart contract reinvests your earned BTC rewards every 24 hours back into your staking position automatically. No action or gas required. Over a 180-day period, daily compounding transforms a 28.4% simple APY into ~30.8% effective annual yield.
Transaction Flow
Every stake transaction is pre-simulated via a read-only JSONRpcProvider before being sent to your wallet for signing. If the simulation reverts, you never see a signing request. All signing uses null signers — the frontend never holds private keys.
Early Exit & Fees
| Action | Fee | Notes |
| Stake | Network gas only (satoshis) | Paid in BTC to Bitcoin miners |
| Early unstake | 2.5% of principal | Accrued rewards still claimable |
| Normal unlock | 0% | Full principal + rewards returned |
| Claim rewards | Network gas only | Can claim without unstaking |
View Your Transaction
After staking, your transaction hash is linkable directly on OPScan. The URL format is:
https://opscan.org/tx/{txhash}
// Example (64-char hex transaction ID)
https://opscan.org/tx/a1b2c3d4e5f6...7890abcdef1234
Motoswap — Bitcoin DEX
The first AMM decentralized exchange natively on Bitcoin Layer 1. Swap OP-20 tokens, create liquidity pools, earn trading fees — all without bridges or Ethereum.
What is Motoswap?
Motoswap is the first automated market maker (AMM) DEX built directly on Bitcoin L1 using OP_NET smart contracts. It enables permissionless token swaps between any OP-20 tokens (Bitcoin's equivalent of ERC-20) and native BTC via NativeSwap. The protocol is modeled after Uniswap V2 architecture, adapted for Bitcoin's UTXO model.
Key Features
| Feature | Description |
| OP-20 Swap | Swap any two OP-20 tokens via constant-product AMM pools |
| NativeSwap | Swap native BTC directly with OP-20 tokens — no wrapping |
| Liquidity Pools | Create, add, and remove LP positions. Earn 0.3% fee on every swap |
| LP Tokens | Receive LP tokens representing your pool share, stakeable in MotoChef |
| MOTO Token | Native governance/utility token of the Motoswap ecosystem |
MotoChef Yield Farming
MotoChef (farm.motoswap.org) is the yield farming aggregator for the Motoswap ecosystem. Deposit LP tokens from Motoswap pools and MOTO tokens to earn farming rewards. Supports both MOTO staking and BTC staking pools.
$MOTO Token
MOTO is the native OP-20 token of Motoswap, available on testnet. It can be obtained from the official faucet and used for governance, staking in MotoChef, and liquidity provision. Get testnet MOTO at opnet-testnet.gitbook.io ↗.
Transaction URLs
Motoswap and MotoChef both provide OPScan links after each transaction. You can also manually look up any transaction:
// Swap transaction on OPScan
https://opscan.org/tx/{64-char-txhash}
// Address / wallet view
https://opscan.org/address/{bitcoin-address}
// Contract view
https://opscan.org/contract/{contract-address}
OP_NET Protocol
The first Consensus Layer on Bitcoin L1 that brings fully expressive smart contracts. Uses WASM execution, Taproot/SegWit/Legacy, UTXO model. No sidechains. No forks. BTC is gas. Mainnet launches March 17, 2026.
How OP_NET Works
OP_NET uses Bitcoin's Tapscript to embed WASM bytecode on-chain. Smart contract logic runs in a WebAssembly VM off-chain and the results are committed back into standard Bitcoin transactions using Taproot inscriptions. Every UTXO can act as a contract state object. No protocol changes or forks required — it works with existing Bitcoin Core.
Key Repos (github.com/btc-vision)
| Repo | Description | Stars |
| example-contracts | Example OP-20 token contracts for OP_NET (TypeScript) | 196 ⭐ |
| opwallet | OP WALLET browser extension — Bitcoin-native + MLDSA | 36 ⭐ |
| opnet-node | Decentralized OP_NET node (Taproot/SegWit/Legacy) | 19 ⭐ |
| opnet | TypeScript SDK — JSONRpcProvider, getContract, OP-20 ABI | 16 ⭐ |
| btc-runtime | AssemblyScript BTC runtime for contract development | 16 ⭐ |
| op-vm | Rust WASM virtual machine for OP_NET execution | 7 ⭐ |
Network Endpoints
| Network | RPC Endpoint | Explorer |
| Testnet | https://testnet.opnet.org | opscan.org ↗ |
| Mainnet | https://mainnet.opnet.org | opscan.org ↗ |
| Regtest | https://regtest.opnet.org | Local only |
OP WALLET — Security
OP WALLET is a fork of UniSat Wallet extended with OP_NET-native capabilities: MLDSA quantum-resistant signatures (Module-Lattice DSA), full OP-20 token support, NativeSwap integration, and Bitcoin L1 smart contract interaction. Install from: Chrome Web Store ↗
Developer API
TypeScript SDK, JSONRpcProvider, contract interaction patterns, and transaction URL references for OPSTAKE and the OP_NET ecosystem.
Install SDK
npm install opnet @btc-vision/transaction @btc-vision/bitcoin
Provider Setup
import { JSONRpcProvider, getContract, OP_20_ABI } from 'opnet';
import { Network } from '@btc-vision/bitcoin';
// Two separate providers — reads vs simulation
const provider = new JSONRpcProvider('https://testnet.opnet.org', Network.Testnet);
const simProvider = new JSONRpcProvider('https://testnet.opnet.org', Network.Testnet);
Stake Transaction
const stakeContract = getContract(OPSTAKE_ADDRESS, STAKE_ABI, provider, network, userAddress);
// 1. Simulate (separate provider — never wallet)
const sim = await simProvider.simulateTransaction({
to: OPSTAKE_ADDRESS,
data: stakeContract.interface.encodeFunctionData('stake', [
amountSatoshis, // bigint — BTC in satoshis
lockDays, // number — 7 | 30 | 90 | 180
autoCompound // boolean
]),
signer: null, mldsaSigner: null
});
if (sim.revert) throw new Error(`Revert: ${sim.revertReason}`);
// 2. Sign & broadcast via OP WALLET (null signers)
const tx = await stakeContract.stake(
amountSatoshis, lockDays, autoCompound,
{ signer: null, mldsaSigner: null, feeRate: 10 }
);
console.log('Tx hash:', tx.txid);
console.log('OPScan:', `https://opscan.org/tx/${tx.txid}`);
Transaction URL Format
// Transaction detail page
https://opscan.org/tx/{64-hex-char-txhash}
// Address / wallet page
https://opscan.org/address/{p2tr-or-p2wpkh-address}
// Contract page
https://opscan.org/contract/{contract-address}
// Token page
https://opscan.org/token/{op20-token-address}
OP-20 Token Interaction
import { getContract, IOP20Contract, OP_20_ABI } from 'opnet';
const token = getContract<IOP20Contract>(
TOKEN_ADDRESS, OP_20_ABI, provider, network, myAddress
);
const balance = await token.balanceOf(myAddress);
const totalSupply = await token.totalSupply();
// Transfer (with simulation)
const transfer = await token.transfer(recipientAddress, 1000n);
const tx = await transfer.sendTransaction({
signer: null, mldsaSigner: null,
refundTo: myAddress,
maximumAllowedSatToSpend: 5000n,
feeRate: 10, network
});
Motoswap Swap
// Swap tokenA → tokenB via Motoswap AMM
const router = getContract(MOTOSWAP_ROUTER, ROUTER_ABI, provider, network, myAddress);
const path = [tokenA_address, tokenB_address];
const amountIn = 100_000n; // satoshis equivalent
const swap = await router.swapExactTokensForTokens(
amountIn, minAmountOut, path, myAddress, deadline,
{ signer: null, mldsaSigner: null, feeRate: 10, network }
);
console.log('Swap tx:', `https://opscan.org/tx/${swap.txid}`);
Security & Audit
OP_NET and OPSTAKE are built with security-first principles: null signers, pre-simulation, MLDSA quantum resistance, IPFS deployment, and open-source code for public verification.
Security Model
| Property | Implementation | Status |
| Null Signers | { signer: null, mldsaSigner: null } | ✓ Active |
| Pre-Simulation | Separate JSONRpcProvider — reverts caught before signing | ✓ Active |
| MLDSA / ML-DSA | Quantum-resistant signatures in OP WALLET | ✓ Active |
| No Private Key Storage | Frontend never handles, stores, or transmits keys | ✓ Active |
| IPFS Deployment | Interface served from IPFS, accessible via .btc domains | ✓ Active |
| Separated Providers | Read provider ≠ signing provider — prevents read poisoning | ✓ Active |
| No Bridges | Native Bitcoin L1 — no cross-chain attack surface | ✓ By Design |
| Open Source | All contracts and frontend code on GitHub | ✓ Public |
Audit Status
The OP_NET protocol and OPSTAKE contracts are open-source and publicly verifiable. As the protocol is currently in testnet phase prior to Mainnet launch (March 17, 2026), formal third-party audits are in progress. Smart contract source code is available for community review on GitHub.
Verify Yourself
All OP_NET and OPSTAKE code is open-source. You can independently verify every transaction on OPScan, review smart contract bytecode, and run a full OP_NET node to independently validate state.
# Clone and review OP_NET node
git clone https://github.com/btc-vision/opnet-node
# Review example smart contracts
git clone https://github.com/btc-vision/example-contracts
# Review WASM runtime
git clone https://github.com/btc-vision/btc-runtime
# Run your own OP_NET node
npm install && npm run start
Responsible Disclosure
Found a security vulnerability? Please report it responsibly via Discord (discord.gg/3KQKVcjE) or open a GitHub issue at github.com/btc-vision. Do not publicly disclose exploits before a fix is deployed.