Valora Documentation
Everything you need to understand, integrate, and build on the Valora scientific validation protocol.
What is Valora?
Valora is a decentralized protocol for scientific claim validation. It operates as a prediction market where participants stake capital on the truth or falsehood of falsifiable scientific hypotheses. Markets settle when oracle-attested evidence arrives onchain.
Unlike traditional academic peer review — which is slow, gatekept, and incentive-misaligned — Valora aligns financial reward with epistemic accuracy. Being right pays.
Core Concepts
Anatomy of a Claim
Every claim is an onchain object with the following fields:
{
id: "0x8F9A2A1", // unique claim hash
title: "AI improves cancer diagnosis by 30%",
description: "Resolves YES if a peer-reviewed RCT (n>500)…",
category: "AI",
endsAt: 1748000000, // UNIX timestamp
yes: 0.62, // current YES price (USDC)
no: 0.38, // current NO price
volume: 1204000, // total USDC staked
validators: 142,
status: "active" | "resolved" | "disputed",
sources: ["Nature Medicine", "ClinicalTrials.gov"]
}Claims are proposed via the /create interface or directly through the ProposeClaim(bytes calldata data) contract call. A minimum liquidity bond of 100 USDC is required at proposal time.
Claim Lifecycle
Resolution Criteria
Resolution criteria must be written to be objectively verifiable. The protocol enforces the following rules:
- Criteria must reference a publicly accessible data source (journal, registry, regulatory body).
- Numeric thresholds must be stated with units and comparison operators.
- The resolution date must precede the claim's
endsAtfield. - Ambiguous criteria default to NO at settlement.
Price Discovery
Valora uses a CPMM (Constant Product Market Maker) with liquidity provisioning from the claim proposer and protocol treasury. YES and NO shares always sum to $1.00:
YES_price + NO_price = 1.00 USDCThe YES price at any time approximates the market's collective probability estimate for the claim resolving true.
Trading Mechanics
Traders interact with the market by calling buyShares(claimId, side, amount). The protocol routes USDC into the AMM pool, mints outcome tokens, and returns them to the caller.
// Buy $100 USDC worth of YES shares
await valora.buyShares({
claimId: "0x8F9A2A1",
side: "YES",
amount: 100_000_000n, // 100 USDC (6 decimals)
})Settlement
After the evidence window closes, the SettlementEngine contract aggregates validator attestations. A supermajority (⅔+) of reputation-weighted votes determines the outcome. Winners redeem shares at $1.00 each; losers receive nothing.
Staking & Reputation
Validators must bond a minimum of 1,000 $VLR to participate in settlement. Reputation is a 0–1 scalar computed from historical accuracy weighted by market volume:
reputation = Σ(correct_vote × market_volume) / Σ(total_vote × market_volume)Validation Pipeline
Each validator independently reviews evidence and submits a signed attestation. The pipeline is:
Slashing Conditions
- Incorrect resolution vote: 5% of bonded $VLR slashed.
- Fabricated evidence submission: 50% slash + permanent ban.
- Double voting: 25% slash.
- Inactivity (>30 days without vote): 0.5% slash per missed market.
Data Sources
Oracles pull from a curated registry of tier-1 scientific data sources. Each source has an assigned Trust Score (0.0–1.0) that weights its evidence contribution:
| Source | Category | Trust |
|---|---|---|
| Nature / Science / Cell | Journals | 0.95 |
| ClinicalTrials.gov | Clinical | 0.90 |
| FDA / EMA | Regulatory | 0.92 |
| arXiv | Preprints | 0.60 |
| IPCC Reports | Climate | 0.88 |
| WHO Registry | Health | 0.85 |
Attestation Format
{
"claimId": "0x8F9A2A1",
"vote": "YES",
"evidence": {
"source": "Nature Medicine",
"doi": "10.1038/s41591-...",
"ipfsHash": "bafkreih...",
"excerpt": "AI system achieved 94.5% sensitivity vs 64.3%..."
},
"validator": "0xABCD...1234",
"signature": "0x..."
}Quick Start
Install the Valora SDK:
npm install @valora/sdk wagmi viemInitialize the client:
import { ValoraClient } from "@valora/sdk";
import { createWalletClient, http } from "viem";
import { mainnet } from "viem/chains";
const client = new ValoraClient({
walletClient: createWalletClient({ chain: mainnet, transport: http() }),
network: "mainnet",
});API Reference
getClaims(filters?)→Promise<Claim[]>Fetch all active claims, optionally filtered by category, sort, or search string.
getClaim(id)→Promise<Claim>Fetch a single claim by ID.
buyShares(params)→Promise<TxHash>Buy YES or NO shares for a given claim. Requires connected signer.
redeemShares(claimId, side)→Promise<TxHash>Redeem winning shares after settlement at $1.00 each.
proposeClaim(input)→Promise<Claim>Submit a new claim to the protocol. Requires 100 USDC bond.
getMarketData(claimId)→Promise<MarketData>Fetch real-time price, volume, and orderbook depth.
React Hooks
import { useClaim, useTradePanel, useAccount } from "@valora/sdk/react";
// Read claim state
const { claim, isLoading } = useClaim("0x8F9A2A1");
// Trade
const { buy, isLoading: trading } = useTradePanel("0x8F9A2A1");
await buy({ side: "YES", amount: 100 });Governance — Proposals
Any address holding ≥10,000 $VLR may submit a governance proposal. Proposals can modify: oracle trust scores, protocol fee parameters, slashing thresholds, and treasury allocation.
// Submit a governance proposal
await valora.governance.propose({
title: "Increase minimum validator bond to 2,000 VLR",
calldata: encodeFunctionData({
abi: GovernorABI,
functionName: "setMinBond",
args: [2000n * 10n**18n],
}),
})Voting
Voting power equals the holder's time-weighted average $VLR balance over the 7-day snapshot window. Quorum is 4% of total supply. Proposals pass with a simple majority over a 5-day voting window.