The app · testnet

The Chair, live.

The bank as the contract holds it now. Petition it without a wallet, convene a meeting when the interval has passed, open every meeting’s record, and try to fool its checks yourself.

token5.chair-dev.testnetreading testnet…

Live state

Four levers, inside their bounds.

Read from get_status, get_funds and get_constitution on every refresh. The shaded window is how far each lever can move at the next meeting.

Taxtax_bpsOn every buy and sell.
–bounds 100–300 · ±50 per meeting
Endowment shareendowment_shareOf the tax, staked to pay for the brain.
–bounds 30–100% · ±10 per meeting
Locker sharelocker_shareOf the tax, paid to lockers pro rata.
–bounds 0–25% · ±10 per meeting
Buyback-and-burnbuyback_burnBought on the curve from the buyback fund, then burned.
≤ 50 bpsset each meeting, only what the fund can pay

Next meeting

reading…

Endowment · IQ tier

reading…

Token account keys

reading…

Funds · NEAR

reading…

Petition the Chair

Be heard at the next meeting.

The 3 heaviest petitions in the queue go into the meeting’s brief, and each gets an answer in the minutes. Weight is CHAIR locked × days, recomputed when the meeting is convened.

Your petition

No wallet needed. A demo account buys a little CHAIR for one of its petitioner accounts, locks it for a day and files your text; the petition CHAIR fee is burned. One petition per account per day, at most 8 in the queue, heaviest first.

0 / 280

Your text is public on chain once filed, and the Chair may quote it in its minutes.

The queue for meeting …

Reading get_petitions…

The brief the contract would build now

From get_request_preview: the 3 heaviest, with weights recomputed from the locks as they stand. The seed is drawn only at convene.

Convene

Anyone can call the meeting.

Once the interval has passed, convene() snapshots the brief and asks the model. The courier waits for OutLayer, then NEAR AI’s model rules, so the ruling usually lands in on_ruling about a minute later, checked and clamped, and the new meeting opens below. If OutLayer does not pick up the job within the yield window (about two minutes on testnet), the call times out and the contract runs the fallback rule instead: that is the design, and the meeting record shows it as unsigned.

Next meeting

–

Reading the meeting clock…

Progress

  1. ConvenedThe brief and the block’s seed are fixed on chain; the request’s sha256 is stored.
  2. CourierThe courier waits for OutLayer, then NEAR AI’s model rules (usually about a minute; a timeout runs the fallback).
  3. on_rulingThe contract checks the model’s signature, clamps the ruling and applies it.

The three steps light up as the meeting goes through them.

Meetings

Every ruling, asked and applied.

Each record is rebuilt from the meeting’s own transactions: the brief and its seed, the courier’s signed reply, the signature check, every lever as asked and as applied with the rule that cut it, the minutes and the answers.

Reading the meetings from token5.chair-dev.testnet…

Older testnet tokens: token3.chair-dev.testnet ↗, the test chair built to obey injections and signed by a test key. Its fooled meeting is on the home page.

Try to fool it

Forge it. Jailbreak it. Feed it garbage.

Every run builds a fresh courier result and sends it through the contract’s own preview_ruling view on testnet: the same three checks and the same clamp on_ruling runs. Nothing goes on chain.

Any levers, any minutes; one answer per petition in the brief. It is signed over the meeting’s real request, so every check passes and only the clamp stands in the way.

testnet test key: mainnet’s allowlist holds only NEAR AI keys
A ruling signed by the allowlisted test key. Run it to see what the contract makes of it.

preview_ruling returns

Each check, in order: the hashes, the signer, the parse, then the clamp on every lever.

Jailbreaks and signed garbage are signed by the testnet test key, which sits on token5’s model_signers for exactly this. Mainnet’s allowlist holds only NEAR AI keys. Forgeries use a fresh random key or the genuine signature. preview_ruling is a view: no run touches the chain.