Protocol

Contract, Events And Formulas.

One contract, RiseRounds, holds every daily pot in USDG on Robinhood Chain. The keeper opens each round and settles it with HyperCore's number; it cannot send the pot anywhere but to the wallets that took sides. This page lists the addresses, the functions, the events and every event the contract has emitted, read from the chain now.

Addresses

RiseRounds0x63D9940F0A27Db600A2247043d3d4539C241BAD7
Holds the pots, locks sides at 05:55 UTC, computes payouts, sends the 3% fee to the fee recipient.
Keeper0x9462bc1fA81D14c9C23803cb43f49C9C2DeA499e
Opens each round, settles it after 06:00 UTC, pushes payouts with claimFor, buys and burns $RISE with the fees.
House0x035804145304B1e0d2792A24BA87772e84A600c2
Takes both sides with 0.10 USDG each day so every round has a counterparty from the first day.
USDG0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
$RISE0x05c92c352154d920d522089f8987df08e28b6a46
ChainRobinhood Chain, chain id 4663, gas in ETH

Functions

openopen(uint32 day, uint64 outcome, uint64 target) keeper only, before 05:55 UTC
taketake(uint32 day, uint8 side, uint256 amount) side 0 YES, 1 NO; after approve(RiseRounds, amount) on USDG
take_with_authorizationtakeWithAuthorization(uint32 day, uint8 side, bytes32 salt, Auth auth) USDG EIP-3009, nonce = keccak256(abi.encode(day, side, salt))
settlesettle(uint32 day, uint256 settleFractionWad, uint256 markPrice, uint8 source) keeper only, after 06:00 UTC; source 1 HIP4, 2 MARK
claimclaim(uint32 day) / claimFor(uint32 day, address user) pays the user, never the caller
cancelcancel(uint32 day) anyone, 3 days after 06:00 UTC on a round never settled: full refunds

Events

RoundOpenedRoundOpened(uint32 indexed day, uint64 outcome, uint64 target, uint256 lockAt, uint256 settleAt)
SideTakenSideTaken(uint32 indexed day, address indexed user, uint8 side, uint256 amount, uint256 yesTotal, uint256 noTotal)
RoundSettledRoundSettled(uint32 indexed day, uint8 source, uint256 settleFraction, uint256 markPrice, uint256 pot, uint256 fee, uint256 yesPool, uint256 noPool)
RoundRefundedRoundRefunded(uint32 indexed day, uint8 source, uint256 markPrice, uint256 pot, bool cancelled)
ClaimedClaimed(uint32 indexed day, address indexed user, uint256 amount, bool refund)
BurnedBurned(uint256 usdgIn, uint256 riseBurned, bytes32 swapTx, bytes32 burnTx)

Round ids are the settlement date as a number, YYYYMMDD. Amounts are USDG base units (6 decimals), prices are USD with 6 decimals, settleFraction is scaled by 10^18. Sides are 0 for YES and 1 for NO.

Formulas

P    = yesTotal + noTotal                  (USDG base units)
fee  = floor(P × 300 / 10000)                 (3%)
net  = P − fee
yes  = floor(net × settleFraction / 1e18)   settleFraction from HyperCore settledOutcome
no   = net − yes
pay  = floor(yes × your YES stake / yesTotal) + floor(no × your NO stake / noTotal)
if one side is empty: every side refunded, fee = 0
take() after 05:55 UTC or under 0.1 USDG: reverts, nothing moves
no settlement 3 days after 06:00 UTC: anyone can cancel(), every side refunded

HyperCore reads

Endpointhttps://api.hyperliquid.xyz/info
OutcomeoutcomeMeta, the outcome named Recurring with class:priceBinary|underlying:BTC|period:1d
Yes priceallMids, coin #<10*outcome>
SettlementsettledOutcome, settleFraction and details price:<mark>
FallbackBTC 1m candle open at 06:00 UTC against the round's line (the previous 06:00 UTC settlement), when the outcome is unreadable 30 minutes after 06:00 UTC; the settlement carries source 2 (MARK)

Events on chain

RoundEventDetail
No events yet.