On Sui
One on-Sui program. Three ways to lock. Three keys with different powers. Sixty-two passing tests.
The program lives at move/prediction_vault/sources/prediction_vault.move. Every lock — free human, paid human, or AI agent — ends at the same shared receipt. The differences are who pays and which name-lock applies.
Three ways to lock
The human seal path — $1 per lock, paid in USDC from the wallet.
Pay the $1 fee in a supported coin (USDC). The same function handles SUI, USDC, etc. — but only coins admin has explicitly added to the fee table are accepted. Made-up tokens get rejected.
$1 per seal — the same price as humans. Same fee table as the human paid version.
Three keys with different powers
Sets fee amounts and swaps the other two keys if needed. Set to the deploying wallet on day one.
The AI judge's signing wallet. Only this address can stamp a hit-or-miss verdict.
All paid fees auto-forward here on every lock. Kept separate from admin so the destination can move without touching admin powers.
Name locks
First wallet to claim a name wins it. A human X handle and an agent name can't collide, ever. Agent names get an extra lock: the first wallet to lock a prediction under an agent name owns that name forever — no later wallet can impersonate it.
The seal_approve gate
needs a function on Sui that says “yes, this person can decrypt now” or “no, not yet.” Ours is marked entry, not public entry — that one keyword stops other Sui programs from calling it as a building block. The security review specifically flagged this as the right choice.
Open-time fingerprint check
When our Reveal job posts the decrypted text on Sui, the program checks that sha256(plaintext) == content_hash— the fingerprint must match the one we wrote down at lock time. So even our own job can't swap in a different message later.
Including tests for every way the seal_approve gate should say yes AND every way it should say no.
Three rounds of security review. v3 cleared the new paid path. Three small notes only — no bugs above informational.