iuna

iuna

iuna - experimental mainnet-candidate protocol
git clone https://getiuna.org/git/iuna.git
Log | Files | Refs | README | LICENSE

protocol.md (36474B)


      1 # iuna protocol in simple terms
      2 
      3 iuna is an experimental mainnet-candidate protocol that combines three mechanisms:
      4 
      5 - Burn lottery: burning IUNA creates tickets for future block finalization.
      6 - VDF timing: the selected finalizer must do sequential delay work before publishing a block.
      7 - Proof-of-work issuance: new IUNA enters the chain through PoW mine actions.
      8 
      9 The goal is to make network power scale linearly rather than superlinearly.
     10 
     11 Existing consensus models can amplify existing advantages:
     12 
     13 - Proof of Work: economies of scale and specialized hardware such as ASICs can amplify advantages in capital and infrastructure.
     14 - Proof of Stake: existing stake directly increases a participant's influence and rewards, creating a wealth-compounding dynamic.
     15 
     16 iuna uses self-burn Proof of Burn (PoB), where block-finalization power scales directly with the amount burned. VDFs impose a verifiable time cost that limits the feasibility of low-cost attacks. PoW keeps new coin issuance permissionless, allowing anyone capable of producing valid work to earn newly issued coins.
     17 
     18 Burns do not remove wealth advantage. More capital can still buy more lottery weight. The difference from stake is that burn power is paid again and again: it expires, does not unbond, and does not accumulate into a permanent stake position. The design converts wealth-bias from a growing asset into a recurring cost.
     19 
     20 This is still experimental. The rules below describe the frozen mainnet-candidate protocol, not a proven mainnet design.
     21 
     22 ## Mainnet-Candidate Frozen Parameters
     23 
     24 The current mainnet-candidate parameter set is intentionally close to Bitcoin where that is useful for operator expectations:
     25 
     26 - P2P network ID: iuna-mainnet-candidate;
     27 - genesis hash: 3d677cd7ced1c04d3a276cbee7ea38076e34ac65f18a2c9b8286a4872d986a9a;
     28 - protocol version: 2;
     29 - launch profile ID: iuna-mainnet-candidate;
     30 - launch profile hash: eb2f67e9d735474859ceb1fe124fe270977214f6e2f4cd855a4d8c3b5ecac558;
     31 - target block time: 10 minutes;
     32 - maximum compact stored block-body size: 1,000,000 bytes;
     33 - maximum transaction items per block: 1,000;
     34 - maximum pending transactions per node: 10,000;
     35 - maximum pending transaction pool bytes per node: 8 MiB;
     36 - maximum orphan transactions per node: 1,024;
     37 - ticket maturity delay: 3 blocks;
     38 - ticket expiry window: 3 block heights;
     39 - objective finality quorum: strictly more than 2/3 of the selected committee;
     40 - recovery delay: 6 target block times;
     41 - future timestamp drift limit: 2 minutes;
     42 - VDF retarget window: 20 rank 0 ticket blocks;
     43 - VDF retarget deadband: 10%;
     44 - VDF maximum retarget step: 2%;
     45 - PoW mine difficulty start: 12 bits;
     46 - PoW retarget window: 10 blocks;
     47 - PoW target mine actions: 10 per retarget window;
     48 - PoW maximum retarget step: 2 bits;
     49 - PoW minimum difficulty: 10 bits;
     50 - maximum mine actions per anchor: 2;
     51 - burn committee size: 5 slots;
     52 - maximum signed burn bundle size: 10,000 bytes;
     53 - burn committee lineage maturity: 20 blocks;
     54 - transaction signing format: 1.
     55 
     56 Changing any value in this section requires a conscious mainnet-candidate reset or later hard-fork process.
     57 
     58 The consensus block-size limit is the exact number of bytes produced by the current compact snapshot block-body encoder when the block is appended to its parent chain. The encoder's reference tables are seeded by genesis allocations and extended in chain order, so all nodes calculate the same context-dependent size. The snapshot header, launch profile, block-count field, SQLite row metadata, and SQLite page overhead are not charged to an individual block.
     59 
     60 The compact representation stores binary hashes, addresses, signatures, and VDF data instead of their hexadecimal text. It uses base-128 varints for integers, chain-wide references for repeated addresses and protocol IDs, a single shared owner and signature for legacy transaction inputs, implicit legacy burn change where possible, and transaction indexes for legacy and v2 burns repeated by the burn-bundle section. Heights, parent hashes, and block hashes are reconstructed from chain order and canonical block contents rather than repeated in each stored block body. Burns benefit most from this layout, followed by transfers and mine actions. Snapshot v9 stores authenticated hybrid reward destinations and v2 burn attestations while retaining v7 and v8 read compatibility.
     61 
     62 P2P messages and management API responses still use JSON. Their byte length is not the consensus block size. Transaction fee-rate ordering uses a separate compact economic transaction weight, so changing JSON whitespace, key order, or hexadecimal formatting cannot change consensus size or fee priority.
     63 
     64 ## Wallet address format
     65 
     66 Wallets display and accept version 0 legacy and version 1 hybrid Bech32m addresses. Mainnet and the
     67 mainnet-candidate use the human-readable prefix iuna; local testnet uses
     68 tiuna. A version 0 payload contains the wallet's exact 32-byte Ed25519
     69 verifying key. A version 1 payload contains a commitment to the wallet's
     70 Ed25519 and ML-DSA-44 public keys. Decoding verifies the Bech32m constant,
     71 rejects mixed case and non-zero padding, and requires the expected network,
     72 version, and payload length. An all-uppercase address is accepted and normalized
     73 to lowercase; mixed uppercase/lowercase is invalid.
     74 
     75 Consensus identity is the exact 32-byte Ed25519 verifying key, represented in
     76 consensus objects and persisted chainstate as canonical 64-character lowercase
     77 hexadecimal. The management wallet, address book, transfer endpoints, and
     78 Stratum worker usernames accept Bech32m addresses and decode them to that
     79 internal key before constructing a transaction. Recipient, address-book, and
     80 Stratum username input rejects raw hexadecimal keys. This boundary keeps the
     81 checksum and network distinction out of consensus identity.
     82 
     83 ## Coins and Transactions
     84 
     85 iuna uses a UTXO-style ledger. The main transaction types are:
     86 
     87 1. Transfer: moves IUNA from one address to another and pays a sender-chosen fee.
     88 2. Burn: destroys an amount of IUNA, pays a sender-chosen fee, and creates a future lottery ticket.
     89 3. Mine action: proves SHA-256-style PoW against the current chain tip. A valid mine action mints a fixed 1 IUNA reward to its recipient and pays a fixed 1 IUNA fee to the block finalizer. Starting at height 3750, the recipient must be a version-1 hybrid address.
     90 
     91 Burn and transfer fees are chosen by the sender. Mine action reward and mine action fee are deterministic protocol values.
     92 
     93 ### Transaction signing format v1
     94 
     95 Every transfer, burn, and mine action is cryptographically scoped to one chain. Its signing or proof preimage starts with the fixed IUNA-TX type tag, the big-endian signing-format version 1, a length-prefixed UTF-8 chain ID, and the length-prefixed 32-byte genesis block hash. The remaining payload uses an explicit one-byte transaction type and canonical binary fields: big-endian fixed-width integers, length-prefixed decoded hashes, signatures and Ed25519 keys, and ordered input/output counts. JSON spelling, field order, and separators never enter the sighash. Hexadecimal fields committed by format v1 must use canonical lowercase encoding; alternate casing is rejected during signature or proof validation.
     96 
     97 Legacy transfers and burns use Ed25519 over this binary preimage. Transaction-v2 spends from version-1 addresses use both Ed25519 and ML-DSA-44 over one canonical v2 payload; this includes hybrid transfers and burns. Native and Stratum mine proofs commit the same domain and logical mine fields before proof-specific hashing. Validators reconstruct the domain from their local launch profile and genesis block, so a transaction valid on candidate, mainnet, testnet, or another genesis fails signature/proof validation everywhere else. Only the defined legacy and v2 formats are accepted.
     98 
     99 A block is invalid if any transaction ID already occurred earlier on that chain. This is especially important for inputless mine actions: without this check, someone could replay an included proof after spending its reward, recreate the same outpoint, and inflate the supply.
    100 
    101 Synthetic genesis-allocation outpoints keep their address-based derivation for the lifetime of the chain. Chain isolation is applied through transaction signatures and proofs.
    102 
    103 ## Burns Become Tickets
    104 
    105 A burn does not immediately select its own block. Instead:
    106 
    107 1. A burn is included in a block.
    108 2. It becomes a ticket after the maturity delay.
    109 3. The ticket stays eligible for a short expiry window.
    110 4. Its lottery weight is the burned amount.
    111 
    112 In the mainnet-candidate profile, tickets mature after 3 blocks and remain eligible for 3 block heights.
    113 
    114 The lottery draw for the next height is deterministic. Nodes rank all eligible burn tickets using the parent's VDF seed and output, the target height, and the ticket amounts. More burned IUNA means more weight, but the winner is still drawn by the protocol.
    115 
    116 Blocks commit the finalizer identity, mode, rank, reward, VDF rounds, leader ticket, transactions, and burn-bundle section into their VDF seed. This prevents a finalizer from completing one VDF and then cheaply changing transactions or the publication timestamp to search for a favorable next leader or committee. Ticket-block timestamps can still reflect the actual completion time, but they do not affect either draw.
    117 
    118 ## Finalizing Blocks
    119 
    120 For each block height, eligible tickets are ranked:
    121 
    122 - Rank 0 is the primary finalizer.
    123 - Rank 1, 2, and later ranks are fallback finalizers.
    124 
    125 The selected finalizer must prove ownership of the selected ticket, respect its rank time slot, and run the required VDF work. A block is valid only if the finalizer matches its ranked ticket, carries the correct leader proof, has a valid timestamp for its rank, includes a valid VDF output, and follows the transaction selection rules.
    126 
    127 Fallback finalization invalidates missed ticket opportunities. If a ticket block is finalized by rank 1 or higher, nodes invalidate all tickets ranked from 0 through the finalizing rank for that height. They also invalidate any other currently eligible tickets owned by those same addresses. Future tickets from those addresses that are not yet eligible remain pending. Rank 0 ticket blocks consume only the winning ticket.
    128 
    129 Every normal block must include at least one burn. This keeps the future ticket pool alive even during quiet periods. A node that may finalize prepares a local anchor burn for the next block from the finalizer wallet, and that anchor burn appears directly in the block.
    130 
    131 Burns use a one-block admission pipeline. A public burn is signed against the current chain tip, then queued while the child of that tip is produced. It may appear only in the following block. Validators require its signed anchor to equal the containing block's grandparent hash (the containing block's parent prev_hash). This gives the burn a full VDF interval plus the next burn-collection window to propagate without allowing the finalizer to change the transaction list after starting its VDF. A queued burn survives the first tip change and expires after its single inclusion height if it was not included. The finalizer's mandatory local burn is signed directly for the next block using the same grandparent anchor rule.
    132 
    133 Legacy and v2 burns follow the same admission, fee, inclusion, maturity, and expiry rules. A v2 burn spends hybrid outputs with dual signatures. Its ticket owner is the legacy Ed25519 component of that same hybrid wallet identity, so existing leader proofs and ticket ownership remain compatible while the funds being destroyed are protected by the hybrid authorization.
    134 
    135 The anchor burn is not a fairness mechanism. By itself, it would mostly help the current finalizer keep creating future tickets. Fairness against self-serving finalizers comes from the burn inclusion committee described below.
    136 
    137 ## VDF Timing
    138 
    139 The VDF is there to make block production sequential and time-based. It uses a Chia-compatible Wesolowski proof over a class group of imaginary quadratic forms. The 1024-bit class-group discriminant is derived deterministically from the block VDF seed, so the protocol does not rely on an RSA trusted setup or on anyone destroying hidden factors.
    140 
    141 VDF solutions are encoded with the classgroup-wesolowski-bqfc-v1 prefix followed by two 100-byte Chia BQFC forms in hexadecimal: the output y and the Wesolowski proof pi. The implementation is Rust-only and has no GMP, MPIR, or other native runtime dependency. Proof generation uses a Chia-compatible checkpoint-and-bucket time-memory tradeoff. For large workloads, the prover increases its internal pass count to keep the checkpoints within a fixed memory budget; a bounded-memory constant-space fallback remains available when no checkpoint configuration fits the allocation limits. These internal strategies produce the same proof and do not change verification or the wire format.
    142 
    143 In a local Apple Silicon release benchmark, the Rust-only checkpoint prover completed 100,000 rounds in about 0.9s. Its lower-memory fallback took about 1.8s, while the official Python/C++ Chia reference took about 0.67s. These measurements are only a performance snapshot on one machine; they do not affect consensus or the VDF wire format.
    144 
    145 The target block time is 10 minutes. The protocol retargets VDF rounds from recent observed block times:
    146 
    147 - It uses a 20 block observation window.
    148 - It uses rank 0 ticket blocks for retargeting.
    149 - It ignores fallback and recovery blocks for retargeting because their timestamps include intentional waiting.
    150 - It has a 10% deadband and a maximum 2% retarget step per adjustment.
    151 - Extremely fast or slow samples are clamped before they affect the next target.
    152 
    153 Fallback finalizers use more VDF work: rank 0 uses the base rounds, rank 1 uses 2x, rank 2 uses 3x, and so on. This gives the primary finalizer the first chance while still allowing the network to move if the primary does not publish.
    154 
    155 VDF rounds alone are not the fallback gate. Faster hardware could otherwise finish a lower-ranked VDF before a slower primary finalizer. iuna therefore also uses rank time slots:
    156 
    157 - rank 0 blocks are valid as soon as their timestamp is greater than the parent timestamp;
    158 - rank 1 blocks are valid from parent timestamp + 2 * target block time;
    159 - rank 2 blocks are valid from parent timestamp + 4 * target block time;
    160 - and so on.
    161 
    162 If a fallback finalizer finishes the VDF early, it must wait until its slot opens before publishing. Rank 0 does not wait on a rank slot; that keeps the primary path useful as the clean VDF-speed signal for retargeting. If a rank 0 finalizer finishes late, the block timestamp should reflect that later completion/publication time so VDF retargeting can observe slow rounds. Other nodes reject fallback blocks whose timestamp is before their rank slot.
    163 
    164 ## Timestamp Checks
    165 
    166 Rank slots depend on block timestamps, so timestamps are constrained by consensus:
    167 
    168 - a block timestamp must be greater than its parent timestamp;
    169 - it must exceed median-time-past;
    170 - it must not be too far in the future relative to the validating node's network-adjusted clock;
    171 - for fallback ticket blocks, it must be at or after the finalizer rank slot.
    172 
    173 The future drift limit is 2 minutes. A finalizer can lie within that small margin, but cannot skip an entire 10 minute fallback rank slot by claiming a far-future timestamp. P2P treats too-early future/slot blocks as temporal errors rather than peer-banning evidence.
    174 
    175 ## Recovery Blocks
    176 
    177 If the ticket path does not produce a valid block for long enough, recovery finalization becomes available. This can happen because selected ticket finalizers do not publish, or because they cannot satisfy the rules needed for a valid ticket block. The recovery delay is 6 target block times.
    178 
    179 A recovery block:
    180 
    181 - does not use a burn-ticket leader proof;
    182 - must include at least one burn from the recovery finalizer;
    183 - uses normal base VDF rounds;
    184 - is ignored by VDF retarget observations.
    185 
    186 Recovery is a liveness mechanism. It is not meant to be the normal block path.
    187 
    188 ## Proof-of-Work Issuance
    189 
    190 Mine actions are how new IUNA is minted after genesis.
    191 
    192 A mine action is anchored to a recent chain tip and must meet the current PoW difficulty. It creates 1 IUNA for the recipient when included in a block, and pays a fixed 1 IUNA fee to the block finalizer.
    193 
    194 Difficulty targets about one mine action per block:
    195 
    196 - The retarget window is 10 blocks.
    197 - The target is 10 mine actions per window.
    198 - Difficulty can move by at most 2 bits per window.
    199 - Difficulty has a minimum of 10 bits in the mainnet-candidate profile.
    200 - Mine actions expire when their anchor is too old.
    201 
    202 This keeps issuance separate from finalization. PoW miners compete to create mine actions; burn-ticket finalizers decide blocks.
    203 
    204 A block may contain at most 2 mine actions for the same anchor. This leaves room for the difficulty retarget to move upward when PoW regularly fills both slots, while still bounding issuance from any single anchor.
    205 
    206 Each mine proof may be included only once in the chain under the transaction-ID uniqueness rule above. Spending a mine reward never makes its proof eligible for inclusion again.
    207 
    208 ## Fair Burn Inclusion
    209 
    210 The central censorship risk is simple: what if a finalizer only includes its own burns and ignores everyone else's burns?
    211 
    212 Burn fairness is enforced by a burn inclusion committee. The committee gives independently observed burns a path into the next block, even when the block finalizer would rather ignore them.
    213 
    214 The idea is:
    215 
    216 1. Burns are ordinary mempool transactions.
    217 2. Committee members look at the valid burns they have seen.
    218 3. Each committee member signs a burn bundle for the next block height.
    219 4. The finalizer must include enough committee attestations for its rank.
    220 5. Every burn in the required burn list must appear in the block.
    221 
    222 So a censoring finalizer cannot simply leave out third-party burns that the committee witnessed. To keep censoring, it must either keep those burns away from committee members, control enough committee influence, or disrupt the normal ticket path until weaker liveness rules take over.
    223 
    224 Each block has one burn-selected finalizer and up to four additional burn committee members. The finalizer is committee slot 0; the finalizer's block signature counts as its slot 0 burn-list attestation. Additional committee selection is root-first: mature UTXO lineage weight selects a group, then a wallet with a valid ticket for the target height is selected from within that lineage.
    225 
    226 Why not weight the whole committee directly by burn tickets? Because then a large burner could buy both block production and the inclusion watchdog with the same weight. Instead, mature mined-coin lineage value determines which root groups can win additional slots. A valid ticket only determines which wallet may represent a winning group; its burn amount does not determine that root's committee weight.
    227 
    228 A UTXO lineage is a lightweight ancestry tag:
    229 
    230 1. A mine action output starts a lineage root.
    231 2. Transfer and change outputs carry that root forward.
    232 3. If a transaction spends outputs from multiple roots, descendants inherit the newest root.
    233 4. Deterministic tie-breaks handle roots with the same age.
    234 5. Outputs with no mine root have no burn-committee lineage weight.
    235 
    236 A lineage root is eligible for burn committee selection only when its mine action is at least 20 blocks old at the parent tip.
    237 
    238 Node implementation note: nodes cache this root tag on every UTXO and maintain an index from root to total unspent value, so normal validation does not need to search full ancestry.
    239 
    240 Committee selection is root-first. For each eligible lineage root, validators sum the unspent value currently tagged with that root:
    241 
    242 root_value = sum(unspent_value_micro_iuna_tagged_with_root)
    243 
    244 The root's committee weight is:
    245 
    246 root_weight = floor(log2(1 + root_value))
    247 
    248 Splitting one large root across many addresses does not multiply committee influence, because the root is weighted once and can win at most one additional burn committee slot. Merging roots deliberately collapses future descendant lineage to the newest root; lineage is a Sybil-resistance tag, not full coin-provenance accounting.
    249 
    250 The lineage weight is logarithmic. A larger root has more chance to be selected, but doubling value does not double influence forever. This keeps committee selection from becoming a simple rich-get-richer vote while still giving larger, older mined lineages some weight.
    251 
    252 For a target height and committee slot, validators derive a deterministic committee seed from the parent hash, parent VDF output, target height, and slot number. Slot 0 is assigned to the actual block finalizer. Every ticket rank can derive up to four additional slots, while the rank-dependent quorum determines how many attestations are required. Lower-ranked ticket owners that missed their slot are skipped for fallback committee selection. Extra slots are assigned without replacement by weighted deterministic draws over eligible lineage roots using root_weight.
    253 
    254 After a lineage root wins, validators deterministically choose one representative from the owners of unspent outputs tagged with that root. The representative must own a valid ticket for the target height. Non-ticket owners cannot sign for the group, even when they hold the root's largest output. The finalizer, missed fallback owners, and addresses already selected for an earlier slot are skipped. If no eligible ticket-owning representative remains for a root, that root cannot provide a committee slot.
    255 
    256 The protocol can detect addresses and lineage roots, not hidden common control, so a finalizer using unrelated addresses is still a social and economic risk rather than something this rule can perfectly identify.
    257 
    258 If fewer eligible roots contain an eligible non-finalizer ticket wallet, the committee is smaller. If none exists, burn inclusion quorum falls back to 1-of-1 through the finalizer's implicit slot 0 attestation.
    259 
    260 ### Burn Committee Reward Split
    261 
    262 The block reward is the total fee reward for the block. It remains a single deterministic amount in the block, but validators credit it as one or more implicit reward outputs.
    263 
    264 For normal ticket blocks, lower-rank finalization pays more to the independent burn-inclusion committee:
    265 
    266 - rank 0: the finalizer receives 50%; the non-finalizer members whose attestations are included split the other 50% equally;
    267 - rank 1: the finalizer receives 50%; the non-finalizer members whose attestations are included split the other 50% equally;
    268 - rank 2 and later: the finalizer receives 100%.
    269 
    270 Recovery blocks pay 100% to the recovery finalizer.
    271 
    272 Only attestations actually included in the block earn a committee share. If no extra committee attestation is required, the finalizer receives the full reward. Integer amounts are rounded down into the committee half (reward / 2), so the finalizer receives the remainder when the reward is odd. Committee reward outputs do not create UTXO lineage; lineage selection remains based on mature mine-action descendants. Starting at height 3750, finalizer and rewarded committee outputs use authenticated version-1 hybrid payout addresses. The finalizer signs its block payout address with its legacy identity; each committee member binds its payout address into its signed burn bundle.
    273 
    274 A committee member can sign one burn bundle for its slot, height, and parent hash. A bundle is at most 10,000 bytes and lists valid fee-paying pending legacy and v2 burns eligible at that height, ordered by absolute fee and then transaction identifier. Burns queued for the following height are not included yet. Honest committee policy is to include every valid burn it selects by that canonical ordering, or to sign an empty bundle only when the signer knows no valid burn for that height. Empty bundles are an honest-policy signal, not something validators can prove from their own mempools. Consensus checks committee membership, signature validity, lineage assignment, ordering, and threshold.
    275 
    276 Automatic nodes wait about 30 seconds after seeing pending burns for the next height before signing a burn bundle or starting the burn-list-bound VDF. This gives burn gossip time to settle and avoids locking in an underfilled bundle from the first partial batch a node received.
    277 
    278 A block contains legacy and v2 transactions plus one compact burn-bundle section. The finalizer's anchor burn is reserved before optional transactions, whether it uses legacy or hybrid funds.
    279 
    280 The compact burn-bundle section stores:
    281 
    282 - up to four explicit burn committee bundle signatures for non-finalizer slots, in slot order;
    283 - deduplicated required legacy and v2 burn lists; and
    284 - a small bitmask per burn saying which of the included committee bundles contained that burn.
    285 
    286 The required burn list is the union of fee-paying burns contained in the attestations the block uses. If one committee member signs an empty bundle and another signs a bundle with burns, the required list still includes the burns from the non-empty bundle.
    287 
    288 Required burns must fit in the block. Nodes reject burn bundles or attestation sets whose deduplicated required burn list cannot fit within the block size and transaction count limits.
    289 
    290 Validators reconstruct each signed committee bundle from this compact section before checking signatures, bundle size, slot assignment, lineage-based slot assignment, and fee ordering. The finalizer's block signature is treated as its committee attestation for slot 0. Slot 0 does not have a separate burn bundle signature; it attests to the block's deduplicated required burn list as included by the finalizer. This keeps consensus bound to the independent burn attestations without storing the same burn payload multiple times when multiple committee members selected it.
    291 
    292 Block validity is not allowed to depend on a validator's local mempool. Validators decide the required burn-list threshold from deterministic chain and block data only. Pending burns can affect local relay, bundle-signing, and block-building policy, but they cannot make the same block valid on one node and invalid on another.
    293 
    294 A block may contain at most one bundle per slot. If a block includes one valid bundle for a slot, validators check that included bundle and do not need to know whether another bundle for the same slot existed elsewhere. If a block builder sees the same assigned member sign two different bundles for the same height, parent, and slot before block assembly, it ignores that member's bundles for the round as local safety policy. Different ticket ranks can assign different members to the same slot, so those bundles do not conflict. The current protocol does not have a separate slashing rule for this.
    295 
    296 Ticket blocks need a rank-dependent threshold of burn-list attestations. Rank 0 has the strictest rule because it is the preferred path. Missed lower-rank ticket owners are excluded from fallback committees, but each rank can still select up to five committee members from the remaining eligible owners.
    297 
    298 That is a deliberate liveness tradeoff. A block only commits to the bundles it includes, so burns seen exclusively by non-selected or omitted committee members are not required. Lower ranks use a smaller threshold and are therefore weaker for fairness, but preserve liveness when the preferred path is stuck.
    299 
    300 The available committee size is the finalizer plus the selected non-finalizer committee members for that height:
    301 
    302 - rank 0 needs min(3, committee size) attestations (3-of-5, 3-of-4, 3-of-3, 2-of-2, or 1-of-1), where the finalizer's block signature counts as the slot 0 attestation;
    303 - rank 1 needs min(2, committee size) attestations (2-of-5 through 2-of-2, or 1-of-1);
    304 - rank 2 and later ticket finalizers need only the finalizer's implicit slot 0 attestation (1-of-n).
    305 
    306 Recovery blocks do not require burn-list signatures. They are the last liveness escape hatch after the ticket path has failed, so committee failure must not be able to stop the chain forever. Recovery is weaker for fairness and is not meant to be the normal block path.
    307 
    308 Burn-committee lineage draws use the same ungrindable parent randomness as the leader lottery: the parent VDF seed and VDF output. The target height and committee slot are separate inputs to each draw. This prevents a completed ticket VDF from being reused with different publication timestamps to search for a favorable next committee.
    309 
    310 The ticket-block VDF seed includes a content commitment that covers the finalizer, mode, rank, reward, VDF rounds, selected ticket, transactions, and burn-bundle section:
    311 
    312 seed = hash(parent hash || height || content commitment || attestation_hash[0] || ... || attestation_hash[4])
    313 
    314 Recovery blocks also bind the block timestamp into the VDF seed:
    315 
    316 seed = hash(parent hash || height || timestamp_ms || content commitment || attestation_hash[0] || ... || attestation_hash[4])
    317 
    318 The burn-list attestation hashes are part of the VDF seed. This forces the finalizer to choose the included burn-attestation set before doing the delay work. After the VDF is computed, changing that attestation set changes the seed and invalidates the work.
    319 
    320 Slot 0 uses a synthetic finalizer attestation hash derived from the parent, height, finalizer address, and the block's canonical deduplicated required burn list. Slots 1 through 4 use the signed burn-bundle hash or the fixed default hash when absent.
    321 
    322 For recovery blocks, missing burn-list attestations use the fixed default hashes. A recovery block may include available burn bundles, but it does not need burn bundles in order to be valid.
    323 
    324 Every burn in the deduplicated required burn list must appear in the block. A required burn is executed only once even if multiple committee bundles contained it. The block may also include additional valid burns not present in the required list, but those additional burns do not count toward the committee attestation threshold.
    325 
    326 Every transaction that consumes normal block space must pay a fee. Transfers and burns with zero fee are invalid; the finalizer's local anchor burn is an ordinary fee-paying burn. Mine actions pay the deterministic mine action fee. Genesis burns are the only zero-fee burn transactions, and they are valid only inside the genesis block.
    327 
    328 This does not make censorship impossible. A finalizer can still censor burns that no committee member has seen, and a well-funded attacker can try to control enough UTXO lineage weight to dominate the burn committee. But the attack is no longer just "win the block and leave out everyone else." The attacker also has to beat the independent inclusion layer, or force the chain onto weaker liveness paths.
    329 
    330 ## P2P Mempool Gossip
    331 
    332 Nodes gossip:
    333 
    334 - transfers;
    335 - burns;
    336 - canonical transaction-v2 envelopes, including hybrid transfers and burns;
    337 - mine actions;
    338 - signed burn bundles;
    339 - burn-bundle requests for missing committee slots at a specific next-block height and parent hash;
    340 - block inventory and blocks.
    341 
    342 Legacy anchor burns are prepared locally by the finalizer. Hybrid anchor burns use the v2 mempool so they survive restart and can be relayed and attested before inclusion.
    343 
    344 When a ticket finalizer is collecting burn-bundle attestations and has fewer signatures than its
    345 rank requires, it may request the missing slots. Peers answer from their local cache with matching
    346 signed burn bundles for that height, parent hash, and slot set.
    347 
    348 Nodes only keep transactions in their local mempool when they are valid, fee-paying, and unexpired. Pending and orphan transaction pools are bounded by both item count and serialized byte size. A signed burn bundle is limited to 10,000 bytes, and nodes only cache valid bundles for the next height and current parent.
    349 
    350 When the pending count or byte bound is reached, a node admits an independent transaction only if its fee rate is strictly higher than the lowest evictable pending package. Package eviction removes dependent pending transactions and orphan descendants together. This is local relay policy, not a block-consensus rule.
    351 
    352 ## Block Selection
    353 
    354 When a node builds a block, the flow is:
    355 
    356 1. Collect valid signed burn bundles for the next height.
    357 2. Reserve an eligible legacy or v2 anchor burn from the finalizer wallet.
    358 3. For recovery blocks, ensure at least one anchor burn is from the recovery finalizer.
    359 4. Include every legacy and v2 burn required by the selected burn-bundle attestations.
    360 5. Fill remaining block space with valid fee-paying legacy and v2 transactions ordered by fee rate. Mine actions are limited to 2 actions per anchor.
    361 6. Bind the VDF seed to the five burn-attestation slot hashes, using default hashes for missing slots. Slot 0 uses the synthetic finalizer attestation hash instead of a separate burn-bundle signature.
    362 
    363 Blocks are bounded by transaction count and exact compact stored block-body size. The mainnet-candidate maximum is 1,000,000 bytes. Block admission checks the finished block with the parent chain's compact reference context. Block construction uses the same encoder while reserving mandatory anchor and attested burns before filling the remaining space.
    364 
    365 ## Fork Choice
    366 
    367 Nodes fully validate candidate blocks or snapshots before considering a reorg. A candidate chain must share the same genesis.
    368 
    369 Burn inclusion is part of block validity. If a ticket block carries burn-list attestations but omits a burn required by those attestations, nodes reject the block before fork choice. The fork choice rule only compares chains made of valid blocks.
    370 
    371 A rank 0 ticket block requires signatures from strictly more than two thirds of its selected burn committee. The leader counts as one signer through its leader proof; the other signers use burn-bundle signatures. Every signature commits to the child height and parent hash, so a valid rank 0 child certifies its parent. For a five-slot committee, this means the leader plus three explicit committee signatures. Smaller committees require floor(2n/3) + 1 total signatures. Rank 1, later ticket ranks, and recovery blocks use their liveness thresholds but do not create an objective finality checkpoint.
    372 
    373 Fork choice compares the highest valid checkpoint before chain length. A higher checkpoint wins even when its current tip is shorter, so healthy partitions can converge after more than six blocks. When checkpoints are identical, the taller chain wins. Equal-height chains use the existing first-divergent leader-score comparison. If certificates conflict at the same height, nodes choose the lexicographically smaller checkpoint hash. A strictly higher conflicting certificate supersedes a lower checkpoint.
    374 
    375 This is recoverable objective finality, not a promise that a finalized block can never be reorganized. “Finalized” means that the selected committee for the next rank 0 block signed the block's hash as its parent with a strict two-thirds quorum, and that no competing chain has a better checkpoint under the public rule above. Nodes do not use first-seen or first-peer trust to resolve a fork.
    376 
    377 ## Genesis and Joining
    378 
    379 Genesis is explicit. A normal node without a chain starts in setup mode and waits to join an existing chain from peers rather than silently creating a separate chain.
    380 
    381 The genesis flow bootstraps the mainnet-candidate network with an initial burn ticket and a fixed 1 IUNA initial reward for the genesis wallet. New nodes fetch and validate chain snapshots from peers, then continue with normal block validation.
    382 
    383 ## What This Design Is Trying to Achieve
    384 
    385 iuna is trying to make these things true at the same time:
    386 
    387 - Finalization should not require specialized mining hardware.
    388 - New issuance should not require already owning a large stake.
    389 - Burns should have real opportunity cost.
    390 - Burn timing power should expire rather than accumulate into permanent control.
    391 - Block timing should be hard to rush.
    392 - Finalizers should have a consensus-level reason to include independently witnessed burn traffic.
    393 
    394 The design is intentionally small and still evolving. The candidate exists to find out whether these assumptions hold under mainnet-like operation and where they break.