iuna

iuna

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

commit 2f9e36f63a076d87b9dc422271061d08de22c012
parent 94b6ef22e67029631608daaf45a781d286bf8a95
Author: Joris Hartog <jorishartog@hotmail.com>
Date:   Wed,  2 Sep 2026 10:57:12 +0200

Refresh public site and live candidate docs

Diffstat:
MPLAN.md | 2+-
MREADME.md | 25+++++++++++++------------
MROADMAP.md | 31+++++++++++++++++--------------
Mdocs/operator-playbooks.md | 31+++++++++++++++++--------------
Mdocs/protocol.md | 21+++++++++++++++------
Mdocs/security-review.md | 30+++++++++++++++++-------------
Awww/assets/og.png | 0
Mwww/index.html | 398+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------
8 files changed, 398 insertions(+), 140 deletions(-)

diff --git a/PLAN.md b/PLAN.md @@ -92,7 +92,7 @@ burn bundle 10kB selection, snapshot replay, blockspace-flood bounded mempool selection, P2P batch parsing, P2P line-size enforcement, and Stratum request line-size enforcement. -Goal: make valid input DoS visible before launch. +Goal: make valid input DoS visible before mainnet promotion. Budgets: diff --git a/README.md b/README.md @@ -1,6 +1,6 @@ # iuna -iuna is an experimental cryptocurrency network preparing to launch its mainnet candidate. +iuna is an experimental cryptocurrency network running a live mainnet-candidate chain. It combines three ideas: @@ -10,9 +10,9 @@ It combines three ideas: ## Status -iuna is still in development. It is not mainnet yet and remains experimental. The upcoming mainnet-candidate ledger is intended to be preserved if it proves stable enough for promotion, but that outcome is not guaranteed. +iuna is still in development. Its mainnet-candidate network is live, but it is not mainnet yet and remains experimental. The live candidate ledger is intended to be preserved if it proves stable enough for promotion, but that outcome is not guaranteed. -The goal right now is to launch and operate that candidate with mainnet-like release, security, and recovery procedures while learning how the protocol behaves with real users. +The goal right now is to operate and harden the live candidate with mainnet-like release, security, and recovery procedures while learning how the protocol behaves with real users. ## Why Another Crypto? @@ -65,7 +65,7 @@ The deployment script builds Linux CLI archives for x86_64 and aarch64, builds t Release and deploy with: ```sh -./deployment.sh 0.2.48 +./deployment.sh 0.4.7 ``` By default, deployment audits all three Rust lockfiles, enforces the dependency @@ -77,7 +77,7 @@ to the pinned Rust 1.88 toolchain. To explicitly skip the long-running suites: ```sh -./deployment.sh --skip-long-tests 0.2.48 +./deployment.sh --skip-long-tests 0.4.7 ``` To start a new chain, deploy with `--genesis`. This asks for confirmation, @@ -85,7 +85,7 @@ deletes and recreates the permanent `local-path-db-pvc`, and starts the node once with `--genesis`. The existing chain data is permanently removed: ```sh -./deployment.sh --genesis 0.4.0 +./deployment.sh --genesis 0.4.7 ``` Deployment publishes two images to the `jhx-app` k3s cluster: @@ -97,7 +97,7 @@ Deployment publishes two images to the `jhx-app` k3s cluster: Useful overrides: ```sh -IUNA_DEPLOY_HOST=root@jhx.app IUNA_KUBECTL_CONTEXT=jhx-app ./deployment.sh 0.2.48 +IUNA_DEPLOY_HOST=root@jhx.app IUNA_KUBECTL_CONTEXT=jhx-app ./deployment.sh 0.4.7 ``` ## What You Can Run @@ -205,11 +205,12 @@ with `docker compose down -v`, because consensus launch profiles cannot be changed in place. The five-slot committee is also a consensus reset: volumes created by the earlier three-slot protocol must likewise be recreated. -The next release also introduces compact snapshot v6 and deliberately provides -no old-chain migration. On startup, legacy chain databases are archived with a -`.pre-v6` suffix and replaced by a fresh database; wallet and configuration -files are retained. All nodes must still participate in the coordinated network -reset and create or join the agreed new genesis. See the operator playbooks for +The current release writes compact snapshot v7 and accepts snapshot versions v6 +and v7. Legacy JSON databases and compact versions older than v6 are archived +with a `.pre-v6` suffix and replaced by a fresh database; wallet and +configuration files are retained. The coordinated reset that created the live +mainnet-candidate chain is complete. Existing and new operators should join that +chain instead of creating another genesis. See the operator playbooks for details and manual archive commands. Stop the network while keeping chain data: diff --git a/ROADMAP.md b/ROADMAP.md @@ -1,19 +1,19 @@ # Roadmap -iuna is preparing to launch an experimental mainnet-candidate network. This roadmap is the canonical planning document for completing pre-candidate hardening and, if the candidate stays healthy, promoting that same chain to mainnet. +iuna is operating a live experimental mainnet-candidate network. This roadmap is the canonical planning document for stabilizing that candidate and, if it stays healthy, promoting the same chain to mainnet. ## Current Phase -Mainnet-candidate launch preparation. +Live mainnet-candidate stabilization and promotion evidence. -The current goal is to finalize release evidence and launch operations while preserving the confidence already built in consensus, sync, recovery, fork choice, transaction handling, and release operations. +The current goal is to operate the candidate without unplanned resets, collect live evidence, and close the remaining security, recovery, sync, and promotion gates. ## Mainnet Readiness Checklist - [x] Protocol rules are frozen for mainnet candidate. - [x] Block, transaction, ticket, VDF, recovery, fork-choice, and peer compatibility rules are documented. - [x] Long-running testnet has stayed stable with independent nodes for an agreed window. -- [ ] Mainnet-candidate network has launched from a fresh genesis using release artifacts. +- [x] Mainnet-candidate network has launched from a fresh genesis using release artifacts. - [ ] New nodes can sync from genesis without manual intervention. - [ ] Stale nodes can reconnect and catch up from old snapshots/range sync. - [ ] Post-activation network partitions have an implemented objective checkpoint-based recovery rule; live soak evidence is still required to close this gate. @@ -30,13 +30,13 @@ The current goal is to finalize release evidence and launch operations while pre - [x] Upgrade and rollback instructions exist. - [x] Basic operational monitoring is available for height, tip hash, peers, last block age, finalizer mode, VDF rounds, mempool, and rejected blocks. -Security review tracking lives in [Security Review Checklist](docs/security-review.md). Do not check the security-review item complete until its sign-off table is filled and the launch-blocking review items are resolved or explicitly accepted for the candidate. +Security review tracking lives in [Security Review Checklist](docs/security-review.md). Do not check the security-review item complete until its sign-off table is filled and the promotion-blocking review items are resolved or explicitly accepted. -## Pre-Candidate Launch Test Backlog +## Candidate Launch Test Backlog (Completed) -These items are not protocol rules. They are the attack and reliability checks to finish or consciously defer before the planned reset of the current `0.3.10` network that creates the mainnet-candidate network. If that candidate stays healthy through the agreed window, the same genesis, chain history, UTXOs, and mined coins should be promoted to mainnet instead of being reset again. +These items are not protocol rules. They record the attack and reliability work completed before the live mainnet-candidate network was created. If the candidate stays healthy through the agreed window, the same genesis, chain history, UTXOs, and mined coins should be promoted to mainnet instead of being reset again. -### Must Before Candidate Genesis +### Completed Before Candidate Genesis - [x] Burn bundle relay cannot import embedded burns before bundle metadata, membership, signature, fee ordering, and size are prechecked. - [x] Block validation with burn attestations remains independent of local mempool contents, including empty and conflicting mempools. @@ -79,17 +79,17 @@ Focus: make failure modes boring and observable. - [x] Add or improve operator-facing health metrics. - [x] Document common testnet failure/recovery playbooks. -### M2: Mainnet Candidate +### M2: Live Mainnet Candidate -Focus: launch the candidate with mainnet-like process and treat it as the chain that can become mainnet if it stays healthy. +Focus: operate the live candidate with mainnet-like process and treat it as the chain that can become mainnet if it stays healthy. - [x] Freeze protocol parameters for the candidate. -- [ ] Create a fresh mainnet-candidate genesis. -- [ ] Publish bootnodes and release artifacts. -- [ ] Publish checksums for every release artifact. +- [x] Create a fresh mainnet-candidate genesis. +- [x] Publish bootnodes and release artifacts. +- [x] Publish checksums for every release artifact. - [x] Document node setup, backup, restore, and upgrade steps. - [ ] Run a candidate network for an agreed stability window. -- [x] Treat resets as launch-blocking incidents unless explicitly planned. +- [x] Treat resets as promotion-blocking incidents unless explicitly planned. - [ ] Decide and publish whether the candidate ledger is promoted to mainnet without a second genesis. ### M3: Mainnet Launch @@ -144,3 +144,6 @@ Normal local development may skip ignored long-running property tests and long f - 2026-09-01: Post-height-1000 operation is the standard integration baseline; deployment restores mature checkpoints instead of treating genesis-only runs as sufficient release coverage. +- 2026-09-02: Update project status to reflect that the mainnet-candidate network + is live. The candidate manifest and promotion decision remain explicit open + publication gates. diff --git a/docs/operator-playbooks.md b/docs/operator-playbooks.md @@ -139,18 +139,20 @@ Avoid: - deleting the chain database before capturing the startup error; - using `--genesis` to recover an old node. `--genesis` is only for creating a fresh network. -## Coordinated Snapshot V6 Reset +## Legacy Pre-v6 Reset -The next release accepts compact local snapshot format v6 only and does not migrate earlier chain history. This is a planned consensus/network reset, not a corrupted-database incident. At startup, the node detects the legacy JSON schema and compact snapshot versions older than v6, checkpoints the database, archives it as `chain.sqlite3.pre-v6` (or the next available numbered suffix), and creates a fresh v6 database. The UI cache is then cleared normally. Wallet and configuration files are left untouched. +The live candidate release writes compact snapshot v7 and accepts snapshot +versions v6 and v7. At startup, the node detects the legacy JSON schema and +compact snapshot versions older than v6, checkpoints the database, archives it +as `chain.sqlite3.pre-v6` (or the next available numbered suffix), and creates a +fresh database. The UI cache is then cleared normally. Wallet and configuration +files are left untouched. -All operators must still agree on the release, genesis, network identity, bootnodes, and start time before bringing public nodes back online. Automatic local archiving does not coordinate genesis. - -Before upgrading: - -1. Stop the node and back up `wallet.json` and `config.json`; verify that the backups are readable. -2. Start exactly one designated node with a fresh chain database and `--genesis`, record its genesis hash, and publish that hash with the release commit and checksums. -3. Start every other node without `--genesis` and join a trusted published bootnode. Its incompatible chain database is archived automatically. -4. Preserve the generated `.pre-v6` archive if the old chain is needed as historical evidence. +The coordinated reset that created the live mainnet-candidate genesis is +complete. A current operator encountering a pre-v6 archive should join the +published candidate bootnode without `--genesis`; creating another genesis would +create a separate, incompatible network. Preserve the generated `.pre-v6` +archive if the old chain is needed as historical evidence. Manual equivalent for operators who want to choose the archive names before starting: @@ -165,11 +167,12 @@ For the disposable Compose testnet, `docker compose down -v` removes all volumes Avoid: - running multiple independent `--genesis` nodes; -- copying an old snapshot blob into a v6 database; +- using `--genesis` to join or recover the live mainnet candidate; +- copying an old snapshot blob into the current chain database; - deleting or replacing wallets as part of the chain reset; -- starting before the published genesis hash and release checksum are available. +- joining a peer before checking the published network identity and release checksum. -## Height 1000 Consensus Upgrade +## Height 1000 Consensus Activation Height `1000` is a coordinated consensus activation. At that height, VDF seeds start committing to block content and ticket draws stop using the final block @@ -183,7 +186,7 @@ them. This preserves blocks, snapshots, and UTXOs below build an incompatible fork at activation. No database reset, new genesis, or migration command is needed for this height activation. -Before height `1000`: +Required activation procedure: 1. Publish a tagged release, commit, checksums, and the activation height. 2. Upgrade every known public peer, finalizer, and bootstrap node. diff --git a/docs/protocol.md b/docs/protocol.md @@ -52,9 +52,9 @@ The current mainnet-candidate parameter set is intentionally close to Bitcoin wh Changing any value in this section requires a conscious mainnet-candidate reset or later hard-fork process. -Transaction signing format v1, chain-wide transaction replay protection, and objective finality activate automatically at height `1000`. Existing chain state and history remain valid; operators only need to upgrade every consensus node before activation. A chain-ID or genesis change remains a separate consensus reset. +Transaction signing format v1, chain-wide transaction replay protection, and objective finality activate automatically at height `1000`. Existing chain state and history remain valid. Nodes following post-activation chain history must run an activation-capable release; a chain-ID or genesis change remains a separate consensus reset. -The consensus block-size limit is the exact number of bytes produced by the compact snapshot v6 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. +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. 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 transaction inputs, implicit burn change where possible, and transaction indexes for 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. @@ -410,7 +410,7 @@ For forks that first diverge at or after height `1000`, fork choice compares the This is **recoverable objective finality**, not an irreversible 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. No node uses first-seen or first-peer trust to resolve a post-activation fork. -An upgraded node that has reached height `1000` will not rewrite history below `1000`. Operators must therefore verify that the candidate network agrees on height `999` before activation. A node still below activation follows the legacy six-block rule while catching up; the candidate-to-mainnet promotion manifest can later pin a signed checkpoint without changing this ledger. +An upgraded node that has reached height `1000` will not rewrite history below `1000`. The coordinated activation therefore required agreement on the candidate block hash at height `999`. A node still replaying history below activation follows the legacy six-block rule while catching up; the candidate-to-mainnet promotion manifest can later pin a signed checkpoint without changing this ledger. ## Genesis and Joining @@ -420,9 +420,18 @@ The genesis flow bootstraps the mainnet-candidate network with an initial burn t ## 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. Snapshot format v6 is the only accepted local format in the next release; older compact snapshot versions are deliberately not decoded or migrated. Legacy JSON databases and compact versions older than v6 are checkpointed, renamed with a unique `.pre-v6` suffix, and replaced by a fresh database during startup. - -This persistence change is paired with a coordinated network reset. Every node must start the next release without its previous chain and UI databases, then either create the agreed new genesis or join a trusted peer on that new chain. Wallet and configuration files are not chain state and should be retained. Detailed recovery and reset commands are in [Operator Failure Playbooks](operator-playbooks.md). +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 diff --git a/docs/security-review.md b/docs/security-review.md @@ -1,8 +1,9 @@ # Security Review Checklist -This document tracks the pre-mainnet security review. It is a review ledger, not -a claim that mainnet is safe. Keep the roadmap security-review checkbox open -until every launch-blocking item below is resolved or explicitly accepted. +This document tracks the security review of the live mainnet candidate before a +mainnet promotion decision. It is a review ledger, not a claim that mainnet is +safe. Keep the roadmap security-review checkbox open until every +promotion-blocking item below is resolved or explicitly accepted. ## Review Scope @@ -107,7 +108,7 @@ Evidence already in the tree: - P2P tests in `src/adapters/p2p/tests.rs`; - compact snapshot malformed-input tests in `src/adapters/chain_store/compact.rs`; - compact block-size boundary tests proving that selection and consensus use the - same snapshot v6 block-body encoder; + same current compact snapshot block-body encoder; - fuzz targets for `p2p_envelope`, `compact_snapshot`, and `domain_json`. ### Wallet, Key Storage, And HTTP Auth @@ -163,7 +164,8 @@ Evidence already in the tree: ## Required Release Evidence -Before the mainnet-candidate launch, attach or publish logs for: +For every release deployed to the live mainnet-candidate network, attach or +publish logs for: ```sh ./scripts/check-dependencies.sh @@ -190,7 +192,7 @@ The deployment script runs these gates for release builds. Keep the exact command output with the candidate release notes so independent operators can see which revision was tested. -## Launch-Blocking Review Items +## Promotion-Blocking Review Items - VDF implementation: `docs/protocol.md` documents the Rust-only, Chia-compatible class-group Wesolowski VDF and its @@ -249,10 +251,12 @@ see which revision was tested. - Public exposure: verify bootnodes expose only the intended P2P and optional Stratum ports, and that the management UI remains bound to a local or otherwise protected address. -- Candidate manifest: release coordination must publish the real genesis hash, - network ID, bootnodes, checksums, reset and rollback instructions, release tag, - and git commit before the stability window starts. The protocol and operator - playbooks are the maintained in-tree references. +- Candidate manifest: because the candidate is live, release coordination must + publish and preserve the real genesis hash, network ID, bootnodes, checksums, + reset and rollback instructions, release tag, and git commit as part of the + candidate record. The manifest remains a promotion blocker until it is + published and reviewed. The protocol and operator playbooks are the maintained + in-tree references. - Release evidence: keep successful release-gate logs from the exact tagged candidate revision. - Desktop dependency security: the project and release builders use Rust 1.88. @@ -268,9 +272,9 @@ see which revision was tested. transitive stack on every Tauri upgrade and no later than 2026-11-30. - Height `1000` activation: the release activates both grinding resistance and transaction signing format v1 plus chain-wide transaction-ID replay protection - automatically. All candidate nodes must upgrade before activation; the height - activation itself requires no chain-state reset or operator migration command, - but mixed versions will split at height `1000`. + automatically. Nodes running pre-activation software cannot follow candidate + history at or after height `1000`. The activation itself requires no chain-state reset + or operator migration command, but mixed versions split at height `1000`. ## Sign-Off Table diff --git a/www/assets/og.png b/www/assets/og.png Binary files differ. diff --git a/www/index.html b/www/index.html @@ -4,8 +4,19 @@ <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="color-scheme" content="dark"> - <meta name="description" content="iuna is an experimental mainnet-candidate cryptocurrency network that combines VDF finalization, a burn lottery, and proof-of-work issuance."> - <title>iuna Mainnet Candidate</title> + <meta name="description" content="Help test iuna, an open cryptocurrency experiment exploring temporary consensus power, open issuance, and a network shaped by its participants."> + <meta property="og:title" content="Help test a different kind of network."> + <meta property="og:description" content="iuna is an open cryptocurrency experiment. Try the app, run a node, test the network, or explore the protocol."> + <meta property="og:type" content="website"> + <meta property="og:url" content="https://getiuna.org/"> + <meta property="og:image" content="https://getiuna.org/assets/og.png"> + <meta property="og:image:alt" content="iuna — Help test a different kind of network"> + <meta name="twitter:card" content="summary_large_image"> + <meta name="twitter:title" content="Help test a different kind of network."> + <meta name="twitter:description" content="iuna is an open cryptocurrency experiment. Try the app, run a node, test the network, or explore the protocol."> + <meta name="twitter:image" content="https://getiuna.org/assets/og.png"> + <meta name="twitter:image:alt" content="iuna — Help test a different kind of network"> + <title>iuna — Help Test a Different Kind of Network</title> <style> :root { color-scheme: dark; @@ -117,11 +128,11 @@ } .dot { width: 8px; height: 8px; border-radius: 999px; background: var(--green); box-shadow: 0 0 18px rgba(213, 245, 95, .75); } h1 { - max-width: 760px; + max-width: 800px; margin: 0 0 8px; - font-size: clamp(48px, 9vw, 104px); - line-height: .92; - letter-spacing: 0; + font-size: clamp(46px, 7.4vw, 82px); + line-height: .96; + letter-spacing: -.035em; } .pronunciation { margin: 0 0 20px; @@ -132,7 +143,8 @@ h2 { margin: 0 0 12px; font-size: 28px; line-height: 1.1; letter-spacing: 0; } h3 { margin: 0 0 8px; font-size: 16px; letter-spacing: 0; } p { max-width: 720px; color: #b7c3c9; font-size: 17px; line-height: 1.6; } - .lead { color: #eef4f6; font-size: 21px; } + .lead { max-width: 700px; color: #eef4f6; font-size: 21px; } + .hero-support { max-width: 650px; margin-bottom: 0; } .actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 26px; } .candidate-callout { position: relative; @@ -245,6 +257,125 @@ .tag.green { border-color: rgba(213, 245, 95, .42); color: var(--green); } .tag.cyan { border-color: rgba(141, 233, 205, .4); color: var(--cyan); } .tag.blue { border-color: rgba(139, 220, 255, .4); color: var(--blue); } + .tag.amber { border-color: rgba(255, 208, 112, .4); color: var(--amber); } + .section-kicker { + color: var(--green); + font-size: 11px; + font-weight: 900; + letter-spacing: .08em; + text-transform: uppercase; + } + .principle-list { border-top: 1px solid var(--line); } + .principle-row { + display: grid; + grid-template-columns: minmax(130px, .58fr) minmax(190px, .9fr) minmax(0, 1.45fr); + gap: 22px; + align-items: baseline; + border-bottom: 1px solid var(--line); + padding: 18px 0; + } + .principle-row .tag { width: fit-content; margin: 0; } + .principle-row h3 { margin: 0; font-size: 18px; } + .principle-row p { margin: 0; font-size: 15px; } + .participation-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } + .participation-card { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 16px; + align-items: start; + border: 1px solid var(--line); + border-radius: 8px; + padding: 18px; + background: rgba(21, 25, 27, .88); + } + .participation-card:hover { border-color: #465159; } + .participation-card h3 { margin-top: 2px; font-size: 19px; } + .participation-card p { margin: 0; font-size: 15px; } + .participation-card .button { margin-top: 16px; } + .effort { + white-space: nowrap; + border: 1px solid #39444a; + border-radius: 999px; + padding: 4px 8px; + color: var(--muted); + font-size: 11px; + font-weight: 850; + } + .participation-copy { min-width: 0; } + .participation-number { color: var(--green); font-size: 12px; font-weight: 900; } + .status-panel { + display: grid; + grid-template-columns: minmax(240px, .72fr) minmax(0, 1fr); + gap: 22px; + border: 1px solid rgba(141, 233, 205, .35); + border-radius: 8px; + padding: 20px; + background: linear-gradient(135deg, rgba(141, 233, 205, .08), rgba(21, 25, 27, .9) 42%); + } + .status-panel h3 { font-size: 23px; } + .status-panel p { margin: 0; font-size: 15px; } + .status-list { display: grid; gap: 10px; } + .status-item { + display: grid; + grid-template-columns: 18px minmax(0, 1fr); + gap: 10px; + align-items: start; + color: #cfd8dc; + font-size: 14px; + line-height: 1.5; + } + .status-check { color: var(--green); font-weight: 900; } + .status-next { color: var(--amber); font-weight: 900; } + .mechanism-flow { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + border-top: 1px solid var(--line); + border-bottom: 1px solid var(--line); + } + .mechanism-step { padding: 20px 22px; } + .mechanism-step + .mechanism-step { border-left: 1px solid var(--line); } + .mechanism-step:first-child { padding-left: 0; } + .mechanism-step:last-child { padding-right: 0; } + .mechanism-step p { margin: 0; font-size: 15px; } + .mechanism-number { display: block; margin-bottom: 20px; color: var(--muted); font-size: 12px; font-weight: 900; } + .trust-band { + display: grid; + grid-template-columns: minmax(240px, .72fr) minmax(0, 1.25fr); + gap: 32px; + align-items: start; + border-top: 1px solid var(--line); + border-bottom: 1px solid var(--line); + padding: 22px 0; + } + .trust-band p { margin: 0; font-size: 15px; } + .trust-links { display: grid; } + .trust-link { + display: flex; + justify-content: space-between; + gap: 20px; + border-bottom: 1px solid var(--line); + padding: 12px 0; + color: var(--text); + font-size: 14px; + font-weight: 800; + text-decoration: none; + } + .trust-link:first-child { padding-top: 0; } + .trust-link:last-child { border-bottom: 0; padding-bottom: 0; } + .trust-link span:last-child { color: var(--green); } + .community-panel { + display: flex; + justify-content: space-between; + gap: 24px; + align-items: center; + border: 1px solid rgba(213, 245, 95, .4); + border-radius: 8px; + padding: 24px; + background: linear-gradient(110deg, rgba(213, 245, 95, .11), rgba(21, 25, 27, .9) 60%); + } + .community-panel h2 { font-size: 31px; } + .community-panel p { margin: 0; font-size: 15px; } + .community-panel .actions { flex: 0 0 auto; margin-top: 0; } .split { display: grid; grid-template-columns: minmax(0, 1fr) minmax(260px, .54fr); @@ -329,7 +460,12 @@ } @media (max-width: 820px) { .hero { padding-top: 58px; } - .hero-grid, .split, .grid, .join-panel { grid-template-columns: 1fr; } + .hero-grid, .split, .grid, .join-panel, .participation-grid, .status-panel, .trust-band { grid-template-columns: 1fr; } + .principle-row { grid-template-columns: 1fr; gap: 8px; align-items: start; } + .mechanism-flow { grid-template-columns: 1fr; } + .mechanism-step, .mechanism-step:first-child, .mechanism-step:last-child { padding: 18px 0; } + .mechanism-step + .mechanism-step { border-top: 1px solid var(--line); border-left: 0; } + .mechanism-number { margin-bottom: 10px; } .candidate-callout { max-width: none; justify-self: stretch; } nav { display: none; } .wrap { width: min(100% - 32px, 1060px); } @@ -337,6 +473,14 @@ .lead { font-size: 19px; } .button { max-width: 100%; justify-content: center; } .role-list { border-left: 0; border-top: 1px solid var(--line); padding-left: 0; padding-top: 16px; } + .community-panel { align-items: stretch; flex-direction: column; } + .community-panel .actions { width: 100%; } + .community-panel .button { width: 100%; } + } + @media (max-width: 520px) { + .participation-card { grid-template-columns: 1fr; } + .effort { width: fit-content; } + .actions .button { width: 100%; } } </style> </head> @@ -350,10 +494,10 @@ <div class="wrap"> <a class="brand repo-link" href="/"><span class="mark" aria-label="iuna"><svg viewBox="0 0 32 32" aria-hidden="true" focusable="false"><circle class="mark-dot" cx="9.4" cy="7.6" r="2.8"></circle><path class="mark-loop" d="M9.4 13v7.1c0 3.7 2.9 6.4 6.6 6.4s6.6-2.7 6.6-6.4V13"></path></svg></span><span>iuna</span></a> <nav aria-label="Page sections"> - <a href="#whatisiuna">What is iuna</a> - <a href="#howtojoin">Join</a> - <a href="/git/iuna/file/docs/protocol.md.html">Protocol</a> - <a href="/git/iuna/file/README.md.html">Source</a> + <a href="#why">Why iuna</a> + <a href="#join">Take part</a> + <a href="#how">How it works</a> + <a href="#progress">Progress</a> <a href="/downloads/">Downloads</a> </nav> </div> @@ -362,108 +506,202 @@ <header class="hero"> <div class="wrap hero-grid"> <div> - <div class="eyebrow"><span class="dot"></span> Mainnet candidate</div> - <h1>iuna</h1> - <p class="pronunciation" aria-label="Pronounced yoo-nuh">/ˈjuː.nə/</p> - <p class="lead">An experimental mainnet-candidate cryptocurrency network that combines VDF finalization, a burn lottery, and open proof-of-work issuance.</p> - <p>iuna is not mainnet yet. If the candidate remains stable, its genesis, history, UTXOs, tickets, and mined coins are intended to be promoted without a second genesis. That outcome is not guaranteed.</p> + <div class="eyebrow"><span class="dot"></span> Open experiment · Mainnet candidate</div> + <h1>Help test a different kind of network.</h1> + <p class="lead">iuna is an open cryptocurrency experiment exploring whether network power can be temporary instead of permanently accumulated.</p> + <p class="hero-support">Try the app, run a node, test the network, or inspect the protocol. You do not need to be a blockchain expert to make a useful contribution.</p> <div class="actions"> - <a class="button primary" href="/downloads/">Download builds</a> - <a class="button" href="/git/iuna/file/docs/protocol.md.html">Read protocol</a> - <a class="button discord" href="https://discord.gg/JcXRSSDhS" target="_blank" rel="noopener noreferrer"><svg class="button-icon" aria-hidden="true" focusable="false"><use href="#discord-icon"></use></svg><span>Join Discord</span></a> + <a class="button primary" href="/downloads/">Try iuna</a> + <a class="button" href="#join">Choose how to help</a> + <a class="button" href="#how">Explore the technology</a> </div> </div> - <aside class="candidate-callout" aria-label="Help run the mainnet candidate"> - <span class="callout-kicker">Node runners wanted</span> - <h2>Help Run The Candidate</h2> - <p>We are looking for people willing to keep an iuna node online, test real peer behavior, and report what breaks.</p> - <a class="button primary" href="#howtojoin">Run a node</a> + <aside class="candidate-callout" aria-label="Why participation matters now"> + <span class="callout-kicker">Why now?</span> + <h2>The network needs real-world pressure.</h2> + <p>The mainnet candidate is live. Independent nodes, unfamiliar devices, honest questions, and unexpected failures are what turn tested code into a credible network.</p> + <a class="button primary" href="#join">Take part</a> </aside> </div> </header> <main> - <section id="whatisiuna"> + <section id="why"> <div class="wrap"> <div class="section-head"> - <h2>What Is iuna?</h2> - <p>iuna combines proof-of-burn finalization, a VDF clock, and proof-of-work issuance. Burns turn capital into temporary timing power that must be paid for again, rather than a permanent stake position.</p> + <span class="section-kicker">The idea</span> + <h2>What are we trying to change?</h2> + <p>Many networks give lasting influence to whoever already controls the most capital or mining scale. iuna tests a different balance: open coin issuance, lightweight finalization, and influence that expires.</p> </div> - <div class="grid"> - <div class="card"> - <span class="tag green">PoB</span> - <h3>Proof Of Burn</h3> - <p>Nodes burn IUNA to enter the block lottery. The top-ranked burner finalizes first; lower ranks can take over with extra VDF delay if the first one disappears.</p> + <div class="principle-list"> + <div class="principle-row"> + <span class="tag green">Temporary influence</span> + <h3>No permanent seat at the table</h3> + <p>Finalization power is paid for again each time. Past participation does not become a permanent claim on the network.</p> </div> - <div class="card"> - <span class="tag cyan">VDF</span> - <h3>Verifiable Delay</h3> - <p>The selected finalizer must run sequential VDF work before publishing a block. That delay is the chain's clock and gives fallback finalizers a clean way to take over.</p> + <div class="principle-row"> + <span class="tag cyan">Open entry</span> + <h3>New supply stays mineable</h3> + <p>Anyone can search for proof-of-work mine actions. Issuance is kept separate from block finalization.</p> </div> - <div class="card"> - <span class="tag blue">PoW</span> - <h3>Proof Of Work Issuance</h3> - <p>PoW mine actions introduce new IUNA. Each action issues 2 IUNA: 1 IUNA goes to the miner and 1 IUNA is paid as a fixed fee to the block finalizer.</p> + <div class="principle-row"> + <span class="tag amber">Still unproven</span> + <h3>An experiment, not a promise</h3> + <p>The design is public so its assumptions can be tested, challenged, and improved with evidence.</p> </div> </div> </div> </section> - <section id="howtojoin"> + <section id="join"> <div class="wrap"> <div class="section-head"> - <h2>How To Join</h2> - <p>Download the latest available build from <a href="/downloads/">Downloads</a>, start it, and follow setup. Choose how much of the network you want to run.</p> + <span class="section-kicker">Take part</span> + <h2>Choose your level of involvement</h2> + <p>Start small or go deep. Every path helps us learn how iuna behaves beyond a controlled test environment.</p> </div> - <div class="join-panel"> - <div> - <div class="join-steps"> - <div class="join-step"> - <h3>Download</h3> - <p>Get the latest available build from the local downloads page.</p> - </div> - <div class="join-step"> - <h3>Set Up</h3> - <p>Create or import a wallet, back up your recovery phrase, and connect to the mainnet-candidate network.</p> - </div> - <div class="join-step"> - <h3>Choose Your Role</h3> - <p>Start simple as a wallet, then switch to node mode whenever you want to do more.</p> - </div> + <div class="participation-grid"> + <article class="participation-card"> + <div class="participation-copy"> + <div class="participation-number">01 · Explore</div> + <h3>Try the app</h3> + <p>Create a wallet, watch the chain synchronize, and tell us where the experience is unclear.</p> + <a class="button primary" href="/downloads/">Download iuna</a> </div> - <div class="actions join-actions"> - <a class="button primary" href="/downloads/">Download builds</a> - <a class="button" href="/git/iuna/">Browse source</a> - <a class="button discord" href="https://discord.gg/JcXRSSDhS" target="_blank" rel="noopener noreferrer"><svg class="button-icon" aria-hidden="true" focusable="false"><use href="#discord-icon"></use></svg><span>Join Discord</span></a> + <span class="effort">10–15 min</span> + </article> + <article class="participation-card"> + <div class="participation-copy"> + <div class="participation-number">02 · Participate</div> + <h3>Run a private node</h3> + <p>Keep your own chain copy, try mining or finalization, and observe how the network responds.</p> + <a class="button" href="/downloads/">Get started</a> </div> - </div> - <div class="role-list" aria-label="iuna roles"> - <div class="role-row"> - <span class="tag green">Wallet</span> - <h3>Wallet</h3> - <p>Send, receive, and inspect activity.</p> + <span class="effort">An evening</span> + </article> + <article class="participation-card"> + <div class="participation-copy"> + <div class="participation-number">03 · Strengthen</div> + <h3>Become a public peer</h3> + <p>Keep a node reachable on TCP port <code>9444</code> so other participants can discover and synchronize with it.</p> + <a class="button discord" href="https://discord.gg/JcXRSSDhS" target="_blank" rel="noopener noreferrer"><svg class="button-icon" aria-hidden="true" focusable="false"><use href="#discord-icon"></use></svg><span>Join Discord</span></a> </div> - <div class="role-row"> - <span class="tag cyan">Node</span> - <h3>Private Node</h3> - <p>Mine new coins with PoW actions or earn finalizer rewards by burning, without opening an inbound P2P port.</p> + <span class="effort">Ongoing</span> + </article> + <article class="participation-card"> + <div class="participation-copy"> + <div class="participation-number">04 · Challenge</div> + <h3>Review or improve the technology</h3> + <p>Inspect the source, question protocol assumptions, reproduce failures, or contribute code and tests.</p> + <a class="button" href="/git/iuna/">Browse the source</a> </div> - <div class="role-row"> - <span class="tag blue">Public Peer</span> - <h3>Public Node</h3> - <p>Help strengthen the network by opening TCP port <code>9444</code> and sharing your public P2P address.</p> + <span class="effort">Go deep</span> + </article> + </div> + <p class="note"><strong>Experimental:</strong> only participate with time, hardware, and funds you can afford to risk.<br><strong>Public peer safety:</strong> expose only the P2P listener on TCP port <code>9444</code>; keep the management UI local or behind strict access control.</p> + </div> + </section> + + <section id="how"> + <div class="wrap"> + <div class="section-head"> + <span class="section-kicker">Under the hood</span> + <h2>Three mechanisms, three different jobs</h2> + <p>iuna separates coin issuance, block selection, and timing instead of asking one scarce resource to control everything.</p> + </div> + <div class="mechanism-flow"> + <article class="mechanism-step"> + <span class="mechanism-number">01 · Issue</span> + <h3>Proof of work creates IUNA</h3> + <p>Open proof-of-work mine actions introduce new coins without deciding who finalizes the next block.</p> + </article> + <article class="mechanism-step"> + <span class="mechanism-number">02 · Select</span> + <h3>Burns enter a block lottery</h3> + <p>Nodes permanently spend IUNA for a temporary chance to finalize. That influence must be paid for again.</p> + </article> + <article class="mechanism-step"> + <span class="mechanism-number">03 · Time</span> + <h3>A verifiable delay sets the pace</h3> + <p>Sequential work creates a checkable clock and gives fallback finalizers a predictable way to take over.</p> + </article> + </div> + <div class="actions"> + <a class="button" href="/git/iuna/file/docs/protocol.md.html">Read the full protocol</a> + <a class="button" href="/git/iuna/file/README.md.html">Build from source</a> + </div> + </div> + </section> + + <section id="progress"> + <div class="wrap"> + <div class="section-head"> + <span class="section-kicker">Building in public</span> + <h2>Progress you can verify</h2> + <p>The candidate is not presented as finished. Its rules, release gates, security work, and remaining launch blockers are documented in public.</p> + </div> + <div class="status-panel"> + <div> + <span class="tag cyan">Current phase</span> + <h3>Live mainnet candidate</h3> + <p>The candidate ledger is running now and may later be promoted without replacing its history. That outcome is deliberately not guaranteed.</p> + <div class="actions"> + <a class="button" href="/git/iuna/file/ROADMAP.md.html">View roadmap</a> </div> </div> + <div class="status-list" aria-label="Candidate progress"> + <div class="status-item"><span class="status-check">✓</span><span>Candidate protocol rules are frozen and documented.</span></div> + <div class="status-item"><span class="status-check">✓</span><span>The mainnet-candidate network launched from a fresh genesis with public builds, checksums, and a bootstrap peer.</span></div> + <div class="status-item"><span class="status-check">✓</span><span>An independent-node testnet completed its agreed stability window without an unplanned reset.</span></div> + <div class="status-item"><span class="status-check">✓</span><span>Release gates include audits, fuzzing, adversarial tests, recovery scenarios, and a six-node end-to-end network.</span></div> + <div class="status-item"><span class="status-next">→</span><span>The candidate manifest, live recovery evidence, security sign-off, stability window, and promotion decision remain open.</span></div> + </div> + </div> + </div> + </section> + + <section id="trust"> + <div class="wrap"> + <div class="section-head"> + <span class="section-kicker">Trust through inspection</span> + <h2>Do not take the claims on faith</h2> + <p>iuna is designed to be inspected. The code, rules, known risks, and launch criteria are available before you decide to participate.</p> + </div> + <div class="trust-band"> + <div> + <span class="tag amber">No guarantees</span> + <h3>Treat value as uncertain</h3> + <p>The candidate can fail, require intervention, or never gain economic value. Participation is for testing the experiment.</p> + </div> + <div class="trust-links" aria-label="Ways to inspect iuna"> + <a class="trust-link" href="/git/iuna/"><span>Complete source and history · Apache 2.0</span><span>Browse source →</span></a> + <a class="trust-link" href="/git/iuna/file/docs/security-review.md.html"><span>Consensus, networking, wallet, and release review</span><span>Security review →</span></a> + <a class="trust-link" href="/git/iuna/file/ROADMAP.md.html"><span>Public launch gates and unresolved work</span><span>View roadmap →</span></a> + </div> + </div> + </div> + </section> + + <section id="community"> + <div class="wrap"> + <div class="community-panel"> + <div> + <span class="section-kicker">A network is its participants</span> + <h2>Bring a node, a question, or a way to break it.</h2> + <p>Meet the people testing iuna, share what you observe, and help decide which evidence the candidate still needs.</p> + </div> + <div class="actions"> + <a class="button discord" href="https://discord.gg/JcXRSSDhS" target="_blank" rel="noopener noreferrer"><svg class="button-icon" aria-hidden="true" focusable="false"><use href="#discord-icon"></use></svg><span>Join Discord</span></a> + </div> </div> - <p class="note">Keep the management UI local. Only the P2P listener should be reachable by other nodes.</p> </div> </section> </main> <section class="footer"> <div class="wrap"> - <span>iuna mainnet candidate.</span> - <a href="/git/iuna/file/README.md.html">Source</a> + <span>iuna <span aria-hidden="true">·</span> an open cryptocurrency experiment</span> + <span><a href="/downloads/">Downloads</a> · <a href="/git/iuna/">Source</a> · <a href="https://discord.gg/JcXRSSDhS" target="_blank" rel="noopener noreferrer">Discord</a></span> </div> </section> </body>