These docs explain how the Attestia protocol works and how to participate — whether you want to verify the authenticity of a piece of content, join the network as an attester and earn rewards, or build on top of the protocol.
What is Attestia?
Attestia is a decentralized protocol for verifiable media authenticity. It exists because the rapid advancement of generative AI has made it trivially easy to create images, videos, and audio indistinguishable from real content — and existing verification solutions are not built for this reality.
Attestia combines two complementary evaluation layers. The Attestia Native Attester — an AI-powered deepfake detector operated by Attestia — produces an immediate baseline authenticity score for every submission. In parallel, an open network of independent attesters (each running their own models, tools, or expertise) submits additional scores within a time-bounded window. The protocol aggregates native and independent inputs into a single consensus score, anchored on-chain as a publicly verifiable attestation.
To balance usability with progressive decentralization, the native score carries higher weight when few independent attesters participate and its influence decreases as more independent evaluations arrive. The final outcome therefore remains useful from day one while increasingly reflecting decentralized consensus as the network grows.
Core idea: Authenticity is not assumed by a single authority. It is evaluated by Attestia's native detector and an incentive-aligned market of independent attesters, then aggregated into a tamper-proof record anyone can verify.
Who is this for?
Submitters
You have a piece of content — a video, image, or audio — and want to know if it's authentic or AI-generated. You submit it, pay a small credit cost, and receive a verifiable result.
Independent attesters
You operate your own detection stack — an AI model, forensic expertise, or domain knowledge — and want to join the open market. You evaluate submitted content within the protocol window and earn rewards for assessments that align with the final consensus.
Developers
You want to integrate Attestia's trust signals into your application, platform, or workflow. You read on-chain attestations via the API.
Researchers
You're interested in the protocol design, cryptoeconomics, or technical architecture. These docs cover all of it, and the full Whitepaper goes deeper.
Suggested reading order
1
For Submitters or For Attesters
Start with the guide for your role — plain language, no prior knowledge required.
2
Core Concepts
Attestations, roles, and why verification is modelled as a market.
3
Full Walkthrough
A practical, concrete example of the protocol in action — start to finish.
4
Rewarding
Staking, rewards, reputation, and slashing — for attesters and researchers.
docs / getting-started / for-submitters
For Submitters
A Submitter is anyone who wants to verify whether a piece of digital content is authentic or AI-generated. You don't need to understand blockchain or cryptography — you just upload your content, spend a small number of credits, and receive a result.
Coming soon: The Attestia platform is currently under development. This guide describes how the product will work at launch. You can join the waitlist to be notified when it's ready.
What can you verify?
Attestia supports four types of media content:
Images
Photos, illustrations, screenshots. The most common use case — fast and low cost.
Audio
Clips up to 5 minutes. Useful for voice cloning detection and audio deepfakes.
Video
Clips up to 10 minutes. Short clips (≤ 2 min) are faster and cheaper to verify; longer clips (2–10 min) require deeper analysis and consume more credits. Both cover common formats such as face swaps, lip-sync manipulation, and synthetic generation.
Text
Articles, statements, or documents. Useful for detecting AI-generated writing or verifying the authenticity of textual content attributed to a specific person or source.
How credits work
Attestia uses Attestation Credits (AC) — a simple unit of account that you spend when submitting content. You don't need to manage cryptocurrency or a wallet. Credits are available through the dashboard, via subscription plans, or as one-off bundles.
The number of credits consumed per submission depends on two things: the type of content you're verifying, and the turnaround time you choose.
Media type
Standard (30 min)
Priority (5 min)
Image
1 AC
2×
Text (≤ 2,000 words)
1 AC
2×
Audio (≤ 5 min)
3 AC
2×
Text (> 2,000 words)
3 AC
2×
Short video (≤ 2 min)
10 AC
2×
Long video (2–10 min)
25 AC
2×
Standard vs Priority: Standard turnaround gives attesters 30 minutes to evaluate your content. Priority cuts this to 5 minutes and costs 2× credits.
What you get back
As soon as your media is registered, the Attestia Native Attester produces an initial baseline score. After the verification window closes, the protocol publishes a final authenticity attestation — a permanent, publicly verifiable record that includes:
A consensus score between 0 (likely synthetic/manipulated) and 1 (likely authentic) — combining native and independent evaluations
A confidence indicator — how tightly independent attesters agreed with each other
The number of independent attesters who participated (native attester counted separately in aggregation, not in this tally)
A cryptographic proof that aggregation followed the native-weight schedule and included all eligible inputs
This attestation is stored permanently on-chain. You can share it, embed it, reference it in editorial or legal contexts, or use it in any downstream workflow.
Step-by-step
1
Create an account and get credits
Sign up on the Attestia dashboard. Choose a plan or purchase a credit bundle. No wallet or crypto required.
2
Upload your content
Upload the image, audio, or video you want verified. Select the turnaround time — standard (30 min) or priority (5 min, 2× cost).
3
Credits are deducted and the task opens
The corresponding AC amount is deducted, the native detector runs immediately, and the task opens to independent attesters for the selected window.
4
Receive your attestation
Once attesters have submitted their evaluations and the network reaches consensus, your attestation is ready. You'll find it in the dashboard along with a shareable link and all supporting data.
📸
Dashboard screenshots coming soon
docs / getting-started / for-attesters
For Independent Attesters
An independent attester evaluates submitted media with their own methodology and earns rewards when their score aligns with the protocol's final consensus. Independent attesters are the decentralized core of the network — diverse methods competing under shared rules. This role is distinct from the Attestia Native Attester, which is operated by Attestia itself, does not stake, and is not rewarded or slashed.
Coming soon: The attester network is currently being bootstrapped. If you're interested in joining as an early attester, apply here.
Native vs independent attesters
Every verification task automatically includes a score from the Attestia Native Attester (Attestia's built-in deepfake detector). You do not apply to operate this component — it runs on every submission to bootstrap results and improve turnaround while the independent network scales.
Independent attesters are external participants who join voluntarily, stake collateral, and compete on accuracy. Their scores are combined with the native score using a predefined weight schedule: native influence is highest when participation is low and falls as more independent attesters contribute.
Who should become an independent attester?
Independent attesters come from a variety of backgrounds. What they share is the ability to evaluate media authenticity reliably and on deadline. The protocol accommodates very different approaches:
AI / Detection providers
Companies or developers with deepfake detection models who want to put their technology to work and earn on a per-verification basis.
OSINT & forensic analysts
Investigators and digital forensics experts who can identify manipulated media through context, metadata, and visual analysis.
Research labs
Universities and research institutions developing and testing new detection techniques — Attestia provides real-world demand for their models.
Domain specialists
Journalists, fact-checkers, legal analysts, and other domain experts who can evaluate content in context.
How rewards work
Attesters earn rewards for each task they evaluate. Rewards are paid in ETH or the USD-equivalent value.
The size of your reward depends on how closely your score aligns with the final consensus, how much your specific contribution influenced the outcome, and your reputation — a track record built over time that acts as a multiplier on your rewards. The better your history of accurate assessments, the more you earn per task.
What attesters are accountable for
To participate, attesters must lock a stake — a deposit held in ETH or its equivalent in USD, locked by the protocol as collateral. This stake is at risk only when an attester's score deviates significantly from a clear network consensus in a way that cannot be explained by honest disagreement. This mechanism — called slashing — is designed to make systematic dishonesty or negligence economically irrational.
Slashing rules are calibrated to the maturity of the network. In the early stages, penalties are conservative to allow the network to form. As the attester set grows and consensus becomes robust, stronger accountability is enforced. See the Network Phases and Slashing sections for details.
Step-by-step
1
Apply and register
Apply through the Attestia portal. Early attesters are onboarded selectively to ensure network quality. You'll describe your evaluation capabilities and intended methodology.
2
Lock your stake
Deposit the required ETH stake into the AttestiaStake contract. This is refundable collateral — it earns rewards and is only at risk if you systematically deviate from consensus.
3
Monitor and evaluate
Use the Attestia dashboard or integrate via the API to discover open verification tasks. For each task, retrieve the media from IPFS, run your analysis, and submit your score before the deadline.
4
Collect rewards and build reputation
After each task settles, rewards are distributed to aligned attesters in ETH or the USD-equivalent value. Your reputation score updates based on your performance — consistently accurate attesters unlock higher reward tiers and priority access to tasks.
📸
Attester dashboard screenshots coming soon
docs / core-concepts / protocol-overview
Protocol Overview
Attestia is a hybrid on-chain / off-chain protocol. The Attestia Native Attester and independent attesters score media off-chain; an Aggregator combines those scores into consensus; final outcomes and settlement live on-chain for public verifiability.
Architecture Layers
The protocol is organized in four distinct layers, each with a specific responsibility. They work together to take a piece of media from submission all the way to a publicly verifiable authenticity record.
Layer
Component
Role
Storage
IPFS
Content-addressed store for media assets. CIDs are the canonical references throughout the protocol.
Off-chain DB
Tamper-resistant store
Holds individual attester attestations and signed artifacts, each anchored on-chain via timestamp for integrity.
Computation
Aggregator Module
Computes the reputation-weighted consensus score and generates a Zero-Knowledge proof of correct aggregation.
On-chain
Attestia Smart Contracts + EAS
Anchors submissions, stores final aggregate attestations, handles staking, rewards, and slashing settlement.
High-level architecture
Attestia runs as a hybrid flow: independent scoring happens off-chain for privacy and scalability, while final outcomes and settlement anchors live on-chain for public verifiability.
Submitter
Submits media for verification and receives a finalized, on-chain authenticity attestation.
Attestia Native Attester
Runs Attestia's deepfake detector on each submission and records a baseline authenticity score — not a final authority, but a weighted input to aggregation.
Independent attesters
Stake collateral, evaluate media within the submission window, and submit sealed off-chain scores. Their collective judgment increasingly drives the final outcome.
Tamper-resistant store
Holds native and independent score attestations referenced by content hash — independent scores stay hidden until the window closes.
Aggregator module
Combines the native score with valid independent scores using the native-weight schedule, then publishes consensus, confidence, and a ZK proof of correct computation.
Attestia contracts + EAS
Anchors the submission and the final aggregate attestation on-chain, then settles rewards and slashing for independent attesters only.
End-to-End Flow
①
Media upload to IPFS
Submitter uploads media; receives a CID (Content Identifier) — a cryptographic fingerprint of the file.
②
Submission anchored on-chain
An EAS attestation anchors the CID, metadata, and the task expiration window on-chain (default 30 minutes, priority 5 minutes) — the canonical entry point for the task.
③
Native attester scores the media
The Attestia Native Attester analyzes the submission and records a baseline authenticity score as an off-chain attestation. This enables a meaningful result even when few independent attesters are active.
④
Independent attesters evaluate
Each independent attester fetches the media from IPFS, runs their own analysis, and submits a sealed off-chain score before the deadline.
⑤
Scores stored off-chain, anchored on-chain
Native and independent scores are committed with on-chain timestamps. Independent scores stay confidential until the window closes to prevent herding.
⑥
Aggregation + ZK proof
After expiry, the Aggregator combines the native score with independent scores using the native-weight schedule, then generates a Zero-Knowledge proof of correct computation.
⑦
On-chain aggregate attestation
The final consensus score and ZK commitment are anchored on-chain — the protocol's public, tamper-proof output.
⑧
Settlement
Smart contracts reward aligned independent attesters and apply slashing where rules require. The native attester does not stake and is not part of this settlement loop.
Design Principles
Off-chain scoring, on-chain settlement
Keeps gas costs low and enables high throughput, while ensuring outcomes are publicly auditable.
Progressive decentralization
The native detector bootstraps verification early; as independent participation grows, consensus weight shifts toward the decentralized attester set.
Confidentiality until expiry
Independent scores are hidden until the submission deadline to prevent herding — each attester must form a judgment without seeing peers' outputs.
Zero-Knowledge aggregation
The ZK proof reveals only the final aggregate — individual attester scores are never exposed publicly.
EAS-native composability
All attestations are standard EAS structs — readable by any protocol or application that queries EAS.
docs / core-concepts / attestations
Attestations
An attestation is the fundamental unit of Attestia. Every action in the protocol — submission, individual score, final aggregate — is expressed as a cryptographically signed attestation.
What is an attestation?
An attestation is a verifiable, auditable statement made by a participant about a specific piece of content. In Attestia, attestations represent evaluations of whether a digital asset is authentic, manipulated, or synthetic — expressed as a score between 0 (fully synthetic) and 1 (fully authentic).
Attestations are cryptographically signed and linked to both the issuer's wallet address and the subject content's CID. This makes every contribution attributable, traceable, and immutable after creation.
Attestia uses a hybrid approach: native and independent score attestations are stored off-chain for privacy and efficiency, but each is timestamp-anchored on-chain — so once submitted, it cannot be retroactively altered. Aggregated results and cryptographic proofs live fully on-chain, providing a public, permanent record.
Why hide independent scores? If independent attester scores were publicly visible during the active submission window, later participants could copy earlier ones — a herding effect that would destroy the independence that makes consensus meaningful. The native score is recorded as part of protocol operations; independent scores stay sealed until the deadline.
Independent Score Attestation — Draft Schema
The schema below shows the core fields included in each attester's off-chain attestation. This is a representative draft; additional fields related to versioning, metadata, and protocol parameters will be defined at the time of mainnet release.
EAS Off-Chain Schema (Draft)
{
contentHash: bytes32, // IPFS CID of the media asset
assetId: bytes32, // UID of the parent submission attestation
score: uint256, // Authenticity score in [0, 1], scaled to 1e18
timestamp: uint64, // Must be within the submission's expiration window
attester: address, // Wallet address of the signing attester
// ...
// Additional fields (methodology flags, confidence indicators,
// protocol version, nonce, etc.) will be finalized at launch.
}
⚠ Draft schema — fields and types are subject to change before mainnet.
Aggregate Attestation — Draft Schema
The aggregate attestation is the protocol's public output, anchored on-chain after settlement. It includes the consensus result and a cryptographic commitment to the underlying computation.
EAS On-Chain Schema (Draft)
{
assetId: bytes32, // UID of the originating submission attestation
consensusScore: uint256, // Combined native + independent consensus × 1e18
attesterCount: uint32, // Number of valid independent attesters (native excluded)
confidence: uint256, // Signal of network agreement (derived from variance)
scoreSetHash: bytes32, // Commitment to the complete set of attester inputs
zkProofRef: bytes32, // Reference to the ZK proof of correct aggregation
// ...
// Additional fields (phase identifier, reward pool snapshot,
// slashing flags, etc.) will be finalized at launch.
}
⚠ Draft schema — fields and types are subject to change before mainnet.
docs / core-concepts / participants
Participants
Attestia is built around a decentralized network of participants with distinct but complementary roles. Each role has different economic obligations, capabilities, and incentives.
Submitters
Submitters introduce content into the protocol. They may be media organizations, social platforms, legal teams, investigators, or individual users who need verifiable authenticity proofs for digital assets.
To submit content, submitters use Attestation Credits (AC). The required AC amount depends on media type and turnaround selection, and is deducted when the task is opened.
Attestia Native Attester
The Attestia Native Attester is Attestia's AI-powered deepfake detection system. For each submitted media item it produces an initial authenticity score that serves as a baseline input to aggregation — not a final verdict.
Its relative weight in the consensus formula is higher when few independent attesters participate and progressively lower as more independent evaluations are submitted (see Aggregation & Consensus). The native attester participates in aggregation but does not stake, earn attester rewards, or face slashing. Its role is operational: bootstrap useful results, improve response time, and complement the decentralized market.
Independent attesters
Independent attesters are the decentralized evaluators of the network. Each independently analyzes submitted content and produces an authenticity score between 0 (fully synthetic) and 1 (fully authentic).
Independent attesters can use any evaluation method — the protocol enforces when and under what conditions the score is submitted, not how it is computed. This open design allows:
Machine learning models and deepfake detection pipelines
OSINT analysis and investigative methods
Domain-specific human expertise
Hybrid pipelines combining automated and manual review
Unlike submitters, independent attesters lock a stake (0.10 ETH at initialization, ETH-equivalent thereafter) as active collateral. It earns rewards when they align with the final consensus, but may be partially forfeited if their scores deviate significantly when the network has clearly converged. The native attester is outside this economic loop. Slashing rules evolve with network phase — see Network Phases and Slashing.
Consumers (External Applications)
Any application, platform, or smart contract can consume Attestia attestations as trust signals. Consumers do not need to stake or participate in verification — they simply read the on-chain EAS attestations produced by the protocol.
Role comparison
Property
Submitter
Native attester
Independent attester
Stake required
No (uses AC)
No
0.10 ETH (ETH-equivalent; transitions to ATTA in mature phase)
Must submit before task expiry (30 min standard / 5 min priority)
docs / core-concepts / verification-as-a-market
Verification as a Market
Attestia models verification as a hybrid system: Attestia's native detector supplies an immediate, operational baseline, while an open market of independent attesters adds diverse, staked evaluations. No single participant defines ground truth — the published consensus emerges from their weighted aggregation.
Why a market model?
Traditional verification relies either on a single detection algorithm or a single certifying authority. Both are fragile: algorithms miss novel synthesis techniques, and centralized authorities can be wrong, captured, or opaque.
Attestia does not abandon algorithmic detection — it combines Attestia's native detector with a market of independent attesters. The native score keeps early-stage verification useful and fast; independent competition makes the long-term outcome decentralized, diverse, and economically accountable.
Diversity of methods
Machine learning models, OSINT analysts, forensic experts, and specialized detection services all coexist on the same protocol.
Economic accountability
Every attester stakes real collateral. Misalignment costs money. Dishonesty is economically irrational by design.
Self-improving
Better-performing attesters earn more rewards and higher reputation. The network's quality rises naturally as competition increases.
Progressive decentralization
Native weight is high when independent participation is low and falls as the attester set grows — trust shifts from bootstrap signal to market consensus over time.
No predefined ground truth
Consensus emerges after evaluation from native and independent inputs — it is not imposed by any single authority before the window closes.
Structural defense against adversarial evasion
Any single detection system faces a persistent arms race: as detection improves, generation techniques evolve to evade it. Attestia's native detector provides scalable baseline coverage; the independent market ensures there is no single point to evade forever. A technique that bypasses one attester's model may still be caught by others — including the native stack and unrelated methodologies.
Consensus ≠ majority vote. The aggregate combines the native score (weighted by independent participation) with a reputation-weighted average of independent scores. A coordinated group of low-reputation actors cannot easily dominate the independent component, and native influence automatically shrinks as participation grows.
docs / workflow / submission
Submission & Anchoring
A verification task begins when a submitter uploads their content through the Attestia interface, pays the required Attestation Credits, and selects a verification speed. The platform handles all the technical steps automatically.
Step 1 — Upload your content
The submitter uploads the media file through the Attestia dashboard. The platform stores the file on a decentralized storage network (IPFS), ensuring it remains accessible to every attester in the network without being stored on-chain. Each file is assigned a unique cryptographic fingerprint: if anyone tampers with the file, the fingerprint changes and the modification is immediately detectable.
Media is never stored directly on the blockchain — only its fingerprint and metadata are anchored there, keeping costs low while preserving integrity.
Step 2 — Configure and pay
Before the task is opened to attesters, the submitter selects their verification speed and pays the corresponding Attestation Credits (AC):
Standard (30 min): Attesters have 30 minutes to evaluate the content. This is the default option and the most cost-efficient.
Priority (5 min): The verification window is reduced to 5 minutes, at 2× the credit cost. Useful when a faster result is needed.
Standard vs Priority: The verification window defines how long independent experts have to evaluate your content. Standard gives more time for thorough analysis; Priority trades cost for speed.
Step 3 — The task is anchored and opened
Once the payment is confirmed, the platform automatically registers the task on-chain. This creates a permanent, tamper-proof record that:
Identifies the submitted content by its unique fingerprint
Records the media type and any contextual metadata
Sets the verification deadline (standard or priority)
From this moment, the task is publicly visible. The Attestia Native Attester begins analysis immediately, and independent attesters can retrieve the media and run their own evaluations until the deadline.
docs / workflow / verification-phase
Verification Phase
Once a submission is anchored, verification runs on two tracks in parallel: the Attestia Native Attester records a baseline score, while independent attesters evaluate the same media and submit sealed off-chain scores before the deadline (default 30 minutes, priority 5 minutes).
Native attester — baseline score
The Attestia Native Attester analyzes the submitted media as soon as it is registered. It produces an authenticity score stored as an off-chain attestation and timestamp-anchored on-chain. This score is not treated as a final authority; it is one input to the aggregate, with weight that decreases as more independent attesters participate.
The native attester does not wait for the review window to close — submitters benefit from an immediate operational signal while independent evaluation proceeds.
Independent attesters — discovering submissions
Attesters continuously monitor active submission attestations on-chain. They can do this via:
The Attestia dashboard (protocol-native interface)
Direct EAS event subscriptions (on-chain events emitted at submission)
The Attestia API (coming soon)
Independent evaluation — open methodology
For independent attesters, the protocol places no constraints on evaluation methodology. What matters is accuracy and timeliness — not which tools or methods are used. Diversity across independent attesters — combined with the native detector — makes the aggregate far more resilient than any single system alone.
Automated pre-filtering combined with human review or expert confirmation.
Submitting a score
The evaluation result is encoded as a signed off-chain EAS attestation containing the authenticity score and the necessary cryptographic references. Scores must be submitted before the expiration time.
Each off-chain attestation is timestamp-anchored on-chain at the moment of submission. This means once a score is committed, its existence and timing are permanently recorded on the blockchain — the attester cannot change their answer after observing the deadline pass or seeing other results.
Deadline enforcement: Scores submitted after the selected window closes are invalid and excluded from aggregation. Plan for network latency when calibrating your submission pipeline.
docs / workflow / aggregation
Aggregation & Consensus
After the submission window closes, the Aggregator retrieves the Attestia Native Attester score and all valid independent attester scores, then computes a single consensus result using a predefined weighted rule. The computation is made trustless through a Zero-Knowledge proof.
How the consensus is computed
The consensus score x̄ combines two components:
xA — authenticity score from the Attestia Native Attester
xm — scores from independent attesters, each weighted by reputation ρm
where N is the number of participating independent attesters and wA(N) is the weight assigned to the native score. When N = 0, the consensus reduces to the native score alone — ensuring a usable result during network bootstrap.
Native attester weight schedule
Native influence follows a fixed decreasing schedule as independent participation grows:
Independent attesters (N)
Native weight wA(N)
N < 5
80%
5 ≤ N < 10
50%
10 ≤ N < 15
30%
15 ≤ N ≤ 20
20%
N > 20
10%
Reputation ρm applies within the independent set (see Reputation System). It rewards reliable independent attesters over time without letting any single participant dominate unboundedly.
▷ Example
Native + three independent attesters
A video clip is submitted. The native attester scores 0.78. Three independent attesters participate (N = 3, so wA = 80%):
Suppose the reputation-weighted independent average is 0.81. With wA = 0.80, consensus ≈ 0.80×0.78 + 0.20×0.81 ≈ 0.78. The native score still anchors most of the result because participation is low. If the same independent set grew to N ≥ 10, native weight would drop to 30% and the outcome would track independent judgment far more closely.
The Zero-Knowledge Proof
Computing the consensus is straightforward — the challenge is making the computation trustless. How can anyone be sure the aggregator didn't exclude some scores, include fake ones, or apply the formula incorrectly?
Attestia addresses this through a Zero-Knowledge proof: a cryptographic certificate that proves the following facts without revealing any sensitive data:
The native score and every eligible independent score were included — none omitted or fabricated
The native-weight schedule wA(N) and reputation weighting were applied exactly as specified
The published consensus score is the mathematically correct result
This proof is published alongside the final attestation, so anyone can independently verify the result. They don't need to re-run the computation or trust the aggregator — the proof is mathematically sufficient.
Privacy guarantee: The ZK proof reveals nothing about individual attester scores — it exposes only the final consensus and a cryptographic commitment to the input set. Individual contributions remain private permanently.
Confidence score
Alongside the consensus score, the aggregator computes a confidence value based on how much the attesters' scores agreed with each other. When all attesters land close together, confidence is high — the network has a clear, decisive view. When scores are spread out, confidence is lower — the content may be genuinely ambiguous or the attester set hasn't converged.
Both the consensus score and the confidence value are included in the final on-chain attestation, giving downstream consumers a richer signal than a simple score alone.
docs / workflow / settlement
On-Chain Settlement
After aggregation, the protocol publishes the final result on-chain and evaluates how each independent attester performed — distributing rewards to those who aligned with consensus and applying penalties to clear outliers. The Attestia Native Attester is outside this settlement loop.
Publishing the aggregate attestation
The Aggregator posts the consensus score, confidence value, independent attester count (native excluded), and ZK commitment as an on-chain EAS attestation. This is the protocol's public output — a compact, tamper-resistant record of the combined native and independent judgment about the submitted media.
Once published, this attestation can be read by anyone: the submitter who submitted the media, downstream applications integrating Attestia, or any third party who wants to independently verify the authenticity assessment.
Evaluating independent attester behavior
Settlement applies only to independent attesters. The native attester does not receive protocol rewards and is not subject to staking or slashing — it provides a baseline signal and commercial responsiveness, not market participation.
Rather than rewarding absolute correctness — which would require knowing ground truth — Attestia measures alignment with the published consensus (which already includes the native score via wA(N)). If independent attesters converge near 0.82 and one submits 0.83, they are aligned. A score of 0.20 against a tight cluster suggests error or manipulation and may trigger reduced rewards or slashing when variance is low.
Importantly, the protocol is careful not to punish honest disagreement. If the network itself is divided — with scores spread widely across the range — then a large individual deviation may simply reflect legitimate uncertainty. Penalties are only applied when the network has clearly converged and a specific attester stands far outside the consensus. This is governed by the Slashing rules and varies by Network Phase.
Reward distribution
Each participating independent attester receives rewards denominated in ETH and ATTA according to the active network phase. Reward size depends on deviation from consensus, informative contribution, and reputation — see Reward Mechanism.
docs / rewarding / staking
Staking Model
Staking applies to independent attesters only — not the Attestia Native Attester. By locking collateral before participating, independent attesters have economic skin in the game: stake earns rewards when aligned with consensus and is at risk when slashing rules apply.
Independent attester stake
To participate as an independent attester, a deposit must be locked into the AttestiaStake contract. This deposit is denominated in ETH or its equivalent in USD, and is held as active collateral — it grants access to the reward pool but is also subject to partial forfeiture (slashing) in case of systematic deviation from a clear network consensus.
The required stake amount increases progressively as the network matures. Early-phase attesters face a lower barrier to entry; as consensus becomes more robust and economic security requirements grow, the stake threshold rises accordingly.
ETH-equivalent denomination: The stake is defined in ETH-equivalent terms and dynamically adjusted using price oracles. This ensures that fluctuations in the ATTA token price don't weaken the protocol's security guarantees — economic exposure remains meaningful regardless of market conditions.
Stake transition
At initialization, attesters stake ETH. In the mature network phase, the staking requirement transitions from ETH to ATTA — the protocol's native token. Attesters who have accumulated ATTA through participation can transition their stake without additional capital outlay. New entrants must acquire ATTA on the open market.
Refundable collateral: The attester stake is not a fee. It is fully refundable at the end of participation, minus any amounts lost to slashing. Honest attesters who participate consistently and don't deviate significantly from consensus will recover their full deposit.
docs / cryptoeconomics / rewards
Reward Mechanism
Independent attesters are rewarded based on alignment with the published consensus (which includes the native score via wA(N)) and how informative their contribution was. The Attestia Native Attester does not participate in the reward pool. This dual incentive prevents blind conformity and low-effort copying.
What gets rewarded?
Alignment with consensus
The primary driver of an attester's reward is how close their score is to the network's final consensus. An attester who lands precisely on the consensus receives the maximum alignment bonus. The further away their score, the smaller this component of the reward. Importantly, the penalty for deviation grows disproportionately: small differences barely affect the reward, but large deviations reduce it sharply.
Informative contribution
The second component rewards attesters whose score actually moved the aggregate. This is measured by asking: how much would the consensus have changed if this attester had not participated? An attester who submits an independent, carefully considered score that shifts the aggregate — even slightly — earns a meaningful influence bonus. An attester who submits a score identical to what the consensus would have been anyway earns very little from this component.
This design prevents a common gaming strategy: waiting for other scores to leak, then submitting a near-identical value to collect rewards without doing real analysis. Attestia's hidden-score window already limits this by withholding scores until the deadline, and the influence component adds another layer of defense.
Reputation multiplier
Both components are multiplied by the attester's reputation score. A well-established attester with a long track record of accurate assessments earns a larger reward for the same quality of submission than a newcomer. This creates a meaningful career path within the protocol: building a strong reputation is financially worthwhile.
▷ Example — continuing from Aggregation
Rewards after a consensus of 0.81
Recall the three attesters from the previous example, with a consensus of 0.81:
All three attesters are close to the consensus, so all receive meaningful rewards. Attester A, having the highest reputation, earns the most. Attester C's score was the furthest from consensus and they have the lowest reputation, so their reward is the smallest — but still positive, since the deviation is small and honest disagreement is expected.
docs / cryptoeconomics / reputation
Reputation System
Every independent attester maintains a reputation score ρm reflecting historical alignment with consensus. Reputation weights independent scores inside the aggregation formula and multiplies reward payouts — it is bounded so no participant can dominate indefinitely.
How reputation works
After each round, reputation updates from how closely an independent attester's score matched the final consensus x̄ (native + independent aggregate). Updates use an exponentially weighted average (λ = 0.8 in the Whitepaper), so recent performance matters more while history is retained.
Reputation is bounded (ρm ∈ [0.5, 1.5] per the Whitepaper). High performers contribute more inside the independent average and earn larger rewards; poor performers retain baseline participation but carry less weight and smaller payouts.
Reputation tiers
Tier
Reward multiplier
Operational effect
Emerging
0.90×
Access to standard queue only; building performance history
Trusted
1.00×
Standard and priority jobs; baseline active network participant
Elite
1.15×
First-call priority, highest reward share
▷ Example — continuing from Rewards
How reputation evolves over multiple rounds
Attester C from our running example had an Emerging reputation. After their score of 0.85 in a round where consensus was 0.81, their deviation was small (0.04) — a reasonable result for a new participant. Their reputation ticks upward slightly.
After 10 more rounds with similar performance — consistently close to consensus, occasionally slightly off — they move into the Trusted tier and begin receiving a 1.00× multiplier on rewards.
After 30 rounds of consistently strong performance, they reach Elite status: a 1.15× multiplier, priority access to high-volume tasks, and the highest reward share. Their stake in the protocol's success has now become concrete and meaningful.
Cold start: New attesters begin at the Emerging tier and build reputation from their first round. In Phase 0 (bootstrapping), reputation updates are active immediately — participating early means accumulating a track record before the competition increases.
docs / cryptoeconomics / slashing
Slashing
Slashing is the protocol's mechanism for penalizing clear outliers. It is designed carefully — punishing genuinely anomalous behavior while protecting attesters who take legitimate minority positions on ambiguous content.
When does slashing apply?
A large deviation from consensus alone is not enough to trigger slashing. The protocol takes context into account: if the attester network itself is divided and scores are spread widely, then any individual deviation may simply reflect genuine uncertainty about the content — not negligence or manipulation.
Slashing is triggered only when two conditions are met simultaneously:
The attester's score is far enough from the consensus to be statistically significant
The overall spread of attester scores is low — meaning the network converged clearly, and this attester's deviation cannot be explained by general ambiguity
When scores are widely dispersed across the network, slashing is suppressed entirely — even for attesters who deviate a lot. The protocol reasons that if the network itself is uncertain, penalizing any individual for diverging from an unstable consensus would be unjust.
Slashing by network phase
The strictness of slashing evolves with the network. In the early stages, consensus is fragile and the attester set is small — so penalties are conservative or absent. As the network matures and consensus becomes robust, the protocol can reasonably enforce tighter standards.
Phase
Slashing status
Penalty when triggered
Phase 0 — Bootstrap
Disabled
None
Phase 1 — Weak Consensus
Selective
10% of attester stake
Phase 2 — Mature
Active
25% of attester stake
The exact thresholds and conditions for each phase are detailed in the protocol's technical specification. For a thorough treatment, refer to the Whitepaper. A high-level description of how the phases differ is covered in the Network Phases section.
▷ Example — continuing from Reputation
A fourth attester joins — and deviates sharply
Imagine a new round with the same three attesters as before, plus a new participant — Attester D — who submits a score of 0.12. The network consensus is again around 0.81, and all other attesters are clustered between 0.79 and 0.85. The variance is very low — the network has clearly converged.
Attester D's deviation (roughly 0.69 from the consensus) far exceeds the threshold for Phase 1. Both conditions for slashing are met: the deviation is large, and the network is in strong consensus. A portion of Attester D's staked ETH is forfeited as a penalty.
If instead the same round had produced scores scattered between 0.10 and 0.90 — indicating a genuinely ambiguous piece of content — Attester D's 0.12 would not be penalized. The network's high variance signals that honest disagreement is plausible.
docs / cryptoeconomics / network-phases
Network Phases
Attestia's incentive structure is not static — it evolves as the attester set grows. Early stages require conservative penalties and generous incentives to attract the first participants. As the network matures, stronger guarantees can be enforced without discouraging honest involvement.
Phase 0 — Bootstrapping
In the earliest stage, the attester set is small and still forming. Disagreement between attesters is expected and does not indicate malicious behavior — with only a handful of participants, random variation naturally matters more.
Slashing: Fully disabled — no stake at risk for deviation
Rewards: Reduced from the base rate, reflecting lower confidence in an early-stage aggregate
Reputation: Updates are active from day one — early participants build their track record immediately
Primary goal: Attract the first attesters, bootstrap supply, validate the core protocol
Phase 1 — Weak Consensus
As the network grows, it begins to produce meaningful signals. Slashing is introduced selectively — only when the network has clearly converged on a result and an attester's deviation cannot be explained by genuine ambiguity.
Slashing: A moderate fraction of attester stake, applied only when both the deviation is large and the network's score variance is low
The network is large enough that the aggregate outcome is robust and reliable. The variance condition for slashing is lifted — high deviation is penalized regardless of how spread out the scores are, because the network as a whole can be trusted.
Slashing: A larger fraction of attester stake, applied whenever deviation exceeds the threshold
Rewards: Full base rate — maximum incentive for accurate participation
Primary goal: Maximum economic security, highest-quality outputs, full protocol credibility
Exact thresholds: The specific attester counts, deviation thresholds, and variance ceilings for each phase transition are defined in the protocol's technical specification. See the Whitepaper for the full treatment.
docs / example / full-walkthrough
Full Walkthrough
This page walks through a complete, concrete scenario — from media submission to final settlement — using a single consistent example that ties together every concept covered in the docs.
Scenario: A journalist at an online news publication receives a video clip via social media that appears to show a public official making a controversial statement. Before publishing, they need to verify whether the video is authentic or AI-generated.
Step 1 — Submission
The journalist opens the Attestia dashboard and uploads the video clip. The platform securely stores the file and registers the verification request — setting a 30-minute window for independent experts to evaluate it (or 5 minutes in priority mode).
The journalist pays the required Attestation Credits (AC) for the selected media type and verification speed. No blockchain knowledge or cryptocurrency wallet is needed — everything happens through the dashboard.
Step 2 — Native baseline score
Immediately after anchoring, the Attestia Native Attester analyzes the clip and records a baseline score of 0.22 — consistent with likely manipulation. The journalist can see this operational signal while the independent window remains open.
Step 3 — Independent attesters evaluate
Three active independent attesters discover the task and work in parallel. They cannot see each other's scores until the window closes.
Independent attesters
Attester ADeepfake detection firm — ensemble ML models. Elite reputation.
Attester BOSINT analyst with forensic video expertise. Trusted reputation.
Attester CUniversity lab with a new detection model. Emerging reputation.
Attester A detects face-swap artifacts and submits 0.21.
Attester B finds metadata and A/V sync issues and submits 0.18.
Attester C flags synthetic generation and submits 0.24.
Step 4 — Aggregation
With N = 3 independent attesters, native weight wA = 80%. The reputation-weighted independent average is approximately 0.20. Consensus ≈ 0.80×0.22 + 0.20×0.20 ≈ 0.22 — clearly in the synthetic/manipulated range, aligned with both native and independent signals.
Independent variance is very low, yielding a high confidence indicator. A ZK proof attests that the native score, all three independent scores, and the weight schedule were applied correctly — without revealing individual sealed scores.
Step 5 — The result is recorded
The final result is permanently recorded as a public attestation — think of it as a tamper-proof digital certificate, permanently stored on the blockchain, that anyone can look up and verify at any time. It contains:
Independent attester count: 3 (native weight at aggregation: 80%)
A cryptographic proof that the result was computed correctly
This attestation is now permanently on record. The journalist can embed it in their article, share it with editors, or use it in any legal or editorial process. Anyone can independently look it up and verify it.
Step 6 — Settlement
Settlement runs for independent attesters only. All three are close to consensus (~0.22), so all receive rewards:
Settlement Outcome
Attester AScore 0.21 — small deviation — Elite reputationHighest reward
Attester BScore 0.18 — small deviation — Trusted reputationStrong reward
Attester CScore 0.24 — small deviation — Emerging reputationGood reward
Native attesterScore 0.22 — not in settlementNo reward / no slash
No slashing is triggered. Attester C's reputation ticks upward toward the Trusted tier.
Outcome
The journalist holds a publicly verifiable attestation: Attestia's native detector and three independent experts — diverse methods, staked accountability, and a published weight schedule — assessed the clip as likely synthetic with high confidence. The process, not just the number, is what establishes trust.
docs / api-reference / overview
API Reference
The Attestia v1 HTTP API lets attesters query open media and submitters register assets using signed requests
(access key + timestamp + HMAC). Public routes are available without signing. An optional WebSocket feed may be
available for the same data when your deployment exposes it. Attester integrations should treat that realtime
feed as the trigger that new media is ready for review.
Base URL (v1)
All versioned REST routes are under . Use your production or staging hostname in place
of the one shown here.
Private v1 routes require an access key and a signing secret (created in the app
dashboard). Each request must include a timestamp and an HMAC signature over a canonical string. The signing
secret is never sent on the wire after initial creation.
API keys
In the Attestia web app, open Dashboard (or your role workspace) and create an
attester or submitter API key. You receive an accessKey and a
signingSecret. Copy the signing secret immediately; it is shown only once. Revoke keys from the same
screen when you no longer need them.
For automation against your own session, you can call POST /api/dashboard/api-keys with
Authorization: Bearer <session_access_token> and body
{ "kind": "attester" | "submitter", "label": "my-bot" }. Revoke with
DELETE /api/dashboard/api-keys?id=<key_id> using the same session token.
HTTP headers (signed requests)
Name
Mandatory
Description
Attestia-Access-Key
Alias: X-Attestia-Access-Key
YES
Public access key from the dashboard (e.g. ak_att_... or ak_sub_...).
Attestia-Timestamp
Alias: X-Attestia-Timestamp
YES
Unix timestamp in milliseconds. Must fall within the server receive window.
Attestia-Signature
Alias: X-Attestia-Signature
YES
Lowercase hex HMAC-SHA256 of the canonical payload, using signingSecret as UTF-8 key.
Header names are case-insensitive. You may use the X-Attestia-* aliases if your stack requires an
X- prefix on custom headers.
Canonical payload
Concatenate exactly four lines (newline character \n between lines, no trailing newline):
Format
1) <Attestia-Timestamp as string, e.g. "1735689600000">
2) <HTTP_METHOD in UPPERCASE, e.g. GET or POST>
3) <path + query exactly as in the request URL, e.g. "/api/v1/attester/media?includeMyScore=1">
4) <lowercase hex SHA-256 of the raw request body bytes interpreted as UTF-8 string (empty string for GET)>
Line 3 must match what your HTTP client sends: start with /, include ? and the query string
when present. Only the path and query are signed, not the scheme or host (for example under
the signed path begins with /api/v1/).
Attestia-Timestamp must be within 30 seconds of server time unless your deployment
documentation states otherwise. On 401 responses that indicate clock skew, compare your clock with
GET /api/v1/time.
use hmac::{Hmac, Mac};
use sha2::{Digest, Sha256};
use std::env;
use std::time::{SystemTime, UNIX_EPOCH};
type HmacSha256 = Hmac;
fn sha256_hex_utf8(s: &str) -> String {
let mut h = Sha256::new();
h.update(s.as_bytes());
hex::encode(h.finalize())
}
fn main() -> Result<(), Box> {
let mut origin = env::var("ATTESTIA_SITE_ORIGIN").unwrap_or_else(|_| "https://your-host".into());
while origin.ends_with('/') { origin.pop(); }
let access_key = env::var("ATTESTIA_ACCESS_KEY")?;
let signing_secret = env::var("ATTESTIA_SIGNING_SECRET")?;
let path = "/api/v1/attester/media";
let ts = SystemTime::now().duration_since(UNIX_EPOCH)?.as_millis().to_string();
let body = "";
let body_hash = sha256_hex_utf8(body);
let payload = format!("{ts}\nGET\n{path}\n{body_hash}");
let mut mac = HmacSha256::new_from_slice(signing_secret.as_bytes())?;
Mac::update(&mut mac, payload.as_bytes());
let sig = hex::encode(mac.finalize().into_bytes());
let client = reqwest::blocking::Client::new();
let res = client
.get(format!("{origin}{path}"))
.header("Attestia-Access-Key", access_key)
.header("Attestia-Timestamp", &ts)
.header("Attestia-Signature", sig)
.send()?;
println!("{} {}", res.status(), res.text()?);
Ok(())
}
docs / api-reference / rest
REST endpoints
All paths below are rooted at . Private routes require
request signing. Rate limits are per access key (see
Limits & errors).
Endpoint index
Method
Path
Auth
Description
GET
/ping
None
Connectivity test.
GET
/time
None
Server time (ms).
GET
/health
None
Service metadata.
GET
/attester/media
Signed + stake
List open assets.
GET
/attester/media/:id
Signed + stake
Single open asset.
GET
/attester/media/stream
Signed + stake
SSE stream of open assets.
POST
/attester/media/:id/scores
Signed + stake
Submit a score for an open asset.
POST
/submitter/media
Signed + stake
Register media asset.
GET/attester/media
List open media (attester)
Counts toward your per-key rate limit.
Query parameters
Name
Type
Mandatory
Description
includeMyScore
INT
NO
If 1, adds myScore for the key wallet when you already submitted a score for that asset.
Request headers
Attestia-Access-Key, Attestia-Timestamp, Attestia-Signature - signing string uses
GET and path + query exactly as sent, e.g. /api/v1/attester/media?includeMyScore=1, empty body hash.
Response Content-Type: text/event-stream. Same signing headers as GET; use the exact path /api/v1/attester/media/stream (no query) unless you add one.
Attester workers can use the new-open-assets delta event as the trigger that newly registered media
is available to review. The open-assets snapshot is also sent whenever the open set changes (use it for
reconciliation or initial state). If your deployment exposes the websocket gateway, it carries the same
authenticated feed over WebSocket.
Events
event
data (JSON)
ready
{ stake: { stakedWei, minStakeWei } }
new-open-assets
{ ids: string[], assets: MediaAsset[] } delta when the open set expands
open-assets
{ ids: string[], assets: MediaAsset[] } snapshot
ping
{ t: number } heartbeat
error
{ message: string }
POST/attester/media/:id/scores
Submit score (attester)
Submit a verification score for an open asset. The request must be signed like other v1 routes; the
body JSON must be the exact string you sign.
Off-chain EAS attestations are generated and signed by the Attestia server using the attester's linked Privy
wallet. API clients should not construct or submit an off-chain attestation payload.
Request headers
Attestia-Access-Key, Attestia-Timestamp, Attestia-Signature - signing string uses
POST and path exactly as sent, e.g. /api/v1/attester/media/asset_123/scores, and SHA-256 of the JSON body.
Request body
Field
Type
Mandatory
Description
authenticityScore
NUMBER
YES
0..100
deepfakeRiskBps
NUMBER
YES
0..10000 (basis points)
algorithm
STRING
YES
Short algorithm/model label
notes
STRING
NO
Optional notes
signature
STRING
NO
Reserved for future use (ignored today).
The server derives attesterAddress from the API key wallet and will reject attempts to submit scores
as another address.
Requirements: your attester must have a Privy wallet linked in the dashboard (so the server can sign), and
meet the stake gate for attesters.
use chrono::{Duration, SecondsFormat, Utc};
use hmac::{Hmac, Mac};
use serde_json::json;
use sha2::{Digest, Sha256};
use std::env;
type HmacSha256 = Hmac;
fn sha256_hex_utf8(s: &str) -> String {
let mut h = Sha256::new();
h.update(s.as_bytes());
hex::encode(h.finalize())
}
fn main() -> Result<(), Box> {
let mut origin = env::var("ATTESTIA_SITE_ORIGIN").unwrap_or_else(|_| "https://your-host".into());
while origin.ends_with('/') { origin.pop(); }
let access_key = env::var("ATTESTIA_ACCESS_KEY")?;
let signing_secret = env::var("ATTESTIA_SIGNING_SECRET")?;
let path = "/api/v1/submitter/media";
let deadline = (Utc::now() + Duration::hours(12)).to_rfc3339_opts(SecondsFormat::Millis, true);
let body = json!({
"title": "My asset",
"mediaContext": "Context here",
"contentHash": format!("0x{}", "ab".repeat(32)),
"uri": "ipfs://...",
"contributorAttestationUid": format!("0x{}", "cd".repeat(32)),
"verificationDeadline": deadline,
"mediaType": "image",
"turnaround": "standard",
})
.to_string();
let ts = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)?
.as_millis()
.to_string();
let body_hash = sha256_hex_utf8(&body);
let payload = format!("{ts}\nPOST\n{path}\n{body_hash}");
let mut mac = HmacSha256::new_from_slice(signing_secret.as_bytes())?;
Mac::update(&mut mac, payload.as_bytes());
let sig = hex::encode(mac.finalize().into_bytes());
let client = reqwest::blocking::Client::new();
let res = client
.post(format!("{origin}{path}"))
.header("Content-Type", "application/json")
.header("Attestia-Access-Key", access_key)
.header("Attestia-Timestamp", &ts)
.header("Attestia-Signature", sig)
.body(body)
.send()?;
println!("{} {}", res.status(), res.text()?);
Ok(())
}
docs / api-reference / websocket
WebSocket API
Open media is also available over HTTP as an SSE stream at /api/v1/attester/media/stream (same signing
as other attester routes). Some deployments additionally offer a WebSocket endpoint for the same feed; use the
wss:// or ws:// URL you were given. The examples use ATTESTIA_WS_URL as a placeholder.
Attester services should keep this connection open and treat new-open-assets as the trigger that newly
registered media is available for review. The open-assets snapshot is still sent whenever the open set
changes.
Connection URL
Item
Value
URL
Your WebSocket base URL is provided with your integration materials. REST calls use
; the WebSocket host may differ. Local examples often use
ws://127.0.0.1:3001 as a stand-in, which is the default port exposed by the Docker Compose
gateway service.
Subprotocols
None required; the first outbound frame must be the JSON auth object described under Authenticate.
Authenticate
Send a single JSON text frame immediately after connect:
use hmac::{Hmac, Mac};
use sha2::{Digest, Sha256};
use std::env;
use tungstenite::{connect, Message};
type HmacSha256 = Hmac;
fn sha256_hex_utf8(s: &str) -> String {
let mut h = Sha256::new();
h.update(s.as_bytes());
hex::encode(h.finalize())
}
fn main() -> Result<(), Box> {
let ws_url = env::var("ATTESTIA_WS_URL").unwrap_or_else(|_| "ws://127.0.0.1:3001".into());
let access_key = env::var("ATTESTIA_ACCESS_KEY")?;
let signing_secret = env::var("ATTESTIA_SIGNING_SECRET")?;
let ts = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)?
.as_millis()
.to_string();
let ak = access_key.to_lowercase();
let path = format!("/__attestia_ws__/{ak}");
let body_hash = sha256_hex_utf8("");
let payload = format!("{ts}\nCONNECT\n{path}\n{body_hash}");
let mut mac = HmacSha256::new_from_slice(signing_secret.as_bytes())?;
Mac::update(&mut mac, payload.as_bytes());
let sig = hex::encode(mac.finalize().into_bytes());
let ts_ms: u64 = ts.parse()?;
let auth_json = format!(
"{\"type\":\"auth\",\"accessKey\":\"{}\",\"timestamp\":{},\"signature\":\"{}\"}",
ak,
ts_ms,
sig,
);
let (mut socket, _) = connect(ws_url.as_str())?;
socket.write_message(Message::Text(auth_json))?;
loop {
if let Message::Text(t) = socket.read_message()? {
println!("{t}");
}
}
}
docs / api-reference / limits
Limits & errors
Attestia uses conventional HTTP status codes and JSON bodies for errors. Rate limits apply per API access key.
Rate limits
Rule
Description
Per access key
Sliding window of one minute. The default allowance is 120 requests per key per minute unless your contract states otherwise.
Streams and registration
Long-lived connections and media registration consume capacity from the same key; back off when you receive HTTP 429.
429 response
HTTP/1.1 429 Too Many Requests
Retry-After: <seconds>
{"error":"rate limit exceeded"}
HTTP status codes
Code
Meaning
200
Success.
400
Malformed JSON or validation error (e.g. missing fields).
401
Missing/invalid signing headers, bad signature, skewed timestamp, or revoked key.