Skip to content

Domains

Domains are named namespaces registered in the World. In the current Iroha 3 data model a domain is qualified by its parent dataspace, so the canonical identifier is:

text
domain.dataspace

For example, payments.universal names the payments domain inside the universal dataspace.

Structure

A registered Domain contains:

  • id: the dataspace-qualified DomainId
  • logo: an optional SoraFS URI for a domain logo
  • metadata: arbitrary key-value metadata
  • owned_by: the account that owns the domain, normally the account that registered it

The bootstrap payload used to materialize a domain is NewDomain. It carries the id, optional logo, and initial metadata. The runtime fills owned_by from the authority. Ordinary clients do not submit this payload directly.

Registration

Ordinary domain creation uses the declarative alias setup flow. This keeps the SNS lease, owner capabilities, quote guard, and domain row in one atomic EnsureAlias transaction. Register::Domain remains a genesis/bootstrap surface, and the ledger domain command has no register subcommand.

Create a secret-free AliasSetupPlanRequestV1 intent with an SDK or onboarding service, then have the CLI plan it against live state and submit that exact plan:

bash
cargo run --bin iroha -- --config ./defaults/client.toml \
  app alias setup plan \
  --intent-file ./payments-domain.intent.json \
  --plan-file ./payments-domain.plan.json

cargo run --bin iroha -- --config ./defaults/client.toml \
  app alias setup apply --plan-file ./payments-domain.plan.json

cargo run --bin iroha -- --config ./defaults/client.toml ledger domain list all

The intent identifies payments.universal, its numeric dataspace, canonical I105 owner, lease acquisition term, and current policy/payment quote guard. The planner endpoint is POST /v1/aliases/setup/plan; its returned plan is chain-, authority-, state-, and deadline-bound. Domain removal still uses Unregister.

Creating or removing a domain requires the appropriate domain-management permission under the active runtime validator. Domain metadata can be updated with SetKeyValue and RemoveKeyValue when the authority has permission to modify that domain.

Try It on Taira

List the domains currently visible on the public Taira testnet:

bash
curl -fsS 'https://taira.sora.org/v1/domains?limit=20' \
  | jq -r '.items[].id'

Map the public lane catalog back to dataspace aliases:

bash
curl -fsS https://taira.sora.org/status \
  | jq -r '.teu_lane_commit[]
    | [.lane_id, .alias, .dataspace_alias, .visibility, .block_height, .finality_lag_slots]
    | @tsv'

Use the first command when an app needs to check whether a domain exists. Use the lane catalog when you need to confirm whether a dataspace is public, restricted, or lagging behind the core lane.

Domain setup is a fee-paying write. Before trying it on Taira, save the faucet helper from Get Testnet XOR on Taira as taira_faucet_claim.py, fund the signer through the public faucet, and attach fee metadata:

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

iroha --config ./taira.client.toml \
  app alias setup plan \
  --intent-file ./taira-domain.intent.json \
  --plan-file ./taira-domain.plan.json

iroha --config ./taira.client.toml \
  --metadata ./taira.tx-metadata.json \
  app alias setup apply --plan-file ./taira-domain.plan.json

Build the intent for a unique domain name on repeated testnet runs, and use Taira's current policy and fee-asset quote guard. Do not reuse a plan produced for localnet or Minamoto.

Relationship to other entities

Domains group ledger objects and provide a namespace for domain-scoped data. Asset definitions use domain-qualified identifiers, and queries can list domains or find objects scoped to a domain. Accounts themselves are domainless in the current data model, but accounts can own domains and hold assets whose definitions live under domains.

See also: