# Become a witness — the Genesis Council

The Genesis Council is the first set of independent witnesses of the Rightshold ledger. A witness is anyone who controls a domain: it publishes a key, registers, declares its affiliation honestly, and cosigns the block headers it has checked. Finality needs Bitcoin anchoring plus cosignatures from confirmed-unaffiliated witnesses, so the council's composition — not the platform's word — is what makes a record final.

## The path

1. **Publish your witness key** — Generate an Ed25519 key pair and publish the public key (PEM) at https://<your domain>/.well-known/rightshold-witness.pem. The private key never leaves your machine.
   `GET /cli/ledger-witness.mjs — the kit's keygen does this and prints the PEM to publish.`
2. **Register the domain** — Registration fetches the key file over HTTPS and verifies it. Registering again re-verifies; a different key becomes a new witness record, never an edit.
   `POST /v1/ledger/witnesses {"domain": "<your domain>"}`
3. **Declare your affiliation — honestly** — If you have no shared ownership, funding, employment or control with Rightshold or any Rightshold Anchor client, sign the published unaffiliation statement with your witness key; a public challenge window then runs, and anyone may challenge with evidence links. If you are not independent, do not sign: an unconfirmed label is the honest state, and a false declaration is publicly challengeable forever.
   `POST /v1/ledger/witnesses/declare — statement and payload at GET /v1/ledger/witnesses/affiliation`
4. **Fetch the one-command kit** — The witness-in-a-box kit verifies the whole chain locally before it signs anything. Pin its SHA-256 from two independent paths (here and /cli/witness-in-a-box.sha256) before running it.
   `curl -sO https://www.rightshold.com/cli/witness-in-a-box.mjs && node witness-in-a-box.mjs verify`
5. **The attestation handshake: cosign a block you have checked** — Cosigning is the handshake: your Ed25519 signature over a sealed block header you verified independently. A cosignature from a witness whose key was verified more than 30 days ago is refused — re-register to refresh.
   `POST /v1/ledger/blocks/{height}/cosign {"domain", "signature"} — the kit does this end-to-end.`
6. **Listed in the public registry, by class** — The registry lists every witness under a neutral label (W-001, W-002, …) with its affiliation class computed from the sealed declarations, windows and challenges — never asserted by hand. Your domain and full key id never appear on public read models.
   `GET /witnesses — the public registry; GET /v1/witnesses/council — this status.`

## The council today

Registered witnesses: 2. By class — affiliated: 2 · confirmed-unaffiliated: 0 · declaration-pending: 0 · challenged: 0 · unconfirmed: 0. Confirmed unaffiliated: 0 of 2 required for finality.

Machine-readable status: https://www.rightshold.com/v1/witnesses/council · Public registry: https://www.rightshold.com/witnesses
