Skip to main content

Alkanes Commands

The alkanes namespace provides operations for the Alkanes protocol including contract execution, token queries, AMM swaps, and liquidity pool management.

Example commands

Get metadata for an alkane token (name, symbol, total supply):

$ alkanes-cli -p mainnet alkanes reflect-alkane 2:0

Get all AMM pools from the factory contract:

$ alkanes-cli -p mainnet alkanes get-all-pools

Get pool details for pools 0-9 using the experimental AssemblyScript WASM path (tx-script):

$ alkanes-cli -p mainnet alkanes get-all-pools --pool-details --experimental-asm --range 0-9

Commands Overview

  • execute: Execute an alkanes transaction with protostones
  • simulate: Simulate a contract call without broadcasting
  • trace: Trace an alkanes transaction
  • inspect: Inspect a contract (disassemble, fuzz, metadata)
  • tx-script: Execute a tx-script with WASM bytecode
  • getbalance: Get alkane token balances for an address
  • spendables: Get spendable outpoints for an address
  • reflect-alkane: Get metadata for an alkane (name, symbol, supply)
  • reflect-alkane-range: Reflect metadata for a range of alkanes
  • getbytecode: Get the bytecode for an alkane contract
  • wrap-btc: Wrap BTC to frBTC
  • unwrap: Get pending unwraps
  • get-all-pools: Get all AMM pools
  • all-pools-details: Get detailed pool information
  • pool-details: Get details for a specific pool
  • init-pool: Initialize a new liquidity pool
  • swap: Execute a swap on the AMM
  • sequence: Get the sequence for an outpoint
  • traceblock: Trace a block
  • backtest: Backtest a transaction

alkanes execute

Execute an alkanes transaction with one or more protostones.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
--wallet-file ~/.alkanes/wallet.json \
--passphrase "your-passphrase" \
alkanes execute <PROTOSTONES> \
--to <RECIPIENT> \
--from <SOURCE> \
--fee-rate 10 \
-y

Arguments:

  • <PROTOSTONES>: Protostone specifications

Options:

  • --inputs <INPUTS>: Input requirements (format: B:amount, B:amount:vN, block:tx:amount)
  • --to <TO>: Recipient addresses
  • --from <FROM>: Source addresses for UTXOs
  • --change <CHANGE>: Change address for BTC
  • --alkanes-change <ALKANES_CHANGE>: Change address for unwanted alkanes
  • --fee-rate <FEE_RATE>: Fee rate in sat/vB
  • --envelope <ENVELOPE>: Path to envelope file (for contract deployment)
  • --raw: Show raw JSON output
  • --trace: Enable transaction tracing
  • --mine: Mine a block after broadcasting (regtest only)
  • -y, --auto-confirm: Auto-confirm the transaction

alkanes simulate

Simulate an alkanes contract call without broadcasting.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes simulate 2:0:99 \
--inputs "2:1:1000,32:0:5000"

Arguments:

  • <ALKANE_ID>: Alkane ID with opcode (format: block:tx:opcode)

Options:

  • --inputs <INPUTS>: Input alkanes as comma-separated triplets (e.g., 2:1:1,2:2:100)
  • --height <HEIGHT>: Block height for simulation
  • --block <BLOCK>: Block hex data (0x prefixed)
  • --transaction <TRANSACTION>: Transaction hex data (0x prefixed)
  • --envelope <ENVELOPE>: Path to WASM file to pack into witness
  • --pointer <POINTER>: Pointer value (default: 0)
  • --txindex <TXINDEX>: Transaction index (default: 1)
  • --refund <REFUND>: Refund pointer (default: 0)
  • --block-tag <BLOCK_TAG>: Block tag (e.g., "latest" or height)
  • --raw: Show raw JSON output

alkanes trace

Trace an alkanes transaction to see execution details.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes trace <TXID>:<VOUT>

Arguments:

  • <OUTPOINT>: The transaction outpoint to trace

Options:

  • --raw: Show raw JSON output

alkanes inspect

Inspect an alkanes contract for debugging and analysis.

# Disassemble bytecode
alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes inspect 2:0 --disasm

# Show metadata
alkanes-cli alkanes inspect 2:0 --meta

# Fuzz contract with opcode range
alkanes-cli alkanes inspect 2:0 --fuzz --fuzz-ranges "99-110"

# Get code hash
alkanes-cli alkanes inspect 2:0 --codehash

Arguments:

  • <OUTPOINT>: The contract outpoint

Options:

  • --disasm: Disassemble the contract bytecode
  • --fuzz: Fuzz the contract with a range of opcodes
  • --fuzz-ranges <RANGES>: Opcode ranges to fuzz
  • --meta: Show contract metadata
  • --codehash: Show contract code hash
  • --raw: Show raw JSON output

alkanes reflect-alkane

Get metadata for an alkane token by calling standard view opcodes.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes reflect-alkane 2:0

Output:

Alkane Metadata for 2:0
═══════════════════════
Name: DIESEL
Symbol: DIESEL
Total Supply: 5050000000

Arguments:

  • <ALKANE_ID>: Alkane ID (format: block:tx)

Options:

  • --concurrency <N>: Max concurrent RPC calls (default: 30)
  • --raw: Show raw JSON output

alkanes getbalance

Get alkane token balances for an address.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes getbalance bc1p...

Arguments:

  • [ADDRESS]: The address to query (uses wallet address if not provided)

Options:

  • --raw: Show raw JSON output

alkanes spendables

Get spendable alkane outpoints for an address.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes spendables bc1p...

alkanes wrap-btc

Wrap BTC to frBTC and lock in vault.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
--wallet-file ~/.alkanes/wallet.json \
--passphrase "your-passphrase" \
alkanes wrap-btc 100000 \
--to bc1p... \
--fee-rate 10 \
-y

Arguments:

  • <AMOUNT>: Amount of BTC to wrap (in satoshis)

Options:

  • --to <TO>: Address to receive frBTC tokens (required)
  • --from <FROM>: Addresses to source UTXOs from
  • --change <CHANGE>: Change address
  • --fee-rate <FEE_RATE>: Fee rate in sat/vB
  • --raw: Show raw JSON output
  • --trace: Enable transaction tracing
  • --mine: Mine a block after broadcasting (regtest only)
  • -y, --auto-confirm: Auto-confirm the transaction

alkanes swap

Execute a swap on the AMM.

# Swap DIESEL for frBTC
alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
--wallet-file ~/.alkanes/wallet.json \
--passphrase "your-passphrase" \
alkanes swap \
--path "2:0,32:0" \
--input 1000000 \
--slippage 5.0 \
--auto-confirm

Options:

  • --path <PATH>: Swap path as comma-separated alkane IDs (e.g., 2:0,32:0 for DIESEL->frBTC)
  • --input <INPUT>: Input token amount (required)
  • --minimum-output <AMOUNT>: Minimum output (overrides slippage)
  • --slippage <PERCENT>: Slippage percentage (default: 5.0%)
  • --expires <HEIGHT>: Expiry block height (default: current + 100)
  • --to <TO>: Recipient address (default: p2tr:0)
  • --from <FROM>: Sender address (default: p2tr:0)
  • --change <CHANGE>: Change address
  • --fee-rate <FEE_RATE>: Fee rate in sat/vB
  • --factory <FACTORY>: Factory ID for path optimization (default: 4:65522)
  • --no-optimize: Skip path optimization
  • --trace: Show trace after confirmation
  • --mine: Mine a block after broadcasting (regtest only)
  • --auto-confirm: Auto-confirm without prompting

alkanes init-pool

Initialize a new liquidity pool.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
--wallet-file ~/.alkanes/wallet.json \
--passphrase "your-passphrase" \
alkanes init-pool \
--pair "2:0,32:0" \
--liquidity "300000000:50000" \
--to p2tr:0 \
--from p2tr:0 \
--auto-confirm

Options:

  • --pair <PAIR>: Token pair (format: BLOCK:TX,BLOCK:TX)
  • --liquidity <LIQUIDITY>: Initial liquidity (format: AMOUNT0:AMOUNT1)
  • --to <TO>: Recipient address identifier (e.g., p2tr:0)
  • --from <FROM>: Sender address identifier
  • --change <CHANGE>: Change address
  • --minimum <MINIMUM>: Minimum LP tokens to receive
  • --fee-rate <FEE_RATE>: Fee rate in sat/vB
  • --factory <FACTORY>: Factory ID (default: 4:1)
  • --trace: Show trace after confirmation
  • --auto-confirm: Auto-confirm without prompting

alkanes get-all-pools

Get all pools from an AMM factory contract.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes get-all-pools

Uses factory 4:65522 by default.

alkanes pool-details

Get details for a specific liquidity pool.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes pool-details 2:3

alkanes get-all-pools --experimental-asm --pool-details

Get pool details using the experimental AssemblyScript WASM approach. This uses tx-script execution with embedded WASM binaries to batch multiple pool detail queries into efficient RPC calls.

# Fetch all pools with details (batched)
alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes get-all-pools --experimental-asm --pool-details

# Fetch a specific range of pools (single chunk)
alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes get-all-pools --experimental-asm --pool-details --range 0-9

How it works:

  1. Step 1: Calls tx-script with the embedded get-all-pools WASM to get the total pool count
  2. Step 2: Calls tx-script with the get-all-pools-details WASM to fetch details for a range of pools in a single RPC call

Response format:

{
"total": 142,
"start": 0,
"end": 9,
"count": 10,
"pools": [
{
"pool_id_block": 2,
"pool_id_tx": 53199,
"details": {
"token_a_block": 2,
"token_a_tx": 0,
"token_b_block": 2,
"token_b_tx": 16,
"reserve_a": "79785789299",
"reserve_b": "2835905850298579283",
"total_supply": "474859903703873",
"pool_name": "DIESEL / METHANE LP"
}
}
]
}

Options:

  • --experimental-asm: Use AssemblyScript WASM for batched queries
  • --pool-details: Include full pool details (reserves, tokens, LP supply)
  • --range <START>-<END>: Pool index range to fetch (default: all pools)
  • --chunk-size <SIZE>: Pools per batch when fetching all (default: 20)
  • --factory <FACTORY>: Factory ID (default: 4:65522)

alkanes tx-script

Execute a tx-script with WASM bytecode.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes tx-script \
--envelope /path/to/script.wasm \
--inputs "1,2,3"

Options:

  • --envelope <ENVELOPE>: Path to WASM file (required)
  • --inputs <INPUTS>: Cellpack inputs as comma-separated u128 values
  • --block-tag <BLOCK_TAG>: Block tag (e.g., "latest" or height)
  • --raw: Show raw JSON output

alkanes getbytecode

Get the bytecode for an alkane contract.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes getbytecode 2:0

alkanes unwrap

Get pending unwraps from the protocol.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes unwrap

alkanes backtest

Backtest a transaction by simulating it in a block.

alkanes-cli -p mainnet \
--jsonrpc-url https://mainnet.subfrost.io/v4/jsonrpc \
alkanes backtest <TX_HEX>

Next Steps