How Veydrift's resource tokens work on Base: vMETAL, vCRYSTAL, vDEUT and the 28-day Rift lock
Veydrift's Metal, Crystal and Deuterium are ERC-20 tokens on Base with 0 decimals, backed one to one by a reserve. How injecting and the 28-day extraction lock work, read from the contracts on November 5, 2026.

On this page
Veydrift’s Metal, Crystal and Deuterium exist twice: as numbers on your planets inside the game, and as three ERC-20 tokens on Base called vMETAL, vCRYSTAL and vDEUT. One token is exactly one unit in the game, and the only way between the two is a building called the Rift Stabilizer. Putting tokens in is instant. Taking resources out takes 28 days, during which anyone can raid them. This post walks through how that works in the contracts, with the numbers I read from Base on November 5, 2026.
What the three tokens are
Each token is an instance of one small contract, VeydriftResource, which is about twenty lines of Solidity on top of OpenZeppelin’s ERC-20. Its constructor mints 50,000,000,000 units once to a single holder, and there is no owner, no minter, no proxy and no upgrade path afterwards. It also overrides decimals() to return 0, which is the whole trick behind “one token equals one unit”: a balance of 500,000 vMETAL is 500,000 Metal, with no 18-decimal arithmetic in between.
I called totalSupply() on all three on Base today and each returned 50,000,000,000, and decimals() returned 0. The addresses are listed on the Contracts and Tokens page of the docs, and they are the redeployed set from October 21, 2026. An earlier set with 10 billion units and 6 decimals was retired on October 21, so if you find an older vMETAL address in a search result, it is not the one the game uses.
Where the supply sits
Two addresses hold all of it. When I read the balances today, the game contract held 2,000,000,000 of each token and the treasury held 48,000,000,000 of each. That adds up to the 50 billion minted, so nothing has leaked anywhere else yet.
The 2 billion in the game contract is the Rift’s reserve. The contract keeps two counters, totalInternalResources (what players hold on planets) and lockedWithdrawalResources (what sits in a Rift extraction), and the sum of the two is the amount the reserve has to cover. Every time the game credits resources to a planet from a deposit, _requireReserveCapacity checks that the contract’s token balance still covers that sum.
Here is what the counters said today, next to the reserve:
| Token | On planets | In extractions | Reserve | Reserve ÷ liabilities |
|---|---|---|---|---|
| vMETAL | 77,038,061 | 21,422,952 | 2,000,000,000 | 20.3 |
| vCRYSTAL | 65,346,363 | 7,942,502 | 2,000,000,000 | 27.3 |
| vDEUT | 61,104,753 | 9,138,544 | 2,000,000,000 | 28.5 |
So every unit of Metal, Crystal and Deuterium that exists in the game today is backed by a token in the reserve, and the reserve is twenty to twenty-eight times what the game currently owes. When players produce more than the reserve can cover, the treasury tops it up with a plain token transfer, and the docs say that is what the other 48 billion is for.
Putting tokens into the game
Injecting is the easy direction. You need a Rift Stabilizer on the planet (it costs 8,000 Metal, 8,000 Crystal and 4,000 Deuterium, and needs Robotics Factory 4, Research Lab 2, Energy Technology 5 and Hyperspace Technology 1), and then it is two wallet transactions: an ERC-20 approve for exactly the amount, followed by depositMarketResource(planetId, resource, amount).
In VeydriftPlanetManagementModule.sol that function checks you own the planet, checks the Stabilizer, pulls the tokens in with transferFrom, and then compares the contract’s balance before and after. If the balance did not rise by at least amount, it reverts, so a token that takes a fee on transfer cannot trick the accounting. Then it adds the amount to the planet’s resources in the same transaction. Injected resources are spent exactly like mined ones, and you can only inject into your own planets: to help a friend you send them tokens and they inject.
Taking resources out
Extraction is deliberately the opposite: slow and public.
startRiftExtraction(planetId, resource, amount)spends the amount from the planet and adds it to_riftLockedResourcesfor that planet. It recordsunlocksAt = startedAt + RIFT_EXTRACTION_DELAY, and the constant inVeydriftGameStorage.solis28 days. A planet can run one extraction per resource, and there is no function to cancel one.- While it is locked, the planet is a legitimate target even when new-player protection, low-score protection or the bashing limit would normally block an attack. The attack module checks whether the lock is non-zero and, if so, lets the attack through but restricts the raid to the locked amount only. Your own alliance still cannot attack you, and moon attacks cannot reach a planet’s lock.
- In
raidRiftExtractiona winning attacker takes the normal loot first and then fills spare cargo from the lock. There is no 50% ceiling on the lock the way there is on ordinary resources, so a fleet with enough cargo can take all of it. That function moves the looted amount from the locked counter to the in-game counter without touching the reserve, and it reverts unless the game contract itself calls it, so nobody can call it directly to wipe someone else’s lock. - After 28 days
finalizeRiftExtractionpays whatever survived to the planet owner’s wallet as tokens. It does not need a Stabilizer, so you can finalize from any of your planets.
The pieces fit one idea: tokens can enter at any time, but leaving costs a month of visible exposure, so a planet cannot quietly drain its stockpile into a wallet the moment an enemy fleet is inbound. Everyone can see who is extracting, because the extractions show up in the Raid Finder under Rifters and in the contract’s RiftExtractionStarted events.
One consequence is easy to check on chain. The reserve still holds exactly the 2,000,000,000 it started with, so no extraction has been paid out yet, which fits the clock: the tokens were deployed on October 21, and the earliest any extraction can finalize is 28 days after it starts.
What you can verify yourself
Three properties come out of this layout, and each one can be checked in the contracts rather than taken from me.
- The tokens have no owner. Nobody can mint more vMETAL or freeze a balance, so the supply numbers above are final.
- Backing is checked by code. The game cannot credit resources it cannot cover, because the same function that credits them reads the token balance.
- Extraction risk is part of the rules. The 28-day lock and the raid rule live in the same contracts as combat, so there is no off-chain setting that changes them.
If you want to read the code yourself, start with VeydriftResource.sol (twenty lines), then VeydriftRiftModule.sol for the extraction lifecycle, and VeydriftResourceReserves.sol for the reserve requirement. The player-facing version of all this is the Rift section of the Veydrift docs, and the live activity is on stats.veydrift.com.
Questions people ask
Can I trade vMETAL, vCRYSTAL and vDEUT? They are ordinary ERC-20 tokens, so you can hold them, send them to another player or inject them into any of your planets. The docs list the three contract addresses, and say the treasury adds resource pools against $VEYDRIFT after the token auction.
What happens to resources if my planet is raided during an extraction? The raid takes its normal loot first and then draws from the locked amount. Whatever is left when the 28 days end is paid to your wallet.
Can I cancel an extraction? No. Once started, the amount stays locked until it is finalized.
Why 0 decimals? So that a token balance and an in-game balance are the same number, with no rounding between them.
Checked against the Veydrift repository at commit 4e54b54a (November 4, 2026) and the game contract on Base on November 5, 2026. Nothing here is investment advice: it describes how the contracts behave.