Whitepaper v1.0

MaryJaneCoin

A Privacy-Layered Proof-of-Stake Cryptocurrency with Native Solana Bridge

The first privacy blockchain to launch via pump.fun.

Ticker MARYJ
Consensus Proof-of-Stake
Max Supply 1,000,000,000
Block Time 4m 20s
Genesis April 8, 2026
SPL Launch April 20, 2026 · 4/20
SPL Contract Address · Solana MARYJkS2kHxmVkQp8baNUL7d3R1pddLr65GgsArJAYY
🌿 VANITY MINT · LIVE 2026-04-20
1 in 11.2B
MARYJ prefix · case-sensitive
1 in 11.3M
JAYY postfix · case-sensitive
1 in 128 quadrillion
Combined · ~17× harder than naive 589

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:

  1. Launch on pump.fun — instant Solana DEX liquidity, meme-driven community building, standard SPL token trading
  2. 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
  3. 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

ParameterValue
Name / TickerMaryJaneCoin / MARYJ
ConsensusProof-of-Stake (pure PoS after block 500)
Hashing AlgorithmX13 (PoW phase), SHA-256d stake kernel
Block Time260 seconds (4 minutes, 20 seconds)
Max Supply1,000,000,000 MARYJ (fixed, zero inflation)
Block 1 Premine1,000,000,000 MARYJ (entire supply)
PoS Stake Reward0% (transaction fees only)
Minimum TX Fee0.420 MARYJ
Address PrefixM (pubkey version byte 50)
P2P Port14200
RPC Port14201
Message Magic0x44455250 ("DERP")
Coinbase Maturity10 blocks
Stake Minimum Age15 minutes
Stake Maximum Age25 days
Last PoW Block500
Data Directory~/.MaryJaneCoin
Genesis Hash000001b8e7e172fd4b860cd42ae50de44334d4969376871eab0d9e58e48525b2
Genesis Timestamp1775670000 (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:

C++ — main.cpp
// 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:

  1. A 1 billion MARYJ SPL token launches on pump.fun (Solana)
  2. The mainchain premines exactly 1 billion MARYJ at block 1
  3. The entire premine sits in a bridge escrow wallet
  4. The bridge provides 1:1 atomic swaps between SPL and native MARYJ
  5. Users buy MARYJ on Solana DEXes and bridge to mainchain for privacy
  6. 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:

Whale
10,000,000

10 UTXOs · 100M total

Large
5,000,000

20 UTXOs · 100M total

Medium
1,000,000

50 UTXOs · 50M total

Standard
500,000

100 UTXOs · 50M total

Small
100,000

100 UTXOs · 10M total

Micro
10,000

100 UTXOs · 1M total

Dust
1,000

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.

Maximum Privacy
Phase 4 — Block 2,000
Two-Pool Consensus

Separate staking from spending — transparent pool for validators, shielded pool for transactions

Phase 2 — Block 1,500
Ring Mixing

Obfuscate the payment graph with mandatory equal-denomination outputs

Phase 1 — Block 1,000
Mandatory Stealth Addresses

Hide recipient identity with one-time destination addresses on every transaction

Phase 0 — Always Active
Dandelion++ Relay

Hide sender IP with two-phase stem/fluff transaction propagation

Baseline (transparent, like Bitcoin)

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:

  1. 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.
  2. 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.
DANDELION_EPOCH_SECONDS
600 — stem peer rotation every 10 min
DANDELION_STEM_PEERS
2 — outbound stem relays per epoch
DANDELION_FLUFF_PROBABILITY
0.10 — 10% fluff chance per hop
DANDELION_EMBARGO_SECONDS
30 — force-fluff timeout
DANDELION_MAX_STEM_HOPS
10 — maximum stem length

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

Stealth Address 8m9bqV3BiMkaajrYh7M9JwsS15b345x2idX7x6xYQfp26QnBBjNiuFM9q4twkYATeec953ydtZwiVgajqdLe8tESXUMP6nAJA Encodes: version_byte(0x28) + scan_pubkey(33 bytes) + spend_pubkey(33 bytes) + checksum

Protocol

When Alice wants to receive a payment, she publishes her stealth address. When Bob sends to it:

  1. Bob generates a random ephemeral keypair (r, R = r·G)
  2. Bob computes the shared secret: S = SHA256(ECDH(r, Alice_scan_pubkey))
  3. Bob derives a one-time destination: dest = Alice_spend_pubkey + SHA256(S)·G
  4. Bob sends the payment to Hash160(dest) — an address that has never appeared on the blockchain before
  5. Bob attaches R (the 33-byte compressed ephemeral public key) as an OP_RETURN output

When Alice scans the blockchain:

  1. Alice sees the OP_RETURN containing R
  2. Alice computes: S = SHA256(ECDH(Alice_scan_privkey, R))
  3. Alice derives: dest = Alice_spend_pubkey + SHA256(S)·G
  4. Alice checks if any output in the transaction pays to Hash160(dest)
  5. 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).

C++ — main.h
// 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

MaryJaneCoind
# 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

Transaction Outputs
Output 0: 100.00000000 MARYJ [one-time P2PKH address] payment
Output 1: 49.58000000 MARYJ [change address] change
Output 2: 0.00000000 MARYJ OP_RETURN [33-byte ephemeral pubkey R] stealth marker

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

1,000 MARYJ — standard
100 MARYJ — medium
10 MARYJ — small
1 MARYJ — micro

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).

C++ — Consensus Validation
// 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

MaryJaneCoind
# 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)

Ring Mixed Transaction Outputs
Output 0: 1000.00000000 MARYJ [stealth address A] real payment
Output 1: 1000.00000000 MARYJ [stealth address B] self-churn
Output 2: 1000.00000000 MARYJ [stealth address C] self-churn
Output 3: 749.58000000 MARYJ [change address] change
Output 4: 0.00000000 MARYJ OP_RETURN [ephemeral key R] stealth marker

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:

Transparent Pool
Purpose Staking, receiving peg-outs
Privacy Visible amounts, standard P2PKH
Can Stake? Yes
Can Spend? No (after activation)
Shielded Pool
Purpose Private spending
Privacy Stealth + ring mixed
Can Stake? No
Can Spend? Yes

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
C++ — Pool Types
enum PoolType {
    POOL_TRANSPARENT = 0,  // For staking
    POOL_SHIELDED = 1,     // For spending
};

Pool Transfer Commands

MaryJaneCoind
# 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:

MaryJaneCoin.conf
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:

  1. Which IP originated a transaction (Tor hides the node)
  2. 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:

Solana
Blockchain
watch exec
Bridge Engine
Pi4, local only
watch exec
MaryJaneCoin
Blockchain

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)

  1. User sends SPL MARYJ tokens to the bridge escrow ATA on Solana
  2. User includes a Memo instruction with their MaryJaneCoin address (must start with 'M')
  3. Solana watcher detects the transfer after 30 confirmations
  4. Bridge executor selects a best-fit UTXO from the escrow wallet
  5. Bridge sends the equivalent MARYJ to the user's mainchain address
  6. Change goes to a fresh escrow address

6.3 MaryJaneCoin → Solana (Bridge Out)

Users can bridge out directly from the daemon CLI:

MaryJaneCoind
$ MaryJaneCoind bridgetosol 1000 "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"
{
    "txid": "f1fcc779...",
    "amount": 1000.00000000,
    "escrow_address": "MFqkH1fjMvYLLvNhce1BzRCgEQnjc8Lfxx",
    "solana_address": "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU"
}

The bridgetosol RPC command:

  1. Validates the Solana address (base58, 32-44 characters)
  2. Sends the specified amount to the configured escrow address
  3. Attaches an OP_RETURN output containing the raw ASCII bytes of the Solana recipient address
  4. The MaryJaneCoin watcher detects the deposit after 10 confirmations
  5. The bridge executor sends the equivalent SPL tokens to the Solana address

On-Chain Transaction Structure

Bridge Out Transaction
Output 0: 1000.00000000 MARYJ [escrow address] bridge deposit
Output 1: 89.58000000 MARYJ [change address] change
Output 2: 0.00000000 MARYJ OP_RETURN "7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU" Solana address

6.4 Configuration

MaryJaneCoin.conf
# 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:

Stake Hash Formula
hash = SHA256d(nStakeModifier + blockFrom.nTime + txPrev.offset +
               txPrev.nTime + txPrev.vout.n + nTimeTx)

The hash must satisfy:

Stake Target
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:

C++ — Zero-Reward Fix
// 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

Minimum Stake Age
15 minutes
Maximum Stake Age
25 days
Coinbase Maturity
10 blocks
Target Block Time
260 seconds
Combine Threshold
250 MARYJ — auto-combine small staking UTXOs
Hash Drift
45 seconds — kernel timestamp search window
Clock Drift Allowance
60 seconds — maximum future block timestamp

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

Block 0
Genesis — PoW Bootstrap

Network launches with X13 Proof-of-Work mining. Dandelion++ transaction relay is active from the first block. Entire 1B supply minted at block 1.

T+0
Block 500
Pure Proof-of-Stake

Last PoW block mined. Chain transitions to pure Proof-of-Stake consensus. All blocks now produced by staking nodes.

~1.5 days after genesis
Block 1,000
Mandatory Stealth Addresses

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.

~3 days after genesis
Block 1,500
Mandatory Ring Mixing

Every spending transaction must produce at least 3 equal-denomination outputs. Payment amounts are now obscured by mandatory CoinJoin churning.

~4.5 days after genesis
Block 2,000
Two-Pool Consensus

UTXO set splits into transparent (staking) and shielded (spending) pools. Full privacy stack is now live. Staking identity and spending identity are completely separated.

~6 days after genesis

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
$ 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
$ 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
$ 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
$ 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
$ 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

CommandParametersDescription
getnewstealthaddress[label]Generate a new stealth address for receiving private payments
liststealthaddressesnoneList all stealth addresses with scan/spend pubkeys
sendtostealthaddress<stealth_addr> <amount>Send privately to a stealth address
scanstealthpaymentsnoneScan blockchain for incoming stealth payments
coinjoin<amount>Mix amount into equal-denomination outputs
coinjoinautononeAuto-mix optimal amount from balance
coinjoininfononeShow available denominations and capacity
getpoolbalancesnoneShow transparent/shielded pool balance split
pegin<amount>Move coins: transparent → shielded pool
pegout<amount>Move coins: shielded → transparent pool

BIP47 Payment Code Commands

CommandParametersDescription
getpaymentcodenoneGet your reusable BIP47 payment code
sendtonotify<payment_code>Send notification TX to establish a payment channel
listpaymentcodesnoneList all payment channel relationships
deriveaddress<payment_code> <index>Derive a specific address at index (debug)
scannotificationsnoneScan blockchain for inbound notification TXs

Bridge Commands

CommandParametersDescription
bridgetosol<amount> <solana_addr>Bridge MARYJ to Solana SPL token

Privacy Status (via getinfo)

FieldTypeDescription
stealth_mandatoryboolTrue when chain is past block 1,000
stealth_activation_heightint1,000
ring_mixing_mandatoryboolTrue when chain is past block 1,500
ring_mixing_activation_heightint1,500
two_pool_activeboolTrue when chain is past block 2,000
two_pool_activation_heightint2,000
automix_enabledboolWhether 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

Block Explorer
Explorer.MaryJaneCoin.net

Iquidus block explorer with SSL

Bridge Dashboard
Bridge.MaryJaneCoin.net

Static bridge status page

Paper Wallet
Paper.MaryJaneCoin.net

Offline wallet generator

Seed Node
Seeds.MaryJaneCoin.net:14200

P2P seed node (AWS)

ElectrumX
Seeds.MaryJaneCoin.net:50012

SPV wallet server (SSL)

11.2 Node Architecture

NodeRoleTor?
Pi4APrimary staker, bridge engineYes
Pi4BBackup staker, cold storageYes
AWSPublic seed, explorer, ElectrumXNo (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.