Skip to content

Assets ​

An Iroha asset is a numeric balance held by an account. Every concrete balance points to an AssetDefinition, and the definition describes how that asset can be named, minted, displayed, and partitioned.

Asset Definition ​

An AssetDefinition contains:

  • id: the canonical asset definition address
  • name: a human-readable display name
  • description: optional human-readable description
  • alias: optional alias in <name>#<domain>.<dataspace> or <name>#<dataspace> form
  • spec: numeric precision and constraints for balances
  • mintable: the mintability policy
  • logo: optional SoraFS URI
  • metadata: arbitrary key-value metadata
  • balance_scope_policy: whether balances are global or dataspace-restricted
  • owned_by: the account that registered or owns the definition
  • total_quantity: total issued quantity
  • confidential_policy: policy for shielded asset operations

Asset definition IDs are canonical opaque addresses. When a definition is constructed from a domain and a name, Iroha can keep that domain/name projection for UX and queries, but the canonical text form is the generated address.

Asset Balance ​

An Asset contains:

  • id: an AssetId, which combines the asset definition, holder account, and optional balance scope
  • value: a Numeric balance

The holder account is canonical and domainless. The asset definition may be projected under a dataspace-qualified domain, for example payments.universal.

Mintability ​

Asset definitions support these mintability modes:

ModeMeaning
InfinitelyElastic supply. The asset can be minted and burned repeatedly.
OnceFixed-supply token. It can be minted once and then burned.
NotFixed-supply token that can be burned but not minted again.
Limited(n)The policy allows new asset units to be issued in a limited number of additional operations.

Use Infinitely for normal elastic assets and Once or Limited(n) for fixed-supply or bounded-supply assets. Do not use Not as an initial policy unless the asset supply is already established.

Balance Scope ​

The balance_scope_policy controls how balances are bucketed:

  • Global: one balance bucket per account and asset definition
  • DataspaceRestricted: balances are partitioned by dataspace context

Dataspace-restricted balances are useful when the same asset definition is used across multiple Nexus dataspaces but balances must remain isolated.

Try It on Taira ​

These read-only calls show real asset definitions on the public Taira testnet:

bash
TAIRA_ROOT=https://taira.sora.org

curl -fsS "$TAIRA_ROOT/v1/assets/definitions?limit=10" \
  | jq -r '.items[] | [.id, .name, .mintable, .total_quantity] | @tsv'

Find the current Taira XOR fee asset definition:

bash
curl -fsS "$TAIRA_ROOT/v1/assets/definitions?limit=100" \
  | jq '.items[]
    | select(.name == "XOR")
    | {id, name, total_quantity, mintable, confidential_policy: .confidential_policy.mode}'

Look for definitions that carry metadata:

bash
curl -fsS "$TAIRA_ROOT/v1/assets/definitions?limit=100" \
  | jq '.items[]
    | select((.metadata | length) > 0)
    | {id, name, metadata}'

All three examples are reads. To mint, burn, or transfer assets on Taira, use a faucet-funded account and the guarded flow in Connect to SORA Nexus Dataspaces.

For a fee-paying Taira asset example, save the faucet helper from Get Testnet XOR on Taira as taira_faucet_claim.py, then claim the faucet asset first and use it as the transaction gas asset:

bash
export TAIRA_ACCOUNT_ID='<TAIRA_I105_ACCOUNT_ID>'
export TAIRA_FEE_ASSET=6TEAJqbb8oEPmLncoNiMRbLEK6tw

python3 taira_faucet_claim.py "$TAIRA_ACCOUNT_ID"
printf '{"gas_asset_id":"%s"}\n' "$TAIRA_FEE_ASSET" > taira.tx-metadata.json

Then include --metadata ./taira.tx-metadata.json on ledger asset mint, ledger asset burn, and ledger asset transfer commands.

Instructions ​

Assets can be registered, minted, burned, and transferred with Iroha Special Instructions:

See also: