XChain Platform Action - ISSUE
This action creates or updates a TICK.
Wallet issuer flow. The xchain-wallet ships a Manage Token surface (per-token admin page reachable from My Tokens) that wraps the issuer actions:
ISSUE,MINT,DESTROY,DIVIDEND,AIRDROP,BROADCAST, supply/description locks, ownership transfer, dispenser creation, in a guided UI with owner-gate and confirm-prelude steps. The protocol-level fields below are the canonical source; the wallet is one of several clients that can build these transactions.
PARAMS
| Name | Type | Description |
|---|---|---|
VERSION |
String | Format Version |
TICK |
String | Ticker name or Ticker ID |
MAX_SUPPLY |
String | Maximum token supply |
MAX_MINT |
String | Maximum amount of supply a MINT transaction can issue |
DECIMALS |
String | Number of decimal places token should have (max: 18, default: 0) |
DESCRIPTION |
String | Description of token (249 chars max) |
MINT_SUPPLY |
String | Amount of token supply to mint in immediately (default:0) |
TRANSFER |
String | Address to transfer ownership of the TICK to (owner can perform future actions on token) |
TRANSFER_SUPPLY |
String | Address to transfer MINT_SUPPLY to (mint initial supply and transfer to address) |
LOCK_MAX_SUPPLY |
String | Lock MAX_SUPPLY permanently (cannot increase MAX_SUPPLY) |
LOCK_MAX_MINT |
String | Lock MAX_MINT permanently (cannot edit MAX_MINT) |
LOCK_MINT |
String | Lock TICK against MINT command |
LOCK_MINT_SUPPLY |
String | Lock TICK against issuing additional supply via MINT_SUPPLY |
LOCK_DESCRIPTION |
String | Lock TICK against DESCRIPTION changes |
LOCK_SLEEP |
String | Lock TICK against SLEEP command |
LOCK_CALLBACK |
String | Lock TICK against CALLBACK command |
CALLBACK_BLOCK |
String | Enable CALLBACK command after CALLBACK_BLOCK |
CALLBACK_TICK |
String | TICK that users get when CALLBACK command is used |
CALLBACK_AMOUNT |
String | CALLBACK_TICK amount that users get when CALLBACK command is used |
ALLOW_LIST |
String | ACTION_INDEX of a LIST of addresses allowed to interact with this token |
BLOCK_LIST |
String | ACTION_INDEX of a LIST of addresses NOT allowed to interact with this token |
MINT_ADDRESS_MAX |
String | Maximum amount of supply any address can mint via MINT transactions |
MINT_START_BLOCK |
String | BLOCK_INDEX when MINT transactions are allowed (begin mint) |
MINT_STOP_BLOCK |
String | BLOCK_INDEX when MINT transactions are NOT allowed (end mint) |
CONTROLLER |
String | ACTION_INDEX of a deployed contract whose guard gates one ACTION_CLASS of this token (see Controller-Bound Tokens) |
ACTION_CLASS |
String | Which class the binding gates: transfer, trade, burn, mint, stake, or the catch-all all (fallback for any class with no specific binding; most-specific-wins) |
COOLDOWN_BLOCKS |
String | Drop-cooldown committed at bind time: blocks of friction before a later UNBIND takes effect |
UNBIND |
String | 1 drops the live binding for ACTION_CLASS; 0 binds |
MEMO |
String | An optional memo to include |
Formats
Version 0
VERSION|TICK|MAX_SUPPLY|MAX_MINT|DECIMALS|DESCRIPTION|MINT_SUPPLY|TRANSFER|TRANSFER_SUPPLY|LOCK_MAX_SUPPLY|LOCK_MAX_MINT|LOCK_DESCRIPTION|LOCK_SLEEP|LOCK_CALLBACK|CALLBACK_BLOCK|CALLBACK_TICK|CALLBACK_AMOUNT|ALLOW_LIST|BLOCK_LIST|MINT_ADDRESS_MAX|MINT_START_BLOCK|MINT_STOP_BLOCK|LOCK_MINT|LOCK_MINT_SUPPLY|MEMO
Version 1 - Edit DESCRIPTION
VERSION|TICK|DESCRIPTION|MEMO
Version 2 - Edit MINT PARAMS
VERSION|TICK|MAX_MINT|MINT_SUPPLY|TRANSFER_SUPPLY|MINT_ADDRESS_MAX|MINT_START_BLOCK|MINT_STOP_BLOCK|MEMO
Version 3 - Edit LOCK PARAMS
VERSION|TICK|LOCK_MAX_SUPPLY|LOCK_MAX_MINT|LOCK_DESCRIPTION|LOCK_SLEEP|LOCK_CALLBACK|LOCK_MINT|LOCK_MINT_SUPPLY|MEMO
Version 4 - Edit CALLBACK PARAMS
VERSION|TICK|CALLBACK_BLOCK|CALLBACK_TICK|CALLBACK_AMOUNT|MEMO
Version 5 - Edit LIST PARAMS
VERSION|TICK|ALLOW_LIST|BLOCK_LIST|MEMO
Version 6 - Bind/unbind a CONTROLLER for one ACTION_CLASS
VERSION|TICK|CONTROLLER|ACTION_CLASS|COOLDOWN_BLOCKS|UNBIND|MEMO
Examples
ISSUE|0|JDOG
This example issues a JDOG token
ISSUE|0|JDOG|1||||1|||1
This example issues a JDOG token with MAX_SUPPLY set to 1, Mints 1 token via MINT_SUPPLY, and has LOCK_MAX_SUPPLY set to 1 to permanently lock the MAX_SUPPLY
ISSUE|0|JDOG|0|0|0|http://example.com/images/JDOG_icon.png
This example issues a JDOG token with a DESCRIPTION which points to an icon
ISSUE|0|JDOG|0|0|0|http://example.com/images/JDOG_icon.png|0|1ExampleAddressXXXXXXXXXXXXXXXXXXX
This example issues a JDOG token with a DESCRIPTION which points to an icon, and transfers token ownership to 1ExampleAddressXXXXXXXXXXXXXXXXXXX
ISSUE|0|JDOG|1000|1|0
This example issues a JDOG token with a max supply of 1000, and a maximum mint of 1 JDOG per mint
ISSUE|0|JDOG|1000|1|0|BTNS Tokens Are Cool!
This example issues a JDOG token with a max supply of 1000, and a DESCRIPTION of 'BTNS Tokens are Cool!'
ISSUE|0|BRRR|10000000000000000000|10000000000000|0|https://example.com/json/JDOG.json|100
This example issues a BRRR token with a max supply of 1 Quandrillion supply and a maximum mint of 1 Trillion BRRR per mint, associates a JSON file with the token, and immediately mints 100 BRRR to the broadcasting address.
ISSUE|0|TEST|100|1|0||1|1ExampleAddressXXXXXXXXXXXXXXXXXXX|1ExampleAddressXXXXXXXXXXXXXXXXXXX
This example issues a TEST token with a max supply of 100, and a maximum mint of 1 TEST per mint. This also mints 1 TEST token, and transfers ownership AND initial token supply to 1ExampleAddressXXXXXXXXXXXXXXXXXXX
Rules
TICKmust be 1 to 250 characters in lengthTICKcharacters allowed are :- Alphanumeric characters : a-zA-Z0-9
- Special characters: ~!@#$%^&*()_±={}[]:<>.?
TICKcharacters NOT allowed are :- pipe
|(used as field separator) - semicolon
;(used as command separator) - backslash
\(reserved) - slash
/(used as directory indicator) ^(caret) cannot be used as first character in aTICKname (used as ticker id indicator)
- pipe
- Period
.is allowed inside aTICKname as the parent/child separator (e.g.JDOG.SUB1), but aTICKmay not begin or end with a period - First
ISSUEwithvalidstatus will be the owner of theTICK - Additional
ISSUEtransactions after first validISSUE, will be considered invalid and ignored, unless broadcast fromTICKowners address DECIMALScan not be changed afterTICKsupply is issued and/or mintedMAX_SUPPLYmax value is 1,000,000,000,000,000,000,000 (1 Sextillion)MAX_SUPPLYcan not be set below existing supplyLOCK_MAX_SUPPLYcan only be set to1when the token’sMAX_SUPPLYis set (MIN_TOKEN_SUPPLYor greater), declared in the sameISSUEor already on the token record. Minted supply is NOT required: a fair-mint token may declare itsMAX_SUPPLYand permanently lock it at issuance, before any supply exists. SettingLOCK_MAX_SUPPLYwith noMAX_SUPPLYdeclared is invalid.
Notes
ISSUETICKwithMAX_SUPPLYandMINT_SUPPLYset to any non0value, to mint supply untilMAX_SUPPLYis reached (owner can mint beyondMAX_MINT)ISSUETICKwithMAX_SUPPLYandMAX_MINTset to any non0value, to enable user minting (fair minting)ISSUETICKwithLOCK_MAX_SUPPLYset to1to permanently lockMAX_SUPPLYISSUETICKwithLOCK_MAX_MINTset to1to permanently lockMAX_MINTISSUETICKwithLOCK_MINTset to1to permanently prevent use of theMINTcommandISSUETICKwithLOCK_SLEEPset to1to permanently prevent use of theSLEEPcommandISSUETICKwithLOCK_CALLBACKset to1to permanently prevent use of theCALLBACKcommandDESCRIPTIONcan contain a URL to a an icon to use for this token (48x48 standard size)DESCRIPTIONcan contain a URL to a JSON file with additional informationDESCRIPTIONcan NOT contain any pipe|or semi-colon;characters, as these are reservedCALLBACK_BLOCK,CALLBACK_TICK, andCALLBACK_AMOUNTcan be edited viaISSUEaction ifTICKsupply is NOT distributed- Note on BRC20/SRC20 familiarity: In BRC20 and SRC20, a
DEPLOYcommand defines a new token. In XChain,ISSUEfills that role. XChain also has a separateDEPLOYaction, but that action deploys a smart contract to the XChain VM; it is not an alias forISSUEand does not create a token. Clients migrating from BRC20/SRC20 should useISSUEwhere they previously usedDEPLOY. - By default any
ADDRESScan interact with aTICK, useALLOW_LISTandBLOCK_LISTto change this behavior CONTROLLERbinds theTICKto a deployed contract (itsACTION_INDEX) on the same chain for oneACTION_CLASS(transfer/trade/burn/…). Once bound, the indexer runs that contract’sguardmethod before guarded native actions of that class settle: enabling enforced royalties, transfer policies, and other programmable rules. The contract must exist and be active when bound; a missing/throwingguardis fail-closed (denies the action). Bindings are append-only (use version6to bind or, withUNBIND=1, to drop one); theCOOLDOWN_BLOCKScommitted at bind time is the friction on a later unbind, so holders can gauge how durable the rules are. Full semantics: Controller-Bound TokensMINT_ADDRESS_MAXcan be used to limit the maximumTICKAMOUNTthat a single address canMINTMINT_START_BLOCKandMINT_STOP_BLOCKcan be used to determine period(s) whenMINTtransactions are allowedMIN_TOKEN_SUPPLYvalue is 0.000000000000000001- Use
^(caret) as prefix when passingTICK_IDforTICKfields (^1234 =TICK_ID1234) - Use
^(caret) as prefix when passing anADDRESS_IDfor address fields (TRANSFER,TRANSFER_SUPPLY) (^57 =ADDRESS_ID57); see Index ID References ISSUEwithDECIMALS0andLOCK_MAX_SUPPLY1is the standard non-fungible token (NFT) pattern: uniques, editions, and parent/child collections are defined in the NFT Standard
Copyright © 2025–2026 Dankest, LLC
Based on XChain Platform by Dankest, LLC – https://dankest.llc
Licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-or-later) with a commercial license available for proprietary use.
You may use, modify, and distribute this material under the terms of the License. See LICENSE and NOTICE for full terms. See the licensing overview.