Current source alphaEnglish

Understand Luracoin from first principles.

This manual follows the current source: Python reference node, Redis mempool, Electron or localhost wallet, and a testnet with no public seeds or real value.

PathInstall → Node → Wallet → Mine
DifficultyComfortable with a terminal
Last reviewedAugust 31, 2026

Before you start

Know what you are running.

Luracoin is educational alpha software. Testnet and devnet use known genesis credentials; mainnet is intentionally disabled. Treat every balance as disposable learning data.

Testnet assets have no real value.

The node, wallet, protocol, and cryptography have not received an independent security audit. Never use this stack to custody real assets.

What you need

Python3.9 through 3.12
RedisVersion 7 recommended
Node.js22.22.2+ for the wallet
StorageA platform supported by rocksdict

uv is used for the locked development and release workflow, but a normal Python virtual environment is enough for the first local setup. Verify the interpreter explicitly: Python 3.13 and newer are not supported, even if your system names one of them python3.

01

Install the reference node

The current alpha is not yet the version published in the public repository. From a current project checkout, create an isolated environment and install its development extras; the public alpha release is still being prepared.

Node installation
# From the current alpha source checkout
cd luracoin-python
# These examples use 3.12; Python 3.9–3.11 are also supported
python3.12 --version
python3.12 -m venv .venv
source .venv/bin/activate
python -m pip install -e ".[dev]"

redis-cli ping
pytest -q
luracoin --help

macOS · Redis

Homebrew
brew install redis
brew services start redis
redis-cli ping

Ubuntu / Debian · Redis

APT
sudo apt update
sudo apt install -y redis-server
sudo systemctl enable --now redis-server
redis-cli ping
Why Redis?

Redis holds pending transactions and atomic sender-plus-nonce reservations. RocksDB and block files remain the source of truth for confirmed chain state.

02

Run a testnet node

Start the process in the foreground. It opens P2P on TCP 9999 and an authenticated wallet RPC on loopback port 18444.

Start the node
luracoin node   --network testnet   --host 127.0.0.1   --port 9999   --rpc-port 18444
ServiceDefaultExposurePurpose
P2P v20.0.0.0:9999 by defaultGuide overrides to loopbackBlocks, transactions, peers, sync
Wallet RPC v1127.0.0.1:18444Loopback onlyPrivate wallet and node operations
Explorer API127.0.0.1:18000Local by defaultSeparate read-only public-data API
Wallet web127.0.0.1:8080Loopback onlyOptional local browser UI

Expect an isolated node

No public seeds are configured. A fresh process can be initialized and healthy while connected to zero peers. To test networking, pass one or more peer endpoints you control:

Connect a controlled peer
luracoin node --network testnet   --seed node-you-control.example:9999   --host 127.0.0.1   --port 9999 --rpc-port 18444

The first-run commands bind P2P to loopback deliberately. This unaudited alpha has no peer authentication, durable peer scoring, or Sybil protection: do not expose it to the public Internet. Use an explicit LAN address only for a controlled-network experiment.

Inspect local state

Read-only CLI queries
luracoin get-info --network testnet
luracoin get-balance --network testnet <ADDRESS>
luracoin get-block --network testnet <HEIGHT>

Chain data defaults to ~/.luracoin/testnet. Keep a separate directory for every network, and never try to open prototype v1 data as v2.

03

Install and open the wallet

The desktop alpha has no public source release or signed installers yet. These commands apply to a current project checkout after the local node and Redis are available.

Wallet development mode
# From the current alpha source checkout
cd luracoin-wallet
npm ci
npm run electron:dev

The node writes ~/.luracoin/testnet/rpc.token. Electron reads that file only in its main process and never exposes the bearer to the React renderer.

Create a wallet

  1. 1
    Choose “Create a new wallet”.

    Set a local password of at least 12 characters and acknowledge that the recovery phrase is essential.

  2. 2
    Record all 24 words offline.

    The phrase hides again after 60 seconds. Do not photograph it, paste it into chat, or store it in source control.

  3. 3
    Verify the requested words.

    The wallet confirms selected positions before it creates the encrypted vault.

  4. 4
    Select testnet.

    Mainnet is visible only as unavailable and cannot be initialized by the node.

Restore a wallet

Enter the 24 words, open the custom-passphrase option only if you used one, set a new local password, and confirm the derived address. The default BIP39 passphrase is LURA. A custom passphrase changes the derived wallet and is required for recovery.

The recovery phrase is the backup.

The local password encrypts this device; it cannot recreate the wallet. There is no cloud backup, file export, or “reveal seed later” flow in the current UI.

Optional localhost browser mode

Stop the foreground node, build the Vite renderer, then restart the Python node so it serves the wallet alongside its restricted gateway:

Serve the local web wallet
# Stop any running node first, then build the wallet
cd luracoin-wallet
npm ci
npm run build

# Then serve it from the Python node repository
cd ../luracoin-python
source .venv/bin/activate
luracoin node --network testnet --host 127.0.0.1 --port 9999 --rpc-port 18444   --wallet-dir ../luracoin-wallet/dist   --wallet-host 127.0.0.1 --wallet-port 8080

Open http://127.0.0.1:8080. Never publish this port, place it behind a public proxy, or treat 0.0.0.0 as a browser URL.

04

Receive and send test LURA

Fund the wallet before trying to send.

A new wallet starts at zero and there is no public faucet. In an isolated setup, first mine to your testnet address; alternatively, receive test LURA from a peer you control.

Receive

  1. 1
    Open Receive.

    Your one 34-character testnet address and QR code appear.

  2. 2
    Optionally set an amount and label.

    The wallet can encode them into its supported luracoin: payment URI.

  3. 3
    Verify the address out of band.

    Addresses use Base58Check, but visual verification still matters.

Payment linkluracoin:<ADDRESS>?amount=1.5&label=Coffee

Send

  1. 1
    Paste an address or payment URI.

    Enter LURA with up to eight decimals; use a dot as the decimal separator.

  2. 2
    Review before unlocking.

    Confirm network, recipient, amount, and the current zero-fee alpha behavior.

  3. 3
    Enter the local password.

    The vault decrypts for the signing operation and verifies that its key controls the sender.

  4. 4
    Wait for node acceptance.

    The wallet shows success only after the local node admits the transaction.

Accepted is not confirmed or final.

It means the transaction entered your local mempool. Relay can still be zero, and even a mined block has no safe economic finality while fork choice and reorganizations are missing.

The alpha allows one local pending outgoing transaction at a time and uses a fixed fee of zero. Pending incoming transfers appear after inclusion, not while they are only in the mempool.

05

Mine blocks

Mining is a simple CPU proof-of-work loop for learning, not a pool, GPU, or production miner. Create a wallet first, stop the foreground node, and use the wallet's testnet address as the reward destination.

Node plus miner
# Stop the foreground node first; mine starts its own node
luracoin mine --network testnet   --address <YOUR_TESTNET_ADDRESS>   --host 127.0.0.1   --port 9999 --rpc-port 18444

luracoin mine starts its own full node and RPC services, so it must replace—not run beside—the earlier node command on the same ports and data directory. “Ready” means initialized and caught up with every known connected peer; with zero peers, it says nothing about the wider network.

Target180 seconds
Starting subsidy50 LURA + fees
Halving interval259,200 blocks
Tail emission1 LURA minimum

06

Configure the runtime

Configuration files are templates only: neither CLI loads .env automatically. Export variables in the shell that starts the process, or pass supported CLI flags.

Example environment
export LURACOIN_NETWORK=testnet
export LURACOIN_HOME=/path/to/private/luracoin-data
export LURACOIN_REDIS_HOST=127.0.0.1
export LURACOIN_REDIS_PORT=6379
LURACOIN_HOMERoot for per-network data directories.
LURACOIN_DATA_DIRAn exact directory for one node; keep it private and network-specific.
LURACOIN_REDIS_HOST / PORT / DBMempool connection and optional network-specific database override.
LURACOIN_TESTNET_RPC_URLElectron override; only HTTP loopback URLs are accepted.
LURACOIN_EXPLORER_*Developing read-only API and optional SQLite projection. Keep local until deliberately hardened for public use.
Never use VITE_* for secrets.

Vite embeds public-prefixed variables into renderer code. The node's bearer, mnemonic, xprv, private key, and passwords must never enter frontend bundles.

07

Understand the protocol

The current alpha uses peer protocol v2 and RPC / Explorer API v1. Do not identify it by package version alone: the earlier, incompatible public prototype also reports 0.1.0.

The format is not frozen.

P2P v2 messages and consensus encodings may change before any public network. Pin an exact source revision when testing interoperability.

Addresses and units

  • Addresses are 34-character Base58Check strings.
  • The payload is version byte 0x30 plus HASH160 of a compressed public key.
  • 1 LURA = 100,000,000 lurashis.
  • Consensus uses integers—never floating point.

Transactions

The unsigned payload is 85 bytes. A deterministic ECDSA secp256k1 signature over SHA-256, normalized to low-S, is paired with the 64-byte public key. The final transaction is exactly 213 bytes; its ID is double SHA-256 of those bytes.

chain1 Bnonce4 Bfee4 Bvalue8 Bfrom34 Bto34 Bunlock signature128 B

Blocks and proof of work

A serialized block begins with a 118-byte header followed by one or more 213-byte transactions. Post-genesis blocks begin with one coinbase paying the height-specific subsidy plus fees; genesis instead contains its fixed 100,000 LURA test allocation. Difficulty adjusts every 480 blocks and may change by at most a factor of four per period.

P2P v2

Every TCP message has a 24-byte envelope: network magic, 12-byte command, payload length, and checksum. Peers exchange version and verack before blocks, transactions, inventory, peer lists, and ping/pong messages.

The full alpha protocol specification will ship with the public source release.

08

Protect recovery material

Luracoin, the public website, and the explorer never need private wallet material. Keep each of these out of screenshots, logs, analytics, issue trackers, cloud notes, and frontend environment variables.

MnemonicSeedxprvPrivate keyPasswordrpc.token

The testnet genesis key is already public by design. Never reuse it, even for other test systems. Do not publish sensitive vulnerability details or any wallet secret; a formal private reporting channel will be published with the alpha source release.

Private security reporting policy pending publication.

09

Read confirmations carefully

The current node follows one linear next-block path. It does not store competing branches, compare cumulative work, or reorganize account state.

Miner Ablock n + 1
Your nodeaccepts whichever valid next block arrives first
Miner Bcompeting n + 1

Two nodes can therefore stay on different histories after simultaneous valid blocks. Explorer “confirmations” describe depth in one node's observed chain; they do not imply globally safe finality.

  • No public seed infrastructure or faucet.
  • No header-first synchronization, durable peer scoring, or Sybil protection.
  • No hardware wallet, multisig, smart contracts, staking, burn, or multi-address wallet.
  • No mainnet genesis or release gate approval.

10

Troubleshoot common states

Redis is unavailable

Run redis-cli ping. The node may still read confirmed chain state, but cannot safely admit, relay, or mine pending transactions. The wallet disables sending when the mempool is unavailable.

The node is healthy but shows zero peers

This is expected without seeds. The correct state is isolated, not globally connected. Add a controlled --seed HOST:PORT endpoint. For an inbound LAN experiment, restart with an explicit trusted-LAN --host; never Internet-expose this alpha.

The wallet cannot connect

Confirm that the node uses testnet and RPC port 18444, that rpc.token exists in the same data directory Electron expects, and that you did not expose or rewrite the loopback URL.

The browser wallet has no network functions

npm run dev serves only the renderer. Build it and use the Python node's --wallet-dir gateway, then open the exact localhost URL.

A transaction was accepted but is not confirmed

Acceptance is local mempool admission. Check peer count, relay information, miner status, and node readiness. An isolated node cannot propagate to a broader test network.

Mainnet fails to start

That is intentional. Mainnet has no genesis manifest and fails closed until the implementation, protocol, and release process are ready and audited.

Next

Inspect the chain model.

The explorer preview recognizes block, transaction, and address queries while the public endpoint is being prepared.

Open explorer preview →