Why bridge?
MaryJaneCoin lives on two chains at once:
- Solana SPL MARYJ — instant DEX liquidity (Raydium, Jupiter, pump.fun), Phantom/Solflare/Backpack wallet support, ~3-second finality, low fees
- Mainchain MARYJ — consensus-enforced privacy (stealth addresses, ring mixing, two-pool), no centralized exchange dependency, your keys / your chain
The bridge lets you move 1:1 between the two whenever you want. Buy on Solana for liquidity → bridge in for privacy → bridge out when you want to trade again.
How the bridge works (architecture)
┌──────────────────┐ ┌──────────────────┐
│ Solana │ │ MaryJaneCoin │
│ │ ◄── on-chain routing data ──► │ mainchain │
│ SPL MARYJ │ Memo (Sol→MJC) │ OP_RETURN │
│ Bridge Escrow │ OP_RETURN (MJC→Sol) │ Bridge Escrow │
└──────────────────┘ └──────────────────┘
↑ ↑
└────────────── Bridge daemon watches ────────────────┘
both chains, releases the
counterpart 1:1 atomically
Key property: the bridge daemon does not hold custody in a database. Every routing instruction is permanently recorded in the public chain — Memo on Solana, OP_RETURN on mainchain. Anyone can audit every operation by reading public data.
| Field | Value |
|---|---|
| Bridge URL | bridge.maryjanecoin.net ↗ |
| Bridge fee | $3 USD or 0.25% of amount, whichever is greater (plus network fees) |
| Sol → MJC time | ~3 minutes |
| MJC → Sol time | ~12 minutes (10 mainchain confirmations) |
| SPL MARYJ mint | MARYJkS2kHxmVkQp8baNUL7d3R1pddLr65GgsArJAYY |
| SPL MARYJ decimals | 8 (matches mainchain) |
| SPL launch date | 2026-04-20 (4/20) via pump.fun BYO-keypair |
| SPL Memo program | MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr |
| Mainchain Memo format | Raw OP_RETURN bytes containing the Solana base58 address |
| Min bridge amount | 1 MARYJ |
Direction 1 · Solana SPL MARYJ → Mainchain MARYJ
Use this when: you bought MARYJ on a Solana DEX and want to move it to the privacy chain for stealth/CoinJoin/cold storage.
You'll need
- A Solana wallet with SPL MARYJ — Phantom, Solflare, or Backpack
- A small amount of SOL for the network fee (~0.000005 SOL)
- Your MaryJaneCoin mainchain address (starts with
M)
Step-by-step (using bridge.maryjanecoin.net)
-
Get your mainchain receiving address
Open MaryJaneCoin Core or the web wallet and copy a fresh receive address (starts with
M). For maximum privacy, use a stealth address — every payment to it lands on a one-time destination. -
Open bridge.maryjanecoin.net
Make sure the active tab is
Solana → MaryJaneCoin(the default). -
Click
Connect WalletA modal opens with three options:
Phantom,Solflare,Backpack. Each showsDetectedorNot installed. Click your wallet and approve the connect prompt in the wallet popup. -
Enter the amount
Type into the
You Sendfield — or clickMAXto bridge your entire SPL MARYJ balance. TheYou Receivepanel shows the amount after the bridge fee ($3 USD or 0.25%, whichever is greater). -
Paste your mainchain address into
MaryJaneCoin Receiving AddressThe page validates the address as you type (debounced 500ms). When valid, an inline badge shows
Valid; if not,Invalid.Triple-check this address If you typo it, the bridge will release MARYJ to whatever address it parses out of your Memo — irreversibly. Paste, don't type. Better: scan the QR from your wallet. -
Click
Bridge <amount> MARYJThe button label updates with your amount. Your wallet pops up to sign a transaction with two instructions:
- An SPL Token Transfer of
amount × 10⁸raw units from your ATA to the bridge escrow ATA - A Memo Program instruction containing your mainchain address as raw UTF-8 bytes (e.g.
MNCfNkGJuku1DLtVHeimVVLCtfk2YWKq8c)
Approve in the wallet. The signed tx broadcasts via
api.mainnet-beta.solana.com. - An SPL Token Transfer of
-
Wait for Solana confirmation (~3–10 seconds)
A toast appears: "Transaction sent! Signature: …" and then "Transaction confirmed on Solana. Bridge is processing…". The transaction joins the
Recent Transactionspanel with status badges that progress:detected → confirming → completed. -
Bridge daemon picks up the deposit
The daemon polls Solana for new SPL transfers to the escrow ATA. When it sees yours (with a valid Memo), it picks the best-fit UTXO from the mainchain escrow tier list:
Tier UTXO Size Best for orders ≥ Whale 10,000,000 MARYJ 5M+ Large 5,000,000 2M+ Medium 1,000,000 500k+ Standard 500,000 100k+ Small 100,000 20k+ Micro 10,000 2k+ Dust 1,000 any The escrow sends the equivalent native MARYJ to your address; change goes to a fresh escrow address.
-
Confirm receipt on the explorer
Open explorer.maryjanecoin.net and look up your address — the deposit should appear within a couple of mainchain blocks (~8 minutes total). Or in your wallet's transaction list.
Direction 2 · Mainchain MARYJ → Solana SPL MARYJ
Use this when: you've been holding privately and want to trade on a Solana DEX, swap into stables, or send to anyone with a Phantom wallet.
You'll need
- MaryJaneCoin Core daemon running (or the web wallet, which has bridge built in)
- The Solana address you want the SPL MARYJ delivered to
- ~0.420 MARYJ for the mainchain network fee
Step-by-step (CLI, the canonical method)
-
Validate your Solana destination address
Make sure it's the token account capable address (not a different chain). Solana addresses are base58, 32–44 chars. Open Phantom → click
Receive→ copy the address shown there. -
Run
bridgetosolfrom the CLI$ MaryJaneCoind bridgetosol 1000 "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU" { "txid": "f1fcc779...", "amount": 1000.00000000, "escrow_address": "MFqkH1fjMvYLLvNhce1BzRCgEQnjc8Lfxx", "solana_address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU" }This builds a single transaction with three outputs (see below) and broadcasts it.
-
Inspect what just happened on chain
# Decoded output structure: Output 0: 1000.00000000 MARYJ → [escrow address] (the deposit) Output 1: 89.58000000 MARYJ → [your change addr] (remainder) Output 2: 0.00000000 MARYJ → OP_RETURN "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"The Solana destination is encoded as raw ASCII bytes inside the OP_RETURN — no JSON, no prefix, just the 44-char address. Anyone reading the chain can decode this and verify the bridge will release the right amount to the right Solana address.
-
Wait for 10 mainchain confirmations (~10–12 minutes)
You can watch the confirmations climb on explorer.maryjanecoin.net at
/tx/<txid>. -
Bridge daemon releases the SPL tokens
Once 10 confirms are reached, the bridge:
- Reads the OP_RETURN to extract your Solana destination
- Calls SPL Token Transfer from the bridge escrow ATA → your destination ATA
- Auto-creates the destination ATA if it doesn't exist (uses Associated Token Account program)
-
Confirm receipt in Phantom
Open Phantom → switch to the MARYJ token → the balance should reflect the bridged amount within seconds of the Solana TX. Solscan link:
https://solscan.io/account/<your-solana-addr>
Alternative: bridge out via the web wallet
The MaryJaneCoin web wallet has the bridge built into a tab — connect Phantom inside the wallet, set amount, click Bridge MARYJ → Solana. The wallet builds and broadcasts the same OP_RETURN transaction for you under the hood.
Troubleshooting
"My Sol → MJC bridge sat there forever"
- Check the Memo. If it's missing or doesn't decode to a valid M-prefix address, the bridge can't route. Funds are held until ops resolves it manually — open an issue or contact bridge ops with your Solana TX hash.
- Confirm the SPL transfer actually went to the bridge escrow ATA, not a typo'd address.
- Bridge needs ≥30 Solana confirmations (~3 min). Be patient.
"My MJC → Sol bridge sat there forever"
- Did you send to the configured
bridgeescrowaddress from yourMaryJaneCoin.conf?bridgetosolreads it from there. - Did the OP_RETURN make it into the broadcast TX? Inspect with
MaryJaneCoind getrawtransaction <txid> 1— vout[2] should haveOP_RETURN+ your Solana address as ASCII hex. - Did 10 confirmations actually reach? Check the explorer.
"The web bridge says Offline"
Means the bridge backend's /api/status isn't responding. The site uses a heartbeat poll every 30 seconds. If it's red, the bridge daemon may be restarting. Wait a few minutes and refresh, or use the CLI direct from your daemon.
"I bridged the wrong amount"
Bridge actions are irreversible. You'd need to bridge the difference back the other direction, paying network fees both ways. Always start with a tiny test amount when bridging for the first time from a new address.
# MaryJaneCoin.conf
bridgeescrow=MFqkH1fjMvYLLvNhce1BzRCgEQnjc8Lfxx
bridgeminamount=1