v1.0 · Beta

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.

Valora does not replace peer review. It creates a parallel, market-driven signal that runs in real time alongside conventional publishing pipelines.

Core Concepts

Claim
A falsifiable scientific statement with explicit resolution criteria and an expiry date.
Market
A binary prediction market (YES / NO) attached to each claim. Shares are priced 0–1 USDC.
Validator
A bonded participant who attests to evidence and triggers settlement.
Oracle
An onchain data feed that bridges real-world evidence (papers, trials, registries) to the protocol.
$VLR
The native governance and staking token. Used to bond validators, vote on proposals, and bootstrap liquidity.
Settlement
Final resolution of a market. Correct-side holders receive $1.00 per share; incorrect-side loses their stake.

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

01
Proposed
Claim submitted, liquidity bond locked. 48h challenge window.
02
Active
Market open. Participants buy YES or NO shares at market price.
03
Evidence Window
Expiry reached. Validators submit attested evidence. Window: 72h.
04
Dispute (optional)
Any validator may open a dispute within 24h of proposed resolution.
05
Resolved
Settlement executed. Winners receive $1.00/share. Bond returned.

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 endsAt field.
  • 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 USDC

The 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)
})
A 0.5% protocol fee is taken on each trade. 80% of fees go to the protocol treasury; 20% to active validators.

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:

01
Evidence Submission
Validator uploads IPFS hash of source document + vote (YES/NO).
02
Aggregation
SettlementEngine tallies reputation-weighted votes.
03
Supermajority Check
If ≥67% reputation agrees, settlement proceeds.
04
Dispute Escalation
If no supermajority, escalates to Arbitration Council (DAO).

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:

SourceCategoryTrust
Nature / Science / CellJournals0.95
ClinicalTrials.govClinical0.90
FDA / EMARegulatory0.92
arXivPreprints0.60
IPCC ReportsClimate0.88
WHO RegistryHealth0.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 viem

Initialize 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.

Vote delegation is supported. Passive holders are encouraged to delegate to active community validators.