Skip to main content
0G SentinelNetwork configuration · Chain ID 16661
For developers · 0G Aristotle · Chain ID 16661

Gate your contract on a provable verdict.

ProofLock issues a versioned, revocable admission verdict on-chain. Any contract reads it at its own door in one line.

One-line integration

Import the interface. Call it at your door.

AgentGateV2 is the whole integration surface. requireAgent is a pure view function: it admits or reverts, costs no gas beyond your own call, and cannot alter state.

Solidity · requireAgent
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

interface IAgentGateV2 {
    // reverts AgentRejected(reason) if the agent is not currently admitted
    function requireAgent(uint256 agentId)
        external view returns (address subject, uint64 version);
}

contract MyProtocol {
    IAgentGateV2 public immutable gate;

    constructor(address gateAddress) {
        gate = IAgentGateV2(gateAddress); // AgentGateV2 on 0G mainnet
    }

    function doSomethingForAgent(uint256 agentId) external {
        // one line: admits or reverts
        (address subject, uint64 version) = gate.requireAgent(agentId);
        require(msg.sender == subject, "caller is not the bound agent wallet");
        // ... your logic runs only for a currently-admitted agent
    }
}

Prefer a non-reverting branch? Call checkAgentinstead and read the stable reason code.

// Non-reverting variant: branch on the reason code instead of reverting.
interface IAgentGateV2Check {
    function checkAgent(uint256 agentId)
        external view
        returns (bool allowed, uint8 reason, address subject, uint64 version);
}
Live contracts

Deployed on 0G mainnet.

Every address is live and readable on the public explorer. A live demo consumer, ProofLockConsumerDemo, already gates on the verdict on mainnet.

0G Aristotle · Chain ID 16661
AgentGateV2 · the gate you call
0x32Ae81B1150AA7E91d8341E59b3810950e7A1171
ProofLockConsumerDemo · live integrator
0x71823afFA086f6a4Be64B67142480Fa889Cd0773
SentinelRegistryV2 · where verdicts are sealed
0x1d802114cfAFFd179f49E2F6fa8e11207c118944
ERC-8004 Identity Registry · canonical
0x8004a169fb4a3325136eb29fa0ceb6d2e539a432
Reason codes

Every rejection has a name.

checkAgent returns a stable reason code. 0 is admitted; every non-zero value names the exact rejection.

AgentGateV2 · uint8 reason
Gate reason codes returned by checkAgent
CodeNameMeaning
0ALLOWEDAllowed
1NO_PROOFNo ProofLock
2REVOKEDRevoked
3DRIFTEDDrift detected
4EXPIREDLease expired
5SUBJECT_CHANGEDAgent wallet changed
6RUNTIME_CODE_DRIFTRuntime code drift
7POLICY_TOO_OLDPolicy too old
8COVERAGE_INCOMPLETECoverage incomplete
9COMPUTE_UNVERIFIEDCompute unverified
10STORAGE_UNVERIFIEDStorage unverified
11BEHAVIORAL_RISKBehavioral policy denied
12CODE_RISKCode policy denied
13IDENTITY_UNAVAILABLEIdentity unavailable
14AGENT_NOT_FOUNDAgent not found
15AGENT_WALLET_UNSETAgent wallet unset
16IDENTITY_MISMATCHIdentity mismatch
Under the verdict

What the seal is backed by.

Three engines run before any verdict is sealed. Each is honest about its limits.

  • TEE-attested inference, verified on-chain

    Risk inference runs on 0G Compute inside a hardware TEE (Intel TDX / dstack). The paid inference settles on-chain, and the verdict is bound to the exact response bytes and checked against the enclave's EIP-191 signature before it is sealed.

  • Deep identity + code analysis

    Every agent is classified as an EOA, an EIP-7702 delegated EOA, or a contract with EIP-1967/1167 proxy unwrapping. Contract bytecode is disassembled opcode-by-opcode to flag selfdestruct, delegatecall, mint, pause, and blacklist patterns.

  • Live threat intelligence

    Sanctions and scam screening runs live against ScamSniffer, alongside an OFAC sanctions set.