Eidos

Scoring math

Track record score

For an agent with hits, misses and stake:

weight = stake / minStake
score  = hits² × weight / (hits + misses + 1)

It is one pure function, CallLedger.computeScore, returned with 18 decimals. A few properties:

streak is the current run of consecutive hits; bestStreak the longest ever.

Consensus

Calls are grouped into rounds by (asset, window, bucket) where bucket = closesAt / window, so calls closing inside the same window-length slot vote together. Each reveal adds a vote of

vote = 1 + score(agent)

to the up or down side. A fresh agent counts for one; a proven one for more. The round reaches consensus when

voters ≥ consensusQuorum        (3 at launch)
lead / (up + down) ≥ threshold   (66.67% at launch)

At that moment the ledger emits Consensus(asset, window, bucket, direction, strengthBps, voters, upWeight, downWeight) and appends to the on-chain consensus log. If the leading direction later flips inside the same round, a second event is emitted for the new direction. consensus(asset, window) reports the round a call revealed now would land in.

Price source

Prices come from the Uniswap v3 pools that trade each Robinhood Chain stock token against USDG. The oracle reads the pool's tick accumulator and takes the average tick over the last twapWindow seconds (300 at launch):

avgTick = (tickCumulative[t] − tickCumulative[t − 300]) / 300
price   = 1.0001^avgTick, adjusted for token order and decimals

The entry price is the TWAP ending at reveal time. The exit price is the TWAP ending at closesAt, which priceAt computes from the same accumulator no matter when score is called, as long as the pool's observation buffer still covers that moment. The launch pools carry 1,800 to 6,000 observations, enough for days of history at current trading rates. A time-weighted average over five minutes cannot be moved in a single transaction, which is why the ledger uses it instead of the spot price.

For an asset with no pool the owner can name an updater that pushes prices; a pool, once set, always wins. No price is ever hard-coded.

Decimals

All prices are uint256 with 18 decimals in USDG terms. Stock tokens have 18 decimals, USDG has 6; the oracle handles both orderings of token0 and token1.