What this does
On Sui, a wallet’s standing can be expressed as a capability object it holds. The object haskey and no store, so it cannot be transferred. Holding it is proof the wallet earned standing. Your function takes &TrustedAgentCap (or the elite type) and calls assert_standard_valid. If the cap is missing, expired, or revoked, the call aborts.
This is how TrustGate’s own gated pool demo works, and you build your own gate the same way. There is no runtime oracle call at trade time.
The pieces
TrustedAgentCap
Standard standing. Minted when the registry score is at least 70. Valid 30 epochs.
TrustedAgentCapElite
Elite standing. Minted at score 85 or above. Same 30-epoch expiry. No size limit in the demo pool.
ScoreRegistry
Shared object. Oracle writes
update_score. Anyone can devInspect get_score / get_tier / is_bot_flagged.MintAuthority / OracleCap
Owned by the publisher. Only they mint, revoke, or write scores. IDs are not in the public constants file.
How gating works
1
Require the capability in your function
Take
&TrustedAgentCap (or &TrustedAgentCapElite). If the caller does not own one, the transaction cannot be built.2
Assert it is still valid
assert_standard_valid(cap, ctx) rejects expired caps. Possession plus this assert is the whole check.3
Standing is issued, not bought
The off-chain Sui wallet oracle writes the registry and mints. A wallet can also POST
/api/score-wallet from the hosted UI to trigger a rescore. Caps can be revoked by the oracle (revoke_standard / revoke_elite) or self-burned.TrustedAgentCapElite and call assert_elite_valid. Views is_standard_valid / is_elite_valid exist if you need a boolean instead of an abort.
Demo pool (not DeepBook)
deepbook_gated_pool is a shared GatedPool that records orders in a table.
place_gated_order(&TrustedAgentCap, …)— valid standard cap, size<= 1_000_000place_elite_order(&TrustedAgentCapElite, …)— no size limit
Onchain reference
suix_getOwnedObjects and MatchAny on those two types. Prefer Elite, then furthest expiry_epoch versus the current system epoch.
Read a wallet without spending gas:
HTTP helpers
Widget (Sui only)
window.TrustGate.scan(). This script does not understand EVM data-trustgate-address. The Arc widget.js does not understand coin types.
Next
Gated Pools
Why reputation makes a door, and what is demo vs real.
Sui network page
Package IDs, HTTP surface, and the mainnet/testnet split.
