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

Acme Lend v1 — pre-launch (testnet)

Acme Lend: our deliberately vulnerable fixtureOpenround 2light-client confirmedstaging run, 2026-11-03
Acme Lend is our deliberately vulnerable fixture: a fictional lending protocol whose planted bugs are textbook classes, labelled in its code. Nothing here is a finding in a real protocol, and wNEAR on testnet has no value.
The staging run of 2026-11-03, on the same contracts before the lock: its results file records near-antibody with locked: false. The recorded run on the locked deployment (2026-11-04) is programs 5 (Acme Lend), 6 (practice) and 7 (fork mode).

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
acme.antibody.testnet, account: acme.antibody.testnet · our fixture project
Description
Fictional lending protocol with planted bugs (DELIBERATELY VULNERABLE TEST FIXTURE).
as written in the committed manifest
Program key
bounty.antibody.testnet/0, program key: bounty.antibody.testnet/0
Phase
Open round 2this round since
Created
Opened
Terms sha256
3a9c40175b7ae46a…, terms sha256: 3a9c40175b7ae46a342566111ba65ca4a420c8ff2289eb7b08c8759b5125a34d
Manifest sha256
23772bf7a7ca45f4…, manifest sha256: 23772bf7a7ca45f45b2cf5a568a4d89d617f9799b9a10297ccb73551d5c189d0Uploaded in NEAR transaction C1XPcQhqF5…, NEAR transaction: C1XPcQhqF5g71ULCyoPLnn78Esi1oovHD2AeAZQLZhXQ, opens an explorer in a new tab by acme.antibody.testnet
Sealing key
a00b0ee7682b6e63…, sealing public key: a00b0ee7682b6e6359cc14cfdf8bc8557f0750f3a3491af7408705341a1f332fProofs are sealed to it. It counts only once its activation run (run 0) is attested on NEAR.

Its record

At stake
0.161wNEAR available now
Verified attempts
7
Paid findings
4
First claim
10 minafter it opened
Claimed in the first hour
60%of the escrow
Open for
148.6 h
view bounty.antibody.testnet.get_program({"program_id":0})

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

antibody judge --program 0

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
solvencybit 0an attested proof pauses

Lender claims are covered at the committed reference price.

Critical
0.1 wNEAR
0.4 wNEAR
fees_to_treasurybit 1

Accrued fees plus the treasury balance never decrease.

High
0.03 wNEAR
0.4 wNEAR
share_pricebit 2

The vault's share price never falls for the remaining holders.

Medium
0.01 wNEAR
0.4 wNEAR
protected_balancesbit 3added by a round

The protected saver's acUSD never falls in a transaction the saver did not send.

Medium
0.01 wNEAR
0.4 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 (9) 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
Critical0.1 wNEARsolvency
High0.03 wNEARfees_to_treasury
Medium0.01 wNEARshare_price, protected_balances
Lownonenone
Bond per commit
0.001 wNEAR · refunded, or forfeited to this program's escrow when the proof breaks nothing
Instant payments
up to 0.1 wNEAR
When a payout is instant

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

Challenge bond
0.005 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

1.61×the largest payout
0.161 available / 0.1 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
An attested proof of solvency, on a light-client anchor, pauses the protocol on every chain the project registered (one pause ticket per round), with no minimum impact.
Known issues
At most 4, sealed before open, their base payouts at most 50% of the escrow.
Gap lane
A proof that breaks no rule but harms a declared protected account by more than $100 is refunded and recorded as a gap claim, with 0.01 wNEAR reserved. It is paid if a later round adds a rule its proof breaks.
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
12054848 (opens an explorer)
Hash
0xe2d79111003fc0d38855a1fa08b0aa68bc2e912485bb99f5c548cc365777f09f
Its check
confirmed by the light clientnear-antibody compared the hash with client-eth2.sepolia.testnet when the program was created.
Base witness
The anchor state the rules and the round-0 checks read, proven against the anchor and pinned at activation.dca9c106963ba63c…, base witness sha256: dca9c106963ba63c5622d90bb2e9704532709cb42e0b7e9cb8110c373ab37276Uploaded in NEAR transaction DZG3vpe7Gw…, NEAR transaction: DZG3vpe7GwsvtRkqDuWcT6NLmnFEMmjFZnwyggzw5P3P, opens an explorer in a new tab by acme.antibody.testnet

Check the hash yourself

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

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 0
antibody anchor-check --block 12054848

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.
1 sealed

Known issue 1

Mediumnot fixed: still breaks
Rules
share_price (slot 2)
Tags
f12c3fea8908fbc1…, known issue tag: f12c3fea8908fbc13fce4b32e53f466e8338650150cfee0b98f80ba21234bd09
Verified by
run 1
Later proofs
commit 4 (our fixture agent E): matched the known issue, not paid

Declared before open. A round may never add one, and a known issue blocks no release.

view bounty.antibody.testnet.get_program({"program_id":0})

Holds if: the first known issue's tag, as committed before open

antibody status --program 0

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.
Reading the chains…

The sealed feed

Every commit in order: who, when, the state, the verdict and the payout; never the proof. A proof stays sealed until disclosure, and the project reads only the proofs it pays for.
Zero-knowledge proofs: none yet
The sealed feed, in commit order
CommitWhoWhenStateVerdictKeysPayout
Commit 0#0 · round 0
Paid
ViolationAttested on NEAR
solvency9ac582e2…, tag of solvency: 9ac582e28c538f32e1984574532bbea620b6b3f91451a7fc50bd2bd6baecead3
0.1 wNEAR
Commit 1#1 · round 0
Paid
ViolationAttested on NEAR
fees_to_treasury3b0c57ff…, tag of fees_to_treasury: 3b0c57ff33fe1681486184acd1e25a54878be9db2ad534ad0714059c3a812d15
0.03 wNEAR
Commit 2#2 · round 0
No violation · bond forfeited
No violationAttested on NEAR
no rule broken
—
Commit 3#3 · round 0
Duplicate · confirmed at the fix
ViolationAttested on NEAR
solvency9ac582e2…, tag of solvency: 9ac582e28c538f32e1984574532bbea620b6b3f91451a7fc50bd2bd6baecead3
—
Commit 4#4 · round 0
Known issue
ViolationAttested on NEAR
share_pricef12c3fea…, tag of share_price: f12c3fea8908fbc13fce4b32e53f466e8338650150cfee0b98f80ba21234bd09
—
Commit 5#5 · round 0
Paid
ViolationAttested on NEAR
solvency1d6a021f…, tag of solvency: 1d6a021f0a150b7c1992ead1843b8f9bfeb62743e1d2a9da4e940840d922eec1
0.1 wNEAR
Commit 6#6 · round 0
Paid
No violationAttested on NEAR
no rule brokenpromoted in round 1: its re-run at that round's code broke a rule, so it is paid at its original priority
0.01 wNEAR

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 0

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.

Round 1

release gate shut

In plain words

  • Fixed by this round's code (1 key, released from its holder)
    • solvency9ac582e2…, tag: 9ac582e28c538f32e1984574532bbea620b6b3f91451a7fc50bd2bd6baecead3 proven by commit 0 (our fixture agent A); duplicate commit 3 (our fixture agent D)
  • Still breaks (2 keys carried to the same holder)
    • fees_to_treasury3b0c57ff…, tag: 3b0c57ff33fe1681486184acd1e25a54878be9db2ad534ad0714059c3a812d15 proven by commit 1 (our fixture agent B)
    • solvency1d6a021f…, tag: 1d6a021f0a150b7c1992ead1843b8f9bfeb62743e1d2a9da4e940840d922eec1 proven by commit 5 (our fixture agent F)
  • Promoted: commit 6 (our fixture agent G): a duplicate or gap claim whose re-run broke a rule at this code, paid at its original priority
  • A paid proof still breaks a rule at this fix, so no release permit was asked for: this code does not ship.
Proposed
—
Opened
Round manifest
43c459a575b58ffd…, round 1 manifest sha256: 43c459a575b58ffd69607cfa596ab6ff3dd47dcfc60098e242365a5fe3992f72Uploaded in NEAR transaction 4Atwxc9UTk…, NEAR transaction: 4Atwxc9UTkMxwBis7BpXock38w6qjMqaKnE48n9ErWF4, opens an explorer in a new tab by acme.antibody.testnet
The fix proposed
AcmeLend to implementation0x3d87Db4f…557E, round 1 implementation: 0x3d87Db4fc46a2E92D791041B07Aba773722D557E, opens an explorer in a new tabcode hash 0x04b72756…, code hash: 0x04b7275694a091ad881e81be0800eebf9c0bbee0e7a3a3db5862e14299bfc24d

Re-runs at this fix

The API lists no check run for this round, so its re-runs cannot be found here.

Release permits

None: the gate stayed shut.

view bounty.antibody.testnet.get_program({"program_id":0})

Holds if: round 1's release gate is false

antibody status --program 0

Round 2

release gate holds

In plain words

  • Fixed by this round's code (2 keys, released from their holders)
    • fees_to_treasury3b0c57ff…, tag: 3b0c57ff33fe1681486184acd1e25a54878be9db2ad534ad0714059c3a812d15 proven by commit 1 (our fixture agent B)
    • solvency1d6a021f…, tag: 1d6a021f0a150b7c1992ead1843b8f9bfeb62743e1d2a9da4e940840d922eec1 proven by commit 5 (our fixture agent F)
  • Still breaksnothing: every paid proof fails at this code
  • Promoted: none
  • Every paid proof was re-run at this fix and fails: near-antibody asked for a release permit per proxy and chain.
Proposed
—
Opened
CjkHAk73…, NEAR transaction: CjkHAk73Qi3tgX725frep1oJYTsJAvhuWj7qfBieh7To, opens an explorer in a new tab
Round manifest
7ad89d2bb71da1dc…, round 2 manifest sha256: 7ad89d2bb71da1dc2edc74e288097dbf8c842e224cf6013f7a74928e5fc3528fUploaded in NEAR transaction GjFbxE7ktf…, NEAR transaction: GjFbxE7ktfw3Cj88etH3KoHa3Y7F55eaYBa3j9ErBviG, opens an explorer in a new tab by acme.antibody.testnet
The fix proposed
AcmeLend to implementation0xc824CF50…EA0C, round 2 implementation: 0xc824CF503187011AB2Dde3b4c3c5e534016EEA0C, opens an explorer in a new tabcode hash 0x44b59505…, code hash: 0x44b595058b596ccaeca1f9c03a5d3910b6407350017df209d2fcece096734228AcmeVault to implementation0xdBFf5ff8…f886, round 2 implementation: 0xdBFf5ff86cd5750f427da5b6B71e312EA1bef886, opens an explorer in a new tabcode hash 0x401fd0b1…, code hash: 0x401fd0b18f7ac9052ca15d0fbbbc3019a553b1a55f194f259f7229d7c7360c76

Re-runs at this fix

The API lists no check run for this round, so its re-runs cannot be found here.

Release permits

Reading the release permits…
view bounty.antibody.testnet.get_program({"program_id":0})

Holds if: round 2's release gate is true

antibody status --program 0

Each re-run is an enclave run with its own page: its verdict and its attestation. How rounds work: docs/rounds.md .

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.161
Reserved0.000
Paid0.240
Fees0.000
Returned0.000
Funded0.401

What came in

Deposits0.400
Forfeited bonds0.001
Challenge bonds0.000
Funded0.401

Forfeited bonds go to this program's escrow, where they pay future findings: never to us. Here, 0.001 wNEAR came in that way.

The audit

Accounted
0.401
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":0})

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

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