02 — Accounts
Signing in and your account
Your wallet is the account. You prove it with one signature, which moves no funds, and the site keeps that proof in a cookie for a week.
Signing in #
Sign-in is a signed message, in the EIP-4361 "Sign-In with Ethereum" layout. The browser asks the server for a message; the server writes one naming the site, your address, the chain (Avalanche, 43114), a fresh nonce and an expiry; your wallet signs it; the server checks the signature against the message it issued.
- What you sign
- A plain-text message naming the site and your address, with the statement that signing in does not move funds.
- Nonce
- Single-use, good for 10 minutes, bound to the address that asked for it.
- Funds moved
- None. A signature is not a transaction and cannot spend anything.
- Wallets accepted
- Ordinary wallets are checked locally; a smart-contract wallet is checked against Avalanche mainnet.
The session #
A verified signature gets you an httpOnly session cookie. It is not readable
by any script in the page, it is tied to your address, and it lasts 7 days — after which
you sign in again.
- The cookie is signed by the server, so its contents cannot be edited into someone else's address.
-
It is
SameSite=Lax, and anything that changes state also refuses a cross-site origin. - The address in the cookie is the account key for every later request — balances, orders, withdrawals.
Your venue account #
Neither venue trades Avalanche addresses, so each wallet that signs in gets its own account at the venue. That account is derived on the server from a mnemonic at an index handed out to you once and written down — both ways, index to owner and owner to index — so one index can never be given to two wallets. The index is never worked out from anything public: deriving it from a hash of your address would let somebody grind addresses until two people shared a signer.
One account per wallet, per venue
Separate keys on each side
The perps side and the prediction side derive from different mnemonics, so a single key never controls money at two venues. The keys stay on the server and are never sent to the browser.
On the perps side there is nothing to deploy and no gas to pay: a Hyperliquid account is an address, and it starts existing the moment your first deposit lands on it. The venue account is also recorded against your wallet, and an account that already belongs to another wallet is refused rather than shared.
What custodial means here #
While your funds sit at a venue they are in an account whose key the server holds. That is custodial, and it is worth saying plainly rather than dressing up: for the time your margin or collateral is over there, Oddsy can sign for it.
What bounds that is where it may go.
- The address in your session cookie is the only place a withdrawal may go. Not an address typed into a form, and not one a request asks for.
- Your venue account holds your balance and your positions, and nobody else's money passes through it.
- Nothing is signed for an account unless the session asking owns it.