Non-EVM Standards

Cardano Native Multi-Asset Tokens

Learn how Cardano’s native multi-asset tokens and CIP-25 enable NFTs and custom assets without smart contracts.

Last updated: 12/29/2025
Improve this page

Cardano Native Multi-Asset Tokens, the built-in ledger framework on Cardano's proof-of-stake blockchain, defines a UTXO-based system for issuing fungible and non-fungible tokens representing real-world value without requiring smart contracts for core minting. Enhanced by CIP-25, the metadata standard, it allows embedding JSON data for asset provenance, enabling compliant tokenization of physical or financial assets. For Real World Asset (RWA) protocols, this standard is especially valuable, as tokens can express fractional ownership in tokenized real estate, building materials, diamonds, or other off-chain collateral while maintaining a compliant, interoperable interface for minting, transfers, and redemptions with regulatory proofs via metadata.

Before Native Multi-Asset Tokens (introduced in Mary hard fork, 2021), Cardano RWA projects relied on custom scripts or off-chain solutions, leading to fragmented provenance, inconsistent metadata, and scalability issues in high-volume settlements. Native Multi-Assets resolved this by embedding custom tokens directly in the ledger, with CIP-25 (2021, evolving to CIP-68 in 2025) adding structured metadata for legal details like deeds or valuations. For RWA builders, the standard provides a secure abstraction layer supporting off-chain oracles for NAV, atomic multi-asset swaps for settlement, and governance upgrades via Cardano's on-chain voting, while leveraging Ouroboros for 200+ TPS and energy-efficient consensus. As of late 2025, it powers $500M+ in tokenized value, including Granite's building materials and the Haus Protocol's $34.5T home equity onboarding blueprint.

A key design principle is ledger-native extensibility, where tokens expose standardized tx interfaces augmented by CIP-25 metadata without exposing internal UTXO logic. This is well suited to RWA tokens where transfers may depend on off-chain legal data or community governance, yet integrators like wallets or aggregators still need reliable, auditable operations.

Use of Native Multi-Asset + CIP-25 in RWA Contexts

Native Multi-Asset + CIP-25 is the foundational standard for RWA tokens on Cardano because it abstracts the complexity of tokenizing and managing real-world assets into a native, UTXO-ledger framework. While traditional DeFi tokens use Native Assets for unrestricted multi-token txns, RWA tokens adapt the model to illiquid, regulated assets, tokenized private credit, commercial real estate, diamonds, or bond portfolios, where on-chain tokens represent legally backed off-chain value held by custodians or SPVs, with metadata for securities laws like Reg D or MiCA.

Key Applications in RWA Development

Fractional Ownership and Liquidity Provision

Many RWAs are high-value and indivisible (for example, a ten-million-dollar diamond or a portfolio of building materials). Native Multi-Asset allows developers to mint fungible tokens proportional to deposits, unlocking fractional ownership and secondary-market liquidity under compliance rules.

  • Implement minting txns with policy scripts to restrict issuance, linking CIP-25 metadata to off-chain deeds or valuations.
  • Tokens can trade freely via atomic swaps on DEXs like Minswap, offering liquidity for assets that would otherwise be locked for years.
  • Example: A real estate token where CIP-25 embeds property docs, and UTXO model ensures secure fractional transfers for diversified holdings.

Yield Accrual and NAV Management

Policy scripts automate revenue distribution (e.g., rental yields from real estate tokens), with metadata updates querying oracles (e.g., Pyth) for real-time NAV. This supports auto-accrual without manual interventions, ideal for tokenized bonds or funds.

Using trusted sources (Pyth, Switchboard) ensures accurate metadata, critical for compliance and for investor redemptions. Regulators increasingly expect transparent provenance, and CIP-25 provides this without exposing internal tx state.

Redemption and Settlement Mechanics

RWA redemptions are inherently asynchronous, as physical settlement layers (banks, custodians, transfer agents) cannot finalize instantly.

Patterns include:

  • Burn via policy-locked txns for queued claims.
  • Script validations for invalid transfers.
  • Tx memos for signed proofs.
  • Proof-of-reserve checks before fulfillment.

Composability Across the RWA Stack

Native Multi-Asset tokens plug directly into Cardano DeFi:

  • Fluid Tokens accepts assets as collateral within policy restrictions.
  • Minswap pairs can provide deep secondary liquidity for permitted swaps.
  • Aggregators (e.g., Genius Yield) route into Native Assets natively.

For regulated RWAs:

  • Pair with Plutus policies for investor eligibility gating.
  • Combine with CIP-25 for modular compliance.
  • Integrate identity proofs via metadata.

This drastically reduces integration complexity, for example, a tokenized diamond token can list across lending markets without custom adapters.

Developer Advantages in RWA Builds

  • Regulatory Alignment: Native policies and CIP-25 metadata hide off-chain custodian processes while preserving accurate provenance for MiFID II/MiCA-aligned disclosures.
  • Extensibility: UTXO model and CIP-68 extensions allow injecting RWA-specific logic i.e., pricing oracles, geofencing, or IPFS-pinned compliance policies.
  • Risk Isolation: Tokens remain fully ledger compliant, burns do not impact wallet-held balances outside policies.
  • Upgrade Path: Cardano's on-chain governance migrates via hard forks, preserving TVL and simplifying audits.

To visualize the end-to-end flow in an RWA token, the following sequence diagram captures the typical mint - transfer - burn cycle. It illustrates how users interact with the ledger, how policies interact with scripts and oracles, and how off-chain compliance updates flow back on-ledger through txns or metadata. This representation is especially important for understanding asynchronous transfers, delayed settlements, and policy-driven compliance in RWA systems.

cardano.svg

This diagram highlights how Native Multi-Asset + CIP-25 acts as the connective tissue between on-ledger token operations and off-chain asset realities. Mints forge assets proportional to contributed value, policies capture real-world compliance as transfers execute, and burn functions help manage redemptions during claims. For illiquid RWA portfolios, the model can be extended with explicit policy scripts between the ledger (L) and the custodian or SPV (C) to handle delayed settlement cycles.

Core Specification

A Native Multi-Asset token must implement the ledger-native interface for its fungible/non-fungible structure, the policy-driven representation of a user’s proportional claim on the underlying asset. CIP-25 adds mandatory metadata fields, a valuable enhancement for RWA use cases where provenance is embedded without needing full scripts.

In Native Multi-Asset + CIP-25, the asset behaves like any ledger token (balance via UTXO sums, total supply via query, transfers via txns), while policyID refers to minting rules for asset management. The specification enforces a clean separation between base assets and metadata, ensuring predictable operations and seamless integration across Cardano and RWA systems.

Key Definitions

  • Policy ID: The hash identifier for the minting policy, e.g., for tokenized real estate or diamonds.
  • UTXO: The unspent output holding assets, extensible for multi-asset bundles or memos.
  • Total Supply: The aggregate asset value managed by the policy, equal to the sum of principal, transferred amounts, and adjustments for fees or burns.
  • Metadata: CIP-25 JSON fields (e.g., name, description, files) providing idealized, rule-agnostic details for UI, analytics, and oracle integrations. They represent the legal relationship between base assets and enforced logic.
  • Transaction Functions: (e.g., mint, transfer) Provide near-exact estimates of expected outcomes, reflecting policies, rounding, or NAV changes, without executing state updates. These enable accurate transaction planning.
  • Rounding Rules: Native Multi-Asset mandates rounding in favor of the asset:
    • Round down when issuing units or deductions, preventing dilution.
    • Round up when applying policy restrictions or requirements, protecting existing participants. These rules ensure fair distribution and discourage precision-based attacks.

Native Multi-Asset defines core tx types with CIP-25 metadata, organized by their roles in minting, management, and transfers. Every asset is minted via a single tx under policy, ensuring a single source of truth for behavior and movements. Below is the JavaScript-equivalent interface via cardano-wallet-backend or lucid, accompanied by developer notes covering edge cases, rounding behavior, and considerations specific to RWA tokens such as asynchronous policies and oracle-driven updates.

1const { Lucid, Blockfrost, Data } = require("lucid-cardano");
2
3// Initialize Lucid
4const lucid = await Lucid.new(
5  new Blockfrost("https://cardano-mainnet.blockfrost.io/api/v0", "project_key"),
6  "Mainnet"
7);
8
9// Core Asset Minting
10async function mintRwaAsset(policyScript, metadata, amount, toAddress) {
11  lucid.selectWalletFromSeed("seed phrase");
12
13  const tx = await lucid
14    .newTx()
15    .mintAssets({ [policyScript.hash() + "RWA"]: BigInt(amount) })
16    .attachMetadata(721, metadata) // CIP-25 for RWA details
17    .payToAddress(toAddress, { lovelace: BigInt(2000000) }) // Min UTXO
18    .attachMintingPolicy(policyScript)
19    .complete();
20
21  const signedTx = await tx.sign().complete();
22  const txHash = await signedTx.submit();
23  return txHash;
24}
25
26// Transfer
27async function transferAsset(fromUtxo, toAddress, amount, assetName) {
28  lucid.selectWalletFromSeed("seed phrase");
29
30  const tx = await lucid
31    .newTx()
32    .collectFrom([fromUtxo])
33    .payToAddress(toAddress, { [assetName]: BigInt(amount) })
34    .complete();
35
36  const signedTx = await tx.sign().complete();
37  const txHash = await signedTx.submit();
38  return txHash;
39}
40
41// Burn
42async function burnAsset(policyScript, fromUtxo, amount, assetName) {
43  lucid.selectWalletFromSeed("seed phrase");
44
45  const tx = await lucid
46    .newTx()
47    .collectFrom([fromUtxo])
48    .burnAssets({ [assetName]: BigInt(amount) })
49    .attachMintingPolicy(policyScript)
50    .complete();
51
52  const signedTx = await tx.sign().complete();
53  const txHash = await signedTx.submit();
54  return txHash;
55}
56
57// Policy Script Example (Plutus V2)
58const policyScript = lucid.utils.nativeScriptFromJson({
59  type: "all",
60  scripts: [
61    { type: "sig", keyHash: "pubkey_hash" }, // Multi-sig for RWA
62    { type: "before", slot: 123456789 }, // Timelock
63  ],
64});
65
66// CIP-25 Metadata
67const cip25Metadata = {
68  [policyScript.hash()]: {
69    RWA: {
70      name: "Tokenized Diamond",
71      description: "Fractional diamond share",
72      files: [{ src: "ipfs://Qm...", name: "Cert" }],
73    },
74  },
75};

Detailed Function Breakdown (with RWA Developer Notes)

Below is a tx-by-tx explanation of the Native Multi-Asset + CIP-25 interface, including edge cases, rounding behavior, and RWA-specific implementation guidance for regulated assets, off-chain settlement, and policy-driven validation.

mintRwaAsset()

Mints the asset under policy with CIP-25 metadata attached.

  • RWA Integration: For compliance-based assets, prepend oracle check (Pyth / oracles) in Plutus validator.
  • Edge Case: Must handle zero amounts or invalid policies (revert: PolicyMismatch).

transferAsset()

Executes multi-asset transfer via UTXO consumption.

  • Formula: Atomic swap post-policy.
  • Usage: UI quoting, risk dashboards.
  • RWA Note: Reflects pure regulatory transfer, does not account for settlement delays or custody fees.

burnAsset()

Reduces supply under policy.

  • Ensures no precision-based arbitrage on burns.
  • RWA Note: Useful for redemptions in regulated markets.

Policy Validation (in Script)

Checks signatures/timelocks in Plutus.

  • Return false for “invalid.”
  • RWA Note: Enforce investor caps, jurisdiction restrictions, or temporary pauses due to regulatory flags.

Attach Metadata (in Txn)

Embeds CIP-25 JSON for token details.

  • Discrepancies vs mint reveal metadata impact.
  • RWA Note: Useful for quote generation in provenance-heavy vaults or those with legal fees.

Query Supply/Balance (Mirror Node)

Fetches via API or explorer.

  • Requires off-chain index.
  • Includes errors for undefined (e.g., AssetNotFound).
  • RWA Note:
    • For illiquid assets (such as real estate and diamonds): pair with burn asynchronous resolutions.
    • Trigger oracle checks for sanctions/residency validation.

Reference Implementation

Cardano Foundation’s Native Assets offer a mature, security-audited foundation for building ledger tokens via Lucid or Cardano-CLI. The protocol integrates with the Ouroboros consensus, providing a clean tx surface for RWA-specific logic. Its design encourages minimal scripts while still supporting custom policy models, CIP-25/68 metadata, control layers, and oracle integration.

Key capabilities include:

  • Inflation Attack Protection: The implementation prevents dilution by enforcing policy hashes and script invariants. Early minters cannot exploit low-supply corner cases to extract excess value.
  • Rounding Compliance: All txns use integer math (configurable decimals) for precise, deterministic operations that adhere to Native Asset requirements of rounding in favor of the token. This eliminates subtle precision-drift exploits.
  • Extensible Policies: Lifecycle txns such as mint allow developers to embed RWA-specific functionality, NAV oracle checks, compliance gating, settlement status validation, or fee accounting, without modifying core logic.
  • Flexible Structure: Native Assets build on the ledger’s base, with optional Plutus wrappers for regulated administration. This makes it straightforward to integrate custodial controls, upgrade pathways, or policy-gated operations required in regulated RWA environments.
1const { Lucid, Blockfrost } = require("lucid-cardano");
2
3async function mintRwa() {
4  const lucid = await Lucid.new(
5    new Blockfrost("https://cardano-mainnet.blockfrost.io/api/v0", "key"),
6    "Mainnet"
7  );
8  lucid.selectWalletFromSeed("seed");
9
10  const policy = lucid.utils.mintingPolicyToId(
11    lucid.utils.nativeScriptFromJson({
12      type: "all",
13      scripts: [{ type: "sig", keyHash: "keyhash" }],
14    })
15  );
16
17  const metadata = {
18    [policy]: {
19      RWA: {
20        name: "Tokenized Granite",
21        description: "Fractional building materials",
22        files: [{ src: "ipfs://Qm...", name: "Cert" }],
23      },
24    },
25  };
26
27  const tx = await lucid
28    .newTx()
29    .mintAssets({ [policy + "RWA"]: BigInt(1000000) })
30    .attachMetadata(721, metadata)
31    .complete();
32
33  const signedTx = await tx.sign().complete();
34  await signedTx.submit();
35}
  • The mint pins policy at tx. For RWA tokens, prefer multi-sig policies and link metadata to IPFS for provenance.
  • UTXO can be extended for multi-asset in UIs.

Mint Flow (Issuer-Facing)

Issuer-level txns call ledger with policies.

1// As above in mintRwa()
2// Pre-mint: Policy validation in script
  • Use atomic txns for safe multi-ops.
  • Override pre-mint to add compliance checks (KYC, caps) and revert early if policy fails.
  • For illiquid or async-backed assets, combine mint with provisional issuance and oracle finalization to avoid over-minting.

Transfer Flow

Symmetric to mint, transfer consumes/produces UTXOs.

1async function transferRwa(lucid, fromUtxo, toAddress, amount, asset) {
2  const tx = await lucid
3    .newTx()
4    .collectFrom([fromUtxo])
5    .payToAddress(toAddress, { [asset]: BigInt(amount) })
6    .complete();
7
8  const signedTx = await tx.sign().complete();
9  await signedTx.submit();
10}
  • Policy-first follows checks-effects-interactions and reduces reentrancy risk.
  • For queued transfers, implement off-chain coordination for status.
  • Add transfer limits via policy scripts.

Burn Flow

Default burns are policy-gated; RWA overrides query reasons.

1async function burnRwa(lucid, policy, fromUtxo, amount, asset) {
2  const tx = await lucid
3    .newTx()
4    .collectFrom([fromUtxo])
5    .burnAssets({ [asset]: BigInt(amount) })
6    .attachMintingPolicy(policy)
7    .complete();
8
9  const signedTx = await tx.sign().complete();
10  await signedTx.submit();
11}
  • Burn uses policy for precision.
  • Consider a time-bound policy for redemptions.

Adding Policy (Example: Multi-Sig Mint)

Policy handling keeps execution consistent.

1const policy = lucid.utils.nativeScriptFromJson({
2  type: "all",
3  scripts: [
4    { type: "sig", keyHash: "key1" },
5    { type: "sig", keyHash: "key2" },
6  ],
7});
  • Keep policy accounting transparent: Use memos for events and track via explorer.
  • For RWA products, policies may fund legal overhead, document in metadata.
Hedera Token Service
Polkadot Asset Hub Parachain

WE SECURE EVERYTHING YOU BUILD.

From day-zero risk mapping to exchange-ready audits — QuillAudits helps projects grow with confidence. Smart contracts, dApps, infrastructure, compliance — secured end-to-end.

DeFi SecurityplumeUniswap FoundationAethiropt-collectivePolygon SPNBNB Chain Kickstart

Office 104/105 Level 1, Emaar Square, Building 4 Sheikh Mohammed Bin Rashid Boulevard Downtown Dubai, United Arab Emirates P.O box: 416654

[email protected]

All Rights Reserved. © 2026. QuillAudits - LLC

Privacy Policy