Token Operations
Five operations move value, and all of them go through governance (see Governance & Proposals). None can execute without meeting the account's approval threshold.
Mint
Creates new tokens into the STANDBY account — the only account that can mint. Source and token are locked in the /mint flow; the user enters only an amount. On execution the x/cbdc module credits the Standby policy address.
Destination and token are fixed; the review panel updates as you type and shows the threshold/instant-execute outcome before submit.
Burn
Destroys tokens from the STANDBY account (only Standby can burn). The /burn flow offers a max button and caps the amount at the live balance; the backend re-checks balance before submitting. Two burn proposals competing for the same funds is allowed — the second simply fails on-chain at execution.
The Max button and "Available" line cap the amount at the live Standby balance.
Transfer (Send)
Moves tokens between accounts or out to external parties. Allowed destinations are constrained by the source account type:
| From | To | Rule |
|---|---|---|
| STANDBY / BRIDGING | Distribution | Locked to the Distribution account |
| DISTRIBUTION | External address | Must be on the account whitelist |
| CUSTOM | Own accounts + address book | Free choice within known recipients |
From a Standby source the destination is locked to Distribution; the form enforces the same routing rules the API re-checks server-side.
Convert: disbursement & redemption
Commercial banks move between fiat and CBDC through the BRIDGING account, from the /convert flow:
- Disbursement (fiat → CBDC) —
POST /organizations/:id/disbursement-request. CBDC is sent from the bridging account to the commercial bank's exchange address. It is signed by the system bridging identity, so for a single-signer bridging policy it executes instantly. - Redemption (CBDC → fiat) —
POST /organizations/:id/redemption-request. CBDC flows back from the commercial bank to the bridging account (balance-capped) and is recorded as a governed proposal.
Both require the organization's exchange address to be linked and not frozen; a frozen or unlinked exchange address blocks the flow. The mechanics of organizations, exchange addresses and freezing are covered in the Organizations material in the Features section.
The Convert flow with a direction toggle; when no exchange address is linked the form surfaces a "contact your central bank" notice and blocks submission.
Amount & decimals
On-chain amounts are integers in the base denom (ahnl, "atto-HNL"). The native token uses 18 decimals (NATIVE_TOKEN_DEFAULT_DECIMALS), so a display value of 1 HNL is 1 followed by 18 zeros of ahnl. The token's display symbol comes from CURRENCY_NAME, and the dashboard resolves the native badge/balances from VITE_NATIVE_TOKEN_ID. The staking/consensus denom (apoa) is held only by validators and is invisible to the dashboard.