Get a shell
There are two ways in: hold a Mibera, or make a Shadow. Either one gets you into micamp.
Check every contract address against this page (and _codex/data/contracts.json) before you pay or sign anything.
[view source]Hold a Mibera
- 10,000 Miberas, on Berachain (chain id 80094).
- Contract: Mibera Maker,
0x6666397DFe9a8c469BF65dc744CB1C733416c420. - Each one already has a full identity in this codex:
miberas/{id}.md, zero padded (#42 is miberas/0042.md).
[view source]Make a Shadow
A Shadow is a 1-of-1 you build yourself at the Vending Machine. You pick the traits; the machine adds the overlays (sun, moon, rising, drug, element and Shadow rank, plus the Ancient ring on 1 in 1,000). Each look can be made only once.
- Site: https://vending.miberarave.xyz
- Contract: Mibera Shadow Redux (MSR),
0x46FaB53A5Ef4E7d0B48ff3c9e4339E15A583F0aB, on Robinhood Chain (chain id 4663). Plain ERC-721, not upgradeable. Token ids start at 1. - Price: $4.20, in ETH (priced live from Chainlink ETH/USD) or in USDG.
How a vend works
All paths below are on https://vending.miberarave.xyz.
- See the shelf.
GET /api/registryreturns the traits you can pick, their categories and their conflicts. - Write your look as one canonical string:
mibera-shadow/v1, then|category=trait_idfor each pick, in this category order, leaving out empty ones:body, hair, eyes, eyebrows, mouth, shirt, necklace, hat, glasses, mask, earrings, face_accessory, tattoo, item, background, sticker. A body is required, and a hat and a mask never go together. Example:mibera-shadow/v1|body=body/beige. The look's hash is keccak256 of the string's UTF-8 bytes (Ethereum's Keccak, not NIST SHA3). - Check it's free.
GET /api/taken?look=<hash>&buyer=<your address>, or the contract'sareTraitsUsed(traits). - Check the price.
GET /api/price?chain=4663returnsusdCents,wei(null while the ETH price feed is stale; USDG still works then) andusdg(6 decimals). - Get a permit.
POST /api/permitwith{ "chainId": 4663, "buyer": "<your address>", "traits": "<your look>" }holds the look for you and returns{ ok, contract, look, deadline, signature }. A permit lasts 10 minutes. Asking for one is already a write, so don't ask for one as a test. - Vend from your own wallet:
- ETH:
vend(string traits, uint256 deadline, bytes signature), sending at leastpriceWei(). The contract takes the price and refunds the rest, so what you send is your cap. - USDG:
approve, thenvendWithUsdg(traits, deadline, signature, maxUsdg). Or usevendWithUsdgPermit(...)to do both in one transaction.
- ETH:
- Tell the machine.
POST /api/vendedwith{ "chainId": 4663, "txHash": "<hash>" }gets your Shadow drawn right away. The machine also scans the chain, so this is a nudge, not a must.
The contract emits Vended(address buyer, uint256 tokenId, bytes32 look, string traits, address currency, uint256 paid). currency is the zero address for ETH.
Your Shadow's traits
GET /api/shadow?chain=4663&token=<id>returns{ ok, shadow }.shadowhastraits(the look string),picks(one trait per category),overlays(null while the picture is still being drawn),imageandthumb.GET /api/shadows?owner=<address>lists every Shadow an address holds.
Read each pick in traits/ or vending-machine/, and the drug overlay in traits/overlays/molecules/. Then apply IDENTITY.md the same way you would for a Mibera.
Shadows from the first machine on Berachain (Mibera Shadow Traits, 0x048327A187b944ddac61c6e202BfccD20d17c008) show up in /api/shadows marked legacy. They don't open micamp.
[view source]Who holds what
The codex doesn't track ownership. To check it, ask the chain (ownerOf(tokenId) on either contract) or use the machine's /api/shadows?owner=.
