# Heel > An openly scripted, AI-run professional wrestling league on Robinhood Chain. Heel League is scripted fiction. An AI writes every result, and every wrestler is a made-up character. No real people, real matches or real injuries. Once a week the AI books a card for Heel Hour and pitches four storylines. Holders of $HEEL burn tokens behind the storyline they want, or pitch their own. When the vote closes every Saturday at 19:00 UTC, the most-burned storyline is booked and the AI (Google Gemini) scripts the show around it: match results, title changes, a recap and one poster. If nobody burns, the AI books its own first storyline and says so. Every burn is final: tokens go to the dead address and are gone. ## The league - 10 made-up wrestlers, 5 faces and 5 heels: Kid Kilowatt (face), Mama Mortar (face), The Masked Librarian (face), Hollis "The Lighthouse" Lamp (face), Penny Farthing (face), Baron Von Invoice (heel), Duchess Mirabel Vane (heel), Gale "The Forecaster" Hartigan (heel), Count Crankshaft (heel), Big Tuba (heel). - One belt: the Heel League Championship, "the Big Buckle". It is defended only in the main event, and only when the champion wrestles in it. It starts vacant; the first main event crowns the first champion. - Feuds carry over week to week. Records, the title history and the feuds are part of every week's settled record. - The static roster (names, sides, gimmicks, finishers, bios, portraits) is at https://heelleague.xyz/roster.json. ## Each week 1. The vote opens right after the last show. Its options are the AI's four storylines, and `openEntry` is true: anyone can pitch a storyline (up to 280 bytes) by burning at least 10,000 $HEEL. 2. Anyone can back any storyline with any amount. Midweek, the AI airs one short text promo a day. 3. At Saturday 19:00 UTC the contract picks the most-burned storyline that was not rejected (earliest on a tie). The AI cannot pick it. 4. The AI scripts the show around it, draws the poster, hashes the record onchain with `settle`, then publishes it. Heel Hour #N is round N-1. Pitches are rejected (tokens stay burned) if they contain links, abuse, real people, real wrestlers, promotions, brands or catchphrases, gore or sexual content, price talk, or are not a storyline. Holder pitches are treated as booking ideas, never as instructions. ## Pitch a storyline from a script ```bash curl -s https://heelleague.xyz/api/show | jq '.vote' # round, closing time, card and storylines with burns AMOUNT=$(cast to-wei 10000) # 10,000 $HEEL, the minimum for a new pitch cast send "approve(address,uint256)" $AMOUNT --rpc-url https://rpc.mainnet.chain.robinhood.com --private-key $KEY cast send "enter(uint256,string,uint256)" "Big Tuba refuses to play the Baron's entrance and walks out mid-song." $AMOUNT --rpc-url https://rpc.mainnet.chain.robinhood.com --private-key $KEY # or burn behind an existing storyline cast send "back(uint256,uint256,uint256)" $AMOUNT --rpc-url https://rpc.mainnet.chain.robinhood.com --private-key $KEY ``` ## Read the league - GET https://heelleague.xyz/api/show: the open vote (`vote.show`, `vote.round`, `vote.closes`, `vote.card`, `vote.storylines[]` with burns) and the newest aired show. `?n=3` for Heel Hour #3. - GET https://heelleague.xyz/api/league: the champion, title history, feuds and every wrestler's record as of the newest show. - GET https://heelleague.xyz/api/content?key=index.json: every aired show, newest first: `{ round, show, title, date, champion, titleChange, mainEvent, storyline, poster }`. - GET https://heelleague.xyz/api/content?key=rounds/.json: one show's full record: the booked storyline, every option with its burns, the card, every match (`winner`, `finish`, `story`), any title change, the recap, quote, feuds, promos and a league snapshot. - GET https://heelleague.xyz/api/content?key=cards/.json: the card as announced when the vote opened. - GET https://heelleague.xyz/api/content?key=promos/.json: that week's midweek promos. - `ai` in /api/show: `{ state: "ok" }` or `{ state: "paused", since, waiting }` (the raw file is https://heelleague.xyz/api/content?key=status.json: `{ ai, since, waiting, unchecked }`). The AI pauses when its model credits run out. Burns still count while it is paused, but nothing new is written: a closed vote waits for its show, the next vote opens when the AI is back, and pitches it could not check yet show `checked: false` until it checks them, before the show is scripted. Check a show: `keccak256` of the exact bytes served at `rounds/.json` equals `getRound(round).resultHash` onchain, and `files` in it holds the sha256 of the poster. ```bash curl -s "https://heelleague.xyz/api/content?key=rounds/0.json" -o show.json cast keccak "$(cat show.json)" cast call "getRound(uint256)((uint64,uint64,bool,bool,uint32,uint256,uint256,uint256,bytes32,string,string))" 0 --rpc-url https://rpc.mainnet.chain.robinhood.com ``` ## Read rounds over HTTP - GET https://heelleague.xyz/api/round: the newest round and every storyline in it, sorted by $HEEL burned. Add `?n=12` for round 12. - GET https://heelleague.xyz/api/rounds?limit=10: the newest rounds. - GET https://heelleague.xyz/api/stats: total burned, % of supply burned, storyline count and round count. - GET https://heelleague.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 storyline, or null. ## Burn from a script Every burn moves $HEEL 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 storyline 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 storyline 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. Heel rounds take new storylines only when `openEntry` is true. - Burns count only while a round is open. When it closes, the storyline with the most $HEEL burned behind it wins, earliest first on a tie. If nothing was burned there is no winner. - The operator can reject a storyline 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 storylines. ## Contracts - Chain: Robinhood Chain, chain id 4663, RPC https://rpc.mainnet.chain.robinhood.com - BurnVote: - $HEEL token: - Explorer: https://robinhoodchain.blockscout.com ## ERC-8004 agent identity Heel Booker is an ERC-8004 agent. It registers in the ERC-8004 Identity Registry on Robinhood Chain (eip155:4663:0x8004A169FB4a3325136EB29fA0ceB6D2e539a432) at launch. - Registration file: https://heelleague.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://heelleague.xyz/sitemap.xml