Skip to main content

What this does

On Sui, a wallet’s standing can be expressed as a capability object it holds. Because the object cannot be transferred, simply holding it is proof the wallet earned its standing, nobody can buy, borrow, or pass it along. Your code requires the capability to run a gated action, and the check happens onchain. This is how TrustGate’s own gated pool works, and you build your own gate the same way.

The pieces

A few onchain objects are involved.

The capability

A non-transferable object held by wallets that meet the required standing. Holding it is the proof.

The score registry

Where reads live onchain, so standing can be referenced by contracts directly.

How gating works

1

Require the capability in your function

Write your gated action to take the capability. If the caller does not hold one, the call cannot succeed.
2

Holding it is the check

Because the object is non-transferable, you do not need to trust anything off-chain. Reaching the body of the function already means the caller earned a valid capability.
3

Standing is issued, not bought

A wallet receives the capability by meeting the required standing through its onchain behavior. The bar is set by the trust system, and the capability is the onchain expression of clearing it.
The Move below shows the pattern, not verified signatures. The type and function names must be confirmed against the published package before you build against them. Send me the package or the canonical names and I will document the exact interface here.
// Require the capability to run a gated action.
// Holding it is proof of standing, because it cannot be transferred.
public fun do_gated_action(
    cap: &TrustedAgentCap,
    // ... your own arguments
) {
    // reaching this line means the caller holds a valid capability
}

Onchain reference

Public testnet identifiers, safe to publish, left blank rather than guessed. Send me the canonical values and I will fill them here and on the Sui network page at once.
Network          Sui testnet
Package ID       0x... (to fill)
ScoreRegistry    0x... (to fill)
Gated pool       0x... (to fill)
Capability type  to confirm

Good to know

The gate is enforced onchain, so there is no off-chain trust step you have to wire up. It is non-transferable by design, which is the whole reason holding it means something. And it is on testnet today, so treat standing as a testnet signal. The required bar is set by the trust system and is not a public number, which keeps the gate honest without exposing how it is drawn.

Next

Gated Pools product page

The concept, and why reputation makes a good door.

The Sui network page

What is Sui-specific, and the onchain reference.