Accountability Tiers

Every answer in TOC comes with an explicit accountability tier - a clear indicator of who backs the data and how much trust you can place in it. This is computed at POP creation and never changes.

Why Tiers Matter

Traditional oracles provide data without clear accountability. When an oracle reports incorrect data, who compensates affected users? Usually no one.

TOC solves this by making accountability explicit and immutable. When you read a result, you know exactly:

The Three Tiers

SYSTEM

Maximum protocol backing. The resolver has SYSTEM trust level (official ecosystem resolver), AND the TruthKeeper is whitelisted (vetted domain expert).

Best for: High-value settlements, critical financial data

PERMISSIONLESS

Community-backed. Any combination that doesn't meet SYSTEM or TK_GUARANTEED criteria. Maximum flexibility, creator assumes full risk.

Best for: Experimental use cases, low-stakes applications, testing

How Tiers Are Calculated

The tier is computed automatically at POP creation based on two factors:

Tier Calculation Logic
SYSTEM = (resolver.trust == SYSTEM) AND (truthKeeper is whitelisted)
TK_GUARANTEED = truthKeeper has called addGuaranteedResolver(resolver)
PERMISSIONLESS = everything else

Resolver Trust Levels

Resolvers have their own trust classification:

Trust Level Description
NONE Not registered
PERMISSIONLESS Registered by anyone (default)
VERIFIED Admin-reviewed and approved
SYSTEM Official ecosystem resolver

TruthKeeper Status

TruthKeepers are domain experts who adjudicate disputes. Their status affects tier calculation:

Key insight: A TruthKeeper can guarantee a PERMISSIONLESS resolver, elevating POPs using that resolver to TK_GUARANTEED tier. This allows community resolvers to gain trust through expert backing.

Immutable Snapshots

Accountability tiers are computed once at creation and never change. This provides:

// Tier is stored immutably in the POP struct
struct POP {
    address resolver;
    POPState state;
    AnswerType answerType;
    // ... other fields
    AccountabilityTier tier;  // Set at creation, never changes
}

Choosing the Right Tier

When to use SYSTEM tier

When to use TK_GUARANTEED tier

When to use PERMISSIONLESS tier

Reading Tier in Code

// Get result with tier information
ExtensiveResult memory result = registry.getExtensiveResult(popId);

// Check tier before using
if (result.tier == AccountabilityTier.SYSTEM) {
    // Maximum confidence - use for high-value settlements
    _executeHighValueSettlement(result.result);

} else if (result.tier == AccountabilityTier.TK_GUARANTEED) {
    // Good confidence - use for standard operations
    _executeStandardSettlement(result.result);

} else {
    // PERMISSIONLESS - use with caution
    require(settlementValue < LOW_VALUE_THRESHOLD, "Use higher tier");
    _executeLowValueSettlement(result.result);
}

Tip: Your protocol can enforce minimum tier requirements. For example, reject settlements above a certain value unless the POP has SYSTEM or TK_GUARANTEED tier.