Skip to content
tacita.chat
Docs · Smart contracts

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#

FieldValue
Address0x0C69Da827D248deE0Af15E0979b652BD8745D1C4
NetworkRobinhood Chain (chain ID 4663)
SourceVerified on Blockscout
Deployed inBlock 99,411,012, transaction 0x23260a01…7a32
Language / licenseSolidity ^0.8.24, MIT. Built on OpenZeppelin Ownable2Step.

Functions anyone can call#

FunctionReturns
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#

FunctionWhat it doesRules the contract enforces
setUtilityToken(address)Changes which token sets tiersNot the zero address, and it must be a deployed contract
setTierThresholds(uint16[4])Changes the four thresholdsEach above 0, strictly ascending, and the highest at most 10000 (100%)
transferOwnership(address)Offers ownership to a new adminOwnership moves only when the new admin calls acceptOwnership()
acceptOwnership()Completes an ownership transferOnly the pending owner can call it
renounceOwnership()Disabled. Always reverts.The contract can never be left without an admin.

Events#

EventEmitted when
UtilityTokenUpdated(previousToken, newToken)The token changes, and once at deployment
TierThresholdsUpdated(previousBps, newBps)The thresholds change, and once at deployment
OwnershipTransferStarted, OwnershipTransferredOwnership 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 balanceOf and totalSupply. 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#

WhatAddress
Tacita tokenSee Token details
Tacita treasury, which receives paid top-ups0x4165682B1a7Fb1856E2A369d156364DA7D739318
USDG (Paxos), accepted for top-ups0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168
Chainlink ETH/USD feed, used to price ETH top-ups0x78F3556b67E17Df817D51Ef5a990cDaF09E8d3A9

Robinhood Chain#

SettingValue
Chain ID4663
RPChttps://rpc.mainnet.chain.robinhood.com
Explorerrobinhoodchain.blockscout.com
Gas tokenETH