LoadingEthereum and Base

Uroboros: the Sanctum network for EVM wallets

A Sanctum makes a stolen hot key slow. Big withdrawals wait six hours, and anyone you trust can freeze the Sanctum for a day.

Only your offline cold key can lift a freeze early. Sanctums run on Ethereum and Base. The $UROBOROS token is on Base only.

Until someone freezes it, a thief with your hot key can take 10% of each asset a day, and anything they queue goes through after six hours. If your cold key is stolen too, Uroboros can't help.

UroborosA ring of linked nodes drawn as a snake biting its tail. Sanctum fees buy back and burn the token, pay stakers and top up the bounty. More Sanctums bring more fees. Fees in ETH 40% buyback and burn 50% to stakers

Product fees in ETH: 50% to stakers, 40% bought back and burned, 10% to the bounty Sanctum.

How a Sanctum protects funds

Delay.

Small withdrawals go out at once. Anything big waits in a queue for six hours, and that is your window to notice and stop it.

5% an hour and 10% per rolling 24 h, per asset. Above 10%, or above what the caps have left, a transfer queues for 6 h.

Detect.

You pick up to five guardians. They can be your other wallets or people you trust, and any one of them can act if they see a theft starting.

0–5 guardians, set by the cold key. Paid watchers who opt in to your Sanctum are on the roadmap and not live yet.

Freeze.

One guardian can freeze the Sanctum for 24 hours with a single transaction. Only your offline key can end the freeze early. The same key replaces the stolen one and cancels anything the thief queued.

panic(): 24 h freeze that voids every queued transfer. After a cold unfreeze, guardians are muted for 24 h.

A Sanctum is a wallet contract with rules about time. Your everyday key still signs. The contract decides how fast money leaves and who can stop it. The $UROBOROS token doesn't secure anything. Product fees buy it back and burn it, hence the name.

What's deployed and what isn't

Three pieces launch together. The other two ship later as separate releases, and they are marked as not deployed until then.

1Loading

Sanctum and guardians

A wallet contract with hourly and daily caps, a six-hour queue and a 24-hour freeze. Your cold key picks 0–5 guardians and a recovery threshold. If you lose the cold key, enough guardians can name a new one. That takes 7 days, and the old key can cancel it in the meantime. The cold key can also switch recovery off.

Sanctums created
–
Coverage
$5 a month, in ETH or USDC
Fee on a released queued transfer
0.25%

Not paying never locks you out of your own Sanctum. Coverage only matters to watchers, and there are none until the watcher market ships. Everything else works without it.

Open the Sanctum app

2Loading

Raid the Sanctum

A Sanctum holding real ETH, with its hot key published as a contract anyone can call. You call withdraw from your own wallet, the same way a thief with a stolen key would. The caps allow 1% an hour and 2% a day, and the queue is off. The cold key is a locker contract that can freeze the game and pick guardians, nothing more. Guardian recovery is off for good, so nobody can withdraw the prize, change the rules or replace the locker.

Prize now
–
Most that can leave per day
–

If the balance ever leaves faster than the caps allow, the mechanism failed and the raider keeps it.

See the leak meter

3Loading

Drainer firewall

A blacklist of drainer contracts, fed by honeypot wallets. If you don't want a Sanctum, a light EIP-7702 delegate makes approvals to a flagged spender revert and lets anyone revoke an existing one. Not deployed.

4Loading

Watcher market

Watchers post a $50 bond in ETH and watch Sanctums whose owners opt in. When an owner confirms a freeze, the watcher is paid from that Sanctum's coverage. A rejected freeze costs half the bond. Not deployed.

Where the fees go

Every swap pays 3% in ETH to the FeeRouter contract. The fee is never taken in UROBOROS. Coverage payments and the 0.25% queued-transfer fee go to the same contract.

FeeRouter splits and their bands
DestinationShareAllowed bandPays out to
Buy back and burn UROBOROSBought on the same pool, then burnedat least 25%burned
Watcher reward poolHeld until the watcher market shipsat least 20%–
Team and operationsat most 25%–
Bounty Sanctum prizeat most 15%–
Backstop reserveHeld, unused until the backstop existsat most 10%–

Read from the FeeRouter

ETH received, all time
–
ETH spent on buybacks
–
UROBOROS burned
–
Team address change pending
–

The admin can move splits only inside the bands above. The reward pool, bounty and backstop addresses can each be set once, and then they are locked. Until an address is set, its share stays in the FeeRouter. The team address is the only one that can change. For the first 30 days after trading opens a change applies at once; after that it waits 48 hours. So the most the admin can send to an address of its choosing is the team band, 25%.

USDC coverage payments and fees paid in tokens other than ETH are not split on chain. The owner moves them by hand, and every move is a public TokenSwept event.

Not deployed yet. These numbers fill in once the contracts are on Base.

$UROBOROS supply

Hard cap of 100,000,000. 70,000,000 are minted at deploy. The other 30,000,000 can only be minted for confirmed work, and nothing can mint them yet. Loading

Token allocation and unlocks
BucketAmountShareHeld byUnlock
Liquidity50,000,00050%Uniswap v4 full-range position, paired with 2 ETH, held by LPLocker7 days from deploy, extend-onlyEvery extension is an on-chain event. Ten-year ceiling per extension.
Team10,000,00010%TeamVestingBeneficiary fixed in the contract3-month cliff, then linear over 12 monthsNo team tokens are liquid at launch, and the team did not pre-buy.
Treasury10,000,00010%4 lockers of 2,500,00090, 180, 270 and 365 days from deploy, extend-onlyPays for watcher rewards, bounties, listings and an audit. Every spend is announced.
Work emissions30,000,00030%Not minted. MinterProxy is the only minterOnly per confirmed freeze, adopted canary flag or bounty event; daily cap min(50,000, 2 × trailing-7-day buyback), floor 5,000No minting contract is attached yet. Attaching one waits 48 hours on chain.
Total100,000,000100%70,000,000 minted at deploy

Trading

There is one Uniswap v4 pool on Base, ETH against UROBOROS. Its hook takes 3% in ETH on every buy and sell. The hook has no exemption list, so the team pays it too. When trading opens the fee starts at 60% and falls to 3% over 60 seconds, and everything above 3% goes to buyback and burn. For the first 30 minutes a single buy is capped at 1,000,000 UROBOROS, and one sending wallet can't accumulate more than that.

Aggregators and the Uniswap app may not route to a pool with a fee-taking hook for weeks. If the swap link finds no route, use the manual route below. A buy that would hit its price limit part-way reverts instead of filling partly, so set slippage as a minimum output.

The pool does not exist yet. Links appear here after the seed transaction.

Manual route

  1. Router: Uniswap UniversalRouter on Base, 0x6ff5693b99212da76ad316178a184ab56d299b43, command V4_SWAP.
  2. Pool key: currency0 0x0000…0000 (ETH), currency1 UROBOROS, fee 0, tickSpacing 60, hooks hook.
  3. Exact input only. Exact-output swaps revert, and so does a buy whose price limit stops it before the full amount fills.
  4. A round trip pays the 3% fee twice, so expect about 6% plus price impact.

Who holds the admin key, and until when

For the first 30 days the admin is the deployer's own wallet. Then every admin role moves to a 2-of-3 Safe behind a 48-hour timelock. The date is set at deploy, so everyone can see if it slips.

–days
–hours
–minutes
–seconds

The countdown starts when the contracts are deployed. The handoff date is deploy time plus 30 days.

Admin powers over time
PeriodWhoWhat
Day 0–30Dev wallet disclosed at deployFeeRouter splits (inside the bands), the team address, setting each of the other three addresses once, buyback keepers; blacklist; the bounty locker (freeze, unfreeze, guardians only); the minter target (48 h delay)
Day 30 onSafe 2-of-3 behind a 48 h timelockThe same, plus the liquidity and treasury lockers. Only adding a blacklist flag and freezing the bounty Sanctum stay instant.
NeverNobodySupply cap, the 3% fee and the launch curve, the vesting schedule and beneficiary, the extend-only lock rule, the FeeRouter bands, a locked fee destination, the bounty's rules and prize, and any rule of a Sanctum you own.

Read from chain

Handoff date
set at deploy
FeeRouter owner now
–
Owner type
–
Nominated new owner
–

Each handoff takes two steps: the dev wallet nominates the Safe, then the Safe accepts (FeeRouter, MinterProxy, Blacklist and the bounty locker by ownership, the liquidity and treasury lockers by beneficiary). A mistyped address can't accept, so a typo hands nothing over. The team vesting beneficiary is fixed in the contract and is never handed over. After the handoff this page shows the new owner. If the date passes and the owner is still a plain wallet, the page says so.

What this does not do

The limits, in the same words as the spec. Read these before you put money in a Sanctum or buy the token.

  1. A 7702 delegate cannot stop a stolen key from re-delegating; funds are safe because they sit in the Sanctum, not because of the delegate.
  2. A freeze is 24h of time, not insurance. Nothing reimburses losses in v1; the backstop pool is roadmap and will show its coverage limit live when it exists.
  3. Watchers are paid per confirmed freeze; the cold key decides what counts. A Sanctum with no guardians, no watchers and a lost cold key is only as safe as its caps.
  4. No external audit at launch. The bounty Sanctum is the live test; a competitive review is scheduled when fees cover it, with no date committed.

Also disclosed

These come from the internal audits. Each is a trade-off we shipped knowingly, and the reasoning is in the whitepaper and the audit files.

  • Decisions the audit argued against. The 60-second launch curve, the 3% fee, the 2 ETH seed, the 7-day liquidity lock (the audit recommended 365 days) and 30 days of a single admin wallet (the audit recommended a Safe from day one) were all kept.
  • Your cold key is the master key. Whoever holds it can unfreeze, change every rule and withdraw everything in a single transaction. Guardians cannot stop a stolen cold key. Keep it offline.
  • The hourly cap is a fixed window. Up to 9.75% can leave within a few seconds across a window boundary. The binding guarantee is 10% per rolling 24 hours.
  • Guardians can keep proposing. After each cancelled recovery, guardians acting together can propose again; if that happens, remove them with your cold key. After a recovery the old hot key is still set, and the new cold key must replace it.
  • The bounty's cold key is a locker contract. Its owner, the admin, can only freeze it, unfreeze it and choose guardians, and can renew a freeze indefinitely. Nobody can withdraw the prize or change the rules, so the prize leaves only through raids. Guardian recovery is switched off on it for good, so the locker stays its cold key forever.
  • Raids are first come, first served. Expect bots to compete for each hour's room. Up to 1.99% can leave in two transactions seconds apart.
  • Launch limits count per sending wallet. The 30-minute wallet cap follows the transaction's origin, so one person with many wallets gets many caps, and users behind one relayer share one.
  • Buybacks pay the 3% fee too. The hook has no exemption list, so part of every buyback flows back through the splits.
  • Buybacks need a keeper for 30 days. Only the admin or an approved keeper can trigger one in the first month, unless nobody has for 7 days. Each call spends at most 1% of the pool's ETH, at least 10 minutes apart.
  • The free week is bookkeeping. It gives no protection on chain, and coverage has no on-chain effect until the watcher market launches. With default caps the same $100 can start a new free week roughly every 6 hours.
  • Minting needs a target nobody has set. When one is proposed it is announced on chain 48 hours before it takes effect. A target can be any contract, so read it when it is proposed.

Questions

The whitepaper covers each of these in more detail.

No external audit. Three internal rounds are published: AUDIT-1, AUDIT-2 and AUDIT-3. The bounty Sanctum is the live test, where anyone can try to take more than the caps allow from real ETH.

No. A Sanctum has no admin key. Your hot key, your cold key and the guardians your cold key chose can freeze it; only your cold key can unfreeze it, change its rules or replace a key.

Nothing changes for your keys, and you are never locked out for not paying. Coverage only tells paid watchers whether to look after your Sanctum, and the watcher market isn't live yet.

If you set guardians, enough of them (your threshold) can propose a new cold key. It takes effect after 7 days, and the old cold key can cancel it at any time before then. Without guardians nobody can recover it, the team included.

The token contract itself has none; scanners will read 0/0. The pool's hook takes 3% of the ETH side of every buy and sell, forever, with no setter. In the first 60 seconds of trading it starts at 60% and falls to 3%, and the excess goes only to buyback and burn.

Yes, for 7 days from deploy, in a locker that can only extend. That is short, and the audit advised against it. The plan is to extend it in launch week. The supply table above reads the current unlock date from the locker. After that date the hook still lets only the locker remove liquidity.

Routers allowlist pools with fee-taking hooks by hand, which can take weeks. Until then use the Uniswap pool page or the manual route in the token section.

It has no staking, yield or voting. 35% of every fee buys it back and burns it, and the work-emission bucket pays it to people who do security work once that market exists. Nothing in the Sanctum depends on its price.

Contracts on Base

Every address is read from the deployment file at load time. Nothing here is typed by hand.

Not deployed yet

The contracts are not on Base yet. Their addresses show up here and in the top bar as soon as the deployment file lists them.