DocsRegistro

Mafia Broker documentation

The technical reference behind the site. Every figure here is either the real configured value or clearly marked as not-yet-live.

Overview

Mafia Broker is not just a collectible — every piece is a seat at Il Banco, the Staking Hub's earn desk, at a published per-Broker rate. It is also a 2,222-piece generative NFT collection on Robinhood Chain: every piece is composed from a real, fixed trait set — nothing is hand-drawn on demand, and nothing is reweighted after mint. The rate is specified, not promised — see Staking below for the exact number and exactly what has to be true on-chain before a single Broker earns anything.

The theme borrows a real piece of organized-crime history rather than an invented mythology: the Commission, formed in 1931 to end New York's crime-family wars, is widely credited as the underworld's first governing council. Mafia Broker's lore treats its cast as the modern-day inheritors of that instinct — full telling on the Lore page, thesis summary on the Whitepaper. The history is real; the reincarnation myth built on top of it is deliberately fiction, and every page that touches it says so plainly.

This page states plainly what is real and what is still pending. Where a number reflects a configured or generated value, it's presented as fact. Where a mechanic is still pending, it's labeled "Pending" rather than simulated as if it were.

Collection
Mafia Broker
Chain
Robinhood Chain
Total supply
2,222
Mint price
0.00022 ETH
Max per wallet
10
Contract
Confirmed

Trait & Rarity System

Each piece draws from five trait categories — Eyes, Mouth, Headgear, Outfit, Mood — combined into one of four rarity tiers. The full trait table was composed and weighted before mint, then locked: nothing is reweighted after the fact, and nothing is hidden until reveal.

Common
1,517 (68.3%)
Rare
506 (22.8%)
Epic
177 (8.0%)
Legendary
22 (1.0%)

Every one of the 2,222 pieces carries a unique combination of the seven categories above — no two Brokers are identical, and rarity tier is a property of the whole combination, not any single trait. Common pieces make up the trading floor; Legendary pieces are the rarest archetypes in the set, at 1.0% of supply.

Tokenomics

  • Total supply: 2,222, fixed. No future mints, no reserve top-ups.
  • Mint price: 0.00022 ETH, the same figure everywhere price appears on this site.
  • Max per wallet: 10, enforced at the contract level once it's live.
  • Accepted payment: ETH only — Robinhood Chain's native currency.
  • No project token and no revenue-share promise exists today.
  • Staking is specified but not funded. A single desk, a published rate of $0.05 per Broker per day, paid in USDG — and no deployed contract, no reward treasury and no emission end date. At full supply that rate is $111.10 a day and $40,551.50 a year, in USDG — funded independently of mint proceeds, which are collected separately in ETH. See Staking below.
  • Use of mint proceeds has not been published. This page will be updated with a funding breakdown before mint opens, not after.

Nothing here is investment advice or a promise of financial return. Digital assets can lose all of their value.

Staking

One desk sits in the Staking Hub, paying $0.05 per staked Broker per day directly in USDG — a dollar-pegged ERC-20, so what the contract owes and what it's worth are the same number, even though gas for the transaction itself is paid separately in ETH. A staked Broker cannot also hold a place in a Jackpot line.

There is no cap on how many Brokers one wallet may stake, and no minimum claim. At five cents a day a claim can cost more in gas than it pays; the Hub says so beside the button rather than quietly imposing a floor. Requesting an unstake starts a 2-hour cooldown before the piece can be withdrawn.

Rate per Broker / day
$0.05
Settlement
USDG
Max staked per wallet
No cap
Unstake cooldown
2 hours
Minimum claim
None
Reward budget
Not committed
Funded on-chain
Emissions end
Treasury address
Not published
Staking contract
Pending

What this costs, stated plainly

At full supply the rate is $111.10 a day and $40,551.50 a year, all in USDG, and there is currently no revenue behind it: no royalty, no fee, and no treasury contract. Mint proceeds are collected separately in ETH and don't fund this budget directly — the USDG reward treasury has to be funded on its own. That is why the Hub is locked. It does not unlock on a decision — it unlocks when a reward treasury is funded on-chain at a published address, a total budget and an end date are committed, a daily payout cap is set in each settlement asset, and the rates are signed off. Those checks live in src/config/staking.ts and the Hub lists every unmet one by name.

Why the desk still carries a daily payout ceiling

USDG is a dollar-pegged ERC-20, so this rate never needs converting: 0.05 USDG owed is 0.05 USDG paid, no volatile-token guesswork and no price feed in between. The daily payout ceiling stays anyway, as a plain treasury safeguard: a hard cap on what the desk can pay out in one day, so a spike in claims stops rather than drains it.

Nothing is accruing today. Pending rewards render as an em dash rather than zero, because there is no reward ledger to read and a balance that ticks upward is a claim that a wallet is owed money.

How a stake actually works

  1. Approve, once. ERC-721 escrow needs setApprovalForAll. The Hub asks for it as its own visible step rather than burying it inside the first stake, because the wallet prompt for it reads “allow this contract to transfer all of your NFTs” and that deserves a deliberate yes.
  2. Stake. Pick any number of Brokers. The tokens move into the contract; a Broker in escrow cannot be sold or transferred until it comes back.
  3. Accrue. Rewards build per token, per second, and can be claimed at any time with no minimum.
  4. Request an unstake. This starts the 2-hour cooldown. Accrual stops when the request lands, not when you withdraw.
  5. Withdraw. Once the cooldown clears, the Broker returns to your wallet.

What the contract has to implement

The frontend is finished and typed against a fixed interface, which lives in src/config/abis.ts. Any contract matching it drives this site as written; the only remaining step is pasting its address into src/config/contracts.ts.

stake(uint256[] tokenIds)
requestUnstake(uint256[] tokenIds)
withdraw(uint256[] tokenIds)
claim()

pendingRewards(address)     -> uint256
stakedTokensOf(address)     -> uint256[]
positionOf(uint256 tokenId) -> (stakedAt, unstakeRequestedAt, owner)
totalStaked()               -> uint256
rewardPerNftPerDay()        -> uint256   // USDG base units, 6 decimals
rewardsRemaining()          -> uint256
unstakeCooldown() -> uint64    emissionsEnd() -> uint64    paused() -> bool

Two rules the contract must enforce itself, because the equivalent checks in this frontend are a convenience and are bypassed by calling the contract directly: the cooldown measured from block.timestamp, and that a Broker holding a place in a Jackpot line cannot also be staked.

Note what the contract does not do: it never reads a price. It owes a fixed amount of USDG per day, a dollar-pegged ERC-20 — there is no price feed anywhere in the payout path, because there is nothing left to convert.

Jackpot

5 lines. 20 Brokers to a line, 1 place each — so a wallet with five Brokers can stand in all five draws, and a wallet with fifty still cannot take a line over. When a line fills, a 5-hour clock starts. When it runs out one of the twenty takes the purse, and every Broker goes home.

Lines
5
Places per line
20
Places per wallet, per line
1
Clock once full
5 hours
Purse
$50.00 in USDG
Odds per place
1 in 20
Entry cost
None beyond gas
Draw contract
Pending

A place is custody, not a fee

Entering escrows the Broker for the round. Nineteen of the twenty get the exact same piece back and nobody pays to play. That also means a Broker cannot hold a place and sit in a staking pool at the same time — it is one token, it can only be in one place, and the contract enforces that rather than trusting the interface to.

The draw has to be verifiable

A winner derived from block.timestamp or a blockhash is not random — it is chosen by whoever mines or submits the settling transaction, and with a purse attached that gets exploited on day one. The interface therefore exposes randomnessSource(), so a contract returning the zero address is visibly not ready and this page can say so rather than assume.

Every line reads zero today because nothing has been entered. Draw clocks render as —:—:— instead of counting down, because a ticking clock is a claim that twenty people are already standing in that line.

Casino

One wheel, 10 outcomes, and every probability published before anything spins. Holders get a free spin a day; extra spins cost 0.000037 ETH, paid in native ETH — payouts settle separately in USDG. No wagering is possible today and no payment is accepted anywhere on the page.

OutcomeChanceWeightMax / day
Better luck next time55.30%553,045
$0.1025.00%250,0004000
$0.2512.00%120,0001200
$0.504.50%45,000450
$0.662.00%20,000150
$0.880.8000%8,00060
$10.3000%3,00020
$1.300.0800%8006
$50.0150%1503
A Broker NFT1 in 200,00051

Weights are integers out of 1,000,000, not decimal probabilities. A list of floats can quietly sum to 0.9999999; integers either sum exactly or fail an assertion in development, and the losing tier is the residual so the table can never over- or under-sum.

Spin price
0.000037 ETH
Free spins per day
1 base, capped at 5
Average return per spin
$0.10
Worst case in one day
$1,119.60
Odds sign-off
Published
Casino contract
Pending

Equal slices, unequal chances

The wheel is drawn with 10 slices of the same size, and that size is not the odds. Drawn to scale the $100 slice would be 0.0036 of a degree — narrower than a pixel, so it would simply vanish. Equal slices at least do not pretend to encode anything, and the table above carries the real numbers with each row colour-matched to its slice.

Why a spin takes two transactions

A one-call spin cannot be fair: whoever submits it sees the outcome before it lands and can drop the transaction when they dislike it. So the contract commits first and reveals second. The server seed hash is published in advance, your seed is committed with the spin, and settle() reveals the seed and pays — after which anyone can recompute the result themselves.

Until that contract exists this is a description, not a claim. The fairness panel on the Casino page says “not verifiable yet” rather than “provably fair”, because there is nowhere to publish a commitment in advance and calling it fair today would be untrue.

Mint Mechanics

Minting is first-come, first-served at a fixed price, capped per wallet. The flow, once live, looks like this:

  1. Connect a wallet from the mint panel or the header.
  2. The site checks you're connected to Robinhood Chain (chain id 4663) and prompts a switch if you're not.
  3. Choose a quantity, up to 10 per wallet.
  4. Review the payment token — ETH only, Robinhood Chain's native currency.
  5. Review the total, then confirm the transaction in your wallet.
  6. Once the transaction confirms on-chain, your pieces appear in your wallet immediately — there is no separate reveal delay built into the mechanic.

The mint UI is fully interactive today, and the mint contract is wired in. There is no hand-flipped “mock mode” switch any more: whether a mechanic unlocks is decided solely by whether an address exists for it in src/config/contracts.ts, which removes the failure where the switch and the reality disagree.

While there is no address, every wallet and quantity interaction is real local state — nothing is faked in the UI itself — but no transaction is broadcast and no ETH moves anywhere. The confirmation you would see is a simulated one, and it says so. The moment an address is pasted in, the same screens send real transactions and wait for a real receipt before claiming anything happened.

This flips once the contract's address and ABI are wired into the site's config — NFT_CONFIGURED is currently true, and the mint button stays locked until it flips to true. No manual toggle, no soft launch — the same boolean that unlocks the button also swaps every mock service call for a real one.

Architecture

For anyone checking what actually runs this site rather than taking it on faith:

  • Frontend: TanStack Start on React 19 and Vite, server-rendered per request.
  • Wallet connectivity: wagmi and viem for chain interaction, RainbowKit for the connect UI — no custom signing logic and no custody of keys or funds. Every signature happens inside your own wallet.
  • The site itself never holds a private key, never holds custody of minted pieces, and never proxies a transaction on your behalf — it only builds the call your wallet then signs.
  • Mock mode (see Mint Mechanics above) lives entirely client-side as a config flag — flipping it is a code change, not a hidden server-side switch.

Deployment Status

Every mechanic on this site is built, typed and wired to a contract interface. None of them is running yet, because no contract exists for any of them today. This table is generated from the same config the app reads, so it cannot claim a readiness the code does not actually have.

Network
Configured
Broker ERC-721
Configured
Staking desk
Pending
Jackpot draw
Pending
Casino wheel
Pending

What happens on deploy

One file changes: src/config/contracts.ts. Paste an address, and that feature stops returning demo data and starts reading the chain — real balances, real positions, real transactions awaited to a receipt. Each feature is independent, so staking can go live while the Casino is still a drawing.

The economics gates are separate from deployment and stay shut on their own terms. A deployed staking contract with no funded treasury still reports itself as closed, and the Hub still lists why. That is deliberate: deploying a contract proves the code exists, not that the money behind the promise does.

Still outstanding

  • The contracts themselves. The interfaces are specified in src/config/abis.ts; the Solidity that implements them is not written, and should be audited before it holds anyone’s NFT.
  • Token metadata. Per-token art and traits are published for the catalogue pieces only. A wallet holding an id outside that set will see the real token with its grade shown as unknown, rather than a guessed one.
  • A reward treasury. Funded, at a published address, with a committed budget and an end date. This is the gate the Staking Hub will not open without.
  • A randomness source for the Jackpot draw, and a server-seed commitment for the Casino.
  • A holder indexer. Unique owner counts and settled-spin history are event queries, not contract calls. Until one exists those render as an em dash and an empty list.

Holder Utility

What verified holders get, listed in the same order they ship on the Roadmap below:

  • Holder Access. Verified holders unlock private channels, artist AMAs, and the working notes behind every trait decision. Verification checks the connected wallet against the deployed collection directly — no manual whitelist, no waiting on a mod.
  • Community Benefits. Holder votes decide which archetypes expand, which collaborations happen, and where the treasury spends. Each vote is one Broker, one vote — proposals and results are posted in the open, not decided behind closed doors.
  • Exclusive Drops. First claim on limited print runs and companion pieces, priced for holders before anything reaches the public. Claim windows are wallet-gated and capped per Broker, so early access can't be bought around.
  • Future Experiences. Small-format events and studio sessions announced to holders first — capped, in person, and never oversold. Invitations go out in Broker-ID order within each holder's tier, not first-come chat spam.
  • Staking Hub. One desk in the Staking Hub, paying a published $0.05 per Broker per day directly in USDG, no cap on how many you stake. The interface is built and the rate is written down. Nothing accrues: no staking contract exists yet and no reward treasury is funded, and the Hub lists every unmet condition by name instead of counting up a balance nobody owes you.
  • Full Transparency. Contract status, audit status, and network configuration are stated plainly on the Docs page and never dressed up. If something is still locked, the site says so instead of simulating it.

Security & Transparency

  • Contract status: confirmed on-chain. Verify it yourself on the block explorer.
  • Network configuration: confirmed against Robinhood Chain.
  • Third-party audit: none yet. No audit has been claimed, purchased, or implied anywhere on this site.
  • Wallet connection uses RainbowKit — no custom signing logic, no key custody.
  • Mock mode is on: see Mint Mechanics for exactly what that does and doesn't simulate.

Before you mint, verify the contract address on this page matches what your wallet is about to sign — never trust a link, DM, or "verify your wallet" prompt from anywhere other than this site. No one associated with Mafia Broker will ever ask for your seed phrase or private key, and the mint flow never requires either.

Roadmap

Six stages, only funded and in-motion work listed — nothing announced ahead of being real.

  1. 01 · GenesisComplete

    The 2,222-piece generative system is finished — every category, every rarity tier, locked before a single wallet connects.

    • 10 trait categories composed and weighted
    • Common / Rare / Epic / Legendary tiers fixed at 1,517 / 506 / 177 / 22
    • Fixed supply, no reveal-time reweighting
  2. 02 · FoundationsIn progress

    The site, lore and documentation ship first — real wallet connect, a real Docs and Whitepaper, nothing simulated presented as live.

    • RainbowKit wallet connect live on Robinhood Chain
    • Docs, Whitepaper and Lore published
    • Terminal-style Mint, Exchange and Staking Hub interfaces built and labeled honestly while locked
  3. 03 · Contract & AuditUpcoming

    The mint contract is finalised and reviewed before it ever touches a wallet — this is the gate that unlocks everything after it.

    • Contract address and ABI published in Docs
    • Third-party audit commissioned and results posted, good or bad
    • Final mint price confirmed — TBA stops meaning TBA
  4. 04 · Community MintUpcoming

    Public mint opens at a flat price, no tiers. Holder verification and the private channels open the same day.

    • First-come, first-served mint, 5 per wallet
    • Holder-only Discord channels unlock on verification
    • A shared trait explorer where the floor tracks rarity in real time
  5. 05 · Holder UtilityUpcoming

    The utility described on this site starts converting into scheduled, holder-facing work — not a promise sitting on a roadmap forever.

    • Holder votes on the first trait-expansion batch
    • Artist studio sessions and working notes shared with holders
    • Staking Hub pools open once a reward treasury is funded on-chain at a published address, with a committed budget and an end date
  6. 06 · Future ExpansionUpcoming

    A second chapter written with holders, not announced to them — new archetypes and collaborations chosen by vote.

    • New districts and archetypes scoped from holder proposals
    • Collaboration partners selected by holder vote, not by announcement
    • Physical print runs pulled directly from holder-owned pieces