Blockstream Enterprise Custody SDK
AmpTokenization

Asset Issuance

How to issue a Liquid asset, understand reissuance tokens, and model supply-management choices.

Complete Setup and Installation first.

This guide uses:

You also need:

  • an AMP wallet on Liquid
  • enough L-BTC to pay transaction fees

What this operation does

Asset issuance creates the first supply of a Liquid asset and optionally creates reissuance tokens that let you mint more supply later.

The two core supply models are:

  • fixed supply: set reissue_amount to 0
  • reissuable supply: set reissue_amount above 0

Issue a new asset

import { v4 as uuidv4 } from 'uuid'

const issueResult = await broadcastRequest({
  action: 'add',
  resource: `/wallets/${walletId}/spend-requests`,
  details: {
    id: uuidv4(),
    wallet_id: walletId,
    tx_type: 'issue',
    request: {
      issue_amount: 100000,
      reissue_amount: 1,
      coingecko_id: 'bitcoin',
      contract: {
        name: 'My Token',
        ticker: 'MTK',
        domain: 'mytoken.example.com',
        version: 0,
        precision: 8,
      },
    },
  },
})

Key fields

FieldMeaning
issue_amountInitial supply to create
reissue_amountNumber of reissuance tokens to create
contract.nameHuman-readable asset name
contract.tickerAsset symbol
contract.domainVerification domain
contract.precisionNumber of decimal places, from 0 to 8

Understanding reissuance

If reissue_amount is greater than 0, the issuance also creates reissuance authority that can later mint more supply.

Supply modelConfigurationResult
Fixed supplyreissue_amount: 0No later minting path
Reissuablereissue_amount: 1One active reissuance token
Split authorityreissue_amount: >1Reissuance authority can be distributed across wallets

Reissue more supply

const reissueResult = await broadcastRequest({
  action: 'add',
  resource: `/wallets/${walletId}/spend-requests`,
  details: {
    id: uuidv4(),
    wallet_id: walletId,
    tx_type: 'reissue',
    request: {
      asset_id: assetId,
      amount: 25000,
    },
  },
})

Use the asset ID when reissuing. Do not pass the reissuance token ID in the asset_id field.

Transfer reissuance authority

The wallet holding the reissuance token controls future minting. Moving that token moves minting authority.

await broadcastRequest({
  action: 'add',
  resource: `/wallets/${issuerWalletId}/spend-requests`,
  details: {
    id: uuidv4(),
    wallet_id: issuerWalletId,
    tx_type: 'send',
    request: {
      asset_id: reissuanceTokenId,
      recipients: [
        {
          amount: 1,
          recipient: { type: 'wallet', value: treasuryWalletId },
        },
      ],
    },
  },
})

On this page