Public sets leak
Published benchmarks get scraped into training corpora. A high score can then come from memorized answers.
The owner commits a Merkle root of a private test set, then each graded run, to a NEAR contract. Any account can then call the draw, and random_seed picks 20 of 100 entries. Each one must match its commitment, carry a pinned NEAR AI TEE signature and re-grade the same, or the run fails.
random_seed picks 20ecrecover and re-gradeProblem
Published benchmarks get scraped into training corpora. A high score can then come from memorized answers.
An unpublished set limits exposure. Outsiders then have only the reported number.
The set stays private. After the runs are committed, the owner must reveal a random 20 of 100 entries, and the contract checks each one.
Protocol
Explorer
Status, score, grades and draw are contract views read over public RPC. Question and response text come from the published reveal files.
Result
Each sealed suite holds 100 numeric variants of 25 public problems, 4 per problem, with answers computed in code. Temperature 0. The hypothesis and analysis were pre-registered before inference. On the AIME-style set no gap is detected for either model: Qwen scored higher on the sealed variants, and GLM's +11 points has a 95% interval that includes 0. Most sealed misses are answers cut off at the 4,096-token limit, which grade as wrong (operator's count; only drawn responses are public). The GSM8K control sits at the ceiling.
Tamper lab
Each submission calls the contract's free check_reveal view, which returns the first failed check.
Detection odds
With 10 bad entries out of 100, the draw catches the run 90.5% of the time. With 2, 36%. Across 10 suites at 10% misreporting, at least one gets through 63% of the time. These figures assume an unbiased draw and one suite per test set.
Hypergeometric, per run, 20 distinct entries of 100. This is not the probability that the score is correct.
NEAR
NEAR AI Cloud runs models in Intel TDX and NVIDIA confidential VMs and signs each response with an enclave key. The signature covers the gateway's model id. It does not identify the weights.
GET /v1/signature/{chat_id}
// EIP-191 personal_sign over:
model_id + ":" + sha256(request) + ":" + sha256(response)
ecrecoverThe contract rebuilds the request from the committed template and recovers the signer.
// contract/src/verify.rs
let pk = env::ecrecover(&hash, &sig[..64], v, false).ok_or("ecrecover failed")?;
let h = env::keccak256_array(&pk);
addr.copy_from_slice(&h[12..]);
// contract/src/lib.rs
if !run.signers.iter().any(|p| *p == addr) {
fail!("signature not from a signer pinned for {} when this run started", run.model);
}
random_seedSets each run's nonce at start_run and picks the sample at the draw. Reveals must land in a later block than the draw.
The admin pins a key after checking its TDX quote off-chain with dcap-qvl. The contract does not verify the quote. Each run copies the pins at start_run, so a key pinned later does not count for it.
check_revealRuns the reveal checks as a free view. The explorer and tamper lab use it.
Threat model
npm run verify compares the deployed code hash with the published wasm. Until the key is deleted, the operator can deploy code that changes stored results.start_run.owner_record. An owner can still re-salt a set under a new root and try again.random_seed slightly. Every draw here was called by sealedbench-drawer-hk26.testnet, which is not the owner but is run by the same operator.Revealed entries are public and must be retired from the private set. The 0.1 NEAR bond returns to the owner only if every run is AUDITED. Otherwise it goes to the account that drew or expired the suite. The mock signer's key is public; mock runs are labeled mock/DEV-ONLY-not-a-TEE and no claim cites them.
Reproduce
Needs Node 22.18+ and testnet RPC. No account or key. About two minutes.
npm run verify Reads roots, grades, nonces and signers from the chain at one block, runs check_reveal on all 20 drawn entries per run, replays them offline and checks the deployed code hash.npm run tamper Applies 13 edits to a signed entry and labels each result as live contract view, offline what-if or unit-tested rule. It also lists 3 attacks that still succeed.$ git clone https://github.com/jazulay/sealed-bench
$ cd sealed-bench && npm ci
$ npm run verify
# expect "ok": true, 8 results, every check true
$ npm run tamper
# expect "13/13 lies rejected (...); honest reveal accepted; 3 known limits"
The README covers the attestation check.