Trust
What you trust, and how to check it
Each part of Antibody, what it is trusted for, and a check you can run in your browser, with its terminal command.
How a verdict is checked
OutLayer runs the verifier in an enclave (secure hardware, a TEE), and its operator delivers the output. On that alone, a payout waits its challenge window; above the instant cap it also needs a second run that agrees. Nobody files challenges today, so under the cap a T0 verdict is paid when its window ends.
The run's Intel TDX quote, verified on NEAR: it binds the pinned wasm, the input and the output. Instant payouts need it. Check a run
A zero-knowledge validity proof (SP1) of a disclosed verdict, verified on NEAR in about 34 Tgas. It claims no privacy, and no payout in the locked deployment depends on it. Its records
The common ground
Native, the enclave's wasm and the zkVM give the same receipt, byte for byte. Three environments, one answer
The trust panel
/v1/trust: each actor, what it is trusted for, and how anyone checks it.The light client
- Trusted for
- the anchor block's hash
- How anyone checks it
- the program's anchor check (
antibody judge: anchor status light-client) against any RPC's block hash
The enclave (OutLayer worker)
- Trusted for
- running the pinned verifier on the sealed proof
- How anyone checks it
- T1: the run's TDX quote is verified on NEAR (
antibody tee check --request-id <id>); the verifier's wasm hash is pinned per program
The verifier
- Trusted for
- nothing beyond its pinned build
- How anyone checks it
- native and wasm builds agree byte for byte;
antibody checkre-runs any proof locally; after disclosure every verdict can be recomputed - Account
- none: nothing on chain to trust
The MPC network
- Trusted for
- signing pause and release permits near-guardian builds
- How anyone checks it
- each permit's EIP-712 digest is recomputed by AntibodyAdapter on chain;
antibody judgelists every permit
near-antibody's owner
- Trusted for
- the defaults of new programs only
- How anyone checks it
- a live program's pins never change (property 12);
antibody judgeshows whether the contract is locked
The project
- Trusted for
- its manifest, its escrow and its fixes
- How anyone checks it
- the manifest hash is committed; known issues are sealed before open; a fix is released only after every paid proof re-runs clean
- Account
- none: nothing on chain to trust
Relayers, keeper, indexer, API
- Trusted for
- nothing (permissionless calls, derived data)
- How anyone checks it
- every value they show is re-derivable from NEAR views
- Account
- none: nothing on chain to trust
The full table, part by part: docs/trust.md
Checks your browser runs
The anchor against the light client
A program's proofs run on Ethereum state at one anchor block. When the program is created, near-antibody asks NEAR's Ethereum light client for that block's hash and compares it with the one the project committed; a mismatch rejects the program and returns its escrow. An anchor the light client cannot confirm is labelled project-attested.
The light client takes the block number as 8 little-endian bytes and answers a Borsh Option<[u8; 32]>. On testnet it has one trusted relayer, and it keeps a window of recent blocks.
- The anchor program 5 committedSepolia block 12,063,269
- 0x16662a318858fe75ac73c5ffc61dd184b0069ce90148470fff821b16d373f2c2
- NEAR's light client, client-eth2.sepolia.testnet
- read when you run the check
- Sepolia's own block, from a public RPC
- read when you run the check
antibody anchor-check --block 12063269The same two reads with curl, no Antibody code
curl -s https://rpc.testnet.fastnear.com -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"query","params":{"request_type":"call_function","finality":"final","account_id":"client-eth2.sepolia.testnet","method_name":"block_hash_safe","args_base64":"JRK4AAAAAAA="}}'result.result is the Borsh answer as bytes: 1, then the 32-byte hash (0 alone means the block is outside the window).
curl -s https://ethereum-sepolia-rpc.publicnode.com -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_getBlockByNumber","params":["0xb81225",false]}'A run's quote binding and its attestation on NEAR T1
OutLayer's worker signs one Intel TDX quote per execution. Its report_data is SHA-256 over the task: the wasm hash, the input hash, the output hash, the caller, the secrets and the time. near-antibody accepts the quote, and the run is attested, only if:
- the attestation's task fields name the run it requested: an execution built for wasm32-wasip2, the program's pinned wasm hash, the SHA-256 of the input it sent and of the bytes it received, the caller, that the run used no secrets, and a WasmUrl source;
- NEAR's DCAP verifier returns Verified with an accepted TCB status;
- the quote's
report_dataequals the recomputed hash; - the worker image (MRTD, RTMR0–3) is in the program's pinned allowlist; an image approved later counts only after a delay longer than any challenge window.
Run 33 (commit 13, by our fixture agent A), as antibody tee check read it on 2026-11-06 12:50:44 UTC:
- OutLayer request
- 8839 · its public attestation
- Wasm hash
- ccc27f0ca60c503c…, wasm hash: ccc27f0ca60c503c46f6f1b2024b54481709fdd0c8849fe8d9a8912c637b28c1 the pinned verifier
- Input hash
- c348b67ec9a15c29…, input hash: c348b67ec9a15c29e066fa0d3933944be77336a394dce17b70d95554480afd86 the run's request_sha256
- Output hash
- c0c46c1444c520cd…, output hash: c0c46c1444c520cd9ce18c915309cbd070868f6386c3643b1bf8b42d43ee2c7f its output_sha256
- Caller
- agent-a.antibody.testnet our fixture agent A
- DCAP
- Verified · UpToDate by tee-verifier-2026-07-22.testnet, against OutLayer's collateral and against fresh Intel PCS collateral
- Worker image
- OutLayer's approved image 109
- Recorded in
- docs/results/t1-collateral-2026-11-06.json
Holds if: run 33 is attested: its quote was verified on NEAR
antibody view --contract bounty.antibody.testnet --method get_run --args '{"run_id":33}'The answer also holds request_sha256 and outcome.Answered.output_sha256: the input and output hashes the quote binds, left.
The quote itself, checked end to end (report_data, DCAP and the worker image):
antibody tee check --request-id 8839OutLayer's own open-source verifier, independent of Antibody's code, with Intel's root built in:
outlayer-verify tx 8yEJyYXgz34BJWCTPLVnvq13PLW15oBx8uzkMkopc4DYA zero-knowledge proof record on NEAR T2
Once a verdict's proof is disclosed, its re-run can be a Groth16 proof (SP1 6.10.0) that near-t2 checks on NEAR, then compares with near-antibody's records: the request hash (the enclave's exact input), the blob, base, manifest and anchor, and the receipt, kind and slots. Equal means the verifier, re-run on exactly the enclave's input, gave the enclave's receipt.
- Program vkey (pinned)
0x00e87aaad0ca36c285eec6bccab0cace523784873ad65e45b3b65e2759288203the docker build's vkey- Groth16 key
- SP1 6.10.0's, built in
- Reads records from
- bounty.antibody.testnet, account: bounty.antibody.testnet, opens an explorer in a new tab
- Records
- 24 in all · 24 confirmed · 0 contradicted
| Run | Outcome | Receipt (re-run) | Recorded |
|---|---|---|---|
Run 33 | confirmed | 0ea67c6a56b9…, receipt sha256: 0ea67c6a56b964c4a8ef66861c89d56e99e0428836316d727f9d3dcea3dca2ee | |
Run 35 | confirmed | 0326cfc9b4f8…, receipt sha256: 0326cfc9b4f8f727dec761c64a9f9ec0c0db46f9bf6c376526dbd3d8a744ba8d | |
Run 36 | confirmed | fa62fbea3e9e…, receipt sha256: fa62fbea3e9ea80fc38a8c5411b7041948e26add0c98efe501eafeec318d7c98 | |
Run 53 | confirmed | e51759c61d37…, receipt sha256: e51759c61d379da5947f1d38291b0efa4bd0d90634a72d9411bd9eda4fd119df | |
Run 92 | confirmed | 4fed54a6857d…, receipt sha256: 4fed54a6857db13aa3c957b7763f8a6b27a1d94aeef5b5ab3756eb8fc5fee6c7 | |
Run 141 | confirmed | 8bf64b138bd7…, receipt sha256: 8bf64b138bd7839d74909e98977fa5b199f08150c53c4fd5c0acbc43325c09b5 | |
Run 143 | confirmed | ce0c0ae94033…, receipt sha256: ce0c0ae9403322dbf0af75ee446d50d9db262e68fae7a4cae69b7f824589c28b | |
Run 144 | confirmed | e8bb19bc57b1…, receipt sha256: e8bb19bc57b1343b4cbcf5845aae35b91a7d4db41571102398ba44fedca4eecd | |
Run 150 | confirmed | 676bfef1d688…, receipt sha256: 676bfef1d68894fc238ffabdb3b09f99eab3b79643e0bd130911613b26b9d360 | |
Run 152 | confirmed | 8134e5c1c74e…, receipt sha256: 8134e5c1c74ee1946319ed1696461a676e9468078f1071f26489cf81528593ea | |
Run 157 | confirmed | d66700f918b4…, receipt sha256: d66700f918b45590984f3b0c72ddde1fdd4f09615a8974ee317147b0bd96ca0c | |
Run 158 | confirmed | 7cacf427b59d…, receipt sha256: 7cacf427b59df34abc621952badcdf46c98bb2e7b876542c7c5f9daed769dc4b | |
Run 159 | confirmed | 84bbc85fbe36…, receipt sha256: 84bbc85fbe36db1715751599cb70bc5e67920f9d3e4c063363c5a6002fd023e9 | |
Run 160 | confirmed | 2ece261776dc…, receipt sha256: 2ece261776dc5c0aaf7567381bd9b680ed0f280706f8503552372c207f24c090 | |
Run 161 | confirmed | 4289a52656af…, receipt sha256: 4289a52656afe36e3ddb8c01c776f00325274db40a0e15f6036b9a940913390b | |
Run 172 | confirmed | dd68ad633a8f…, receipt sha256: dd68ad633a8f92a267ef2d2bcd8a03efc40cf1f71beefd9200d52bfc5690ecdc | |
Run 173 | confirmed | d0f93a4eae60…, receipt sha256: d0f93a4eae6002661d462340158f12874fdfbf762cac321fee9d822b5f98da3d | |
Run 174 | confirmed | a3242597790a…, receipt sha256: a3242597790a9305ef4106b93e102e48d9f2a52a18a9dafbebdf74a745ff3e6f | |
Run 175 | confirmed | d4552aa7bce3…, receipt sha256: d4552aa7bce3f97ebe335ed253aac9fb58f2bee3b626f6aa897e2f85831e7353 | |
Run 176 | confirmed | 5af8b02a7e1a…, receipt sha256: 5af8b02a7e1af6e4b60f0a23ecc55aee837f0e0360713d7834dfd79f36d14af0 | |
Run 177 | confirmed | 7bb28529e5ea…, receipt sha256: 7bb28529e5ead0d92f9ed35a4f282e5f6c94868745d74c007af4cba0ba866654 | |
Run 222 | confirmed | b71d5707e57d…, receipt sha256: b71d5707e57dfe5a0416be1e46fffefba55b8c9f52808fac68e367b5473f7a3a | |
Run 223 | confirmed | 1fd7eadbab59…, receipt sha256: 1fd7eadbab59feb7bcdef3737c65c79df5aaf1f6fd63ff45e8578526a17ceae3 | |
Run 224 | confirmed | 433070eb6959…, receipt sha256: 433070eb695972a36d6c11c54547e8455334f091000e0f4ffc12b368b6e61611 |
Holds if: program_vkey is the docker build's, 0x00e87aaad0…
antibody view --contract zk.antibody.testnet --method get_pinsHolds if: run 224's record is confirmed
antibody zk status --run 224a validity proof of a disclosed verdict: no privacy is claimed, and payouts in the locked deployment do not depend on it
Reproducible builds
The verifier wasm
Each program pins the sha256 of the wasm OutLayer's enclave runs. The build script pins the toolchain, the locked dependencies and every build path, so the same source gives the same bytes on any Linux x86_64 machine.
- sha256
ccc27f0ca60c503c46f6f1b2024b54481709fdd0c8849fe8d9a8912c637b28c1- Release
- antibody-verify.wasm
- Read from
/health(contracts.release.verifier)
Holds if: program 5 pins this sha256
antibody view --contract bounty.antibody.testnet --method get_pins --args '{"program_id":5}'make verifier-wasmdocker build -f Dockerfile.verifier -t antibody-verifier-build . && docker run --rm antibody-verifier-buildcurl -sL https://github.com/Himess/antibody/releases/download/verifier-ccc27f0ca60c/antibody-verify.wasm | sha256sumThe zero-knowledge program T2
SP1's docker build of the guest. near-t2 pins its program vkey, and the prover refuses an ELF whose vkey is not the pinned one. Three docker builds on fresh machines gave the same bytes. A local build is not reproducible across machines: its ELF embeds the build's paths.
- Program vkey
0x00e87aaad0ca36c285eec6bccab0cace523784873ad65e45b3b65e2759288203- Guest ELF sha256
7fea93b80cc71db7ccd2315acc9b85c583fd3164bc95c6e6b68b6119d1c39702
cd crates/zk/guest && cargo prove build --docker --tag v6.10.0 --workspace-directory ../../.. --lockedsha256sum target/elf-compilation/docker/*/release/antibody-zk-guestThree environments, one answer
- The enclave's wasm and native. CI re-runs the recorded fixtures in both and requires the same verdicts, keys and receipts (the verifier job ).
- The zkVM. SP1's executor re-runs four testnet runs on the enclave's exact inputs and gives the enclave's receipts, with the same public values that
crates/zk/corecomputes natively. Their content keys are public (our fixture agents and the recorded run's practice try published theirs infixtures/zk; a practice try made now seals with a key anyone can derive), though on chain their proofs stay sealed until disclosure. - On NEAR. Each run's answer holds the receipt the enclave gave. Read it below and compare.
Run 33 · commit 13
our fixture agent A, program 5:
Violation, slot 0- Receipt sha256
- 0ea67c6a56b964c4a8ef…, receipt sha256: 0ea67c6a56b964c4a8ef66861c89d56e99e0428836316d727f9d3dcea3dca2ee
- Native and zkVM
- the same receipt · fixtures/zk/a
view bounty.antibody. testnet. get_run( {"run_id": 33}) Holds if: the enclave's receipt for run 33 is 0ea67c6a56b9…
antibody view --contract bounty.antibody.testnet --method get_run --args '{"run_id":33}'Run 35 · commit 15
our fixture agent C, program 5:
NoViolation- Receipt sha256
- 0326cfc9b4f8f727dec7…, receipt sha256: 0326cfc9b4f8f727dec761c64a9f9ec0c0db46f9bf6c376526dbd3d8a744ba8d
- Native and zkVM
- the same receipt · fixtures/zk/c
view bounty.antibody. testnet. get_run( {"run_id": 35}) Holds if: the enclave's receipt for run 35 is 0326cfc9b4f8…
antibody view --contract bounty.antibody.testnet --method get_run --args '{"run_id":35}'Run 36 · commit 16
our fixture agent D (a duplicate), program 5:
Violation, slot 0- Receipt sha256
- fa62fbea3e9ea80fc38a…, receipt sha256: fa62fbea3e9ea80fc38a8c5411b7041948e26add0c98efe501eafeec318d7c98
- Native and zkVM
- the same receipt · fixtures/zk/d
view bounty.antibody. testnet. get_run( {"run_id": 36}) Holds if: the enclave's receipt for run 36 is fa62fbea3e9e…
antibody view --contract bounty.antibody.testnet --method get_run --args '{"run_id":36}'Run 53 · commit 20
a practice try, program 6:
Violation, slot 0- Receipt sha256
- e51759c61d379da5947f…, receipt sha256: e51759c61d379da5947f1d38291b0efa4bd0d90634a72d9411bd9eda4fd119df
- Native and zkVM
- the same receipt · fixtures/zk/practice
view bounty.antibody. testnet. get_run( {"run_id": 53}) Holds if: the enclave's receipt for run 53 is e51759c61d37…
antibody view --contract bounty.antibody.testnet --method get_run --args '{"run_id":53}'
Re-run run 33 natively, from the chain, with the content key our fixture agent A published (no proof):
antibody zk prove --run 33 --key "$(cat fixtures/zk/a/content_key.hex)" --tx 8yEJyYXgz34BJWCTPLVnvq13PLW15oBx8uzkMkopc4DY --mode noneRun the same case in SP1's executor with the docker-built guest:
crates/zk/prove/target/release/antibody-zk-prove --mode execute fixtures/zk/guest/antibody-zk-guest.elf fixtures/zk/aThe deployment
| Role | Account | Code hash | Locked |
|---|---|---|---|
near-antibody | C9LGvUpq9P…, code hash: C9LGvUpq9P5j5zB8RyZdRaXHWf3tF4wRtb1PjBYKysaY | locked | |
payout token | DsbyUrKaSJ…, code hash: DsbyUrKaSJAT91Pewfi71QExPLBooDp1z4sL9GUDhNHa | not ours; not locked | |
near-guardian | 4SdG5PK9od…, code hash: 4SdG5PK9odaohbgqFrF1HYjQTUydbqug4GMCXhqHtCCj | locked | |
practice vending | AdXwpxi5Za…, code hash: AdXwpxi5ZawLz6QLJmVbcrsJRckpqu2F75KQ5Er22ju5 | locked | |
verdict guard | 7Wotb7nnbS…, code hash: 7Wotb7nnbSnZnC8Dbx6iSCB785Dojai2HoVq7AqCbsdh | locked | |
T2 (near-t2) | 3HFJXFtLRa…, code hash: 3HFJXFtLRaCEavhhUbr8eNfzy8qPvemYnQwFv6z6RqG7 | locked |
Built from commit 9d07e045 . Recorded . antibody judge reads the same from NEAR: code hashes, locked status and each program's pins.
antibody judgeWhat is mock
- The sandbox demo (
make demo): MOCK OutLayer, DCAP and MPC contracts, resolved by the real verifier with a TEST seed and a TEST secp256k1 key. The attestation checks on its MOCK quotes are the real code. - The sandbox's near-t2 takes proofs under a TEST Groth16 key that anyone can make proofs for (
fixtures/zk/t2-test-key.json), from a MOCK prover. The MOCK worker lies once on purpose, and near-t2 records the contradiction. - Test keys in fixtures: the fingerprint tags in
fixtures/acme-local/expected.jsonuse a TEST key. - Testnet uses the real services: OutLayer's enclave workers, their Intel TDX quotes verified on NEAR, the MPC network's signatures and the Ethereum light client. Acme Lend and the practice vaults are our own deliberately vulnerable fixtures, and wNEAR on testnet has no value. The limits