βββββββββββ ββββββββββ ββββββ βββ ββββββββββ βββ ββββββ βββββββ βββ
βββββββββββ βββββββββββ βββββββ βββββββββββββββ βββββββββββββββββββ βββ
βββββββββββββββββββββββββ βββ βββββββ βββ βββββββββββββββββββββββββ βββ
βββββββββββββββββββββββββββββ βββββ βββ βββββββββββββββββββββββββββββ
βββββββββββ βββββββββ ββββββ βββ βββββββββββ ββββββ βββββββββ ββββββ
βββββββββββ βββββββββ βββββ βββ ββββββββββ ββββββ βββββββββ βββββ
A fully private, instant-mining blockchain β forked from Wownero (Monero fork)
Mine 3,600 SHINY every block. No peers. No halving. No waiting. Completely yours.
π Quick Start Β β’Β π Commands Β β’Β π§ Build from Source Β β’Β π Web Explorer Β β’Β π¬ Source Changes
ShinyChain is a fully isolated, private blockchain built on Wownero (itself a Monero fork). It is designed for solo mining, development, research, and learning β completely air-gapped from every public network. You own the entire chain. You mine every block. You receive every coin.
No registration. No cloud. No fees. Runs 100% on your machine.
| Property | ShinyChain | Wownero (upstream) |
|---|---|---|
| Block Reward | β Fixed 3,600 SHINY forever | Decaying emission curve |
| Mining Difficulty | β Always 1 (instant CPU mining) | Adjusted every block |
| Block Time Target | 60 seconds | 120 seconds |
| Coin Unlock | β 1 block (~60 seconds) | 10 blocks |
| Hard Fork Version | v15 from block 1 | Progressive upgrade |
| Seed Nodes | β None (fully private) | Public seed nodes |
| Checkpoints | β None (no sync conflicts) | Yes |
| Network ID | Custom UUID (isolated) | Wownero ID |
| P2P Port | 44567 | 34567 |
| RPC Port | 44568 | 34568 |
| ZMQ Port | 44569 | 34569 |
| Address Prefix | Sh1... (prefix 19353) |
Wo... |
| Privacy | Full RingCT + Bulletproofs | Full RingCT + Bulletproofs |
- β‘ Instant Mining β Difficulty is fixed at 1. Every single CPU hash is a valid block. No GPU, no ASIC, no proof-of-work wait time.
- π° Fixed Huge Reward β Exactly 3,600 SHINY per block, every block, forever. No halving. No emission curve. Predictable income.
- π Fully Private & Isolated β Custom Network ID + zero seed nodes = no outside node can ever connect, join, or sync. Your chain is yours alone.
- π Fast Unlock β Mined coins are spendable after just 1 confirmation (~60 seconds).
- π‘οΈ Real Privacy Tech β Full RingCT transactions. Amounts and recipients are hidden on-chain. Real Bulletproofs zero-knowledge proofs.
- π³ Docker Ready β Three-container stack (daemon + wallet + web) launches with a single command. No manual setup needed.
- π Built-in Web UI β Block explorer + browser-based wallet at
http://localhost:9753. Explore blocks, check balance, send coins β all in your browser. - π± Multi-Platform β Runs on Linux, WSL2 (Windows), macOS, and even Android (Termux).
- π Latest Features from Block 1 β Hard fork v15 active from genesis. Subaddresses, RingCT, Bulletproofs β all available immediately.
ShinyChain runs as three coordinated Docker containers:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Your Machine β
β β
β ββββββββββββββββββββ ββββββββββββββββββββ β
β β shinychain_ β β shinychain_ β β
β β wallet βββββΆβ daemon β β
β β β β β β
β β β’ Creates wallet β β β’ Runs blockchainβ β
β β β’ Wallet RPC β β β’ Auto-mines β β
β β β’ Port 18083 β β β’ Port 44568 β β
β ββββββββββββββββββββ ββββββββββββββββββββ β
β β β β
β βββββββββββββ¬ββββββββββββ β
β βΌ β
β ββββββββββββββββββββββββ β
β β shinychain_web ββββ http://localhost:9753 β
β β β β
β β β’ Block explorer β β
β β β’ Wallet UI β β
β β β’ Port 9753 β β
β ββββββββββββββββββββββββ β
β β
β Persistent volumes: chain_data / wallet_data / web_wallet β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Startup sequence: wallet creates/loads wallet β writes mining address β daemon reads address β daemon starts mining β web connects to daemon for explorer data.
Recommended method. No compilation needed. Works on any OS with Docker.
# Linux / WSL2 (Ubuntu)
sudo apt-get install docker.io docker-compose-plugin
# macOS / Windows β install Docker Desktop from https://docker.com# 1. Clone this repo
git clone https://github.com/Lord1Egypt/ShinyChain.git
cd ShinyChain/docker
# 2. Build the image (one-time, ~1 min with prebuilt binaries)
docker compose build
# 3. Launch all 3 containers (daemon + wallet + web)
docker compose up -d
# 4. Watch startup logs (Ctrl+C to exit logs, containers keep running)
docker compose logs -f
# 5. Open the web explorer + wallet in your browser
# http://localhost:9753That's it. Mining starts automatically. Coins accumulate in your wallet.
# Stop (keeps all blockchain data and coins)
docker compose down
# FULL RESET β deletes ALL coins and blockchain (creates new wallet)
docker compose down -v
docker compose up -d# Check your balance (total + unlocked)
docker exec shinychain_wallet balance
# Send coins to an address
docker exec shinychain_wallet transfer <ADDRESS> <AMOUNT>
docker exec shinychain_wallet transfer Sh1pABC...XYZ 1000
# Generate a new subaddress (to receive payments)
docker exec shinychain_wallet new-address
docker exec shinychain_wallet new-address my-label
# Self-test: creates a subaddress and sends coins to it
docker exec shinychain_wallet test-transfer
docker exec shinychain_wallet test-transfer 5000
# Show your wallet address + 25-word seed phrase
docker exec shinychain_wallet cat /wallet/wallet_info.txt
# Interactive wallet shell (full wallet CLI)
docker exec -it shinychain_wallet bashFee note: This chain requires ~8Γ the default fee estimate. Helper scripts use priority 3 automatically. If you see "fee too low", use
PRIORITY=4:PRIORITY=4 docker exec shinychain_wallet transfer <ADDRESS> <AMOUNT>
# Show mining status (active?, speed, threads)
docker exec shinychain_daemon mine-status
# Stop mining
docker exec shinychain_daemon mine-stop
# Start mining (mines to your wallet address)
docker exec shinychain_daemon mine-start
# Show daemon status and blockchain height
docker exec shinychain_daemon wownerod status
# Interactive shell inside the daemon container
docker exec -it shinychain_daemon bash# Start all 3 containers
docker compose up -d
# Stop (keeps blockchain + wallet data)
docker compose down
# Show container status
docker compose ps
# Tail live logs (all containers)
docker compose logs -f
# Tail logs for a specific container
docker compose logs -f daemon
docker compose logs -f wallet
docker compose logs -f web
# FULL RESET β wipes all coins + blockchain
docker compose down -v && docker compose up -dOpen http://localhost:9753 in any browser on your machine.
|
π Explorer Tab
|
π Wallet Tab
|
Security: The web app is served locally only. Never enter your seed phrase on a site you do not fully control.
Use this if you want to compile native binaries without Docker.
# Install build dependencies
sudo apt-get install build-essential cmake pkg-config libssl-dev \
libzmq3-dev libunbound-dev libsodium-dev libunwind8-dev \
libreadline-dev libboost-all-dev
# Clone this repo
git clone https://github.com/Lord1Egypt/ShinyChain.git
cd ShinyChain
# Compile β ALWAYS use -j2 (more threads will freeze low-RAM machines)
make -j2
# Binaries appear at:
# build/Linux/master/release/bin/wownerod
# build/Linux/master/release/bin/wownero-wallet-cli
# build/Linux/master/release/bin/wownero-wallet-rpccd build/Linux/master/release/bin/
# Create a new wallet
./wownero-wallet-cli --generate-new-wallet mywallet \
--password "password" --mnemonic-language English --command address
# Start daemon + auto-mining (replace ADDRESS with your wallet address)
./wownerod --non-interactive --start-mining <YOUR_ADDRESS> --mining-threads 2
# Wait 15 seconds, then trigger mining
./wownerod start_mining <YOUR_ADDRESS> 2
# Check status
./wownerod status# Clone the exact Wownero base commit
git clone https://github.com/wowario/wownero.git
cd wownero
git checkout b6e08f8c7
git submodule update --init --recursive
# Apply all ShinyChain changes
git apply /path/to/shinychain.patch
# Compile
make -j2# Install Termux from F-Droid (NOT Play Store)
# https://f-droid.org/en/packages/com.termux/
pkg update
pkg install git cmake make clang python3 \
boost openssl unbound libsodium readline libzmq \
protobuf libudev pkg-config
# Copy shinychain.patch and setup_shinychain.sh to ~/
chmod +x setup_shinychain.sh
./setup_shinychain.sh
# Compile (use -j1 on slow phones to avoid overheating)
cd wownero && make -j2ShinyChain modifies exactly 7 files from Wownero upstream. All changes are captured in shinychain.patch.
| File | What Changed | Effect |
|---|---|---|
src/cryptonote_config.h |
Name β shinychain; ports 44567/44568/44569; custom network UUID; block time 60s; unlock window 1; reward 3600/block; address prefix 19353 |
Defines the entire chain identity and timing |
src/cryptonote_basic/cryptonote_basic_impl.cpp |
get_block_reward() returns fixed 3600 * COIN |
Eliminates the emission curve β every block pays exactly 3,600 SHINY forever |
src/cryptonote_basic/difficulty.cpp |
All difficulty functions return 1 |
Every CPU hash is valid β no real proof-of-work, instant mining |
src/hardforks/hardforks.cpp |
Single entry: v15 from block 1 | Activates all latest protocol features (Bulletproofs, RingCT, subaddresses) from genesis |
src/checkpoints/checkpoints.cpp |
All checkpoints removed | No sync conflicts on a private isolated chain |
src/p2p/net_node.inl |
All seed nodes commented out | Daemon can never discover or connect to external peers |
src/rpc/core_rpc_server.cpp |
check_core_ready() returns true when peers = 0 |
Mining RPC works on a standalone node without requiring --offline flag |
π Deep Dive: How Instant Mining Works
Standard Monero-based blockchains use the RandomX (or RandomWOW) proof-of-work algorithm. The network continuously adjusts difficulty so that, on average, only one miner in the entire network finds a valid hash in the target block time.
ShinyChain removes this entirely by making every hash valid:
// src/cryptonote_basic/difficulty.cpp β ShinyChain version
uint64_t next_difficulty(std::vector<uint64_t> timestamps,
std::vector<uint64_t> cumulative_difficulties,
size_t target_seconds) {
return 1; // every hash is valid
}With difficulty = 1, the daemon mines thousands of blocks per second on a single CPU core. The 60-second block target becomes a soft suggestion; in practice blocks arrive much faster.
π° Deep Dive: Fixed Block Reward
Wownero (like Monero) uses a decaying emission formula where the reward shrinks over time toward a fixed "tail emission." ShinyChain replaces this with a constant:
// src/cryptonote_basic/cryptonote_basic_impl.cpp β ShinyChain version
bool get_block_reward(size_t median_weight, size_t current_block_weight,
uint64_t already_generated_coins,
uint64_t &reward, uint64_t &reward_without_fee,
uint64_t version) {
reward = reward_without_fee = 3600 * COIN; // fixed forever
return true;
}Every block, forever: 3,600.000000000000 SHINY.
ShinyChain/
βββ shinychain.patch β All 7 source file changes in one patch
βββ setup_shinychain.sh β Automated setup script for new machines
βββ SHINYCHAIN_GUIDE.txt β Complete master guide (features, commands, troubleshooting)
βββ shinychain_bundle.tar.gz β Portable bundle (patch + scripts + docker, no binaries)
β
βββ docker/
β βββ Dockerfile β Image definition (copies prebuilt binaries)
β βββ docker-compose.yml β 3-service stack (daemon + wallet + web)
β βββ entrypoint.sh β Container startup logic (3 service modes)
β βββ webapp.py β Block explorer + wallet UI (pure Python stdlib)
β βββ balance.sh β docker exec helper: check balance
β βββ transfer.sh β docker exec helper: send coins
β βββ new-address.sh β docker exec helper: generate subaddress
β βββ test-transfer.sh β docker exec helper: self-test transfer
β βββ mine-start.sh β docker exec helper: start mining
β βββ mine-stop.sh β docker exec helper: stop mining
β βββ mine-status.sh β docker exec helper: mining status
β βββ COMMANDS.txt β Quick reference card
β βββ README.txt β Docker-specific guide
β
βββ src/ β Modified Wownero source files
βββ cryptonote_config.h β Chain identity
βββ cryptonote_basic/cryptonote_basic_impl.cpp β Fixed reward
βββ cryptonote_basic/difficulty.cpp β Difficulty = 1
βββ hardforks/hardforks.cpp β v15 from genesis
βββ checkpoints/checkpoints.cpp β No checkpoints
βββ p2p/net_node.inl β No seed nodes
βββ rpc/core_rpc_server.cpp β Solo RPC fix
"Genesis block mismatch" when opening wallet
Cause: The wallet cache was created with a different binary (genesis hash changed after recompile).
Fix:
cd build/Linux/master/release/bin/
rm -f mywallet
./wownero-wallet-cli --restore-deterministic-wallet \
--wallet-file mywallet --password "password" \
--electrum-seed "YOUR 25 WORDS HERE""Failed to add genesis block"
rm -rf ~/.shinychain/lmdb
# Restart daemon β it regenerates genesis automaticallyBalance shows 0 after refresh
rm -f mywallet
./wownero-wallet-cli --wallet-file mywallet --password "password" \
--daemon-port 44568 --restore-height 0 --command refresh"Mining did not start -- BUSY"
The daemon is still initializing. Wait 15 seconds after startup, then:
./wownerod start_mining YOUR_ADDRESS 2Compilation freezes the system
Always compile with exactly 2 threads:
make -j2 # correct
make # wrong β uses all CPU cores, freezes low-RAM machines
make -j8 # wrong"fee too low" on transfer
# Use priority 4 (highest fee tier)
PRIORITY=4 docker exec shinychain_wallet transfer ADDRESS AMOUNTDocker build fails with "out of memory"
Increase Docker memory limit to 4 GB+ in Docker Desktop β Settings β Resources.
With difficulty = 1, you mine as fast as your CPU can hash:
| Timeframe | Blocks | SHINY Earned |
|---|---|---|
| Per minute | ~1+ | ~3,600+ |
| Per hour | ~60+ | ~216,000+ |
| Per day | ~1,440+ | ~5,184,000+ |
| Per week | ~10,080+ | ~36,288,000+ |
Actual rate depends on CPU speed. In practice, blocks come faster than the 60-second target because difficulty = 1 never adjusts.
| Volume | Contents | Deleted on down -v? |
|---|---|---|
chain_data |
Blockchain LMDB database | Yes β re-mines from scratch |
wallet_data |
Wallet keys + info file | Yes β new wallet created |
shared_data |
Temp address file | Yes β auto-recreated |
web_wallet |
Web UI cached wallets | Yes β re-restored from seed |
Back up your wallet seed before any down -v. The seed is at:
docker exec shinychain_wallet cat /wallet/wallet_info.txtWSL2 resets wipe all Docker volumes. Back up the chain data if needed:
/var/lib/docker/volumes/docker_chain_data/_data/lmdb/
To run ShinyChain on a new machine without cloning the full repo:
# Pack (run on your current machine)
tar -czf shinychain_bundle.tar.gz \
shinychain.patch setup_shinychain.sh SHINYCHAIN_GUIDE.txt docker/
# Unpack and run (on the new machine)
tar -xzf shinychain_bundle.tar.gz
chmod +x setup_shinychain.sh
./setup_shinychain.sh # clones Wownero, applies patch, compiles
cd docker
docker compose build
docker compose up -dShinyChain was created and is maintained by Lord1Egypt.
Built on top of:
- Wownero β a privacy-focused Monero fork
- Monero β the gold standard of private cryptocurrency
- RandomWOW proof-of-work (difficulty hardcoded to 1 in ShinyChain)
- Bulletproofs zero-knowledge range proofs
- RingCT for hidden transaction amounts and recipients
| Change | File |
|---|---|
| Chain identity: name, ports, network UUID, address prefix | src/cryptonote_config.h |
| Block time 60s, unlock window 1 block, spendable age 1 | src/cryptonote_config.h |
| Fixed block reward: 3,600 SHINY forever | src/cryptonote_basic/cryptonote_basic_impl.cpp |
| Mining difficulty always = 1 (instant mining) | src/cryptonote_basic/difficulty.cpp |
| Hard fork v15 from genesis block | src/hardforks/hardforks.cpp |
| Removed all checkpoints | src/checkpoints/checkpoints.cpp |
| Removed all seed nodes | src/p2p/net_node.inl |
| Solo mining RPC fix (works without peers) | src/rpc/core_rpc_server.cpp |
| Full Docker stack (daemon + wallet + web) | docker/ |
| Block explorer + browser wallet UI | docker/webapp.py |
| Automated multi-platform setup script | setup_shinychain.sh |