42161). A thin prediction layer sits on
top of an ERC-4626 yield vault, which spreads principal across pluggable strategies. Settlement and
cross-chain surplus each live in their own contract. Everything below is deployed and
verified on Arbiscan.
Contracts
The stake token is USD₮0 — Tether’s omnichain USDT on Arbitrum (the app labels it “USDT” to
users). Players always stake and withdraw USD₮0; internally the yield may be earned in USD₮0 or
USDC.
- GoalyMarkets — the no-loss prediction layer. Players
predict(marketId, outcome, amount)staking USD₮0; every stake is deposited into GoalyVault to earn yield. Winners split a prize funded purely by that yield, andclaim(marketId)returns the stake plus any prize — always in USD₮0. The protocol fee is taken from the prize only, never from the principal. - GoalyVault — an ERC-4626 (UUPS) vault that pools principal and allocates it across whitelisted strategies while keeping a liquidity buffer for on-demand claims.
- MorphoStrategy — a same-asset strategy that routes USD₮0 into a Morpho USD₮0 vault.
- MorphoSwapStrategy — a cross-asset strategy that swaps USD₮0 ↔ USDC so the vault can also earn in USDC Morpho vaults.
- GoalySettlement — an optimistic settlement oracle. Results are proposed with a bond, finalize after a dispute window if unchallenged, and escalate to governance if disputed — replacing a single trusted oracle key.
- ReserveManager — bridges surplus only (prize funds, never principal) cross-chain as USDC via Circle CCTP (Wormhole-relayed). Principal never leaves Arbitrum.
- AllocationLib — an external
delegatecalllibrary holding the vault’s allocation logic, which keeps the vault under 24 KB without the optimizer.
What a player calls
Two functions cover the whole player flow, both on GoalyMarkets:No-loss is an on-chain invariant
The vault only ever earns, so principal is always redeemable 1:1. That guarantee isn’t a policy — it’s enforced on-chain byGoalyMarkets.isSolvent():
Because a stake can never be worth less than it was deposited, a wrong prediction can only ever cost
you the yield you would have won — never your principal.
Roles
Access follows least privilege. The protocol is UUPS-upgradeable, uses ERC-7201 namespaced storage, and is compiled without the optimizer for plain, auditable bytecode.
Source and tests (Foundry — 19 tests including a fuzzed no-loss invariant) live in the
Goaly-Protocol/contracts repo.