Smart contracts
AngeronaConfig on Robinhood Chain: its functions, admin powers and safety properties, plus the other on-chain pieces.
Angerona has exactly one contract, AngeronaConfig, and in the beta it is not deployed. The website and gateway ask it two things: which token drives tiers, and how much of the supply each tier takes.
AngeronaConfig has one job
| Field | Value |
|---|---|
| Address | The address goes here on launch day |
| Network | Robinhood Chain |
| Language and license | Solidity ^0.8.24, MIT. Uses OpenZeppelin Ownable2Step |
Five functions are open to anyone
| Function | Returns |
|---|---|
utilityToken() | The ERC-20 address behind tiers, which is $ANGERONA. See Token |
tierThresholdsBps() | Four thresholds for tiers 1–4 in basis points of total supply: 0.05%, 0.15%, 0.4%, 1% |
tierOf(address) | An address's tier (0–4) from its present balance |
owner() | The admin |
pendingOwner() | Whoever holds an unaccepted ownership offer, or zero if nobody does |
tierOf is a handy shortcut, and it's looser than the real rule. Angerona goes by the lowest balance across 24 hours, per Tiers, so tierOf can read above the app.
The math is exact integers: tier i needs balance × 10000 ≥ totalSupply × threshold[i]. With zero total supply, tierOf returns 0.
Five admin functions run under strict limits
| Function | Effect | Enforced by the contract |
|---|---|---|
setUtilityToken(address) | Swaps the token behind tiers | Rejects the zero address, and the target must be a deployed contract |
setTierThresholds(uint16[4]) | Replaces all four thresholds | All above 0, strictly rising, top value 10000 (100%) or less |
transferOwnership(address) | Offers the admin role to someone | Nothing moves until that person calls acceptOwnership() |
acceptOwnership() | Finishes the handover | Pending owner only |
renounceOwnership() | Switched off, reverts every time | An admin must always exist |
Events record every change
| Event | Fires when |
|---|---|
UtilityTokenUpdated(previousToken, newToken) | The token is replaced, and once at deployment |
TierThresholdsUpdated(previousBps, newBps) | Thresholds are replaced, and once at deployment |
OwnershipTransferStarted, OwnershipTransferred | The admin role is offered and taken (from OpenZeppelin) |
Old and new values are public on-chain for all of them.
The contract can't touch your money
- Empty by design: no payable functions and nothing that moves tokens. Don't send it anything, since a mistaken transfer stays lost.
- Read-only toward tokens: it reads
balanceOfandtotalSupply, and it has no power to move, mint, burn or freeze. - Fixed code: no proxy, no upgrade route. Once deployed, the code never changes.
- Two-step handover: a typo in an address can't hand over control, as the new admin must accept.
- Always owned: renouncing is impossible, which leaves someone able to correct the configuration.
- Input checks: a zero or code-less token address fails, and so do zero, unordered or above-100% thresholds.
The admin controls settings, not funds
- Within reach: swapping the token and thresholds whenever needed, with no timelock. Edits land on-chain instantly and reach the gateway within about an hour, and new thresholds shift all tiers.
- Out of reach: anyone's tokens or funds, and the contract's own code.
- Kept off-chain: Bonus size per tier, the fuse and model prices are gateway settings. Tiers decide the Bonus and block no model or mode.
Four other on-chain pieces support it
Each address goes here on launch day.
| Piece | Purpose |
|---|---|
| $ANGERONA token | Drives tiers. See Token |
| Angerona treasury | Collects paid top-ups |
| USDG (Paxos) | Accepted for top-ups |
| ETH/USD price feed | Values ETH top-ups |
Gas on Robinhood Chain is paid in ETH.