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
| RiseRounds | 0x63D9940F0A27Db600A2247043d3d4539C241BAD7Holds the pots, locks sides at 05:55 UTC, computes payouts, sends the 3% fee to the fee recipient. |
|---|---|
| Keeper | 0x9462bc1fA81D14c9C23803cb43f49C9C2DeA499eOpens each round, settles it after 06:00 UTC, pushes payouts with claimFor, buys and burns $RISE with the fees. |
| House | 0x035804145304B1e0d2792A24BA87772e84A600c2Takes both sides with 0.10 USDG each day so every round has a counterparty from the first day. |
| USDG | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
| $RISE | 0x05c92c352154d920d522089f8987df08e28b6a46 |
| Chain | Robinhood Chain, chain id 4663, gas in ETH |
Functions
| open | open(uint32 day, uint64 outcome, uint64 target) keeper only, before 05:55 UTC |
|---|---|
| take | take(uint32 day, uint8 side, uint256 amount) side 0 YES, 1 NO; after approve(RiseRounds, amount) on USDG |
| take_with_authorization | takeWithAuthorization(uint32 day, uint8 side, bytes32 salt, Auth auth) USDG EIP-3009, nonce = keccak256(abi.encode(day, side, salt)) |
| settle | settle(uint32 day, uint256 settleFractionWad, uint256 markPrice, uint8 source) keeper only, after 06:00 UTC; source 1 HIP4, 2 MARK |
| claim | claim(uint32 day) / claimFor(uint32 day, address user) pays the user, never the caller |
| cancel | cancel(uint32 day) anyone, 3 days after 06:00 UTC on a round never settled: full refunds |
Events
| RoundOpened | RoundOpened(uint32 indexed day, uint64 outcome, uint64 target, uint256 lockAt, uint256 settleAt) |
|---|---|
| SideTaken | SideTaken(uint32 indexed day, address indexed user, uint8 side, uint256 amount, uint256 yesTotal, uint256 noTotal) |
| RoundSettled | RoundSettled(uint32 indexed day, uint8 source, uint256 settleFraction, uint256 markPrice, uint256 pot, uint256 fee, uint256 yesPool, uint256 noPool) |
| RoundRefunded | RoundRefunded(uint32 indexed day, uint8 source, uint256 markPrice, uint256 pot, bool cancelled) |
| Claimed | Claimed(uint32 indexed day, address indexed user, uint256 amount, bool refund) |
| Burned | Burned(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 refundedHyperCore reads
| Endpoint | https://api.hyperliquid.xyz/info |
|---|---|
| Outcome | outcomeMeta, the outcome named Recurring with class:priceBinary|underlying:BTC|period:1d |
| Yes price | allMids, coin #<10*outcome> |
| Settlement | settledOutcome, settleFraction and details price:<mark> |
| Fallback | BTC 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
| Round | Event | Detail |
|---|---|---|
| No events yet. | ||