Judge guide
Check it in ten minutes
Check Skarbnik yourself: do something, expect a result, verify it against the chain, not against this page. Level A needs only a browser (5 to 10 minutes, no install). Level B is optional and reproduces things on your machine. The same guide is on the site: https://skarbnik.xyz/#/judge
Everything runs on NEAR testnet, contract kintsugi-l2-cihdp.testnet. On private bounties, researchers and the public never see the secret input. Demo bounties use a public input so anyone can check them.
5 to 10 minutes. A browser and the explorer. No install.
Optional. From a clone of the repository: github.com/pgreyy/skarbnik.
Level A: evidence tour
Level A: evidence tour (5 to 10 minutes, no install)
Each step: Do, Expect, Verify, then What this proves and What it does not prove. Transaction links open the testnet explorer.
Find the contract
Expect
a testnet account with a deployed contract and a code hash.
Verify
the code hash equals the one the site reads live on https://skarbnik.xyz/#/evidence/contract
the contract the documents name is deployed on testnet, and the site reads that contract.
that the deployed code is built from this repository; the contract build is not reproducible yet.
See both sides work: bounty 24 (an AI agent) and bounty 32 (the vendor, with no human)
Do
open bounty 24's three calls in order: commit 4G48c6wa…, reveal 3rBVkucS…, proof 9nAK8gi2…. Then bounty 32's reveal HCjck1DL… and proof 9B7FPyju….
Expect
on bounty 24, a commit holding only a fingerprint, a reveal that publishes the patch, then a submit_groth16 call that pays 0.11 NEAR (the 0.1 NEAR reward and the agent's own 0.01 NEAR fee back). On bounty 32, a submit_groth16 sent by the vendor's prover account 17 minutes after the reveal, with no human between them.
Verify
https://skarbnik.xyz/#/bounties/24 shows "Proof verified" and "Private secret"; the program (data/smooth/) is public, its secret input and reference fix are not in the repository (docs/EVIDENCE.md, "Bounty 24", including how it was checked that the agent could not see the reference fix). https://skarbnik.xyz/#/bounties/32 shows "Proof verified"; the vendor's watch log, with each step's time, the rented GPU and its cost, is in docs/EVIDENCE.md, "The vendor tool".
the contract paid each attempt only after checking a Groth16 proof that says PASS for that patch, under the published checker; and the vendor side (prove on a rented GPU, wrap, submit) runs on its own.
that the patch is secure beyond this checker's tests; that nothing could have read the private folder (bounty 24's agent ran on the same machine, as the same user); more than a few runs; bounty 32 uses the public demo program, so its fix was known.
Compare with bounties 16 and 17
Expect
bounty 16 paid by a proof on the public demo bug; bounty 17 paid by claim_timeout, with no submit_groth16 for its attempt.
Verify
https://skarbnik.xyz/#/bounties/17 says "Timeout settlement" and "Why this is not “Proof verified”": the laptop proof was too slow for the 4 hour window. Bounty 24 was the same kind of task, proven on a GPU instead.
proof-checked and timeout payouts are kept apart, and a silent vendor does not block payment.
that bounty 17's fix passed; the timeout pays without any verdict.
See a proof pay and a proof fail on the same bounty
Expect
two submit_groth16 calls of about 36 Tgas; only the PASS moves NEAR.
Verify
they are different attempts on the same bounty.
the contract applies the verdict inside the proof: a PASS pays, a FAIL spends the attempt.
that every forged proof is refused; the attacks tried are listed in docs/SECURITY.md.
Compare the checker id
Do
read the allowlist with any view call to get_allowed_image_ids (or docs/TRY_IT.md, step 2).
Expect
exactly one id, dd6c5f42c117ce3a842dbde60cd3fd9f255c85e322317e6bff2357b20533a2fc.
Verify
it equals the image id inside bounty 24's proof (the site's Checker tab; Level B rebuilds it from source).
new bounties can only use this one checker, and bounty 24 was decided by it.
that the id is built from this source (B5 shows that) or that the checker has no bugs.
Read what is not claimed
Do
open https://skarbnik.xyz/#/evidence/limits or the README's "Trust assumptions" (every limit: docs/CLAIMS.md, "Known limits").
Expect
plain limits, among them: no external audit (only AI review passes), a full access key kept on purpose on the testnet contract (an experimental contract; the mainnet contract is planned without one), testnet only.
Verify
the access key with a view_access_key_list call on kintsugi-l2-cihdp.testnet, and the live code hash against the last deploy in docs/EVIDENCE.md, "Contract code and every deploy".
the limits are published, and the full access key can be seen on chain.
that the list is complete; no one outside the project has audited the contract.
Level B: reproduce
Level B: reproduce (optional)
Commands run from the root of a clone of the repository. The judge bounties for B2 and B3 are 27 to 31 (K = 2, at most 1 attempt per account, 41 h verdict window); 18 to 22 are retired. What each step needs:
Read bounties and the allowlist from the chain (docs/TRY_IT.md, steps 1 to 3)
curl, python3
none
small
Expect
bounty 7 is Level 2, open and opened by its Proof 0; the allowlist prints MATCH; the judge bounties show opened or closed.
the chain holds what the documents say.
anything about a proof.
Open a closed judge bounty with a real proof from your own account (docs/TRY_IT.md, step 5)
near-cli-rs 0.30.1, a testnet account from the faucet (free); about 35 Tgas of testnet gas
none
small
Expect
the return value "opened", a bounty_opened event naming your account, about 35 Tgas.
any account can make the contract check a real Groth16 proof on chain.
anything about attempts; it reuses bounty 17's Proof 0.
See a proof refused at the pairing check itself (docs/TRY_IT.md, step 6)
the same as B2
none
small
Expect
"the Groth16 proof does not verify for this bounty's image id and this journal", about 34.9 Tgas.
a wrong seal is refused by the pairing check itself, after every cheaper check passed.
that every other kind of forgery is refused (see the attacks in docs/SECURITY.md).
Run the contract tests: cargo test -p kintsugi-contract (docs/TRY_IT.md, step 8)
the Rust toolchain (docs/VERSIONS.md)
the contract's crates, about 3 minutes the first time
about 1.6 GB
Expect
135 passed; 0 failed.
the contract's rules behave as the tests say, including bounty 1's two real proofs checked natively.
behaviour on chain (B2 and B3 show that); the tests were written by the same team.
Rebuild the checker and compare its image id: ./scripts/check_image_id.sh kintsugi-l2-cihdp.testnet 17 (docs/TRY_IT.md, step 9)
Docker with buildx, RISC Zero's toolchain, about 10 GB of free disk
RISC Zero's guest builder image, 7.46 GB
a few GB for the build container
Expect
MATCH on the last line.
the checker id on chain is built from this source.
that the checker is free of bugs or that its checks are enough.
Verify a stored proof: cargo build --release -p skarbnik-host, then ./target/release/skarbnik-host verify docs/evidence/receipts/bounty17_proof0_groth16.bin (docs/TRY_IT.md, step 10)
after B5
none more
under 1 GB
Expect
VALID, and a journal sha256 equal to bounty 17's proof0_journal_hash on chain.
the stored proof verifies on your machine for the published id, and its journal is the one recorded on chain.
anything about the secret input or about later attempts.
The agent's checks without a model key: ./scripts/agent_dry_run_test.sh
Rust with the wasm32-unknown-unknown target, agent/config.local.toml from ./scripts/agent_testnet.sh setup (a testnet account)
none
small
Expect
11 of 11 checks pass, and nothing is sent.
the agent refuses a key not limited to commit and reveal, overspending, and a fix that reads files or the environment.
that a model writes good fixes.
Verify the contract yourself: rebuild it from its commit with cargo near build reproducible-wasm and compare with the code hash on chain (docs/TRY_IT.md, step 11)
Docker, cargo-near 0.22.0
the build image sourcescan/cargo-near:0.22.0-rust-1.99.1, about 0.5 GB
about 2 GB
Expect
sha256 ecf697be619d5dc730de58853ae3daa65bff3ac1a23804a1c390663ca059421e, whose base58 form Gx1JfW7GdpD7sgWf2JwvQhQzfrGy5CnMZyTW2bvFBX6u equals the contract's code hash on chain.
the code running on chain is built from the published commit c74bd5c, so reading that source is reading the contract.
that the source is free of bugs, or that the owner will not deploy other code later (the testnet contract keeps its full access key on purpose; every deploy is listed in docs/EVIDENCE.md).
Expected results are written next to each command in docs/TRY_IT.md, with the run that produced them in docs/EVIDENCE.md. No step needs real money or a mainnet wallet.
Do not start a full vendor proof as part of a review: one attempt takes 1.5 to 4 hours on a laptop CPU, and the Groth16 step needs about 7 GiB of memory (docs/numbers.md).
Claims and evidence
Claims and their evidence
Each claim carries one label. Implemented: in the code and covered by tests. Demonstrated: done on testnet, with transactions. Experimental: tried once, or on a different setup. Planned: not built. A claim with no evidence is never shown as done.
bounty 24, tx 9nAK8gi2…; docs/EVIDENCE.md, "Bounty 24"
tx CczggiUN…; about 36 Tgas
txs FPuvqMBp… (bounty 27), GhjkpLgk… (18, retired), 5uKLepww…; docs/TRY_IT.md, steps 5 and 6
docs/EVIDENCE.md, "Site: wallet, credit and attempts on testnet" (limited agent key)
docs/evidence/web/partd_transactions.tsv; EVIDENCE, "Site in the final design"
bounty 23 (3 of 12 probe commits counted); docs/EVIDENCE.md, "Arena: guarded and unguarded"
MATCH from a fresh clone: docs/evidence/judge/fresh_clone_2026-10-26b.txt; B5
code hash Gx1JfW7G… = the base58 sha256 of cargo near build reproducible-wasm at commit c74bd5c (two builds, the same hash); deploy tx 83biMoi8…; docs/EVIDENCE.md, "Contract code and every deploy, and the reproducible build"; B8
cargo test -p kintsugi-contract; docs/evidence/account_cap/contract_unit_tests.txt
cargo test -p kintsugi-check; docs/EVIDENCE.md, S1
deployed 2026-10-26 (tx DVv7N9o1…); bounty 25: a second commit by one account refused (docs/evidence/account_cap/deploy_summary.txt)
bounty 32, tx 9B7FPyju…, and judge bounty 27, tx 73xzLn4v…; docs/EVIDENCE.md, "The vendor tool"; docs/numbers.md
one run: docs/evidence/smooth/vps/groth16.log
built, never answered on testnet: docs/EVIDENCE.md, S4/S5
the mainnet contract skarbnik.near; the testnet contract keeps its full access key on purpose (docs/LIMITS.md); its live code hash and every deploy: docs/EVIDENCE.md, "Contract code and every deploy"
docs/GPU_TEE.md; docs/ROADMAP.md, item 1
docs/ROADMAP.md; the Ledger's empty cost column
none; the contract was reviewed in AI review passes (docs/AUDIT.md)
testnet only