MaryJaneCoin
A Privacy-Layered Proof-of-Stake Cryptocurrency with Native Solana Bridge
The first privacy blockchain to launch via pump.fun.
MARYJkS2kHxmVkQp8baNUL7d3R1pddLr65GgsArJAYY
Both ends were vanity-grinded out of the Solana keyspace. Solana addresses are 32-byte ed25519 public keys base58-encoded into 43- or 44-character strings. Only ~5.5% encode to 43 chars; the letter "M" is mathematically blocked from the first position of every 44-char address, so P("M" first-char) ≈ 0.001, not 1/58. Real probability of "MARYJ" prefix: 1 in 11.2 billion; "JAYY" suffix is uniform: 1 in 584 ≈ 11.3 million. Joint ≈ 7.8 × 10−18 → expected ~1 in 128 quadrillion attempts (~17× harder than the naive 589 count almost everyone cites).
Grinding done on secure CPU only — via the official solana-keygen grind with verified CSPRNG entropy. GPU vanity tools were rejected because GPU memory side-channels can leak keypairs through forensic readout, and a contract address whose entropy you can't trust is worse than no vanity at all. At ~500k keys/sec on a 32-core EPYC, that's ~71 million machine-hours: roughly $3.5M–$5.5M in self-hosted electricity alone, or $80M–$120M in cloud CPU compute at expected solve. About 8,250 years on one machine, or ~99,000 servers running in parallel for a month. Nation-state-grade keyspace burn for a meme. Almost no project bothers.
Abstract
MaryJaneCoin (MARYJ) is a privacy-focused Proof-of-Stake cryptocurrency that implements layered privacy at the network, wallet, and consensus levels. Built on a Bitcoin-derived codebase (Bitcoin → Peercoin → NovaCoin → MotaCoin → PotCoin → MaryJaneCoin), it introduces mandatory stealth addresses, ring mixing, a dual-pool architecture separating staking from spending, and Dandelion++ transaction relay — all enforced progressively at the consensus level through height-activated rules.
MaryJaneCoin is the first privacy blockchain to launch via pump.fun on Solana, using a 1:1 escrow bridge between a Solana SPL token and the native privacy chain. This model provides immediate DEX liquidity on Solana while enabling full on-chain privacy for holders who bridge to the mainchain.
The chain operates on a zero-inflation economic model: the entire 1 billion MARYJ supply is minted at genesis and held in a bridge escrow wallet. Staking rewards are 0% — the chain runs purely on transaction fees. Privacy is not optional: after the activation heights, the consensus layer rejects non-private transactions at the block validation level.
1. Introduction
1.1 The Problem
Existing privacy coins face a liquidity problem. Monero, Zcash, and similar projects trade on centralized exchanges that increasingly delist privacy tokens under regulatory pressure. Decentralized exchange liquidity on Ethereum or Solana is limited because privacy features exist only on the native chain — the wrapped tokens on DEXes carry none of the privacy guarantees.
Meanwhile, Solana's pump.fun has become the dominant launchpad for new tokens, providing instant liquidity, community formation, and price discovery. But pump.fun tokens are fully transparent SPL tokens with zero privacy.
1.2 The Solution
MaryJaneCoin bridges these two worlds:
- Launch on pump.fun — instant Solana DEX liquidity, meme-driven community building, standard SPL token trading
- Bridge to mainchain — holders bridge their SPL tokens 1:1 to the native MARYJ chain where mandatory stealth addresses, ring mixing, and pool separation provide real, consensus-enforced privacy
- Bridge back — when users want to trade, they bridge back to Solana for DEX liquidity
The privacy chain doesn't need exchange listings. Solana IS the exchange. The bridge IS the on-ramp.
1.3 Design Philosophy
- Privacy by default, not by choice. After activation heights, all transactions must use stealth addresses and ring mixing. There is no "transparent mode" for spending.
- Transparent staking, private spending. Proof-of-Stake requires publicly verifiable stake weights. MaryJaneCoin solves the PoS-privacy conflict by separating the UTXO set into transparent (staking) and shielded (spending) pools.
- Zero inflation. The entire supply exists at genesis. No block rewards, no inflation, no dilution. The chain runs on transaction fees alone.
- Layered activation. Privacy features activate progressively at fixed block heights, giving the network time to stabilize between each enforcement layer.
2. Chain Parameters
| Parameter | Value |
|---|---|
| Name / Ticker | MaryJaneCoin / MARYJ |
| Consensus | Proof-of-Stake (pure PoS after block 500) |
| Hashing Algorithm | X13 (PoW phase), SHA-256d stake kernel |
| Block Time | 260 seconds (4 minutes, 20 seconds) |
| Max Supply | 1,000,000,000 MARYJ (fixed, zero inflation) |
| Block 1 Premine | 1,000,000,000 MARYJ (entire supply) |
| PoS Stake Reward | 0% (transaction fees only) |
| Minimum TX Fee | 0.420 MARYJ |
| Address Prefix | M (pubkey version byte 50) |
| P2P Port | 14200 |
| RPC Port | 14201 |
| Message Magic | 0x44455250 ("DERP") |
| Coinbase Maturity | 10 blocks |
| Stake Minimum Age | 15 minutes |
| Stake Maximum Age | 25 days |
| Last PoW Block | 500 |
| Data Directory | ~/.MaryJaneCoin |
| Genesis Hash | 000001b8e7e172fd4b860cd42ae50de44334d4969376871eab0d9e58e48525b2 |
| Genesis Timestamp | 1775670000 (April 8, 2026) |
| Genesis Coinbase | "MaryJaneCoin v2 - Fresh Start April 2026" |
3. Economic Model
3.1 Zero-Inflation Design
MaryJaneCoin deliberately breaks from the standard cryptocurrency model of ongoing issuance. Block 1 mints the entire 1 billion MARYJ supply. All subsequent blocks — whether Proof-of-Work or Proof-of-Stake — generate zero new coins:
// main.cpp:1131 — PoW reward int64_t GetProofOfWorkReward(int64_t nFees, int nHeight) { int64_t nSubsidy = 0; if (nHeight == 1) nSubsidy = 1000000000 * COIN; // Entire supply at block 1 return nSubsidy + nFees; } // main.cpp:1148 — PoS reward int64_t GetProofOfStakeReward(...) { int64_t nSubsidy = 0; // Zero inflation forever return nSubsidy + nFees; }
Staking nodes are incentivized by transaction fees (minimum 0.420 MARYJ per transaction). As chain usage grows, fee revenue grows proportionally. There is mild deflationary pressure as fees are collected from the circulating supply.
3.2 The Pump.fun Bridge Model
The economic architecture is designed around the Solana bridge:
- A 1 billion MARYJ SPL token launches on pump.fun (Solana)
- The mainchain premines exactly 1 billion MARYJ at block 1
- The entire premine sits in a bridge escrow wallet
- The bridge provides 1:1 atomic swaps between SPL and native MARYJ
- Users buy MARYJ on Solana DEXes and bridge to mainchain for privacy
- Users bridge back to Solana for trading
The escrow wallet stakes its holdings to produce blocks and secure the network, but earns zero rewards — it simply keeps the chain alive. As users bridge coins to the mainchain, the escrow balance decreases and user balances increase, distributing both the supply and the staking power.
3.3 UTXO Escrow Architecture
The bridge escrow distributes the 1 billion premine into graduated UTXO tiers for efficient order filling:
10 UTXOs · 100M total
20 UTXOs · 100M total
50 UTXOs · 50M total
100 UTXOs · 50M total
100 UTXOs · 10M total
100 UTXOs · 1M total
100 UTXOs · 100K total
This allows the bridge to fill orders of any size using best-fit UTXO selection without excessive transaction splitting.
4. Privacy Architecture
MaryJaneCoin implements privacy in four layers, each activated at a specific block height. All privacy features are compiled into the binary at launch — no software updates required. The chain simply "turns on" each layer as it grows.
Separate staking from spending — transparent pool for validators, shielded pool for transactions
Obfuscate the payment graph with mandatory equal-denomination outputs
Hide recipient identity with one-time destination addresses on every transaction
Hide sender IP with two-phase stem/fluff transaction propagation
4.1 Phase 0: Dandelion++ Transaction Relay (Active from Genesis)
Purpose
Prevent network observers from determining which node originated a transaction.
Problem
In standard Bitcoin-style relay, a node broadcasts new transactions to all peers simultaneously. A well-connected observer can use timing analysis to identify the originating IP address with high accuracy.
Solution
Dandelion++ (BIP 156) introduces a two-phase relay:
- Stem Phase: The transaction is forwarded along a random single-path "stem" — each node selects 2 stem peers per 10-minute epoch and forwards stem transactions to exactly one of them.
- Fluff Phase: At each hop, there is a 10% probability of transitioning to "fluff" — normal broadcast to all peers. After 10 hops or 30 seconds (whichever comes first), fluff is forced.
Result
An observer sees the transaction "appear" from a random node in the stem, not the originator. Combined with Tor proxy support (configurable via proxy=127.0.0.1:9050), the originating IP is fully hidden.
4.2 Phase 1: Mandatory Stealth Addresses (Block 1,000)
Purpose
Hide the recipient's identity on every transaction.
Problem
In standard Bitcoin, if Alice publishes her address and Bob sends to it, anyone can see that Bob paid Alice by searching the blockchain for that address.
Solution
Dual-Key Stealth Address Protocol (DKSAP). Every MaryJaneCoin user has a stealth address consisting of two keypairs: a scan keypair and a spend keypair.
Stealth Address Format
Protocol
When Alice wants to receive a payment, she publishes her stealth address. When Bob sends to it:
- Bob generates a random ephemeral keypair
(r, R = r·G) - Bob computes the shared secret:
S = SHA256(ECDH(r, Alice_scan_pubkey)) - Bob derives a one-time destination:
dest = Alice_spend_pubkey + SHA256(S)·G - Bob sends the payment to
Hash160(dest)— an address that has never appeared on the blockchain before - Bob attaches
R(the 33-byte compressed ephemeral public key) as an OP_RETURN output
When Alice scans the blockchain:
- Alice sees the OP_RETURN containing
R - Alice computes:
S = SHA256(ECDH(Alice_scan_privkey, R)) - Alice derives:
dest = Alice_spend_pubkey + SHA256(S)·G - Alice checks if any output in the transaction pays to
Hash160(dest) - If yes, Alice can spend using:
dest_privkey = Alice_spend_privkey + SHA256(S)
Consensus Enforcement (after block 1,000)
Every spending transaction (excluding coinbase and coinstake) MUST contain a stealth marker: a zero-value OP_RETURN output of exactly 35 bytes (OP_RETURN + PUSH33 + 33-byte ephemeral pubkey). Blocks containing transactions without this marker are rejected with DoS(100).
// main.h — Stealth marker detection bool HasStealthMarker(const CTransaction& tx) { // Scan outputs for: nValue==0, size==35, byte[0]==0x6a (OP_RETURN), // byte[1]==0x21 (PUSH 33 bytes) // The 33 bytes are the sender's compressed ephemeral public key R }
RPC Commands
# Generate a stealth address $ MaryJaneCoind getnewstealthaddress "my-wallet" 8m9bqV3BiMkaajrYh7M9JwsS15b345x2idX7x6xYQfp26QnBBjNiuFM9q4twkYATeec953ydtZwiVgajqdLe8tESXUMP6nAJA # List all stealth addresses $ MaryJaneCoind liststealthaddresses [ { "label": "my-wallet", "address": "8m9bqV3Bi...", "scan_pubkey": "0228721ba88c871ec...", "spend_pubkey": "021a485c18deb33c8d..." } ] # Send to a stealth address (creates one-time destination + OP_RETURN) $ MaryJaneCoind sendtostealthaddress "8m9bqV3Bi..." 100.0 "a1b2c3d4e5f6..." # Scan blockchain for incoming stealth payments $ MaryJaneCoind scanstealthpayments 3 # Regular sendtoaddress also uses stealth automatically (stealthmandatory=1 default) $ MaryJaneCoind sendtoaddress "8m9bqV3Bi..." 50.0 "d4e5f6a7b8c9..."
On-Chain Transaction Structure
An observer sees coins going to a random address with no link to the recipient's published stealth address. Every payment creates a fresh, unlinkable destination.
4.3 Phase 2: Mandatory Ring Mixing (Block 1,500)
Purpose
Prevent amount-based transaction graph analysis.
Problem
Even with stealth addresses hiding the recipient, an observer can trace payments by matching amounts. "Someone sent exactly 420 MARYJ, and this stealth output received exactly 420 MARYJ — probably the same transaction."
Solution
Every spending transaction must contain at least 3 outputs of equal denomination. The wallet automatically creates a self-mix (CoinJoin churn) that splits payments into equal-value outputs sent to multiple fresh addresses. Only one output is the real payment — the others return to the sender's wallet.
Denominations
The wallet selects the largest denomination that produces at least 3 equal outputs from the payment amount.
Consensus Enforcement (after block 1,500)
Every spending transaction (excluding coinbase, coinstake, and peg-out) must contain at least RING_MIXING_MIN_EQUAL_OUTPUTS = 3 outputs of the same value (excluding zero-value OP_RETURN markers). Blocks violating this are rejected with DoS(100).
// Count outputs by denomination (excluding OP_RETURN) std::map<int64_t, int> mapOutputCounts; for (const CTxOut& out : tx.vout) { if (out.nValue > 0) mapOutputCounts[out.nValue]++; } int nMaxEqual = max_element(mapOutputCounts)->second; if (nMaxEqual < RING_MIXING_MIN_EQUAL_OUTPUTS) return DoS(100, error("Ring mixing violation"));
RPC Commands
# Mix a specific amount into equal-denomination outputs $ MaryJaneCoind coinjoin 5000 { "txid": "abc123...", "inputs": 2, "outputs": 5, "denomination": 1000.00000000, "total_mixed": 5000.00000000, "fee": 0.42000000 } # Auto-mix the optimal amount from wallet balance $ MaryJaneCoind coinjoinauto { "txid": "def456...", "inputs": 1, "outputs": 20, "denomination": 1000.00000000, "total_mixed": 20000.00000000, "fee": 0.42000000 } # Check available denominations and capacity $ MaryJaneCoind coinjoininfo { "balance": 802343759.84, "min_outputs": 3, "max_outputs": 20, "denominations": [ {"amount": 1000.00, "outputs": 20, "usable": true}, {"amount": 100.00, "outputs": 20, "usable": true}, {"amount": 10.00, "outputs": 20, "usable": true}, {"amount": 1.00, "outputs": 20, "usable": true} ] }
On-Chain Transaction Structure (after ring mixing)
An observer sees three outputs of exactly 1,000 MARYJ going to three different one-time stealth addresses. They cannot determine which is the real payment and which are self-churn. Combined with stealth addresses, both the recipient identity AND the payment amount are obscured.
4.4 Phase 4: Two-Pool Consensus (Block 2,000)
Purpose
Separate staking identity from spending identity.
Problem
Proof-of-Stake requires publicly verifiable stake weights — validators must prove they control coins of a certain value to produce blocks. This creates an inherent tension with privacy: staking is transparent, but spending should be private. Without separation, a staker's public staking activity can be correlated with their private spending.
Solution
The UTXO set is split into two pools:
UTXOs are classified by their markers:
- Coinbase/coinstake outputs → Transparent
- Outputs with PEGOUT marker (
OP_RETURN "PEGOUT") → Transparent - Outputs with stealth marker (33-byte OP_RETURN) → Shielded
- All others → Transparent
enum PoolType { POOL_TRANSPARENT = 0, // For staking POOL_SHIELDED = 1, // For spending };
Pool Transfer Commands
# Move coins from transparent pool to shielded pool (stealth send-to-self) $ MaryJaneCoind pegin 10000 "abc123..." # txid # Move coins from shielded pool to transparent pool (creates PEGOUT marker) $ MaryJaneCoind pegout 5000 "def456..." # txid # Check pool balances $ MaryJaneCoind getpoolbalances { "transparent": 898437511.02, "shielded": 1562488.98, "total": 900000000.00, "two_pool_active": false, "activation_height": 2000 }
Consensus Enforcement (after block 2,000)
- All spending transactions must have a stealth marker OR a PEGOUT marker
- The staking kernel (
CreateCoinStake) only selects UTXOs from the transparent pool - Plain P2PKH transactions with neither marker are rejected with
DoS(100)
This creates a clean separation: your staking address produces blocks and earns fees transparently, but when you spend those earnings, you peg-in to the shielded pool first. The spending transaction is stealth + ring mixed, completely unlinkable to your staking identity.
5. Network Privacy: Tor Integration
All staking nodes support routing P2P traffic through the Tor anonymity network via the inherited Bitcoin -proxy= flag:
proxy=127.0.0.1:9050 onlynet=ipv4
With Tor enabled, the node's real IP address is hidden from all peers. Combined with Dandelion++ relay, an observer cannot determine:
- Which IP originated a transaction (Tor hides the node)
- Which node broadcast it first (Dandelion++ randomizes the relay path)
The seed nodes remain non-Tor for discoverability, but all staking nodes (which hold funds) operate behind Tor.
6. Solana Bridge
6.1 Architecture
The bridge is a Node.js application running on a private server (never exposed to the internet). It monitors both chains and executes atomic swaps:
Key security property: The bridge engine runs on a private node with no inbound ports. It reads both chains via RPC and submits transactions outbound only. The bridge dashboard is a static HTML page hosted separately — it has no backend connection to the bridge engine.
6.2 Solana → MaryJaneCoin (Bridge In)
- User sends SPL MARYJ tokens to the bridge escrow ATA on Solana
- User includes a Memo instruction with their MaryJaneCoin address (must start with 'M')
- Solana watcher detects the transfer after 30 confirmations
- Bridge executor selects a best-fit UTXO from the escrow wallet
- Bridge sends the equivalent MARYJ to the user's mainchain address
- Change goes to a fresh escrow address
6.3 MaryJaneCoin → Solana (Bridge Out)
Users can bridge out directly from the daemon CLI:
$ MaryJaneCoind bridgetosol 1000 "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU" { "txid": "f1fcc779...", "amount": 1000.00000000, "escrow_address": "MFqkH1fjMvYLLvNhce1BzRCgEQnjc8Lfxx", "solana_address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU" }
The bridgetosol RPC command:
- Validates the Solana address (base58, 32-44 characters)
- Sends the specified amount to the configured escrow address
- Attaches an OP_RETURN output containing the raw ASCII bytes of the Solana recipient address
- The MaryJaneCoin watcher detects the deposit after 10 confirmations
- The bridge executor sends the equivalent SPL tokens to the Solana address
On-Chain Transaction Structure
6.4 Configuration
# MaryJaneCoin.conf bridgeescrow=MFqkH1fjMvYLLvNhce1BzRCgEQnjc8Lfxx bridgeminamount=1
7. Proof-of-Stake Consensus
7.1 Stake Kernel
MaryJaneCoin uses a HyperStake-derived PoS kernel. The stake hash is computed as:
hash = SHA256d(nStakeModifier + blockFrom.nTime + txPrev.offset +
txPrev.nTime + txPrev.vout.n + nTimeTx)
The hash must satisfy:
hash < bnTargetPerCoinDay × nCoinDayWeight
Where nCoinDayWeight = nValueIn × nTimeWeight / COIN / 86400 — a function of the UTXO's value and age. Larger and older UTXOs have proportionally better chances of finding a valid stake.
7.2 Zero-Reward Staking
MaryJaneCoin's 0% inflation model required a modification to the standard staking code. The original codebase rejected stake blocks with zero rewards:
// Original (broken for zero-inflation chains): if (nReward <= 0) return false; // Fixed: if (nReward < 0) return false;
This allows the chain to produce valid Proof-of-Stake blocks even when there are no pending transaction fees, ensuring the network never stalls due to an empty mempool.
7.3 Staking Parameters
8. Privacy Activation Timeline
| Block Height | Phase | Consensus Rule |
|---|---|---|
| 0 | Genesis | PoW bootstrap, Dandelion++ active |
| 500 | Pure PoS | Last PoW block, chain transitions to Proof-of-Stake |
| 1,000 | Mandatory Stealth | All spending TXs must have 33-byte stealth OP_RETURN marker. Blocks without are rejected DoS(100). |
| 1,500 | Mandatory Ring Mixing | All spending TXs must have ≥ 3 equal-value outputs. Blocks without are rejected DoS(100). |
| 2,000 | Two-Pool System | UTXO set splits into transparent (staking) and shielded (spending) pools. Staking restricted to transparent UTXOs. All spending must go through shielded pool. |
Visual Timeline
Network launches with X13 Proof-of-Work mining. Dandelion++ transaction relay is active from the first block. Entire 1B supply minted at block 1.
Last PoW block mined. Chain transitions to pure Proof-of-Stake consensus. All blocks now produced by staking nodes.
Every spending transaction must include a stealth marker (33-byte OP_RETURN with ephemeral pubkey). Recipient addresses are now unlinkable. Blocks violating this rule are rejected.
Every spending transaction must produce at least 3 equal-denomination outputs. Payment amounts are now obscured by mandatory CoinJoin churning.
UTXO set splits into transparent (staking) and shielded (spending) pools. Full privacy stack is now live. Staking identity and spending identity are completely separated.
At the target block time of 260 seconds, all four privacy layers are fully active within one week of launch at the consensus level.
8.1 BIP47 Reusable Payment Codes (Active from Genesis)
Purpose
Enable ongoing private payment relationships without repeated address exchange.
Problem
Standard stealth addresses require the sender to know the recipient's stealth address for each payment. If Alice wants to receive regular payments from Bob, she must share her stealth address through a secure channel. BIP47 solves this with a one-time notification transaction that establishes a permanent shared secret.
How It Works
1. Alice generates a reusable payment code — a single string she can publish publicly:
$ MaryJaneCoind getpaymentcode { "payment_code": "PM8TJJvP5XPvcn4oy75XBydTpZrZxtKSYBqRtj7WuVywEYaWJmWcnpPyCi2AZVhbtZudqu4Go2fGQeFdeyRFtqtwkjRkmFPPWFDkLYvtpGPBeipi8nG4", "notification_address": "MPNLrBVBYYWKpSNdKJ3ABipZEUC8aDvsYZ", "scan_pubkey": "0209683bcb222d6f8f8d0c9d13432a...", "spend_pubkey": "0328c613cd05ba604e049acfc5cdf1..." }
2. Bob sends a notification transaction to Alice's notification address. This one-time TX carries Bob's payment code (blinded with an ECDH shared secret) in an OP_RETURN output:
$ MaryJaneCoind sendtonotify "PM8TJJvP5XPvcn4oy75XBydTpZrZxtKSYBqRtj7WuVywEYaWJmWcnpPyCi2AZVhbtZudqu4Go2fGQeFdeyRFtqtwkjRkmFPPWFDkLYvtpGPBeipi8nG4" { "txid": "abc123...", "notification_address": "MPNLrBVBYYWKpSNdKJ3ABipZEUC8aDvsYZ", "status": "notification_sent" }
3. Alice scans the blockchain for notification TXs sent to her notification address:
$ MaryJaneCoind scannotifications 2 # Found 2 inbound payment code notifications
4. Now Bob can generate unlimited unique stealth addresses for Alice using the shared secret, without any further interaction:
$ MaryJaneCoind deriveaddress "PM8TJJvP5XP..." 0 {"index": 0, "address": "MQx7k9f...", "pubkey": "02a1b2c3..."} $ MaryJaneCoind deriveaddress "PM8TJJvP5XP..." 1 {"index": 1, "address": "MRy8l0g...", "pubkey": "03d4e5f6..."}
5. List all payment channel relationships:
$ MaryJaneCoind listpaymentcodes [ { "payment_code": "PM8TJKx...", "label": "Bob", "notification_sent": true, "notification_received": true, "next_send_index": 3, "next_recv_index": 1 } ]
Notification Blinding Protocol
The notification TX must not reveal Alice's payment code to observers. The 80-byte payment code payload is XOR-blinded with a mask derived from ECDH(sender_scan_privkey, receiver_scan_pubkey). Only Alice can unblind it using her scan private key. The blinded payload is carried in an OP_RETURN output.
Key Properties
- Alice publishes her payment code once (on a website, social media, or QR code)
- Anyone can establish a channel with a single notification TX
- After notification, unlimited stealth payments flow without interaction
- Each payment goes to a unique one-time address (same DKSAP as Phase 1 stealth)
- The notification TX itself reveals only the notification address, not the payment code relationship
9. RPC Command Reference
Privacy Commands
| Command | Parameters | Description |
|---|---|---|
getnewstealthaddress | [label] | Generate a new stealth address for receiving private payments |
liststealthaddresses | none | List all stealth addresses with scan/spend pubkeys |
sendtostealthaddress | <stealth_addr> <amount> | Send privately to a stealth address |
scanstealthpayments | none | Scan blockchain for incoming stealth payments |
coinjoin | <amount> | Mix amount into equal-denomination outputs |
coinjoinauto | none | Auto-mix optimal amount from balance |
coinjoininfo | none | Show available denominations and capacity |
getpoolbalances | none | Show transparent/shielded pool balance split |
pegin | <amount> | Move coins: transparent → shielded pool |
pegout | <amount> | Move coins: shielded → transparent pool |
BIP47 Payment Code Commands
| Command | Parameters | Description |
|---|---|---|
getpaymentcode | none | Get your reusable BIP47 payment code |
sendtonotify | <payment_code> | Send notification TX to establish a payment channel |
listpaymentcodes | none | List all payment channel relationships |
deriveaddress | <payment_code> <index> | Derive a specific address at index (debug) |
scannotifications | none | Scan blockchain for inbound notification TXs |
Bridge Commands
| Command | Parameters | Description |
|---|---|---|
bridgetosol | <amount> <solana_addr> | Bridge MARYJ to Solana SPL token |
Privacy Status (via getinfo)
| Field | Type | Description |
|---|---|---|
stealth_mandatory | bool | True when chain is past block 1,000 |
stealth_activation_height | int | 1,000 |
ring_mixing_mandatory | bool | True when chain is past block 1,500 |
ring_mixing_activation_height | int | 1,500 |
two_pool_active | bool | True when chain is past block 2,000 |
two_pool_activation_height | int | 2,000 |
automix_enabled | bool | Whether background auto-mixing is active |
10. Future Development
10.1 Confidential Transactions (Phase 3)
Infrastructure stubs exist for Pedersen commitments and Bulletproof range proofs. When libsecp256k1-zkp is integrated, transaction amounts will be cryptographically hidden while still provably valid (inputs = outputs). This is the primary remaining privacy gap — currently amounts are visible even though recipients and payment graphs are obscured.
10.2 MWEB Extension Blocks
The long-term vision is Mimblewimble Extension Blocks (MWEB), as shipped by Litecoin in 2022. MWEB provides a parallel chain where all data — amounts, addresses, and transaction graph — is hidden. Coins move between the main chain and MWEB via peg-in/peg-out transactions.
10.3 PayJoin
When two parties are both sending transactions, they combine inputs into a single transaction. An observer cannot determine who paid whom, breaking the "common input ownership" heuristic used by chain analysis firms.
11. Infrastructure
11.1 Live Network
Iquidus block explorer with SSL
Static bridge status page
Offline wallet generator
P2P seed node (AWS)
SPV wallet server (SSL)
11.2 Node Architecture
| Node | Role | Tor? |
|---|---|---|
| Pi4A | Primary staker, bridge engine | Yes |
| Pi4B | Backup staker, cold storage | Yes |
| AWS | Public seed, explorer, ElectrumX | No (must be discoverable) |
12. Conclusion
MaryJaneCoin represents a new model for privacy cryptocurrency distribution: launch on the most liquid DEX platform (Solana pump.fun), then bridge to a dedicated privacy chain. Users get the best of both worlds — Solana's liquidity and UX for trading, and MaryJaneCoin's consensus-enforced privacy for holding and spending.
The layered privacy activation ensures that within one week of launch, all transactions on the MaryJaneCoin blockchain are stealth-addressed, ring-mixed, and pool-separated — not by user choice, but by consensus rule. Privacy is not a feature you enable. It's a property of the chain.
Your keys. Your privacy. Your MaryJaneCoin.