Tenzro
Tokenization

Secure-Mint registry.

Tokenized RWAs require that on-chain circulating supply never exceeds the off-chain attested reserve. Tenzro enforces the invariant at the protocol layer via tenzro-vm::secure_mint: tokens with a registered policy are gated by circulating + amount ≤ reserve plus an attestation freshness window. Tokens without a policy are unaffected.
STATUS
Testnet
CRATE
tenzro-vm::secure_mint
PRECOMPILE
0x0000…00001024
TYPE
Component
01

Per-token policy

SecureMintPolicy {
  asset_id: String,        // CAIP-19
  reserve: u128,
  circulating: u128,
  por_feed_id: String,     // e.g. chainlink:<feed_addr> or tenzro:<did>
  attester_did: String,
  attestation_hash: Hash,
  attested_at: u64,
  ttl_secs: u64,           // 0 disables freshness check
}
02

Invariant

check_and_mint(token, amount, now)
  // 1. policy must exist
  // 2. now - attested_at <= ttl_secs (if ttl_secs > 0)
  // 3. circulating + amount <= reserve
  // -> atomically increments circulating, returns updated policy
03

Tokenized-equity sidecar

TokenizedEquityProfile {
  cct_pool_address: Option<Address>,
  por_feed_id: String,
  underlying_caip19: String,
  isin: String,
  cusip: String,
  per_share_ratio: (u128, u128),
  last_corporate_action: Option<Hash>,
}

// Stored alongside the policy for xStocks-class assets so corporate
// actions (dividends, splits, re-symbolization) can be applied
// atomically by the multi-VM token layer.
04

Writes

tenzro_setSecureMintPolicy {
  token, asset_id, reserve, circulating?, por_feed_id,
  attester_did, attestation_hash, attested_at, ttl_secs
}
tenzro_clearSecureMintPolicy { token }
tenzro_secureMintApply { token, amount }      // atomic increment
tenzro_secureMintRecordBurn { token, amount } // saturating decrement
05

Reads

tenzro_getSecureMintPolicy { token }
tenzro_secureMintCheck { token, amount }   // would the mint succeed?
Related
← All docs