Shielded Settlement (SMILE v2)
SMILE v2 shielded settlement status: note commitments, nullifiers, selective disclosure, account registry, and current exit/recovery support.
ابدأ من سير العمل الذي يطابق سبب وجودك هنا.
الوثائق واسعة. هذان المساران ينقلانك مباشرة إلى مادة المشغلين والبناة التي تقف خلف الmicrosite الجديدين.
Overview
BTX includes a native shielded transaction pool based on SMILE v2, a lattice-based confidential transaction system introduced at genesis (block 0). In the v0.33 release-line production policy, the active support surface is strict shielded-to-transparent exits and wallet recovery for existing shielded state. Transparent-to-shielded deposits, z-to-z sends, re-shielding, and bridge shield ingress are not production-supported.
Current Production Status
| Height | Change | Effect |
|---|---|---|
| 125000 | Shielded pool credits and new shielded appends disabled | No new shielded credits or appended shielded outputs are accepted. |
| 128000 | Public-flow and direct-send shielding disabled | Transparent-to-shielded deposits and direct shielding flows are not production-supported. |
| 135000 | Unshield velocity quota ends | Existing shielded notes continue through the strict shielded-to-transparent exit/recovery path. |
Protected Assets
| Asset | Protection Mechanism |
|---|---|
| Transaction values | Lattice Pedersen commitments + range proofs (51-bit, covering MAX_MONEY) |
| Sender identity | Ring signature over configurable anonymity set (default 8, supported 8..32) |
| Receiver identity | ML-KEM (FIPS 203) encrypted notes (IND-CCA2) |
| Transaction graph | Key images (nullifiers) unlinkable to ring members |
| Note plaintext | ChaCha20-Poly1305 AEAD under ML-KEM shared secret |
Spend Surfaces and Status
SMILE v2 defines three transaction paths that share the same proof system and note format. Their production status differs after the v0.33 release-line shielded wind-down heights:
| Path | Direction | Current Status |
|---|---|---|
| Deposit (Shield) | Transparent → Shielded | Disabled for production. Shielded pool credits and new appends stop at height 125000, and public-flow/direct-send shielding stops at height 128000. |
| Transfer | Shielded → Shielded | Disabled for production z-to-z sends and re-shielding because new shielded appends are disabled. Historical transactions remain validated for consensus and recovery. |
| Unshield (Withdraw) | Shielded → Transparent | Supported for strict exits from existing shielded notes to transparent outputs. The withdrawal amount becomes publicly visible; the unshield velocity quota ends at height 135000. |
Cryptographic Primitives
Lattice Parameters
| Parameter | Value | Purpose |
|---|---|---|
| POLY_Q | 8,380,417 | Dilithium/CRYSTALS prime; NTT-friendly (q ≡ 1 mod 2n, n=256) |
| MODULE_RANK | 4 | Lattice dimension 1024 (~192-bit classical, ~128-bit quantum) |
| BETA_CHALLENGE | 60 | Infinity-norm bound on Fiat-Shamir challenge polynomials |
| GAMMA_RESPONSE | 131,072 (217) | Rejection sampling threshold for response vectors |
| VALUE_BITS | 51 | Range proof decomposition depth (covers MAX_MONEY) |
Commitment Scheme
Values are committed using lattice Pedersen commitments:
C = A · blind + g · value (mod q).
The scheme is computationally hiding under MLWE and computationally binding under MSIS.
Range Proofs
Each output carries a range proof decomposing the committed value into 51 individual bit commitments. Each bit is proven to be 0 or 1 via a lattice OR-proof, and a Schnorr-style relation proof binds the decomposition to the original commitment.
Balance Proofs
A Schnorr-style balance proof demonstrates that
sum(input_commitments) − sum(output_commitments) − Commit(fee, 0) = Commit(0, delta_blind),
preventing supply inflation without revealing individual amounts.
Note Commitments and Nullifiers
Note Structure
A shielded note contains: value, owner commitment, randomness (rho, rseed),
source binding, and an optional memo. Notes are stored as commitments in a
Merkle tree of depth 32 (nShieldedMerkleTreeDepth).
Nullifiers
Each spend publishes a deterministic nullifier derived from the key image:
DeriveInputNullifier(spending_key, ring_member_commitment).
The NullifierSet (LevelDB-backed with in-memory cache, capped at 2,000,000 entries)
enforces uniqueness to prevent double-spending. The same note always produces
the same nullifier regardless of which ring it appears in.
Ring Signatures
Sender anonymity uses module-lattice ring signatures. For each input, the prover demonstrates knowledge of a short vector solving the Module-SIS relation for one ring member without revealing which one. The Fiat-Shamir transcript binds all ring members symmetrically, making them computationally indistinguishable under MLWE.
Note Encryption
Shielded outputs include encrypted note data so that recipients can discover and decode incoming payments:
- Key encapsulation: ML-KEM (FIPS 203) establishes an IND-CCA2 shared secret with the recipient's public key.
- Key derivation: HKDF-SHA256 derives an AEAD key from the ML-KEM shared secret.
- Symmetric encryption: ChaCha20-Poly1305 AEAD encrypts the note plaintext (value, blinding factor, memo). Maximum ciphertext size: 2,048 bytes.
A 1-byte view tag (derived from KEM ciphertext and public key) enables recipients to quickly reject non-matching notes during wallet scanning, reducing trial-decryption cost at the expense of leaking 8 bits of recipient information to observers who can test candidate public keys.
Selective Disclosure
Shielded transactions support selective disclosure for compliance and audit: a note holder can reveal specific transaction details (value, sender, or both) to a designated auditor without breaking the privacy of other transactions. This is enabled by the separation between spending keys, viewing keys, and the ML-KEM encryption layer.
Account Registry
Before the shielded sunset, shielded accounts were managed through a consensus-enforced registry with bounded growth. New shielded appends are disabled at height 125000, so these limits describe the historical bounded surface rather than a currently open production deposit path:
| Limit | Value |
|---|---|
| Max registry appends per block before height 125000 | 4,096 |
| Max total registry entries | 65,536 |
Consensus Limits
| Parameter | Value | Rationale |
|---|---|---|
| Max shielded tx size | 6.5 MB | Upper bound on proof + encrypted note payload |
| Max ring size | 32 | Anonymity set ceiling (default 8 at launch) |
| Merkle tree depth | 32 | Supports 232 notes before tree exhaustion |
| Block verify cost budget | 240,000 units | ~1,042 SMILE txns; CPU: 3.6s (4% of 90s block) |
| Block scan units | 24,576 | Wallet-facing discovery pressure bound |
| Block tree update units | 24,576 | Nullifier + commitment mutation bound |
| Shielded pool introduction | Height 0 (genesis) | Historical activation from chain start |
| Shielded pool credits / new appends disabled | Height 125000 | Disables new shielded credits and appended shielded outputs |
| Public-flow / direct-send shielding disabled | Height 128000 | Disables production transparent-to-shielded and direct-send shielding paths |
| Unshield velocity quota end | Height 135000 | Ends the temporary quota while retaining strict exit/recovery support |
BATCH_SMILE Bridge Path
The shielded pool has consensus-visible bridge commitment surfaces through
the BATCH_SMILE transaction family, but bridge shield ingress is
not production-supported after the sunset heights above. Bridge structures
may still commit to historical ingress data and recovery/exit metadata; they
should not be read as an active transparent-to-shielded deposit path. See
the Bridges specification for the current
bridge commitment model.
Shielded State Recovery
Wallet recovery scans the full shielded Merkle tree using the owner's viewing key. The view-tag optimization rejects ~99.6% of notes without trial decryption. Recovery produces the complete set of unspent notes by cross-referencing discovered notes against the published nullifier set.
Security Assumptions
| Assumption | Used By | Consequence if Broken |
|---|---|---|
| MLWE | Commitment hiding, ring anonymity, ML-KEM encryption | Values and sender identity revealed |
| MSIS | Commitment binding, ring unforgeability, balance soundness | Supply inflation, unauthorized spending |
| SHA-256 collision resistance | Fiat-Shamir transcripts, nullifier derivation | Proof malleability, nullifier collisions |
| ML-KEM IND-CCA2 (FIPS 203) | Note encryption | Note plaintext disclosed to passive observer |
| ChaCha20-Poly1305 AEAD | Symmetric note encryption layer | Note plaintext disclosed if shared secret known |