7. Attestation and Validator Protocol

7.1 Validator Role

Validators are independent actors that attest to the correctness of verification execution. They assert that the system was run correctly, NOT that a claim is true.

7.2 Seven-Step Replay Protocol

Step 1: RECEIVE

  • Validator receives a verification request containing: claimId, voId, engineVersion
  • Validator confirms it supports the specified engine version

Step 2: RETRIEVE

Validators MUST retrieve the original claim definition and all referenced evidence units. Evidence retrieval follows a tiered protocol that balances trust minimization against availability.

Evidence Verifiability Classification:

Class Evidence Types Independent Verification
ONCHAIN ACCOUNT_BALANCE, TOKEN_SUPPLY, TOKEN_METADATA, TRANSFER_EVENT, POOL_RESERVES, PROGRAM_DATA, CONTRACT_CODE, TX_RECEIPT Yes — re-fetchable from any archive RPC node using retrievalMethod + anchor
OFFCHAIN_PINNED DEX_SCREENER_DATA Partial — original source may have changed, but content hash is verifiable
OFFCHAIN_EPHEMERAL SOCIAL_POST, SOCIAL_ENGAGEMENT No — content may be deleted or modified; validator relies on integrity hash only

Retrieval Hierarchy (in priority order):

For each evidence unit referenced by evidenceId:

  1. Independent re-fetch (ONCHAIN evidence only, highest trust):

    • Using the evidence unit's retrievalMethod and anchor fields (Section 3.1), the validator re-executes the same RPC call against its own archive RPC node at the specified block/slot
    • Apply BCE canonicalization (Section 3.4) to the RPC response
    • Compute candidateId = Keccak-256(canonicalForm)
    • If candidateId == evidenceId: evidence is independently verified
    • If candidateId != evidenceId: flag as EVIDENCE_DIVERGENCE (see Step 2 failure modes below)
    • This is the gold standard — the validator trusts no one but the chain itself
  2. Operator data layer (all evidence types, medium trust):

    • Validator requests evidence from the operator's Evidence Serving API (Section 8.5) by evidenceId
    • The API returns the canonicalForm bytes
    • Validator computes Keccak-256(canonicalForm) and verifies it matches evidenceId
    • Trust model: The integrity hash guarantees the content hasn't been tampered with, but does NOT guarantee the evidence was correctly derived from chain state. A malicious operator could fabricate a canonicalForm that hashes to a chosen evidenceId only if they can break Keccak-256 preimage resistance (computationally infeasible)
    • However: the operator chose which evidence to collect and how to canonicalize it. The integrity hash only proves consistency, not correctness of the original observation
  3. Decentralized storage (all evidence types, medium trust):

    • Fetch from IPFS/Filecoin by CID (derived from BCE-encoded payload) or Arweave by transaction ID
    • Same integrity verification as (2): compute hash, verify against evidenceId
    • Available for evidence units that have been promoted to cold storage (Section 8.5)
  4. Cross-validator sharing (all evidence types, medium trust):

    • Request evidence from other validators who have previously replayed this VO
    • Same integrity verification: compute hash, verify against evidenceId
    • Useful when the operator's data layer is unavailable

Step 2 Failure Modes:

Failure Cause Response
Evidence unavailable from all sources RPC archive pruned, operator data lost, IPFS unpinned Validator MUST abort replay and report EVIDENCE_UNAVAILABLE. The VO cannot be attested or disputed.
Independent re-fetch hash mismatch Operator used different RPC provider or different canonicalization Validator MUST report EVIDENCE_DIVERGENCE with both the operator's evidenceId and the validator's independently-computed hash. This triggers a dispute (Section 7.2, Step 7).
Operator-served evidence hash mismatch Data corruption or tampering Validator MUST reject this evidence unit. If alternative sources exist, try them. Otherwise abort.
Partial evidence availability Some evidence units available, others not Validator MUST abort replay entirely — partial evidence produces a different graph, different voId, guaranteed mismatch.

Required Verification per Retrieval Source:

Source Hash Check Independent Re-fetch Provenance Audit
Own archive RPC Computed from scratch Yes (this IS the re-fetch) Full
Operator API Keccak-256(canonicalForm) == evidenceId Recommended for ONCHAIN evidence retrievalMethod + anchor recorded
IPFS/Arweave Keccak-256(canonicalForm) == evidenceId Optional CID consistency
Other validators Keccak-256(canonicalForm) == evidenceId Optional None beyond hash

Minimum Verification Threshold:

Validators MUST, at minimum:

  • Verify the integrity hash of every evidence unit regardless of retrieval source
  • Independently re-fetch at least 20% of ONCHAIN evidence units (selected deterministically: evidence units whose evidenceId has first byte < 0x33) from their own archive RPC
  • If any independently re-fetched evidence unit has a hash mismatch, escalate ALL evidence units to independent re-fetch before deciding match/mismatch

This probabilistic verification creates a credible deterrent against evidence fabrication without requiring every validator to re-fetch every evidence unit (which would be prohibitively slow for large evidence graphs).

Step 3: RECONSTRUCT

  • Reconstruct the Evidence Graph from retrieved evidence
  • Apply the same scope constraints as the original evaluation

Step 4: REPLAY

  • Execute the evaluation using the specified engine version
  • Apply the same methods at the same versions

Step 5: COMPARE

  • Compare the replayed Verification Object with the original
  • Comparison is on the content-addressed voId:
    • If replay_voId == original_voId: MATCH
    • Else: MISMATCH

Step 6: ATTEST (if MATCH)

  • Create attestation record:
{
  "voId":           "string",
  "validatorId":    "string",
  "engineVersion":  "string",
  "replayedAt":     "string       // ISO 8601",
  "sig":            "string       // Ed25519 signature over (voId + validatorId + replayedAt)"
}

Step 7: REPORT (if MISMATCH)

  • Record the mismatch details
  • Submit divergence report to the protocol
  • If the original VO has accumulated attestations, this triggers a dispute

7.3 Attestation Schema

{
  "attestationId":    "string         // Unique identifier",
  "voId":             "string         // Verification Object being attested",
  "validatorId":      "string         // Validator public key / identity",
  "engineVersion":    "string         // Engine version used for replay",
  "methodVersions":   "Record<string, string>  // Method versions used",
  "replayedAt":       "string         // ISO 8601",
  "replayDuration":   "number         // Milliseconds taken for replay",
  "sig":              "string         // Cryptographic signature"
}

Signature Scheme:

  • Default: Ed25519 (inherited from FirmaChain / Cosmos SDK)
  • Message: Keccak-256(voId || validatorId || engineVersion || replayedAt)
  • Validators MUST register their public keys on-chain before attesting

7.4 Validator Requirements

Hardware:

Requirement Minimum
CPU 8 cores (for parallel evaluation)
RAM 32 GB (for evidence graph construction)
Storage 500 GB SSD (for evidence caching and local evidence store)
Network Reliable connectivity to chain RPC endpoints and operator Evidence Serving API

Software:

  • Specific engine version binaries (distributed via protocol updates)
  • Chain-specific RPC client libraries
  • FirmaChain node client (for attestation submission)
  • IPFS client (for decentralized evidence retrieval)

Evidence Retrieval Infrastructure:

Requirement Purpose Minimum
Solana archive RPC Independent re-fetch of ONCHAIN evidence Access to full historical slot data (self-hosted or trusted provider with SLA)
EVM archive node Independent re-fetch of EVM ONCHAIN evidence Access to eth_call at arbitrary historical blocks
Local evidence cache Avoid redundant fetches for evidence shared across VOs LRU cache, minimum 100 GB
Operator API access Fetch evidence from operator data layer (Section 8.5) HTTPS with API key, rate limit ≥ 1000 req/s

Validators without archive RPC access MAY still operate but are limited to operator-served evidence retrieval (trust level: medium). Such validators MUST declare archiveAccess: false in their on-chain registration, and their attestations carry reduced weight in dispute resolution.

Operational:

  • Maximum replay latency: 60 seconds per verification (excluding evidence retrieval; retrieval budget is separate, see below)
  • Maximum evidence retrieval time: 120 seconds total per VO (across all evidence units)
  • If retrieval exceeds this budget, validator reports EVIDENCE_RETRIEVAL_TIMEOUT (not a replay failure — no attestation or dispute is produced)
  • Minimum uptime: 95% over rolling 30-day window
  • Validators MUST support all CURRENT and SUPPORTED engine versions

7.5 Incentive Design

Fee Distribution:

When a verification fee (denominated in LINE) is collected:

Recipient Share Description
Engine operator 60% Primary verification
Attesting validators 30% Split among attestors, weighted by validatorWeight (see below)
Protocol treasury 10% Network maintenance

7.5.1 Staking Requirements

Dynamic Minimum Stake:

The minimum stake is defined relative to the protocol's economic activity, not as a fixed token amount. This ensures the stake remains meaningful as token price fluctuates.

minimumStake = max(FLOOR_STAKE, MEDIAN_FEE_30D * STAKE_MULTIPLIER)
Parameter Value Rationale
FLOOR_STAKE 50,000 LINE Absolute floor; prevents trivial validator registration even in low-activity periods
MEDIAN_FEE_30D Median per-VO verification fee over the trailing 30 days Tracks protocol economics dynamically
STAKE_MULTIPLIER 1,000 Minimum stake = 1,000x the median VO fee; ensures a single false attestation slash (10% of stake) exceeds the economic gain from ~100 fraudulent attestations

At current economics (estimated 0.1 LINE per VO fee, LINE ~$0.03): minimumStake = max(50,000, 0.1 * 1,000) = 50,000 LINE = ~$1,500. This makes Sybil attacks economically meaningful — spinning up 10 validators requires $15,000 at stake.

Staking mechanics:

  • Staking locks for the duration of active validator status
  • Unstaking cooldown: 21 days (aligned with FirmaChain unbonding)
  • Validators MAY stake more than the minimum to increase their validatorWeight (see Section 7.5.3)
  • Stake is denominated in LINE and subject to on-chain governance for parameter updates to FLOOR_STAKE and STAKE_MULTIPLIER

7.5.2 Slashing Conditions

Condition Penalty Details
Provably false attestation (first offense) 10% of stake A third party demonstrates that the validator's replay could not have produced the attested voId
Provably false attestation (repeat, within 90 days) 30% of stake Second or subsequent false attestation within a rolling 90-day window
Provably false attestation (3+ offenses in 180 days) 100% of stake + permanent ban Validator is ejected from the validator set; stake is fully slashed; validatorId is blacklisted
Downtime penalty 0.5% of stake per day Below 95% uptime threshold over a rolling 7-day window
Slash recipient 50/50 split 50% to the party proving false attestation (bounty), 50% burned

Dispute Escrow:

Filing a MsgDisputeVO (Section 8.4) requires a stake escrow of 0.1 * minimumStake. If the dispute is upheld (the original attestation is proven false), the escrow is returned plus the 50% bounty from the slash. If the dispute is rejected, the escrow is burned. This prevents frivolous disputes while maintaining a credible challenge mechanism.

Progressive slashing rationale: A single honest mistake (e.g., due to a transient RPC inconsistency that wasn't caught by the 20% re-fetch threshold in Section 7.2 Step 2) costs 10% of stake — painful but recoverable. Repeated false attestations escalate rapidly to ejection, making sustained fraudulent attestation economically irrational.

7.5.3 Validator Weight and Sybil Resistance

Raw attestation count is a weak signal — an attacker with N cheap validators can generate N attestations. To resist Sybil attacks, the protocol weights attestations by validator economic commitment and track record.

Validator Weight Formula:

validatorWeight = stakeWeight * reputationMultiplier * archiveMultiplier
Component Formula Range Description
stakeWeight sqrt(stake / minimumStake) 1.0 – unbounded Sublinear in stake; diminishing returns prevent plutocracy while rewarding higher commitment
reputationMultiplier min(2.0, 0.5 + 0.5 * (age_days / 180) + 0.5 * (correct_attestations / total_attestations)) 0.5 – 2.0 Ramps from 0.5 (new validator) to 2.0 over 6 months with perfect record
archiveMultiplier 1.5 if archiveAccess = true, 1.0 otherwise 1.0 – 1.5 Validators with independent RPC verification capability (Section 7.4) are weighted higher

Sybil resistance properties:

  • New validator penalty: A freshly registered validator has reputationMultiplier = 0.5, meaning its attestations carry half the weight of a mature validator. An attacker spinning up 10 new validators gets 10 * 0.5 = 5.0 effective weight, equivalent to 2.5 established validators.
  • Capital inefficiency of splitting: Due to sqrt(stake) weighting, splitting 100,000 LINE across 2 validators (each 50,000 LINE) yields 2 * sqrt(1) = 2.0 total weight, while staking 100,000 LINE on one validator yields sqrt(2) = 1.41. Splitting is better for raw count but worse for weighted influence per LINE staked — the diminishing returns are intentional to balance decentralization against Sybil resistance.
  • Reputation is non-transferable: reputationMultiplier is tied to the validatorId and cannot be sold, delegated, or transferred. Ejected validators (3+ offenses) lose all accumulated reputation.

Weighted attestation threshold:

A VO is considered "well-attested" when its weighted attestation score exceeds a threshold:

attestationScore = sum(validatorWeight_i) for all attestors i
wellAttested = attestationScore >= ATTESTATION_THRESHOLD
Parameter Value Rationale
ATTESTATION_THRESHOLD 3.0 Equivalent to 3 established validators with minimum stake and perfect reputation, or 6 new validators, or 2 validators with 4x minimum stake

This replaces the simple "3+ attestations" rule used elsewhere in the spec (e.g., Section 8.5 Arweave promotion). All references to attestation count thresholds SHOULD be interpreted as weighted attestation score thresholds.

results matching ""

    No results matching ""