From 8f80e6734a47a346508dcebaef66064308eb8921 Mon Sep 17 00:00:00 2001 From: Evangel90 Date: Wed, 30 Sep 2026 00:01:25 +0100 Subject: [PATCH] Three networks: start dapp developers on devnet-1; 4 validators (D7, D18) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Quickstart gets a "Which network?" table (devnet-1: 1 validator, where to start; testnet-1 and mainnet: 4) and the upgrade order. MetaMask and RPC pages lead with devnet-1 (56672 / 0xdd60) and its faucet. Run-a-validator: 10 → 4 validators, 26 empty seats, devnet-1 in the chain-id mapping. The replay-error example chain-id is renamed my-chain to avoid confusion with devnet-1. Co-Authored-By: Claude Opus 5.5 --- README.md | 2 +- docs/contracts.md | 4 ++-- docs/quickstart.md | 52 ++++++++++++++++++++++++++++++++++------- docs/rpc-endpoints.md | 31 +++++++++++++++++++----- docs/run-a-validator.md | 33 +++++++++++++++----------- docs/troubleshooting.md | 2 +- 6 files changed, 92 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index cdaf314..f08717b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Developer documentation site for Konstellation, built with [Docusaurus](https://docusaurus.io). Public, pre-testnet — most pages are -placeholders until `networks/testnet-1` exists (see `ENGINEERING.md §6.6` +placeholders until `networks/devnet-1` and `networks/testnet-1` exist (see `ENGINEERING.md §6.6` and `STATUS.md` in the org root for what's real vs. stubbed). ## Local development diff --git a/docs/contracts.md b/docs/contracts.md index 6a79ea0..73a2bb2 100644 --- a/docs/contracts.md +++ b/docs/contracts.md @@ -9,7 +9,7 @@ sidebar_position: 3 Konstellation ships a set of contracts preinstalled in genesis at their canonical, deterministic addresses, so existing wallet SDKs and tooling that hard-code these addresses work unmodified. Every address on this page is -identical on `testnet-1`, `konstellation-1` and a local dev chain. +identical on `devnet-1`, `testnet-1`, `konstellation-1` and a local dev chain. Two sources of truth, in order: @@ -243,7 +243,7 @@ The schedules, on a 1 B KASH genesis supply: Per-wallet addresses are a function of the beneficiary config (`script/config/vesting.json`, from `vesting.example.json`; real team beneficiaries and TGE are not yet -filled in). `testnet-1` mirrors the same shape with test addresses. This +filled in). `devnet-1` and `testnet-1` mirror the same shape with test addresses. This page will list the deployed instances once `networks//genesis.json` funds them. diff --git a/docs/quickstart.md b/docs/quickstart.md index 8178edb..9795c29 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -8,23 +8,40 @@ sidebar_position: 1 # Quickstart :::caution Pre-testnet -Konstellation has not launched a public network yet. The `testnet-1` RPC -and explorer URLs on this page are placeholders until the genesis is -published in the [`networks` +Konstellation has not launched a public network yet. The `devnet-1` and +`testnet-1` RPC, explorer and faucet URLs on this page are placeholders until +each network's genesis is published in the [`networks` repo](https://github.com/konstellation-network/networks). Chain ids, token and the local dev chain are settled; contract addresses that are not -genesis preinstalls (WKASH, vesting) are provisional until deployed on -`testnet-1` and listed in `networks/testnet-1/chain.json`. +genesis preinstalls (WKASH, vesting) are provisional until deployed and +listed in `networks//chain.json`. ::: +## Which network? + +Konstellation runs three public networks. **Dapp developers start on +`devnet-1`.** + +| Network | For | Validators | What to expect | +|---|---|---|---| +| **`devnet-1`** | **building and testing dapps** | 1, foundation-run | Runs the same release as mainnet; test KASH from the faucet; rarely reset | +| `testnet-1` | validator operators: upgrade drills, chaos tests, validator admissions | 4, foundation-run | New releases land here first; expect planned disruption | +| `konstellation-1` | mainnet, real value | 4, foundation-run at genesis; more admitted by a permissioned procedure, opening to permissionless by governance | — | + +A release reaches `testnet-1` first, then `devnet-1` one to two weeks before +mainnet, then `konstellation-1` — so what works on devnet is what mainnet is +about to run. + ## Network parameters | Field | Value | |---|---| | Chain name | Konstellation | +| Cosmos chain-id (devnet) | `devnet-1` | | Cosmos chain-id (testnet) | `testnet-1` | | Cosmos chain-id (mainnet) | `konstellation-1` | | EIP-155 chain ID (mainnet) | `5667` | +| EIP-155 chain ID (devnet) | `56672` | | EIP-155 chain ID (testnet) | `56671` | | EIP-155 chain ID (local dev) | `56670` | | Native token | KASH | @@ -33,15 +50,32 @@ genesis preinstalls (WKASH, vesting) are provisional until deployed on The EIP-155 ids are enforced by the node: a real network's id is used only by that network, and a local chain can never be given one, so a transaction -signed for a dev chain cannot replay on `testnet-1` or mainnet. +signed for a dev chain cannot replay on `devnet-1`, `testnet-1` or mainnet. ## Add Konstellation to MetaMask MetaMask → **Settings → Networks → Add a network → Add a network manually**. Rabby and other EIP-3085 wallets take the same values. +### devnet-1 (start here) + +| Field | Value | +|---|---| +| Network name | Konstellation Devnet | +| New RPC URL | **TBD** — published in `networks/devnet-1/chain.json` when the network launches; see [RPC Endpoints](/rpc-endpoints) | +| Chain ID | `56672` | +| Currency symbol | `KASH` | +| Currency decimals | 18 | +| Block explorer URL | **TBD** — Blockscout, see the [`explorer`](https://github.com/konstellation-network/explorer) repo | + +Test KASH comes from the devnet-1 faucet (**TBD** — [`faucet`](https://github.com/konstellation-network/faucet) repo). + ### testnet-1 +Only if you are rehearsing validator operations or want a release before it +reaches devnet — `testnet-1` may be disrupted by upgrade drills and chaos +tests. + | Field | Value | |---|---| | Network name | Konstellation Testnet | @@ -51,7 +85,7 @@ Rabby and other EIP-3085 wallets take the same values. | Currency decimals | 18 | | Block explorer URL | **TBD** — Blockscout, see the [`explorer`](https://github.com/konstellation-network/explorer) repo | -Test KASH comes from the faucet (**TBD** — [`faucet`](https://github.com/konstellation-network/faucet) repo). +testnet-1 has its own faucet too (**TBD**). ### Local dev chain @@ -75,7 +109,7 @@ Programmatically (`wallet_addEthereumChain`), for the local chain: } ``` -`0xdd5e` is 56670; `testnet-1`'s `56671` is `0xdd5f`, mainnet's `5667` is `0x1623`. +`0xdd5e` is 56670; `devnet-1`'s `56672` is `0xdd60`, `testnet-1`'s `56671` is `0xdd5f`, mainnet's `5667` is `0x1623`. ## Run a local dev chain @@ -104,7 +138,7 @@ starts the node with every API enabled: | Block time | ~1 s (`timeout_commit = "1s"`); node `minimum-gas-prices` and `evm.min-tip` are 0 | The dev chain is a real `konstellationd`: the same genesis preinstalls, -precompiles, compliance module and circuit breaker as `testnet-1`, with +precompiles, compliance module and circuit breaker as `devnet-1` and `testnet-1`, with governance and compliance timelocks shortened to seconds so they can be exercised in a session (voting period 30 s, compliance timelocks 60 s, the validator key as the compliance authority). diff --git a/docs/rpc-endpoints.md b/docs/rpc-endpoints.md index 406923d..7658f48 100644 --- a/docs/rpc-endpoints.md +++ b/docs/rpc-endpoints.md @@ -7,9 +7,10 @@ sidebar_position: 2 # RPC Endpoints :::caution Pre-testnet -No public endpoints exist yet. This page is a placeholder for the table that -will ship with `testnet-1` (see `networks/testnet-1/chain.json` once it -exists). +No public endpoints exist yet. This page is a placeholder for the tables +that will ship with `devnet-1` and `testnet-1` (see +`networks//chain.json` once they exist). Dapp developers: use +`devnet-1`. ::: ## Local development @@ -26,7 +27,7 @@ Started via `./local_node.sh -y` in the `konstellation` repo. Chain ID `56670` (local/unknown networks only — the node never lets a dev chain run with a real network's ID; see [Run a Validator](/run-a-validator#the-chain-id-invariant)). -## testnet-1 +## devnet-1 — for dapp developers | Protocol | Endpoint | |---|---| @@ -36,14 +37,32 @@ with a real network's ID; see [Run a Validator](/run-a-validator#the-chain-id-in | Cosmos gRPC | _TBD_ | | Tendermint RPC | _TBD_ | | Explorer | _TBD — see [`explorer`](https://github.com/konstellation-network/explorer)_ | +| Faucet | _TBD — see [`faucet`](https://github.com/konstellation-network/faucet)_ | -Chain ID `56671`. Public endpoints will be published in +Chain ID `56672`. One foundation-run validator, the same release as mainnet, +rarely reset. Public endpoints will be published in +`networks/devnet-1/chain.json` (cosmos chain-registry format) once devnet-1 +is live — this table should link there rather than duplicate it. + +## testnet-1 — validator and upgrade rehearsals + +| Protocol | Endpoint | +|---|---| +| EVM JSON-RPC | _TBD_ | +| EVM WebSocket | _TBD_ | +| Cosmos REST | _TBD_ | +| Cosmos gRPC | _TBD_ | +| Tendermint RPC | _TBD_ | +| Explorer | _TBD — see [`explorer`](https://github.com/konstellation-network/explorer)_ | + +Chain ID `56671`. Four foundation-run validators; new releases land here +first and the network may be disrupted by drills. Public endpoints will be published in `networks/testnet-1/chain.json` (cosmos chain-registry format) once testnet-1 is live — this table should link there rather than duplicate it. ## konstellation-1 (mainnet) -Not launched. Will follow the same shape as testnet-1 once genesis exists. +Not launched. Will follow the same shape as devnet-1 and testnet-1 once genesis exists. Chain ID `5667`. ## WebSocket from a browser (`eth_subscribe`) diff --git a/docs/run-a-validator.md b/docs/run-a-validator.md index a4cd718..1fdd30b 100644 --- a/docs/run-a-validator.md +++ b/docs/run-a-validator.md @@ -10,8 +10,10 @@ sidebar_position: 4 There is no validator set to join yet. Everything on this page about the binary's behaviour is real and verified against the current `konstellationd`; the `testnet-1` specifics (peers, genesis, release version) are placeholders -until `networks/testnet-1` publishes them. The genesis set on both networks -is 10 foundation-run validators; independent operators are admitted +until `networks/testnet-1` publishes them. The genesis set on `testnet-1` +and `konstellation-1` is 4 foundation-run validators (`devnet-1`, the dapp +developers' network, runs a single foundation validator and takes no +outside validators); independent operators are admitted afterwards through the permissioned procedure described under [Become a validator](#become-a-validator) — and are admitted onto `testnet-1` first precisely so they can find the gaps in this page. If @@ -21,7 +23,7 @@ written, that is a docs bug, please report it. `konstellationd` is one binary for every network. It does not know which network it is on beyond the chain-id checks described below: everything that -differs between `testnet-1` and `konstellation-1` lives in the network's +differs between `devnet-1`, `testnet-1` and `konstellation-1` lives in the network's `genesis.json` (in the [`networks`](https://github.com/konstellation-network/networks) repo) and in your own configuration. The EVM runs the **Prague** (Pectra) fork from genesis, which is what `cosmos/evm` v0.7.3 activates by default; @@ -155,7 +157,7 @@ If a recipe tells you to patch `stake` → `esp`, set `evm-chain-id`, or set - **`app.toml` `[evm] evm-chain-id` is derived from the genesis.** After writing `genesis.json`, `init` reads the chain-id back out of it and reconciles `app.toml`: a known network gets its required EIP-155 id - (`konstellation-1` → `5667`, `testnet-1` → `56671`); any other chain-id + (`konstellation-1` → `5667`, `devnet-1` → `56672`, `testnet-1` → `56671`); any other chain-id gets the local id `56670`, and never a real network's id. A fresh `app.toml` is written with the right value directly; one that already existed (for example created by `konstellationd config set client @@ -179,7 +181,7 @@ If a recipe tells you to patch `stake` → `esp`, set `evm-chain-id`, or set - The `genesis profile:` line tells you which governance timings the genesis got. Only the exact chain-id `konstellation-1` selects the mainnet - profile (3-day voting, 1 000 / 5 000 KASH deposits); `testnet-1`, local and + profile (3-day voting, 1 000 / 5 000 KASH deposits); `devnet-1`, `testnet-1`, local and unknown chain-ids get the fast testnet/dev profile (2 h / 30 min, 10 / 50 KASH). Irrelevant when you replace the placeholder genesis with a published one, but it is why a dev chain and mainnet look different. @@ -218,7 +220,7 @@ belongs only to that network, because a transaction signed under it would replay there: ``` -panic: genesis chain-id "my-devnet" is not testnet-1 but app.toml has evm-chain-id 56671, which belongs to testnet-1: a tx signed here would replay there; use 56670 (local) or another unreserved id +panic: genesis chain-id "my-chain" is not testnet-1 but app.toml has evm-chain-id 56671, which belongs to testnet-1: a tx signed here would replay there; use 56670 (local) or another unreserved id ``` If you see any of these, a file in `config/` is stale (usually @@ -360,12 +362,13 @@ WantedBy=multi-user.target ## Become a validator -The genesis set is **10 foundation-run validators** created by gentx, on -`testnet-1` and `konstellation-1` alike (`max_validators` is 30, so 20 seats -are empty at genesis). Admission of further validators is **permissioned** +The genesis set is **4 foundation-run validators** created by gentx, on +`testnet-1` and `konstellation-1` alike (`max_validators` is 30, so 26 seats +are empty at genesis). `devnet-1` is not a validator network: it runs one +foundation validator for dapp developers and admits no one. Admission of further validators is **permissioned** — a recorded decision, opening up in stages by governance — and it is enforced by the chain, not by policy: `/cosmos.staking.v1beta1.MsgCreateValidator` is -disabled in `x/circuit` genesis state on both networks, so a plain +disabled in `x/circuit` genesis state on every network, so a plain `tx staking create-validator` is refused at submission: ``` @@ -472,7 +475,9 @@ install -m 0755 "konstellationd-${VERSION}-linux-amd64" "$DAEMON_HOME/cosmovisor Cosmovisor swaps at the governance-set halt height; you do not need to be awake. On mainnet the height comes from a `MsgSoftwareUpgrade` proposal; on `testnet-1` the foundation's fleet is upgraded with Ansible and the same -proposal is submitted so the governance path is rehearsed. See +proposal is submitted so the governance path is rehearsed. Every release +rolls out in the same order: `testnet-1` first, then `devnet-1` one to two +weeks before mainnet, then `konstellation-1`. See [Upgrades](/upgrades) for the log of what has shipped. **Rollback.** The unit above runs with `UNSAFE_SKIP_BACKUP=true`, so your @@ -514,12 +519,14 @@ publishes the genesis. The authoritative join page will be | State sync / snapshots | **TBD** — `networks/testnet-1/snapshots.md` once archive nodes exist | | Public RPC | **TBD** — see [RPC Endpoints](/rpc-endpoints) | -At genesis the validator set is 10 foundation-run validators +At genesis the validator set is 4 foundation-run validators (`max_validators` 30); independent operators are admitted afterwards through the permissioned procedure above — `testnet-1` rehearses exactly what mainnet runs, admissions included. Governance on `testnet-1` is deliberately fast (2-hour voting period) so upgrade drills take hours, not days; -everything economic is identical to mainnet. +everything economic is identical to mainnet. `testnet-1` is where new +releases land first and where upgrade drills, chaos tests and halt/restart +drills happen, so expect planned disruption. If something breaks, [Troubleshooting](/troubleshooting) has the errors we know about. diff --git a/docs/troubleshooting.md b/docs/troubleshooting.md index 5994a81..ec7808b 100644 --- a/docs/troubleshooting.md +++ b/docs/troubleshooting.md @@ -188,7 +188,7 @@ Two message families are worth knowing by name: |---|---| | `/ibc.applications.transfer.v1.MsgTransfer` | all IBC sends stop, Cosmos and EVM (the ICS20 precompile included) | | `/cosmos.evm.vm.v1.MsgEthereumTx` | the **entire EVM is paused** — every `eth_sendRawTransaction` is refused until reset | -| `/cosmos.staking.v1beta1.MsgCreateValidator` | **disabled by design from genesis** on both networks: validator admission is permissioned, see [Run a Validator](/run-a-validator#become-a-validator). Not a fault. (Decided; the genesis tooling does not write the entry yet, so a dev chain accepts the message.) | +| `/cosmos.staking.v1beta1.MsgCreateValidator` | **disabled by design from genesis** on every network: validator admission is permissioned, see [Run a Validator](/run-a-validator#become-a-validator). Not a fault. (Decided; the genesis tooling does not write the entry yet, so a dev chain accepts the message.) | The breaker cannot disable its own messages or governance's, so a trip is always reversible.