
Security and custody
Your Mithril sits in a game vault no private key can open, moves only by rules written into the program, and can only ever be withdrawn to your own wallet. What protects it, and how to keep your wallet safe.
Your Mithril, locked by code
While you play, your Mithril sits in a game vault: a token account on Solana, derived from your wallet's address and owned by the economy program. No private key exists for it, ours included. It moves only the way the program allows: in game, to pay for things and to trade with other players, and out of the game to exactly one place, your own wallet.
That's what lets you play without a Phantom popup for every copper, while the money stays onchain, visible, and yours to take out at any time.
Why a game vault
The alternative was keeping tokens in your own wallet and giving the game a spending allowance over them. That needs a frightening approval prompt, allows only one app per token account, and breaks the moment tokens move outside the game. A program-owned vault gives you the smooth part (no popups while you play) and the safe part (onchain, rule-bound, one click from your wallet).
What the game server can do
The game server runs the realm. Its key settles what happens in game, and the program checks every move:
| It can | Within |
|---|---|
| Pay your loot, quest rewards and vendor sales into your vault | your daily allowance, the realm's budget and the circuit breaker |
| Take repairs, training, flights and purchases out of it | what's in the vault |
| Move Mithril between players for trades, mail and auctions | hourly caps on vault-to-vault moves |
| Send a withdrawal | your own wallet only, within an hourly cap |
It can't send anyone's Mithril anywhere but the owner's own wallet, can't create a single MITH, can't go past the program's limits, and can't change the rules. Every move it makes is a public transaction with its reason.
Even a stolen server key is boxed in. Moves between vaults and withdrawals are capped per hour, so nothing can be moved fast, every move is public, and reconciliation flags any difference between the game and the chain. The program can be paused and the key replaced. The key lives in a hardware or cloud key store, never on a laptop.
Who changes the rules
The admin can tune the limits inside bounds compiled into the program, pause the game's money in an emergency, and replace the server key. On mainnet the admin and the program's upgrade authority are a multisig with a time lock: no single person can change anything, and every change waits in public before it takes effect. The program's source is published and its build verified, and it's reviewed and fuzzed before launch. Every change emits a public event. See Tokenomics.
The limits that protect you
| Limit | What it stops | At launch |
|---|---|---|
| Fixed withdraw destination | anyone redirecting your Mithril | always your own wallet |
| Fixed supply | printing | no mint authority after the genesis mint |
| Per-wallet allowance | one account (a bot, a dupe) draining the Vault | 2,000,000 MITH per wallet per day |
| Realm budget | anything draining the Vault fast | 2% of the Vault per 24 h, never more than 10% |
| Circuit breaker | a sudden spike in payout requests | 5x the hourly average pauses payouts |
| Hourly flow caps | fast moves between vaults or out of them | per hour, on vault-to-vault moves and on withdrawals |
| Withdraw cooldown | spam on the free withdrawals | one per wallet per 15 minutes |
| Game-only withdrawals | spending in game and withdrawing the same Mithril on chain | withdrawals go through the game, so both sides always agree |
How well that works: in the economy simulation, a duplication exploit worth 2,500,000,000 MITH got its author 600,000 MITH over two days, and nobody else noticed a thing.
Game and chain always agree
- The game is the only thing that writes a character's money; anything the chain settles differently comes back through an inbox the game applies.
- A withdrawal's debit, its record and the character's saved balance commit in one database transaction, so a withdrawal can never be spent twice.
- Every batch and every withdrawal lands exactly once, guarded by sequence numbers on chain.
- Reconciliation compares every account's game money with its vault around the clock, and any difference raises an alert.
If the world server ever crashes between a money change and its save, reconciliation spots the difference and it's put right. Withdrawals are never affected: they commit in one piece.
Your wallet
- Signing in is a message, never a transaction. Phantom shows the site's domain in it. If a "sign in" ever asks you to approve a transaction, refuse it.
- The only transaction you sign is a deposit, and only when you start one. It moves MITH from your wallet into your own game vault.
- Nobody from this project will ever ask for your secret recovery phrase or private key.
- The contract address is published on this site, and only here. Until then, any "MITH" for sale is not ours.
- Your Phantom wallet is your account. Back up your recovery phrase: lose the wallet and you lose the account.
Reporting a problem
Found a bug that touches money or security? Report it privately to the team rather than in public chat. Contact details are published here at launch.