Migrating from legacy

Existing read integrations keep working unchanged. To use v2 features, read from /v2 and write with signed actions.

What's new in v2

AreaLegacy registryRegistry v2
Edit metadataNot possibleCategory tags, trading venues and custom fields through signed issuer actions
Issuer keyFixed foreverRotation, with published key history
AuthorizationSignature only for deletionEvery change signed, hash-chained, nonce-protected, time-limited
Domain proofPer asset (HTTP file or DNS TXT)Same, plus a pubkey-bound proof published once per domain
Contract formatVersion 0, issuer_pubkeyVersion 2 with initial_issuer_pubkey; same precision (0–8) and ticker (3–24) limits as legacy
IconsAll icons in one Base64 map (/icons.json), added and changed by registry adminsIssuers propose icons with a signed request, and admins still approve them. Each approved image gets its own PNG URL that never changes, so a new icon shows up as a new URL in icon.href
Moderation—Admin annotations: featured, delisted, malicious, asset type
HistoryGit commit history of the registry database (asset_registry_db): one commit per registration or deletionAppend-only audit log with a verifiable hash chain
ListingOne large objectSearch with filters, sorting and paging
OperatorsShared credentialsIndividually keyed admins with permissions

What keeps working

All legacy endpoints, at the same paths: POST /, GET /index.json (also served at GET /), GET /:asset_id, GET /icons.json, POST /contract/validate and DELETE /:asset_id.

What behaves differently

  1. v2 assets in legacy listings have version: 2, their key in contract.initial_issuer_pubkey, and no top-level issuer_pubkey. Code that reads issuer_pubkey must handle its absence. For the key that currently controls an asset, read current_issuer_pubkey from GET /v2/assets/:asset_id: initial_issuer_pubkey never changes.
  2. After a key rotation, legacy reads still show the original issuer_pubkey, and the legacy DELETE must be signed with the current key.
  3. Flagged assets aren't hidden. Delisted or malicious assets still appear in every listing and lookup. Only v2 responses carry the flags (admin.delisted, admin.malicious), so check them before showing an asset; legacy endpoints don't show them at all.
  4. v2 deregistration removes the asset from legacy endpoints too.
  5. Stricter input: lower-case ASCII domains, no NUL characters, legacy contracts ≤ 4,096 bytes with ≤ 32 extra fields.
  6. JSON errors (reference), and unknown query parameters are rejected.
  7. Rate limit on registration (30 per minute per IP by default).

What to do

You areRequiredRecommended
Wallet, explorer, exchange (reads)Handle a missing issuer_pubkey; read current_issuer_pubkey and the admin flags from v2 (legacy responses don't carry them); no unknown query parameters or Content-Type on bodiless GETs; parse both error shapesRead /v2/assets/:asset_id; sync with updated_after; use icon.href instead of /icons.json
Issuer with a new asset—Issue with a version 2 contract and register through v2
Libraries & tooling that issue and register assets (e.g. LWK)Nothing for legacy registration (version 0 contracts and POST / keep working). If you read GET /:asset_id, accept version 2 contracts: key in contract.initial_issuer_pubkey, no issuer_pubkey, and issuance_txin/issuance_prevout may be null. Parse JSON errors and handle 429 without blind retries (registration isn't idempotent)Add version 2 contracts with initial_issuer_pubkey, register them through POST /v2/assets, and keep the issuer key signable for later updates. See Libraries that register assets
Issuer with a legacy assetNothing, to keep it as isGet it migrated to update metadata, rotate keys or propose icons
🚧

Migration is admin-only today, and every mainnet asset is still legacy. Until issuer self-migration ships, contact Blockstream to get your asset migrated. Legacy assets without a ticker can't be migrated.


The Liquid Network is a production Bitcoin sidechain built with Elements, supporting confidential transactions, asset issuance and programmable smart contracts.

© 2026 Liquid Network
All rights reserved.

Feedback and Requests

We'd be happy to hear your suggestions on how to improve this site.

Simplicity Forum

Discuss SimplicityHL, tooling and applications on Liquid at community.simplicity-lang.org.

Liquid Dev Community

Community Telegram group where most of the Liquid developers hang out. Go to t.me/liquid_devel to join.