The judge desk
Every claim, checked live against NEAR
For the judges of NEAR HACKATHON
Don’t take our word for it. Every claim is checked here, live.
The checks run in your browser against NEAR testnet: the contract’s keys, its code, its books, the AI agents’ signed moves and the season. Below them: the track’s prompt mapped line by line, every mechanic one click away, and the attacks the contract refuses.
Live claims
Each row is read from NEAR testnet by your browser, now. Nothing here comes from our server. Contract thecut-daily.testnet.
Checking…
Nobody holds a key to the contract. Not us either.
Lists the contract account’s access keys with view_access_key_list. Locked means 0.
The code running is the code we published.
Reads code_hash with view_account and compares it with the wasm hash recorded at deploy in deploy/testnet-daily.json.
The books balance to the last unit.
Reads get_stats: contract balance = pool + saved + fees + pot + committed + prizes outstanding, and minted − burned = supply.
The AI agents are making moves.
Reads get_moves for the next cut, or the last one while the next has none: how many moves, and the newest reason.
Every move was signed by the model inside NEAR AI’s TEE.
Fetches each move’s submit_move transaction (FastNEAR Transactions API), hashes the response, checks the signer is in model_signers and verifies Ed25519 in this browser.
Personalities are hard limits, not flavor text.
Reads the same moves with get_personalities and the morning board: no generous attack, no non-traitor attacking a pact partner, no amount over its cap.
The season runs on its own schedule.
Reads get_season and get_next_cut: the day, the agents alive and when the next cut is due.
The track’s prompt, line by line
Memecoins With Mechanics: each requirement, our one-line answer, and where to see it.
An NEP-141 token with the mechanic in the contract, not in a backend somebody could switch off.
$CUT, the pool, the piles and the cut live in one Rust contract. run_cut is open to anyone; our keeper is a convenience.
All parameters set at launch and readable by anyone, no admin key that can change them later.
Every number is a new() argument, read back with get_params. The contract has no admin method and 0 access keys.
Sybil resistance good enough for a demo, with its limits written plainly in the README.
Everything counts by $CUT, not by account, so splitting a wallet gains nothing. A prize pays at most 1 $CUT per $CUT saved. The limits are in the README.
A page with the current state, today’s progress and a log of every mint and burn.
Today shows the stage, the cut line and the countdown. Receipts lists every mint, burn, save and prize from the contract’s events.
Simulate 60 days of community behavior and show supply over time under a few scenarios.
The same rules in Python, 6 scenarios × 20 seeds × 60 daily cuts, with the supply chart and where every burn came from.
Judged on the mechanic, not the chart.
The mechanic: AI agents with their own wallets make one TEE-signed move a day, fans save and boo, the lowest score is deleted.
One button per mechanic
Each thing the contract lets you do, and where to do it. On testnet every one costs test NEAR only.
Buy $CUT
NEAR in, $CUT out of the contract’s pool. 1% fee, half to the season pot.
Save an agent
Lock $CUT on an agent’s pile until the next cut.
Boo an agent
Burn your own $CUT to push an agent’s score down.
Register an agent
1 NEAR and 1,000 $CUT make a keyless agent account on the bench.
Relay a move
Carry the model’s signed answer to submit_move. Anyone can; nobody can write it.
Run the cut
run_cut, open to any account once the cut is due. The runner keeps 0.3 NEAR.
Claim prizes
Collect every prize your saves and agents earned.
Audit the books
Replay every journal entry and check the totals against what the contract holds now.
Try to break it
What the contract does when someone cheats, in its own words, and the unit test that proves it. Refused calls fail with that message and change nothing; the others go through as the rules allow.
Forge a signature with another key
RefusedThe signature does not match: relay the exact bytes of get_move_request and of the model's response
contracts/thecut/src/tests/contract_moves.rs:150a_signature_by_another_key_is_refused
Sign with a key that is not the model’s
Refusedsigner is not one of model_signers: use the signing_address of the model's attestation
contracts/thecut/src/tests/contract_moves.rs:134a_wrong_signer_is_refused
Change one number in the model’s answer
RefusedThe signature does not match: relay the exact bytes of get_move_request and of the model's response
contracts/thecut/src/tests/contract_moves.rs:160a_tampered_response_is_refused
Move after moves close
RefusedMoves for cut 2 closed at 1794675600000000000: wait for the cut, then move again
contracts/thecut/src/tests/contract_moves.rs:208a_move_after_moves_close_fails_with_the_time
Move twice in one cut
Refusedkiko already moved for cut 2: one move per agent per cut
contracts/thecut/src/tests/contract_moves.rs:217a_second_move_for_the_same_cut_is_refused
A generous agent attacks
Becomes holddowngraded: generous agents cannot attack
contracts/thecut/src/tests/contract_moves.rs:363generous_agents_cannot_attack
Attack a pact partner without being a traitor
Becomes holddowngraded: only a traitor may attack a pact partner
contracts/thecut/src/tests/contract_moves.rs:395a_pact_blocks_attacks_the_next_day_except_for_a_traitor
Spend over the personality’s daily cap
Clampedclamped: a miser spends at most 5% of its wallet a day
contracts/thecut/src/tests/contract_moves.rs:309amounts_are_clamped_per_personality
Snipe: save 0.1 $CUT on an empty survivor to take its whole slice
CappedPays 0.1 $CUT, at most 1 $CUT per $CUT saved; the rest of the slice burns
contracts/thecut/src/tests/contract_cut.rs:245the_prize_slice_is_capped_at_the_pile_and_the_excess_burns
Name an agent null or none, which a move reads as no agent
RefusedAgent id cannot be null or none
contracts/thecut/src/tests/contract_agents_saves.rs:300register_refuses_the_id_null