
$XO2
0200 Protocol- ticker
- $XO2
- total supply
- 100,000,000
- deployed
- 2026‑09‑03
- contract
- 0xdE906C748E56fD6F648eb8564532673257Ac414b
Every figure above is read from the chain by the panel below, in your own browser. Nothing here is a price, a market, or an offer, there is none of any of those.
Deployed 2026‑09‑03. Every figure on this page was read from the chain, and every one of them tells you how to read it yourself. Where we cannot prove something, the page says so instead of rounding it off.
Read this first
XO2 has no utility today.
It does no work in our product. It captures no fee, carries no governance right, entitles you to no revenue and is not required to call anything we run. base‑transaction‑decoder takes USDC and has never taken XO2.
Nothing on this page is an offer to sell, a solicitation, or a claim about future value. There is no public sale, no liquidity pool and no market. If that changes, this page changes with it and says when.
totalSupply() and five balanceOf() reads against a public Base RPC endpoint, from your browser. Nothing here is served by us. If a read fails it says so rather than showing a number.0xdE906C748E56fD6F648eb8564532673257Ac414bBase mainnet, chain 8453—name()0200 Protocolsymbol()XO2decimals()18totalSupply()Fixed. There is no mint function to raise it100,000,000eth_getCode, and the deploying address moved from nonce 2 to nonce 13.Two of the deployments failed, and that is the point.
The eleven transactions were not eleven successes. Nine succeeded and two reverted, and of the nine that were deploy calls, seven succeeded and two reverted. Those are two different sentences answering two different questions, and collapsing them into one number is how the count was first got wrong.
0x5b88e0d0391e0e779bffafccd8c5a000d91c0bf1a6b114f1fa5e49134ddd1f71
0xe6e193c85042359c721a42c938edeafd6fad0b938a681d81ad25d1ed82bc8675
CREATE2, where the address is fixed by the salt rather than by the sender’s nonce, the duplicate reverted instead of deploying a second copy. With nonce-based CREATE each re-send would have landed at a fresh address and produced a real duplicate contract holding real supply.Total cost of both mistakes: 33,034,523 gas, which is about $0.50 at the gas price our own decoder reports for the block that carried the token deployment. We are publishing the failures because they are the only evidence we have that the design choice was worth making, and evidence about ourselves is the kind nobody volunteers.
No wallet holds the supply.
All 100,000,000 sit in five release contracts. The address that deployed them holds none, the distributor that filled them holds none, and there is no owner who can move them.
0x78e0DA1821C214534523262EFaC2Df561c00408F
0x9F0Ddc559d1071c135b6265c2DBB2fB8407bA818
0x98aa8D4F6EAB6EF780800b1C3183897703E7B6CE
0x6594662D521eb4e66F94B44149F92cc1928FCeDa
0x3f4Fb350Ccdf0a604E5a32e4032e150d7e539Cd1
distributor 0x2FaBA769283db7d5FF6A71DC930b2dB2521b2d95
Five schedules, one destination
All five locks release to the same address. They differ in when, not in who.
Founder/Team, Treasury, Ecosystem, Contributors and Undesignated are five names for five schedules, not five recipients. Read beneficiary() on each of the five addresses above: it returns one distinct value, 0xf4211E309d80a074dAc37C616d1Aa7899ed29807. That is also the address that deployed the contracts.
Two facts about the rate, and neither is computable from the other.
No annualised rate is published. The 30-day window is the mechanism; a year is a convenience, and converting to one produced two of the four errors made arriving at these two numbers.
Nobody can mint, pause, upgrade or seize it.
We checked by calling the privileged functions rather than by reading our own source. Each of these reverts on the deployed token, because the function does not exist:
owner() getOwner() admin()
pendingOwner() transferOwnership() renounceOwnership()
mint() burn() burnFrom()
pause() unpause() blacklist()
upgradeTo() implementation() setName()
Where we are verified, and where we are not.
On Basescan: the token, the distributor and one of the five locks are exact-match verified. The other four locks are byte-for-byte identical to that verified lock apart from their release ceiling, which appears three times in each lock's runtime bytecode as a PUSH32 constant and agrees with ceiling() called on that lock.
On Sourcify: not verified. Sourcify is a separate registry and we have not submitted to it. Our own decoder therefore flags our own distributor with unverified_contract, and that flag is correct. We would rather tell you than have you find it.
If it ever reads “all contracts verified” on this page, that is erosion and it is wrong.
Check all of it yourself.
Nothing here needs our cooperation. These are actions, not coordinates, byte offsets go stale, calls do not.
# the five ceilings, read from the locks themselves
ceiling() on each of the five lock addresses
beneficiary() on each, one distinct value, or our claim is wrong
balanceOf() on the token, for each lock, sums to totalSupply()
# the four locks Basescan marks "similar match"
eth_getCode on each, diffed against the verified lock:
identical apart from the ceiling constant
# nothing is held by a person
balanceOf() for 0xf4211E30…9807 and 0x3129b6…1783, both zero
There was an earlier token, and it is not this one.
A different wallet, 0x3129b6…1783, deployed a token called $0200 on 2026‑09‑01 at 17:21 UTC. It was retired 31 hours later: the pool was withdrawn and the entire supply sent to an address it cannot leave. That wallet holds none of it, and holds no XO2 either.
Both tokens are permanently on Base and both are visible from those addresses. XO2 was not deployed by that wallet, it was deployed by 0xf4211E30…9807, the same address that receives every release above.
One thing here you cannot check and are taking from us: both wallets are ours. No chain query establishes that, we are telling you, in our own voice, because a page arguing that you should check everything cannot quietly mix in something you can't.