iuna

iuna

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

commit 45f609be411892be090984d17c34d5510c230127
parent 54cf76e13bfcde8f725086cb658e6b82c70725a2
Author: Joris Hartog <jorishartog@hotmail.com>
Date:   Wed,  2 Sep 2026 21:17:11 +0200

docs: remove legacy protocol guidance

Diffstat:
Mdocs/protocol.md | 49++++++++-----------------------------------------
1 file changed, 8 insertions(+), 41 deletions(-)

diff --git a/docs/protocol.md b/docs/protocol.md @@ -1,7 +1,5 @@ # iuna protocol in simple terms -This document describes the current protocol after height `1000`. It does not describe older protocol rules. - iuna is an experimental mainnet-candidate protocol that combines three mechanisms: - **Burn lottery:** burning IUNA creates tickets for future block finalization. @@ -66,29 +64,13 @@ the expected network prefix and version, require exactly 32 payload bytes, and parse those bytes as a non-weak Ed25519 verifying key. An all-uppercase address is accepted and normalized to lowercase; mixed uppercase/lowercase is invalid. -Consensus objects and persisted chainstate continue to store the same public -key as canonical 64-character lowercase hexadecimal. The management wallet, -address book, transfer endpoints, and Stratum worker usernames decode Bech32m -to that internal key before constructing a transaction. This boundary keeps the -checksum and network distinction out of consensus identity while avoiding any -rewrite of genesis allocation outpoints, historical UTXOs, signatures, or block -hashes. - -Legacy hexadecimal addresses are therefore not valid recipient or address-book -input. Before mainnet genesis, contacts must replace them with an address newly -copied from the owner's upgraded wallet. The code exposes an explicit -`migrate_legacy_address` conversion for controlled migration tooling, but no UI -silently guesses a network or upgrades an entered hex string. Wallet files keep -their internal hex public key and need no seed or file migration. - -This address rollout does not require a consensus activation height: decoded -transactions contain the same internal public-key bytes and therefore produce -the same signatures, transaction IDs, blocks, and UTXO identities understood by -older nodes. It does require a coordinated client rollout. Older wallets expose -hex receive values that upgraded send forms reject, and existing Stratum miners -must replace their hex worker username with the Bech32m form before connecting -to an upgraded node. Wallet UI, backend, and Stratum configuration should be -upgraded together. +Consensus identity is the exact 32-byte Ed25519 verifying key, represented in +consensus objects and persisted chainstate as canonical 64-character lowercase +hexadecimal. The management wallet, address book, transfer endpoints, and +Stratum worker usernames accept Bech32m addresses and decode them to that +internal key before constructing a transaction. Recipient, address-book, and +Stratum username input rejects raw hexadecimal keys. This boundary keeps the +checksum and network distinction out of consensus identity. ## Coins and Transactions @@ -146,7 +128,7 @@ The anchor burn is not a fairness mechanism. By itself, it would mostly help the 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. -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. Older RSA-modulus and GMP class-group VDF outputs are not valid for this protocol version. +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. 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. @@ -385,21 +367,6 @@ Genesis is explicit. A normal node without a chain starts in setup mode and wait 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. -## Local Chain Persistence And Reset Boundary - -The local `chain.sqlite3` database stores one atomically replaced compact -snapshot blob plus independently checked tip height and tip hash metadata. The -current release writes snapshot format v7 and accepts v6 and v7. Legacy JSON -databases and compact versions older than v6 are deliberately not decoded or -migrated; they are checkpointed, renamed with a unique `.pre-v6` suffix, and -replaced by a fresh database during startup. - -The coordinated reset associated with that persistence boundary created the -live mainnet-candidate chain and is complete. Current nodes without compatible -chain state should retain their wallet and configuration files and join a -published candidate peer; they must not create a separate genesis. Detailed -recovery and archive commands are in [Operator Failure Playbooks](operator-playbooks.md). - ## What This Design Is Trying to Achieve iuna is trying to make these things true at the same time: