Token
Smart contracts
The TacitaConfig contract on Robinhood Chain, with its address, verified source, functions, admin model and security properties, plus the other on-chain addresses Tacita uses.
On this page
Tacita keeps its on-chain footprint small. There's one contract of our own, TacitaConfig. It tells the website and the gateway which token sets tiers and what share of supply each tier needs.
TacitaConfig#
| Field | Value |
|---|---|
| Address | 0x0C69Da827D248deE0Af15E0979b652BD8745D1C4 |
| Network | Robinhood Chain (chain ID 4663) |
| Source | Verified on Blockscout |
| Deployed in | Block 99,411,012, transaction 0x23260a01…7a32 |
| Language / license | Solidity ^0.8.24, MIT. Built on OpenZeppelin Ownable2Step. |
Functions anyone can call#
| Function | Returns |
|---|---|
utilityToken() | The address of the ERC-20 that tiers are computed from: the Tacita token. See Token details. |
tierThresholdsBps() | The four thresholds for tiers 1–4, in basis points of total supply. Currently 0.05%, 0.15%, 0.4% and 1%. |
tierOf(address) | The tier (0–4) for an address, based on its current balance |
owner() | The current admin |
pendingOwner() | The address that has been offered ownership but hasn't yet accepted. Zero if there is none. |
tierOf is a convenience. The tier Tacita actually uses is stricter: it comes from your lowest balance over the last 24 hours, as explained in Tiers. So tierOf can show a higher tier than the app does.
The comparison is exact integer math. Tier i is reached when balance × 10000 ≥ totalSupply × threshold[i]. If total supply is 0, tierOf returns 0.
Admin functions#
| Function | What it does | Rules the contract enforces |
|---|---|---|
setUtilityToken(address) | Changes which token sets tiers | Not the zero address, and it must be a deployed contract |
setTierThresholds(uint16[4]) | Changes the four thresholds | Each above 0, strictly ascending, and the highest at most 10000 (100%) |
transferOwnership(address) | Offers ownership to a new admin | Ownership moves only when the new admin calls acceptOwnership() |
acceptOwnership() | Completes an ownership transfer | Only the pending owner can call it |
renounceOwnership() | Disabled. Always reverts. | The contract can never be left without an admin. |
Events#
| Event | Emitted when |
|---|---|
UtilityTokenUpdated(previousToken, newToken) | The token changes, and once at deployment |
TierThresholdsUpdated(previousBps, newBps) | The thresholds change, and once at deployment |
OwnershipTransferStarted, OwnershipTransferred | Ownership is offered and accepted (from OpenZeppelin) |
Every change is visible on Blockscout, with the old and new values.
Security properties#
- Holds no funds. It has no payable functions and no function that moves tokens. Don't send anything to it: tokens sent to it by mistake can't be recovered.
- Can't touch your tokens. It only reads the token's
balanceOfandtotalSupply. It can't move, mint, burn or freeze anything. - Not upgradeable. There's no proxy and no upgrade path. The code on Blockscout is the code that runs, permanently.
- Two-step admin transfer. A mistyped address can't take over the contract, because the new admin must actively accept.
- Can't be abandoned. Ownership can't be renounced, so the configuration always has an admin to fix it.
- Validates its inputs. It rejects a zero or code-less token address, zero thresholds, thresholds out of order and thresholds above 100%.
What the admin can and can't do#
This matters, so here it is plainly.
- The admin can change the token and the thresholds at any time. There's no timelock. A change applies on-chain immediately, and the gateway picks it up within about an hour. A threshold change moves everyone's tier.
- The admin can't touch anyone's tokens or funds through this contract, and can't change the contract's code.
- Not on-chain: the size of each tier's daily Bonus balance, the fuse and model prices are settings in Tacita's gateway, not in this contract. Tiers only set the Bonus balance; they don't restrict any model or mode.
Other addresses#
| What | Address |
|---|---|
| Tacita token | See Token details |
| Tacita treasury, which receives paid top-ups | 0x4165682B1a7Fb1856E2A369d156364DA7D739318 |
| USDG (Paxos), accepted for top-ups | 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168 |
| Chainlink ETH/USD feed, used to price ETH top-ups | 0x78F3556b67E17Df817D51Ef5a990cDaF09E8d3A9 |
Robinhood Chain#
| Setting | Value |
|---|---|
| Chain ID | 4663 |
| RPC | https://rpc.mainnet.chain.robinhood.com |
| Explorer | robinhoodchain.blockscout.com |
| Gas token | ETH |