Skip to main content

Blaze v2

Live since 2026-10-02, alongside v1

Blaze v2 is on mainnet. Every new subnet uses it, and v1 keeps working for every existing balance and signed order. Sources: blaze-v2.clar, x-multihop-v2.clar and the design notes.

ContractWhat it is
SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.blaze-v2The verifier
SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.x-multihop-v2The swap router for subnets on either version. It pays only the signer
SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.charisma-token-subnet-v2CHA on Blaze v2
SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.charisma-sublink-v2Moves CHA in and out of the v2 subnet (0x05 / 0x06)
SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.welsh-token-subnet-v2WELSH on Blaze v2
SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.welsh-sublink-v2Moves WELSH in and out of the v2 subnet
SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.sbtc-token-subnet-v2sBTC on Blaze v2
SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.sbtc-sublink-v2Moves sBTC in and out of the v2 subnet
SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.stx-subnet-v2STX on Blaze v2. STX isn't a SIP-010 token, so deposits and withdrawals use stx-transfer?; everything signed inside works like any other subnet
SP2ZNGJ85ENDY6QRHQ5P2D4FXKGZWCKTB2T0Z55KS.stx-sublink-v2Moves STX in and out of the STX subnet

CHA, WELSH and sBTC hold most of the money in subnets, so they moved first. STX is new to Blaze, and on v2 from day one, so anyone who just holds STX can set a triggered swap without leaving it. Every other subnet stays on v1 and keeps working. Its owner can deploy a v2 subnet and sublink from Launchpad.

What changed​

v1v2
What you sign{contract, intent, opcode, amount, target, uuid}The same tuple, under domain version v2.0
Replay protectionOne global set of uuids, written before the signature is checked. Anyone could burn your uuid with a junk signatureKeyed by signer and uuid, written after the signature checks out
Cancel for goodSpend your uuid through executerevoke(uuid), called directly from your wallet
Bearer notesThe note is a signature and the payout address isn't signed, so a mempool watcher can copy it and pay itselfThe note holds its own key, which signs the payout address. A copy can't be redirected
checkcheck(uuid)check(signer, uuid)

For apps, the only signing change is the domain version. blaze-sdk picks it from the subnet: blazeVersionOf(subnet) reads which verifier the subnet calls, and every signing and recovery helper follows it.

Bearer notes: paper cash​

Print a note's secret under a scratch-off, hand the paper to anyone, and whoever holds it redeems to any address they choose.

Change to, and the claim recovers a different note address, so the issuer recovers as a stranger with no balance and nothing moves. The note key never goes on-chain. The burned issuer key is the escrow: once it's gone, the batch's balance can only leave through notes.

Moving from v1​

Nobody can move your tokens without your signature, so the move can't be automatic. It's built to be effortless instead. Here's CHA:

WELSH and sBTC take the same path: welsh-sublink → welsh-sublink-v2, and blaze-bitcoin → sbtc-sublink-v2.

  1. New subnets are v2. Launchpad generates every subnet against blaze-v2.
  2. One balance. Apps show your v1 and v2 balance of each token as one number.
  3. Old first, new in. Spending uses your v1 balance first, and deposits land in v2, so v1 drains through normal use.
  4. One-tap upgrade. The diagram above is an ordinary swap through x-multihop-v2: one free signature, and the solver pays the fee.
  5. v1 never switches off. The contracts can't change, and apps keep supporting v1 balances for as long as they exist.

x-multihop-v2 accepts a signature that recovers to the payout address under either verifier. The subnet then checks it again under its own version, so a v2 signature can never move a v1 balance, or the other way round.