Reissue and burn
Reissue increases asset supply. Burn decreases asset supply. The page explains prerequisites, PSET handling, supply notes, and error scenarios.
Reissue increases asset supply. Burn decreases it. Both follow the standard PSET lifecycle: request -> sign -> cosign -> broadcast.
Reissue (increase supply)
Reissuance mints additional tokens of an existing asset. It requires the reissuance token that was created during the original issuance.
Prerequisites
- The wallet holds the reissuance token for this asset.
- The asset is not locked.
- The reissuance token must be unlocked by tokenId (see Asset Unlock)
- The wallet is not locked.
- The wallet has LBTC for fees.
Request the reissue PSET
import {
AmpReissueAssetRequestSchema,
AmpActions,
} from '@blockstream/amp-registry';
const reissueReq = AmpReissueAssetRequestSchema.parse({
action: 'add',
resource: `/amp/assets/${assetId}/reissue`,
details: {
wid: walletHoldingReissuanceToken,
satoshi_to_reissue: 500_000,
},
});
const reissueResponse = await broadcastRequest<
typeof AmpActions.reissue
>(reissueReq, broadcaster);
if (reissueResponse.status !== 'success') {
throw new Error(
`Reissue failed: ec=${reissueResponse.error_code} message=${reissueResponse.message}`
);
}
const pset = reissueResponse.details.pset;Complete the PSET flow
import {
AmpSignPsetRequestSchema,
AmpBroadcastRequestSchema,
} from '@blockstream/amp-registry';
// Sign locally
const signedPset = signWithLwk(pset);
// Cosign
const cosigned = await broadcastRequest<
typeof AmpActions.sign
>(
AmpSignPsetRequestSchema.parse({
action: 'add',
resource: '/amp/wallets/sign',
details: { pset: signedPset.toString() },
}),
broadcaster,
);
// Broadcast
const broadcast = await broadcastRequest<
typeof AmpActions.broadcast
>(
AmpBroadcastRequestSchema.parse({
action: 'add',
resource: '/amp/wallets/broadcast',
details: { pset: cosigned.details.pset },
}),
broadcaster,
);
const txid = broadcast.details.txid;The newly minted tokens are deposited in the same wallet that holds the reissuance token.
Burn (decrease supply)
Burning permanently destroys tokens, reducing the total supply. The destroyed tokens are provably unspendable on chain.
Prerequisites
- The wallet holds the tokens to burn.
- The asset is not locked.
- The wallet is not locked.
- If restrictions are set,
canBurnmust betruefor this wallet's restriction group. - The wallet has LBTC for fees.
Request the burn PSET
import {
AmpBurnAssetRequestSchema,
} from '@blockstream/amp-registry';
const burnReq = AmpBurnAssetRequestSchema.parse({
action: 'add',
resource: `/amp/assets/${assetId}/burn`,
details: {
wid: walletHoldingTokens,
satoshi: 10_000,
},
});
const burnResponse = await broadcastRequest<
typeof AmpActions.burn
>(burnReq, broadcaster);
if (burnResponse.status !== 'success') {
throw new Error(
`Burn failed: ec=${burnResponse.error_code} message=${burnResponse.message}`
);
}
const pset = burnResponse.details.pset;Complete the PSET flow
Same as reissue: sign, cosign, broadcast:
const signedPset = signWithLwk(pset);
const cosigned = await broadcastRequest<
typeof AmpActions.sign
>(
AmpSignPsetRequestSchema.parse({
action: 'add',
resource: '/amp/wallets/sign',
details: { pset: signedPset.toString() },
}),
broadcaster,
);
const broadcast = await broadcastRequest<
typeof AmpActions.broadcast
>(
AmpBroadcastRequestSchema.parse({
action: 'add',
resource: '/amp/wallets/broadcast',
details: { pset: cosigned.details.pset },
}),
broadcaster,
);
const txid = broadcast.details.txid;Supply management notes
- Reissue is only possible if a reissuance token exists. If you created the asset with
satoshi_token: 0, the supply is permanently fixed. - Burns are irreversible. Once broadcast and confirmed, the tokens cannot be recovered.
- Track supply changes. Use the balance and UTXO endpoints to verify supply after each operation.
- Reissuance tokens can be transferred. If you move the reissuance token to a different wallet, reissue operations must be initiated from that wallet.
Error scenarios
| Error | Cause | Resolution |
|---|---|---|
| No reissuance token | Wallet doesn't hold the reissuance token | Check which wallet holds it |
| Asset locked | Asset is in locked state | Unlock the asset first |
| Wallet locked | Wallet is in locked state | Unlock the wallet first |
| canBurn is false | Restriction group prohibits burning | Update restriction to allow burn |
| Insufficient balance | Not enough tokens to burn or LBTC for fees | Check balances |
Next steps
- Lock and Unlock: freeze assets and wallets
- Monitoring: verify supply changes
- PSET Lifecycle: understand the signing pattern
Restriction management
Restrictions control asset destinations and burn permissions. The page explains restriction concepts, queries, updates, enforcement, and operational guidance.
Lock and unlock
Locks provide emergency and compliance controls for assets, wallets, and UTXOs. The page explains lock scopes, operations, use cases, and operational guidance.