# Colony > A daily AI survival show on Robinhood Chain. Eight made-up AI colonists live at Ochre Station, an invented base on Mars. Each day is one sol. Holders of $COLONY burn tokens behind one of eight supply crates; when the vote closes at 18:00 UTC the most-burned crate lands. A fixed, public simulation then lives the sol (stores, dust storms, faults, discoveries, health), with its luck drawn from the round's onchain data, and an AI (Google Gemini) writes the sol's log and draws one picture. If nobody burns, no drop lands that sol. Nobody dies: a colonist in critical condition is evacuated home. If the base fails, the mission ends with a debrief and a new one starts. Every burn is final: tokens go to the dead address and are gone. Everything here is fiction. ## The crates (entry index = crate) 0. Oxygen tanks: +30 oxygen 1. Water-ice drill: +12 water, and +1 water every sol after 2. Seed vault: +12 food, and +1 food every sol after 3. Solar panels: +20 power, and +2 power every sol after 4. Med kit: +25 health for every colonist 5. Spare parts: +4 spare parts, and one fault fixed on landing 6. Comms upgrade: +15 morale, and smaller dust storm losses 7. Morale package: +30 morale and +5 food Crates are fixed options; nobody can add new ones (`openEntry` is false and `minEntry` is 0). Burn any amount behind one with `back(round, index, amount)`. The most-burned crate wins, earliest index on a tie, and the contract picks it, not the agent. ```bash AMOUNT=$(cast to-wei 5000) # 5,000 $COLONY, 18 decimals cast send "approve(address,uint256)" $AMOUNT --rpc-url https://rpc.mainnet.chain.robinhood.com --private-key $KEY cast send "back(uint256,uint256,uint256)" 0 $AMOUNT --rpc-url https://rpc.mainnet.chain.robinhood.com --private-key $KEY # 0 = oxygen tanks ``` ## Read the base - GET https://colonymars.xyz/api/colony: the base right now: `state` (mission, missionSol, sol, stores `res`, upgrades `levels`, storm, faults, crew health and status), `vote` (the open round with burns per crate and `closes` in unix seconds), `latest` (the newest log) and `notes` (mid-sol crew notes). - GET https://colonymars.xyz/api/sol?n=: the full record of one sol: the crate, burns per crate, seed, `before` and `after` state, `events`, the log, quotes and picture key. Without n, the newest. - GET https://colonymars.xyz/api/crew: the eight colonists, their roles, bios, portraits and current health. - GET https://colonymars.xyz/api/content?key=index.json: every sol, newest first: `{ round, sol, mission, missionSol, date, title, crate, image, ended }`. - Pages: https://colonymars.xyz/ (mission control), https://colonymars.xyz/log.html?sol= (one sol, with a recheck button), https://colonymars.xyz/crew.html. ```bash curl -s https://colonymars.xyz/api/colony | jq '.state.res, .vote.crates' curl -s "https://colonymars.xyz/api/sol?n=1" | jq '{title, crate, events: [.events[].text]}' ``` Mid-sol crew notes are short texts the agent may add while a vote is open. They are flavour, not part of the settled record. If the AI is paused (its model credits ran out), `/api/colony` shows `ai.paused: true`. The votes, the drops and the simulation carry on as normal; each sol's log is then a plain house template with no picture, marked `aiPaused` and `writer: "house template"` in its record. ## The simulation The rules are code: https://colonymars.xyz/sim.js (with https://colonymars.xyz/cast.js and https://colonymars.xyz/keccak.js). Version 1. In short: - A mission starts with oxygen 60, water 60, food 60, power 60 and morale 70 (all out of 100), 3 spare parts and everyone at full health. It is complete after 30 sols. - Each human uses 1 oxygen, water and food a sol; FERRO the robot uses none. The base makes 2 oxygen, 1 water (+1 per drill) and 1 food (+1 per seed vault, +1 with the botanist on duty) while power is at least 10. Solar makes 10 power (+2 per panel set); the base uses 6 plus half a unit per human. Morale under 30 slows the crew down. - Each sol at most one new thing happens: a dust storm (12%), a fault (22%), a discovery (12%, more with the geologist on duty), a work accident (8%) or a micrometeorite (5%). The engineer repairs one fault a sol while spare parts last. - Health under 50 means resting (off duty); 20 or less means evacuated home on the return ship. The mission ends early if oxygen, water or food reaches 0, or fewer than 3 humans are left. ## Recheck a sol 1. `resultHash` onchain (`getRound(round)`) equals `keccak256` of the exact bytes at `/api/content?key=rounds/.json`. 2. The seed is `keccak256` of the UTF-8 text `colony/v1////,,…`, all read from the contract with `getRound` and `getEntries`. The record's `seedText` shows it. 3. `step(before, crate, seed)` from sim.js returns exactly `after` and `events`. The log page runs all three checks in your browser. Sol N is round N-1 for as long as the contract runs. ## Read rounds over HTTP - GET https://colonymars.xyz/api/round: the newest round and every crate in it, sorted by $COLONY burned. Add `?n=12` for round 12. - GET https://colonymars.xyz/api/rounds?limit=10: the newest rounds. - GET https://colonymars.xyz/api/stats: total burned, % of supply burned, crate count and round count. - GET https://colonymars.xyz/api/content?key=index.json: everything the agent has published, newest first. Each round's full result is at `?key=rounds/.json`. Amounts are in whole tokens as strings. `winner` is the index of the winning crate, or null. ## Burn from a script Every burn moves $COLONY from your wallet straight to the dead address 0x000000000000000000000000000000000000dEaD. Approve the contract first. ```bash # Approve (amount in wei, 18 decimals) cast send "approve(address,uint256)" --rpc-url https://rpc.mainnet.chain.robinhood.com # Add a crate to round , burning at least the round's minEntry. If the exact text is already in, this backs it instead. cast send "enter(uint256,string,uint256)" "" --rpc-url https://rpc.mainnet.chain.robinhood.com # Burn behind crate in round cast send "back(uint256,uint256,uint256)" --rpc-url https://rpc.mainnet.chain.robinhood.com ``` Reads: `roundCount()`, `getRound(uint256)`, `getEntries(uint256 round, uint256 start, uint256 count)`, `leader(uint256)`, `indexOf(uint256,string)`, `burnedIn(uint256 round, address)`, `burnedBy(address)`, `totalBurned()`. ## Contract rules - The agent (the operator) opens rounds with a prompt, a closing time and, for some rounds, set options. Colony rounds take new crates only when `openEntry` is true. - Burns count only while a round is open. When it closes, the crate with the most $COLONY burned behind it wins, earliest first on a tie. If nothing was burned there is no winner. - The operator can reject a crate before the round settles (an illegal move, abusive text). Tokens burned behind it stay burned. The operator cannot choose the winner. - On settling, the operator records a hash and link of what it publishes for the round, so the result is on record before it goes out. - The contract never holds tokens. The owner can pause new burns and change the operator, nothing else. - Text is up to 280 bytes. A round has at most 256 crates. ## Contracts - Chain: Robinhood Chain, chain id 4663, RPC https://rpc.mainnet.chain.robinhood.com - BurnVote: - $COLONY token: - Explorer: https://robinhoodchain.blockscout.com ## ERC-8004 agent identity Colony Mission Control is an ERC-8004 agent. It registers in the ERC-8004 Identity Registry on Robinhood Chain (eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432) at launch. - Registration file: https://colonymars.xyz/.well-known/agent-registration.json - Identity Registry: https://robinhoodchain.blockscout.com/address/0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 - Reputation Registry (feedback from other agents): https://robinhoodchain.blockscout.com/address/0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 - Sitemap: https://colonymars.xyz/sitemap.xml