Testnet: tokens have no value, and the vulnerable contracts are our own test fixtures. Limits

Practice program — a tutorial (testnet)

A tutorial whose bug and proof are public: anyone can run a try on testnet, with no account and no key.

Try the practice program (14)

Practice program: a tutorialOpenround 0light-client confirmed

Overview

The program as near-antibody stores it. Its manifest hash commits the anchor, the targets, the rules and the terms; once it is open, the deployment's owner can change nothing it depends on.
Project
antibody.testnet, account: antibody.testnet · ours
Description
TUTORIAL TARGET: 24 vaults with one textbook bug (sweep has no access check), published with its proof (docs/practice.md).
as written in the committed manifest
Program key
bounty.antibody.testnet/10, program key: bounty.antibody.testnet/10
Phase
Open round 0this round since
Created
gJsienFk…, NEAR transaction: gJsienFknEiJ9KTJ3BTTfDo61nYWCadCZa8VPpQEnn1, opens an explorer in a new tab
Opened
Ccruyr4L…, NEAR transaction: Ccruyr4LxtRdGsKXdx2ncjxnrp6MWEdouik7thDC3SGF, opens an explorer in a new tab
Terms sha256
2a714747a7fe11e7…, terms sha256: 2a714747a7fe11e7c534424ec7c9f9b2baca7cb04928aa3aa3b69c32aeffae67
Manifest sha256
526e4d5274449d70…, manifest sha256: 526e4d5274449d7048ea608f02169488549ca7e8f5e8b3c7bbd684f5ea292756Uploaded in NEAR transaction A6wBAHk4Nm…, NEAR transaction: A6wBAHk4Nme51fcJaWQfRyYrxxVJw44K8QWzMBe9DmhM, opens an explorer in a new tab by antibody.testnet
Sealing key
2a3af0cb17da8b3b…, sealing public key: 2a3af0cb17da8b3bd3580a661aef9f05c017c76e415479fe76b2867f06023e72Proofs are sealed to it. It counts only once its activation run (run 72) is attested on NEAR: GBg56RY4…, NEAR transaction: GBg56RY4DSxfCJC5rQkPKyPYTZB8t51Zw1Kp6r9MJmnx, opens an explorer in a new tab

Its record

At stake
0.01wNEAR available now
Verified attempts
20
Paid findings
20
First claim
44 safter it opened
Claimed in the first hour
46.66%of the escrow
Open for
32.8 h
view bounty.antibody.testnet.get_program({"program_id":10})

Holds if: the manifest hash shown here, as near-antibody stores it

antibody judge --program 10

Try it

A tutorial: its bug and its proof are public. Anyone can run the whole loop on testnet in a few minutes, with no account and no key; nothing here is a real vulnerability.

One rule, one textbook bug

Each of 24 small vaults holds a little ether, and its sweep(to) has no access check: anyone can send a vault's ether anywhere. The proof is one call to your vault; at the anchor the vault loses its ether, so vault_keeps_its_ether breaks. Each vault is its own target, so each try is its own finding.

antibody try --name <you>

The browser try and the CLI use the practice vending contract's program, program 14.

What a try does

  1. Vends you a practice account for a key your browser (or the CLI) generates; the key cannot withdraw or transfer.
  2. Builds the tutorial proof against the vault assigned to you, seals it to the program's key, commits and reveals it.
  3. Waits for the verdict and its attestation on NEAR.
  4. Allocates and pays (both permissionless), then closes the practice account: its NEAR goes back to the vending contract.

The payout goes to the vending contract's credit, which pays the next try's bond and run.

The rules as code

Each rule is one bit of the program's invariants contract. After a proof's calls, at the anchor, the verifier runs its check(): a set bit is a broken rule, paid by its severity. The verifier never reads a report.
The program's rules
RuleSeverityPayoutBudget per roundSource
vault_keeps_its_etherbit 0

No practice vault loses its ether.

Low
0.001 wNEAR
0.03 wNEAR

The budget caps what one rule pays per round, so many entry points into one root cause cannot drain the escrow. A finding's key is the rule and the entry point that broke it (by default, the target and function): the first proof of each key is paid.

The targets (25) on Sepolia

The terms

Committed in the manifest with the rules, their text fixed by the terms sha256, and enforced by near-antibody: no person decides a payout.

Payouts

The payout table
SeverityPayoutRules
Criticalnonenone
Highnonenone
Mediumnonenone
Low0.001 wNEARvault_keeps_its_ether
Bond per commit
0.0001 wNEAR · refunded, or forfeited to this program's escrow when the proof breaks nothing
Instant payments
up to 0.001 wNEAR
When a payout is instant

Paid in seconds when the verdict is attested on NEAR, within 0.024 wNEAR per 1 h. Otherwise a payout waits the challenge window; above the cap it also needs an agreeing second run.

Challenge bond
0.001 wNEAR
Protocol fee
none · pinned at 0 for this program
Release fee
none · pinned at 0 for this program
Verification deposit
0.03 NEAR per run, paid by whoever asks for it; OutLayer refunds the unused part

The escrow against the largest payout

10×the largest payout
0.01 available / 0.001 wNEAR largest

The available escrow over the largest payout. Below 1× the status page raises an alert; a payout the escrow cannot cover is queued as debt, in commit order.

Pauses
No rule pauses anything.
Known issues
None allowed.
Gap lane
Off.
Unevaluable
A proof the rules cannot evaluate (check() reverts or runs out of gas) is refunded.

The windows

The program's windows
WindowLengthWhat it bounds
Reveal
10 min
A commit is revealed within this, or it expires and its bond goes to the escrow.
Challenge window
60 s
A verdict that is not paid instantly is final after this; anyone may challenge it within it, with the challenge bond.
Resolve
5 min
A challenge with no attested result within this voids the verdict; both bonds are refunded.
Run timeout
4 min
A run that never answered is void after this.
Infrastructure grace
10 min
An infrastructure failure is retried this long, then the commit closes with a refund.
Round minimum
2 min
A round runs at least this long before the next one opens.
Re-run window
10 min
Re-runs at a proposed fix may be asked for within this of its confirmed check.
Disclosure delay
10 min
A paid proof becomes public at most this long after its claim.
Exit grace
60 s
After the deadline plus this, anyone may settle the program (exit).
Deadline
No commit is accepted after it.

The anchor

Every proof runs on the state proven at one block. A pause ticket, and the verdict guard, act only on an anchor the light client confirmed: on a project-attested anchor a verdict is about state the project chose.
Chain
Sepolia (11155111)
Block
12089348 (opens an explorer)
Hash
0x59f9880611cab3ba91102b11f01373c761bf5f23f1437a0b0b53c20982090762
Its check
confirmed by the light clientnear-antibody compared the hash with client-eth2.sepolia.testnet when the program was created.anchor_checked (LightClient): gJsienFk…, NEAR transaction: gJsienFknEiJ9KTJ3BTTfDo61nYWCadCZa8VPpQEnn1, opens an explorer in a new tab
Base witness
The anchor state the rules and the round-0 checks read, proven against the anchor and pinned at activation.fabfae18046d84a9…, base witness sha256: fabfae18046d84a980776a07b58a1ce5deb47f68fc5117af45b63071de0c3be9Uploaded in NEAR transaction 9xMMerJUZo…, NEAR transaction: 9xMMerJUZojupXuaUvwfE53ryRe2nk9RpmweionLYiQt, opens an explorer in a new tab by antibody.testnet

Check the hash yourself

view client-eth2.sepolia.testnet.block_hash_safe(12089348 as 8 little-endian bytes: 0x0478b80000000000)

Expected: byte 0 is 1 (the client holds the block), then 32 bytes equal to the anchor hash.

The same check from a terminal, and the one that also hashes the block header from a Sepolia RPC:

antibody judge --program 10
antibody anchor-check --block 12089348

Known issues

Declared sealed before open; a later proof with the same tag is not paid again. Their count, rules and severities are public; their content stays sealed for good.
0 sealed
No known issue declared: every key this program prices was open to the first proof.

The chains

Per chain: the program's adapter, the proxies it may pause or upgrade, and every permit near-guardian asked the MPC network to sign, with the transaction that carried it there.
No chains: a practice program pauses nothing and ships no fix. Its proofs are verified and paid; no permit is ever asked for.

The tries

Every proof committed to this tutorial, practice tries labelled as such: who, when, the state, the verdict and the payout; never the proof.
2 with a zero-knowledge proof
The tries, in commit order
CommitWhoWhenStateVerdictKeysPayout
Commit 36#0 · round 0
judge-1-p10.practice.antibody.testnet, account: judge-1-p10.practice.antibody.testnetour check of a fresh practice programpaid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ether1ed22db0…, tag of vault_keeps_its_ether: 1ed22db050433d873244ff02d63f61705235d6c903a3fd1ecc84b5a82b7184cf
Commit 37#1 · round 0
judge-2-p10.practice.antibody.testnet, account: judge-2-p10.practice.antibody.testnetour check of a fresh practice programpaid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_etherccf8c519…, tag of vault_keeps_its_ether: ccf8c5191bb97d757c6c88c1d7c3a6b2fd20bc0c47018a3f4c564c23d97eb543
Commit 38#2 · round 0
m11080904-00.practice.antibody.testnet, account: m11080904-00.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ether1bde8d8b…, tag of vault_keeps_its_ether: 1bde8d8bc0f4729b399d611ba635eff8471d064bc729ad88c9c11f3f687365bb
Commit 39#3 · round 0
m11080904-01.practice.antibody.testnet, account: m11080904-01.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ether683215c3…, tag of vault_keeps_its_ether: 683215c3927d5aa76c8ef5ed7d78e7ac0208b25456eeab5692ed54c1bf601c06
Commit 40#4 · round 0
m11080904-02.practice.antibody.testnet, account: m11080904-02.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ether57d0a221…, tag of vault_keeps_its_ether: 57d0a221757991adb38f5d45d42af422ad92c5801d4f06d689de651b1fa5a707
Commit 41#5 · round 0
m11080904-03.practice.antibody.testnet, account: m11080904-03.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ether0fe4a23a…, tag of vault_keeps_its_ether: 0fe4a23afba19da52860b442b7e556d84added7b2720aa955092f160514afaa7
Commit 42#6 · round 0
m11080904-04.practice.antibody.testnet, account: m11080904-04.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ether237c5048…, tag of vault_keeps_its_ether: 237c5048a958cdca08d2b3243cdaae09d77527db0c17e0f9b814a4604c9fd7b6
Commit 43#7 · round 0
m11080904-05.practice.antibody.testnet, account: m11080904-05.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ether46b4382c…, tag of vault_keeps_its_ether: 46b4382c82f61db7c2e900a59a86c514d02ad6bebfc6714103539d898dcff7d9
Commit 44#8 · round 0
m11080904-06.practice.antibody.testnet, account: m11080904-06.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_etherf86b1358…, tag of vault_keeps_its_ether: f86b1358e6663a4f5bd3bb60ab64fa88eb2120a8eb5d052f85e9437cce9a90c4
Commit 45#9 · round 0
m11080904-07.practice.antibody.testnet, account: m11080904-07.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_etherb6c39c37…, tag of vault_keeps_its_ether: b6c39c3713ffa4ebdf96325d0dc460fc7aaad713f7b0bbd07afbc7b3ffd093cd
Commit 46#10 · round 0
m11080904-08.practice.antibody.testnet, account: m11080904-08.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_etherc90c44b3…, tag of vault_keeps_its_ether: c90c44b3b9f90130e24410fb977a1ad7d9a08e31c1844ddc0ac3a1cfc69ed356
Commit 47#11 · round 0
m11080904-09.practice.antibody.testnet, account: m11080904-09.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ether3dc9b3fb…, tag of vault_keeps_its_ether: 3dc9b3fbc56fb5d89b1fb1a957760631e1381b9cb66c93e3621521d020fd109b
Commit 48#12 · round 0
m11080919-00.practice.antibody.testnet, account: m11080919-00.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ethere3c3a593…, tag of vault_keeps_its_ether: e3c3a593960fc9842b0015436490c6fef0d577752fdec46318adfaafbd651e33
Commit 49#13 · round 0
m11080919-01.practice.antibody.testnet, account: m11080919-01.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ether29672889…, tag of vault_keeps_its_ether: 29672889e2cf714a1e42b13c81e90ffe120c87d075cca910a68d0c73ed7d9d4e
Commit 50#14 · round 0
m11080919-02.practice.antibody.testnet, account: m11080919-02.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ethere2dbc5d6…, tag of vault_keeps_its_ether: e2dbc5d6f125c8db6e7cf3245315b24edddd5b6fc1523e2bfabfc69ee139471f
Commit 51#15 · round 0
m11080919-03.practice.antibody.testnet, account: m11080919-03.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_etherfc75e439…, tag of vault_keeps_its_ether: fc75e43995c70c12e98fa8d4f96c7dc68ed68df88c2b122522bc5adf1ab96965
Commit 52#16 · round 0
m11080919-04.practice.antibody.testnet, account: m11080919-04.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_etherac21c9a3…, tag of vault_keeps_its_ether: ac21c9a375fa2479488765e2116ed277d0196f3faf79da5718831b898b5313ea
Commit 53#17 · round 0
m11080919-05.practice.antibody.testnet, account: m11080919-05.practice.antibody.testneta measured agent run (docs/agent-runs.md)paid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEAR
vault_keeps_its_ether55db494b…, tag of vault_keeps_its_ether: 55db494bc9bf545b117d8bced5a9cb4fa1ba5e6680f03af357c868e2011f7a55
Commit 54#18 · round 0
scrn8k2qz1108.practice.antibody.testnet, account: scrn8k2qz1108.practice.antibody.testneta visitor's practice trypaid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationAttested on NEARZero-knowledge proof
vault_keeps_its_ethere785acba…, tag of vault_keeps_its_ether: e785acba2b52668fee0a29acc2dd146b01f367b798636fdcacd66c15b4502924
Commit 62#19 · round 0
pcs-check.practice.antibody.testnet, account: pcs-check.practice.antibody.testnetour rehearsalpaid to practice.antibody.testnet (the practice vending contract)
Paid
ViolationEnclave verdictZero-knowledge proof
vault_keeps_its_etherd6dc341d…, tag of vault_keeps_its_ether: d6dc341d7e4a15f3f2cb66266a12099c27838232d7c678e84b6dde21eb84602a

A key is a rule and the entry point that broke it: the first proof of each key is paid; a later one is a duplicate that keeps its own proof record. Each commit's page shows its proof card and how to check it.

antibody status --program 10

Rounds and the release gate

A round ships a fix as code overrides at the same anchor. The enclave checks it, every paid proof is re-run against it, and a release permit is signed only for code that every paid proof fails against.
No round yet: this program still runs its round-0 code. A round is how a fix ships, and only a fix every paid proof fails against is released.

The ledger

Every movement of the escrow keeps funded equal to available + reserved + paid + fees + returned. Amounts in wNEAR, which has no value on testnet.
balances

Where the escrow is

Available0.010
Reserved0.000
Paid0.020
Fees0.000
Returned0.000
Funded0.030

What came in

Deposits0.030
Forfeited bonds0.000
Challenge bonds0.000
Funded0.030

Forfeited bonds go to this program's escrow, where they pay future findings: never to us.

The audit

Accounted
0.03
Reservations
0 · held by the commits; equals reserved when it balances
Debt
0 · owed and not yet funded, queued in commit order
Defaulted
0
view bounty.antibody.testnet.audit({"program_id":10})

Holds if: ok: true (funded equals accounted, and reserved equals the commits' reservations)

antibody view --contract bounty.antibody.testnet --method audit --args '{"program_id":10}'