AgentSkillsCN

midnight-core-concepts:data-models

当您询问UTXO与账户模型的区别、链上代币、屏蔽型/非屏蔽型代币、空值证明、币种、余额,或在Midnight中权衡代币范式时,可选用此功能。

SKILL.md
--- frontmatter
name: midnight-core-concepts:data-models
description: Use when asking about UTXO vs account models, ledger tokens, shielded/unshielded tokens, nullifiers, coins, balances, or choosing between token paradigms in Midnight.

Midnight Data Models

Midnight supports two distinct token paradigms: UTXO-based ledger tokens and account-based contract tokens. Choose based on privacy requirements and use case complexity.

Quick Decision Guide

RequirementUse UTXO (Ledger Tokens)Use Account (Contract Tokens)
Privacy criticalYes - independent, shieldableNo - balances visible
Parallel processingYes - no ordering depsNo - sequential nonce
Simple transfersYesOverkill
Complex DeFi logicLimitedYes
Gaming state machinesNoYes
Governance/delegationNoYes

UTXO Model (Ledger Tokens)

UTXO = Unspent Transaction Output. Each token is a discrete digital coin that must be spent entirely.

Core Mechanics

code
Creation → Existence → Consumption → Prevention of Reuse
  1. Creation: UTXO born with value, owner, cryptographic commitment
  2. Existence: Queryable in active UTXO set
  3. Consumption: Entire UTXO spent in transaction (change returned as new UTXO)
  4. Prevention: Nullifier added to global set, prevents double-spend

Nullifier Innovation

Unlike Bitcoin's spent markers, Midnight uses nullifiers:

code
nullifier = Hash(UTXO_commitment, ownerSecret)

Privacy benefit: Nullifier reveals nothing about which UTXO was spent. The nullifier can be computed without exposing the original UTXO identity.

Shielded vs Unshielded

Each UTXO independently chooses privacy level:

  • Shielded: Commitment hidden, value/owner private
  • Unshielded: Value visible for regulatory compliance
compact
// Receiving shielded tokens
receive coins: Coin[];

// Sending tokens (can be shielded or unshielded)
send value: QualifiedValue, to: Address;

Account Model (Contract Tokens)

Maintain address-to-balance mappings within Compact contracts. Similar to ERC-20.

When to Use

  • Complex DeFi state machines requiring intricate interactions
  • Gaming systems with stateful game logic
  • Governance tokens with delegation mechanics
  • Social tokens tracking relationships

Trade-offs

AspectAccount Model Limitation
PrivacyEvery transaction visible forever
OrderingNonce creates sequential dependency
MEVMempool visibility enables front-running
ScalabilityRedundant computation on every node

Ledger Structure

Midnight's ledger has two components:

1. Zswap State

  • Merkle tree of coin commitments
  • Free slot index
  • Nullifier set
  • Valid past Merkle roots

2. Contract Map

  • Associates contract addresses with states
  • Contains public and private state components

Token Types

Token types are 256-bit collision-resistant hashes:

  • Native token: Predefined zero value
  • Custom tokens: Hash of contract address + domain separator
compact
// Issue custom token from contract
// Type = Hash(contractAddress, domainSeparator)

Practical Application

Choose UTXO When:

  1. Users need transaction privacy
  2. High throughput required (parallel processing)
  3. Simple value transfers dominate
  4. Regulatory compliance via selective disclosure (viewing keys)

Choose Account When:

  1. Complex state logic required
  2. Tokens interact with sophisticated contract logic
  3. Privacy is secondary to functionality
  4. Integration with existing DeFi patterns

References

For detailed technical information:

  • references/utxo-mechanics.md - Complete UTXO lifecycle, nullifier computation
  • references/ledger-structure.md - Zswap state internals, Merkle tree details

Examples

Working Compact patterns:

  • examples/token-handling.compact - Receiving and sending tokens