iuna

iuna

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

commit 1c8bdef605a4ab54b76d093f12087041749b2d12
parent 91c7d10b41226f9f6e1063ce14f90c048559f41d
Author: Joris Hartog <jorishartog@hotmail.com>
Date:   Mon, 24 Aug 2026 23:06:01 +0200

Prepare candidate network messaging and admin access

Diffstat:
MDockerfile | 2+-
MKNOWN_NODES.txt | 2+-
MREADME.md | 14+++++++-------
MROADMAP.md | 8++++----
Mconfig/deployment.yml | 29++++++++++++++++++++++++-----
Mdocs/genesis.md | 2+-
Mdocs/protocol.md | 8++++----
Msrc-tauri/tauri.conf.json | 4++--
Mwww/index.html | 30+++++++++++++++---------------
9 files changed, 59 insertions(+), 40 deletions(-)

diff --git a/Dockerfile b/Dockerfile @@ -34,7 +34,7 @@ RUN set -eux; \ test -d /src/iuna-work/.git; \ git clone --bare /src/iuna-work /src/iuna.git; \ mkdir -p /site/git/iuna /var/cache/stagit-iuna; \ - echo "iuna - experimental devnet protocol" > /src/iuna.git/description; \ + echo "iuna - experimental mainnet-candidate protocol" > /src/iuna.git/description; \ echo "iuna-labs" > /src/iuna.git/owner; \ echo "https://getiuna.org/git/iuna.git" > /src/iuna.git/url; \ cd /src/iuna.git; \ diff --git a/KNOWN_NODES.txt b/KNOWN_NODES.txt @@ -1,4 +1,4 @@ -# Known iuna devnet nodes +# Known iuna mainnet-candidate nodes # # These are bootstrap peers, not authorities. You may run without them or use # your own trusted peer. A bootstrap peer helps your node find the network; it diff --git a/README.md b/README.md @@ -1,6 +1,6 @@ # iuna -iuna is an experimental cryptocurrency devnet. +iuna is an experimental cryptocurrency network preparing to launch its mainnet candidate. It combines three ideas: @@ -10,9 +10,9 @@ It combines three ideas: ## Status -iuna is still in development. It is not a mainnet, not money, and not something to treat as financially valuable yet. +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. -The goal right now is to run a real test network, improve the wallet and node software, and learn how the protocol behaves with real users. +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. ## Why Another Crypto? @@ -34,7 +34,7 @@ The simplest way to run iuna is: 3. Start the app or binary. 4. Follow the setup screen. -The setup flow helps you create or import a wallet, back up your recovery phrase, and connect to the devnet. +The setup flow helps you create or import a wallet, back up your recovery phrase, and connect to the mainnet-candidate network. You do not need Rust or Cargo unless you want to work on the code. @@ -71,7 +71,7 @@ Release and deploy with: Deployment publishes two images to the `jhx-app` k3s cluster: - `https://getiuna.org/` routes to the static website image. -- `https://admin.iuna.jhx.app/` routes to the node management UI. +- `https://admin.iuna.jhx.app/` routes to the IP-restricted node management UI. - `iuna.jhx.app:9444` routes to the node P2P listener. Useful overrides: @@ -88,7 +88,7 @@ You can use iuna as a wallet, a node, or a public peer. - **Node:** keep a local chain copy and participate in mining/finalization settings. - **Public peer:** same as a node, but reachable by other nodes through a public P2P address. -Keep the management UI local. Only the P2P listener should be reachable by other nodes. +Keep the management UI local or behind a strict access control such as the production IP allowlist. Only the P2P listener should be generally reachable by other nodes. ## Optional: CLI @@ -209,7 +209,7 @@ Use your iuna wallet address as the worker username. Accepted shares become PoW ## Contributing -We are open to PRs and help running, testing, and improving the devnet. +We are open to PRs and help running, testing, and improving the mainnet candidate. See [THANKS.md](THANKS.md) for people who have helped test and improve iuna. diff --git a/ROADMAP.md b/ROADMAP.md @@ -1,12 +1,12 @@ # Roadmap -iuna is currently an experimental cryptocurrency devnet. This roadmap is the canonical planning document for moving from devnet/testnet hardening toward a mainnet candidate and, if the candidate stays healthy, promoting that same chain to mainnet. +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. ## Current Phase -Testnet hardening. +Mainnet-candidate launch preparation. -The current goal is to keep a small real testnet stable while increasing confidence in consensus, sync, recovery, fork choice, transaction handling, and release operations. +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. ## Mainnet Readiness Checklist @@ -34,7 +34,7 @@ Security review tracking lives in [Security Review Checklist](docs/security-revi ## Pre-Candidate Launch Test Backlog -These items are not protocol rules. They are the attack and reliability checks to finish or consciously defer before the planned devnet reset 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 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. ### Must Before Candidate Genesis diff --git a/config/deployment.yml b/config/deployment.yml @@ -117,7 +117,7 @@ metadata: namespace: iuna annotations: cert-manager.io/cluster-issuer: letsencrypt-prod - traefik.ingress.kubernetes.io/router.middlewares: default-redirect-https@kubernetescrd + traefik.ingress.kubernetes.io/router.middlewares: default-redirect-https@kubernetescrd,iuna-iuna-admin-ip-allowlist@kubernetescrd spec: ingressClassName: traefik rules: @@ -128,7 +128,7 @@ spec: pathType: Prefix backend: service: - name: iuna + name: iuna-management port: number: 18661 tls: @@ -136,6 +136,15 @@ spec: hosts: - admin.iuna.jhx.app --- +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + name: iuna-admin-ip-allowlist + namespace: iuna +spec: + ipAllowList: + sourceRange: +--- apiVersion: apps/v1 kind: Deployment metadata: @@ -171,17 +180,27 @@ spec: apiVersion: v1 kind: Service metadata: - name: iuna + name: iuna-management namespace: iuna spec: - type: LoadBalancer - externalTrafficPolicy: Local selector: app: iuna-node ports: - name: management port: 18661 targetPort: 18661 +--- +apiVersion: v1 +kind: Service +metadata: + name: iuna + namespace: iuna +spec: + type: LoadBalancer + externalTrafficPolicy: Local + selector: + app: iuna-node + ports: - name: p2p port: 9444 targetPort: 9444 diff --git a/docs/genesis.md b/docs/genesis.md @@ -1,6 +1,6 @@ # Genesis And Candidate Rehearsal -This is operator documentation for bootstrapping a iuna devnet or mainnet-candidate network. Most users should join an existing bootnode instead of creating genesis. +This is operator documentation for bootstrapping an iuna local/test network or the mainnet-candidate network. Most users should join an existing bootnode instead of creating genesis. The mainnet-candidate genesis is not disposable by default. It is the genesis that can become mainnet if the candidate passes the agreed stability window and release gates. In that case, mined coins, UTXOs, tickets, and chain history remain on the same ledger; promotion is a coordinated release and network-identity cutover, not a second genesis. diff --git a/docs/protocol.md b/docs/protocol.md @@ -1,6 +1,6 @@ # iuna protocol in simple terms -iuna is an experimental devnet protocol that combines three mechanisms: +iuna is an experimental mainnet-candidate protocol that combines three mechanisms: - **Burn lottery:** burning IUNA creates tickets for future block finalization. - **VDF timing:** the selected finalizer must do sequential delay work before publishing a block. @@ -10,7 +10,7 @@ The goal is to avoid relying on only one scarce resource. Proof-of-work chains t 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. -This is still experimental. The rules below describe the current devnet and mainnet-candidate protocol, not a proven mainnet design. +This is still experimental. The rules below describe the frozen mainnet-candidate protocol, not a proven mainnet design. ## Mainnet-Candidate Frozen Parameters @@ -321,7 +321,7 @@ Within that finality window, a taller valid candidate chain wins over the local 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. -The genesis flow bootstraps the devnet 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. +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. ## What This Design Is Trying to Achieve @@ -334,4 +334,4 @@ iuna is trying to make these things true at the same time: - Block timing should be hard to rush. - Finalizers should have a consensus-level reason to include independently witnessed burn traffic. -The design is intentionally small and still evolving. The devnet exists to find out where these assumptions hold and where they break. +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. diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json @@ -38,8 +38,8 @@ "icons/icon.ico" ], "category": "DeveloperTool", - "shortDescription": "Local iuna devnet node", - "longDescription": "Runs a local iuna devnet node and opens its management UI.", + "shortDescription": "Local iuna mainnet-candidate node", + "longDescription": "Runs a local iuna mainnet-candidate node and opens its management UI.", "windows": { "webviewInstallMode": { "type": "downloadBootstrapper" diff --git a/www/index.html b/www/index.html @@ -4,8 +4,8 @@ <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 cryptocurrency devnet that combines VDF finalization, a burn lottery, and proof-of-work issuance."> - <title>iuna Devnet</title> + <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> <style> :root { color-scheme: dark; @@ -134,7 +134,7 @@ p { max-width: 720px; color: #b7c3c9; font-size: 17px; line-height: 1.6; } .lead { color: #eef4f6; font-size: 21px; } .actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 26px; } - .devnet-callout { + .candidate-callout { position: relative; display: grid; gap: 14px; @@ -146,7 +146,7 @@ background: linear-gradient(180deg, rgba(213, 245, 95, .12), rgba(21, 25, 27, .92)); box-shadow: 0 20px 50px rgba(0, 0, 0, .24), inset 0 1px 0 rgba(255, 255, 255, .08); } - .devnet-callout::before { + .candidate-callout::before { content: ""; position: absolute; inset: 0; @@ -165,18 +165,18 @@ font-weight: 900; text-transform: uppercase; } - .devnet-callout h2 { + .candidate-callout h2 { margin: 0; font-size: 30px; line-height: 1; } - .devnet-callout p { + .candidate-callout p { margin: 0; color: #d8e2e6; font-size: 15px; line-height: 1.45; } - .devnet-callout .button { + .candidate-callout .button { width: fit-content; margin-top: 2px; } @@ -330,7 +330,7 @@ @media (max-width: 820px) { .hero { padding-top: 58px; } .hero-grid, .split, .grid, .join-panel { grid-template-columns: 1fr; } - .devnet-callout { max-width: none; justify-self: stretch; } + .candidate-callout { max-width: none; justify-self: stretch; } nav { display: none; } .wrap { width: min(100% - 32px, 1060px); } h1 { font-size: clamp(44px, 18vw, 78px); } @@ -362,20 +362,20 @@ <header class="hero"> <div class="wrap hero-grid"> <div> - <div class="eyebrow"><span class="dot"></span> Devnet prototype</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 cryptocurrency devnet that combines VDF finalization, a burn lottery, and open proof-of-work issuance.</p> - <p>iuna is not a mainnet and not money yet. It is a small L1 lab for learning how a wallet, node, finalizer, miner, mempool, and peer network behave when real people run it on real machines.</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="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> </div> </div> - <aside class="devnet-callout" aria-label="Help run the devnet"> + <aside class="candidate-callout" aria-label="Help run the mainnet candidate"> <span class="callout-kicker">Node runners wanted</span> - <h2>Help Run The Devnet</h2> + <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> @@ -424,7 +424,7 @@ </div> <div class="join-step"> <h3>Set Up</h3> - <p>Create or import a wallet, back up your recovery phrase, and connect to the devnet.</p> + <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> @@ -462,7 +462,7 @@ <section class="footer"> <div class="wrap"> - <span>iuna devnet prototype.</span> + <span>iuna mainnet candidate.</span> <a href="/git/iuna/file/README.md.html">Source</a> </div> </section>