The merchant advantage on MotaCoin
- Fast enough for POS โ 4m 20s block time means first confirmation arrives before a customer finishes packaging their order. For most sales under ~$100, zero-confirmation acceptance is safe (the network doesn't have a significant double-spend threat โ it's a small chain with no RBF-style replace-by-fee mechanism).
- No chargebacks, ever โ once confirmed, funds are yours. The customer cannot dispute the transaction through a card processor.
- Settle to SOL or USDC any time โ the inverted-escrow bridge lets you move mainchain MOTA receipts to Solana SPL whenever you want, then swap to SOL / USDC on Raydium or Jupiter. Your settlement cadence is yours, not a payment processor's 3-day clearing window.
- No merchant account, no compliance officer, no KYC on the customer side โ you're accepting cryptocurrency directly. The receiving wallet is whatever you want it to be.
- Your data stays yours โ no POS provider harvesting your transaction history to resell.
Tier 1 ยท Single-address pop-up (hand-drawn QR)
For a booth, event, or very low-volume setup. Generate one receive address, print a big QR of it, write your price list next to it, show customers where to scan. Done in 5 minutes.
-
Generate a fresh address
$ motacoin-cli getnewaddress "booth-2026-04-20" "MNCfNkGJuku1DLtVHeimVVLCtfk2YWKq8c"Label it so you can track later. One address per event keeps your accounting sane.
-
Generate a QR
Use paper.motacoin.net โ Wallet Details tab โ paste the private key, copy the public-address QR. Or any QR library pointed at
motacoin:MNCfNkGJuku1DLtVHeimVVLCtfk2YWKq8c. -
Print it big
24ร24 cm minimum. Laminate it. Stick it to the counter.
-
Watch receipts live
$ watch -n 5 'motacoin-cli getreceivedbyaddress MNCfNkGJuku1DLtVHeimVVLCtfk2YWKq8c 0'The
0minimum-confirmations flag includes unconfirmed receipts โ good enough to cross-reference against the customer's displayed "Sent!" screen on their wallet.
Trade-off: everyone is paying into the same address. At a busy booth you'll see all payments mixed together โ fine if you trust your own eyes and the customer's phone-screen confirmation, awkward if you need strict per-sale reconciliation. For that, go to Tier 2.
Tier 2 ยท Fresh-address per invoice (recommended default)
A new receive address per sale. Each invoice's address has a known expected amount, so your POS can verify "sale #420 paid in full" with zero ambiguity.
Minimal PHP / Node.js POS handler
// Node.js โ server side, talks to motacoind via local RPC
const { RpcClient } = require('motacoin-rpc'); // or any JSON-RPC client
const rpc = new RpcClient({ host: '127.0.0.1', port: 14420, user: 'mota', pass: '...' });
// When a customer checks out
app.post('/checkout', async (req, res) => {
const orderId = req.body.orderId;
const priceMota = req.body.priceMota;
// Fresh receive address, labeled with the order ID
const addr = await rpc.call('getnewaddress', [`order-${orderId}`]);
// Store in DB: orderId โ addr, priceMota, status=pending
await db.orders.insert({ orderId, addr, priceMota, status: 'pending' });
// Render QR for the customer
res.json({
address: addr,
uri: `motacoin:${addr}?amount=${priceMota}&label=Order+${orderId}`,
qrDataUrl: await generateQrDataUrl(`motacoin:${addr}?amount=${priceMota}`)
});
});
// Background poller โ runs every 30 seconds
setInterval(async () => {
const pending = await db.orders.find({ status: 'pending' });
for (const order of pending) {
const received = await rpc.call('getreceivedbyaddress', [order.addr, 0]);
if (received >= order.priceMota) {
await db.orders.update(order.orderId, { status: 'paid' });
fulfillOrder(order.orderId);
}
}
}, 30_000);
That's the entire integration. No third-party processor, no webhook signing, no reconciliation reports. Your database is the source of truth, motacoind is the oracle.
The motacoin: URI format
Following the BIP-21 convention Bitcoin pioneered:
motacoin:MNCfNkGJuku1DLtVHeimVVLCtfk2YWKq8c?amount=12.5&label=OrderN123&message=Optional+note
Most modern wallets parse this URI directly โ scan the QR, the amount and label auto-populate, the customer just taps Send. Amount is in MOTA, not satoshis.
Zero-confirmation vs. one-confirmation
- Under $100 equivalent โ accept zero-confirmation (
getreceivedbyaddress addr 0). The chain has no RBF and no significant hashrate to attack; a double-spend on small MOTA amounts is not economical. - $100โ$1000 โ wait for 1 confirmation (~4m 20s). Show the customer a "Processing..." screen. Most customers are happy to wait less than 5 minutes.
- Over $1000 โ wait for 6 confirmations (~25 minutes). For a car dealership or real-estate-adjacent use case; uncommon at a cannabis POS.
Settling to stablecoins via the bridge
Your till fills up with mainchain MOTA. You want USDC for wholesale costs. The path:
-
Decide how much to settle
Weekly settlement is common โ every Monday, bridge the previous week's receipts out to Solana.
-
Bridge MOTA โ Solana SPL
$ motacoin-cli bridgetosol 5000 "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"Your Solana wallet receives 5,000 SPL MOTA (minus the $3 or 0.25% bridge fee) after ~45 minutes.
-
Swap SPL MOTA โ USDC on Jupiter
Open jup.ag, paste the MOTA SPL mint, swap to USDC. Confirms in seconds.
-
Off-ramp USDC to fiat (if needed)
Via a US/EU on-ramp (Coinbase, Kraken, Circle), or via Phantom โ USDC โ any accepting bank. Off-ramp is outside this tutorial โ a thousand options exist depending on jurisdiction.
Real-world example โ The Tuti Hostel, Tehran
The Tuti Hostel has accepted MotaCoin for room bookings since 2022. Their setup:
- One receive address per guest โ generated at the time of booking, sent in the confirmation email along with the MOTA price and QR
- Balance check at check-in โ staff opens the explorer on their phone, confirms the address has received the expected amount
- Settlement monthly โ aggregated receipts are bridged to Solana and swapped to USDT for supplier payments
Why it works for them: Iran's international payment rails are famously hostile, USD-denominated card payments are impossible for most merchants, and a permissionless chain-based rail costs nothing to set up and has no geographic restrictions.
Accounting and tax
Consult a local accountant โ this is not tax advice. Generally speaking, accepting crypto as payment for goods or services is a taxable event at the fair-market-value of the crypto at the moment of receipt, same as any barter transaction. Keep records of:
- Timestamp of each receipt
- Amount in MOTA
- Fair-market USD/local-fiat value at receipt (DEX spot price)
- Any subsequent settlement โ conversion MOTA โ SPL โ USDC โ fiat โ is a second taxable event for cost-basis purposes