Monero Terminal

Docs

Overview

Monero Terminal turns XMR into any pump.fun coin delivered to a Solana wallet, and turns coins back into XMR. You send XMR from your own Monero wallet to a one-time address; nothing connects on the Monero side. On the Solana side you give an address, or type new and the terminal makes a fresh keypair in your browser.

The terminal does not make Monero private: Monero already is. What it does is narrower. The Solana wallet that receives your coin has no on-chain link to where the money came from: the SOL arrives from a swap provider's hot wallet onto an address made for your order alone, and only then buys the coin.

Commands

buy <mint|$TICKER> <xmr> --to <address|new> --refund <xmr address>Quote first (rail rate, 1% fee, price impact, estimated tokens), then confirm opens the order: a one-time XMR address with a QR code and a 6 hour window.
sell <mint> <amount> --to <xmr address> --refund <solana address>A one-time Solana address for your coins. The keeper sells them, takes the fee and sends the SOL through the rail to your Monero address.
launchA form: name, ticker, image, first buy in XMR, where the coins go, where the creator fees go.
status <id>The order's state, rail status, Solana signatures and log.
ordersOrders opened in this browser (kept in its local storage only).
rateLive rates and minimums from every provider behind the rail.
holdersRegistered payout addresses, truncated.
newA fresh Solana keypair, made in the browser, shown once with a copy button and a text download.

$TICKER resolves to the pump.fun coin with that exact symbol and the most liquidity, through Jupiter's token search. The quote prints the mint it found; pass the mint itself when two coins share a ticker.

The XMR rail

The rail is one interface with several swap providers behind it. Today orders go through Exolix, which opens XMR to SOL and SOL to XMR exchanges without an account. ChangeNOW is wired as a second provider: its quotes show in rate, and its orders open once its partner key is set on the server.

Exolix holds the XMR leg until it confirms: Monero needs 10 confirmations (about 20 minutes) before the swap starts, usually 20 to 60 minutes in total. The rate is floating: the SOL you receive follows the market at the moment the swap runs, and the quote is an estimate.

The minimums are the provider's: about 0.077 XMR for XMR to SOL and about 0.53 SOL for SOL to XMR on Exolix today. rate prints the live values.

Orders and refunds

Each order gets its own Solana address, derived on the server from a secret seed and the order id. The keeper runs every minute: it follows the rail, then signs the order's transactions with that address's key.

  • Buy: XMR deposit, rail swap, SOL on the order address, then one transaction takes the 1% fee and buys the coin (pump.fun curve, or Jupiter after graduation), then one transaction sends every coin and the leftover SOL to your wallet. The order address ends at zero.
  • Sell: the coins land on the order address, the keeper advances 0.004 SOL for the fees, sells, takes the 1% fee and its advance back, opens a SOL to XMR exchange and sends the SOL to it.

Refunds: if the XMR never converts, the rail refunds it to the Monero refund address you gave. If a sell's proceeds are under the rail's minimum, the SOL goes back to your Solana refund address. A deposit window closes 6 hours after the order opens; send nothing after that.

Every signature is written on the order before it is broadcast, and a step with a confirmed signature is never signed again. status links each one to Solscan.

Launch

launch creates a pump.fun coin paid in XMR. The image goes to pump.fun's own metadata storage. When your XMR has converted, the order's address creates the coin, then makes the first buy in the next transaction; the coins go to the Solana address you gave. Creating a coin costs about 0.03 SOL in account rent, taken from your first buy.

Creator fees, every Monday

The order's address stays the coin's creator on pump.fun, so the coin's creator fees (bonding curve and PumpSwap after graduation) build up in pump.fun's creator vault for that address. Every Monday 00:00 UTC the keeper reads that vault for every coin launched here:

  • if the fees, minus the 1% terminal fee, clear the rail minimum (about 0.52 SOL on Exolix today), the keeper collects them to the creator address (it pays that transaction's fee), keeps 1%, and sends the rest through Exolix to the Monero address you gave at launch;
  • under the minimum, nothing moves: the fees stay in pump.fun's vault and are checked again the next Monday;
  • if Exolix cannot complete the swap, it refunds the SOL to the Solana address that received your coins.

Every decision, collected or rolled over, is a line on the /payouts ledger with its collect transaction and Exolix order.

Fees and $XMRT

The terminal takes 1% of every order, in SOL, on our side of the order. Swap providers and pump.fun take their own fees, already inside the quote.

Hold $XMRT, get paid in Monero. The fees collect on the fees wallet edFv4w4WuCaxHnhtTQkyMEGFQL1PEDn4ynkBfoxmS88. Every Monday 00:00 UTC the week's fees go through the rail to the holders who registered a Monero address at /register, pro rata to their balance at a snapshot taken at a random moment of the week, committed by hash when the week opens and revealed when it closes. Minimum 100,000 $XMRT at the snapshot. Payouts under the rail's minimum roll over. Ledger at /payouts.

Before $XMRT is live the fees accumulate and the payout page shows the rule. When the team sets the token's mint on the site, the contract address, the pump.fun link and the snapshots turn on by themselves.

API

The terminal is a thin client over three JSON endpoints. No key, CORS open.

# quote a buy
curl "https://www.moneroterminal.com/api/quote?side=buy&coin=<mint or $TICKER>&xmr=0.1"

# quote a sell
curl "https://www.moneroterminal.com/api/quote?side=sell&coin=<mint>&amount=250000"

# open a buy: returns the order with deposit.address (XMR) and deposit.expiresAt
curl -X POST https://www.moneroterminal.com/api/orders -H 'content-type: application/json' \
  -d '{"kind":"buy","coin":"<mint>","xmr":0.1,"to":"<solana address>","refund":"<xmr address>"}'

# open a sell: deposit.address is the order's Solana address
curl -X POST https://www.moneroterminal.com/api/orders -H 'content-type: application/json' \
  -d '{"kind":"sell","coin":"<mint>","amount":250000,"to":"<xmr address>","refund":"<solana address>"}'

# follow it
curl https://www.moneroterminal.com/api/orders/<id>

# live rates, payout ledger, registered holders, service state
curl https://www.moneroterminal.com/api/rate
curl https://www.moneroterminal.com/api/payouts
curl https://www.moneroterminal.com/api/holders
curl https://www.moneroterminal.com/api/status

Order states: awaiting_xmr, rail_processing, sol_received, buying or launching, delivering, delivered; for sells awaiting_tokens, gas, selling, fee, rail_deposit, rail_out, paid_xmr; and refunding, refunded, expired, failed. Creator fee payouts: collecting, fee, rail_deposit, rail_out, paid_xmr, or rolled.

Keys and addresses

KeeperFAgjLkJ1tgRi8iyLpoi8De9LkNttJDqrtyZc37dUYCFDAdvances the SOL that pays for sells. Holds no user funds between orders.
Fees walletedFv4w4WuCaxHnhtTQkyMEGFQL1PEDn4ynkBfoxmS88Receives the 1% fee; pays the weekly $XMRT payouts.
Order addressesone per orderDerived from a server seed and the order id; shown in every quote and status.