How-to guide

Monitor security assumptions

Check that the economic and liveness assumptions behind a deadline-bearing or price-sensitive action still hold before you take it, and keep checking until its last deadline. The contracts cannot tell you when such an assumption has stopped holding.

Check an action's assumptions

  1. List the assumptions the action depends on. The security model lists which assumptions protect which mechanism.
  2. Find the rows for those assumptions in the table below.
  3. Take each row's reads for the same lineage, pool, and block as the action. Express the values in one numeraire and cover the action horizon.
  4. If a read is weak or unavailable, apply the row's response before proceeding.
  5. Repeat the reads on the row's cadence until the action's last deadline has passed.

Most on-chain reads are also indexed by augurScan under /operations/… (see the augurScan README). The liquidator and OpenOracle arbitrager bots in bots/ show live pool, vault, and report state in their dashboards.

Terms used in the table

Numeraire
The one unit of account, such as ETH, in which you express every value you compare.
Action horizon
The period until the action's last deadline.
Corrector
An account that disputes an incorrect OpenOracle report; see A17.
Callback-recovery candidate
A price coordinator whose pending report OpenOracle has already settled; see settlement recovery.
Overflow operation
A staged operation outside the next settlement callback's batch of four; see execution batches.

Reads, cadence, and response for each assumption

Assumptions What to read Review cadence Response when the boundary is weak or unknown
Executor incentives and participation — A01, A02, A03, A06
  • Liquidation candidates and net reward: liquidator bot dashboard
  • Dispute opportunities and net reward: OpenOracle arbitrager dashboard
  • Active reporters, correctors, escalation depositors, and Collateral Repair Auction bidders: augurScan /operations/reports, /operations/escalations, /operations/auctions
  • Callback-recovery candidates: coordinator pendingReportId, then the settlement timestamp in OpenOracle storedGame(reportId); anyone can clear one with recoverSettledPendingReport()
  • Overflow operations: coordinator getActiveStagedOperationCount() minus getPendingSettlementOperationCount()
Continuously for deadline-bearing flows; before launch and after parameter or gas-regime changes Fund or arrange independent executors, reduce exposed value, or disclose that the affected transition may stall
Fork lineage value and migration readiness — A05, A07, A09, A11
  • Fork start: Zoltar getForkTime(universeId)
  • Migration progress: augurScan /operations/forks
  • Parent and child REP prices: market quotes in one numeraire
  • Custodian, exchange, interface, and proof-tool readiness: each party's published support statement (no on-chain read)
Before a fork-security claim and throughout migration and coordination windows Do not claim fork deterrence, practical migration, or value concentration; narrow supported lineage and exposure
REP value and liquidity versus secured exposure — A08, A13, A14
  • Theoretical REP supply: Zoltar getUniverseTheoreticalSupplyAttoRep(universeId)
  • Pool open interest: settlementCollateralAttoEth in getPoolAccountingSnapshot()
  • Pool-held REP: getTotalPoolHeldAttoRep()
  • Cached REP/ETH price: coordinator lastPrice
  • REP depth and price impact: arbitrager Uniswap venue quotes
  • Pool and vault risk: augurScan /operations/risk
  • REP discounted cash flow: off-chain valuation (no on-chain read)
At launch, continuously while open interest exists, and after material price, supply, liquidity, or exposure changes Cap or stop new exposure in clients and disclosures; do not describe REP backing as economically sufficient
Outcome evidence and escalation funding — A04, A10
  • Escalation Game deadline: getEscalationGameEndDate()
  • Outcome funding: getOutcomeBalancesAttoRep() and getBindingCapitalAttoRep(), or augurScan /operations/escalations
  • REP available to fund a correction: wallet REP balanceOf (wallet deposits, except in a game carried across a fork) and vault REP backingUnitsToAttoRep(securityVaults(vault).repBackingUnits) of each ready account
  • Outcome evidence: where each source publishes (off-chain)
From question creation through local resolution and any fork window Mark the market or action impaired, surface the deadline, and avoid asserting that honest local correction remains fundable
Collateral Repair Auction demand — A12
  • Collateral Repair Auction bids: auction engine(), then engine bidCount(), bids(index), and previewFinalization(maximumFilledLots), or augurScan /operations/auctions
  • REP/ETH depth and expected discount: arbitrager Uniswap venue quotes
  • Bidder gas cost: RPC eth_feeHistory
Before and during every repair auction Disclose likely incomplete repair and plan operation of the child at only migrated collateral plus accepted auction ETH
Transaction inclusion and Ethereum execution — A16, A26
  • Base and priority fees: RPC eth_feeHistory
  • Block gas limit: latest block
  • Reorg history: augurScan /operations/integrity
  • Escalation deadline: getEscalationGameEndDate()
  • Collateral Repair Auction close: auction closesAt()
  • Migration close: forker forkData(pool) forkActivationTime plus eight weeks
  • Margin: each deadline minus expected inclusion delay
Continuously while a deadline or mandatory transition is live Raise transaction fees where rational, use independent submission paths, and disclose missed-deadline or stranded-transition risk
REP/ETH price correction — A17, A18, A19
  • Pending report: coordinator pendingReportId, then OpenOracle storedGame(reportId)
  • Report outcomes: coordinator PriceRequested, PriceReported, and PriceReportRejected events, or augurScan /operations/reports
  • Independent correctors: whether any, such as an operator running the OpenOracle arbitrager, reports disputes profitable after fees, gas, and price impact
  • Corrector inventory: wrapped Ether (WETH) and REP balances
Continuously while a report is pending or a cached price can authorize operations Block or discourage new price-sensitive operations and disclose that an incorrect report may settle
Token behavior and recipient compatibility — A21, A22
  • Sepolia genesis REP code: keccak-256 of eth_getCode against reputationToken in EXPECTED_SEPOLIA_DEPLOYMENT_RUNTIME_CODE_HASHES (ui/zoltarShared/ts/protocol/deployment.ts)
  • Sepolia WETH code: the same against sepoliaPublished.weth.runtimeCodeHash in scripts/artifacts/uniswap-deployment.json
  • Mainnet REPv2 and WETH code: an externally sourced reference hash (no repository pin)
  • Sepolia genesis REP supply: shared/zoltar/ts/deployment/sepoliaRepAllocations.ts against getTotalTheoreticalSupply()
  • WETH redeemability and recipient ETH and ERC-1155 acceptance: a test transfer from a disposable account
At deployment verification and before first use of a new recipient or integration Reject the deployment or incompatible recipient; do not rely on redirected recovery
Deployments, clients, data, and keys — A20, A23, A24, A27, A28
  • Manifest freshness: bun run check:mainnet-deployment:current
  • Explorer source verification: bun run verify:contracts -- --chain-id=<chain ID>
  • Code presence: getDeploymentMask()
  • Runtime hashes: release checklist
  • Event replay: a second RPC or augurScan /operations/integrity
  • Signers, typed-data domains, nonces, and approvals: each operator's key store
At release, on every environment or account change, and continuously for indexers Stop signing or operating, reject an unverifiable deployment, revoke compromised authority where possible, and re-establish canonical state from independent sources
Question selection — A15
  • Question creation, end date, and labels: ZoltarQuestionData questionCreatedTimestamp, getQuestionEndDate, and getOutcomeLabels
  • Evidence plan and pool relevance: off-chain review
Before pool selection Reject or warn on the selection; do not represent an admitted question as relevant or resolvable
Immutable parameters — A25
  • Deployed configuration: manifest protocolConfig
  • Fork and non-decision thresholds: Zoltar getForkThresholdAttoRep(universeId) and getNonDecisionThresholdAttoRep(universeId)
  • Oracle costs: coordinator getRequestPriceCostAttoEth() and getSettlementCallbackGasLimit()
  • Required relationships: A25
Before deployment and after any change in external gas or market conditions used by the model Treat the immutable deployment as unsupported; there is no administrative parameter repair