RillCoin
RillCoin DocsTestnet Live
Introduction

RillCoin Whitepaper

Version 1.0 — Progressive Concentration Decay Cryptocurrency

Abstract

RillCoin is a proof-of-work cryptocurrency implementing progressive concentration decay. Holdings above concentration thresholds decay over time, with decayed tokens flowing back to the active mining pool. The protocol is implemented in Rust 2024 edition using Ed25519 signatures, BLAKE3 Merkle trees, SHA-256 block headers, and libp2p peer-to-peer networking. All consensus arithmetic uses integer-only fixed-point arithmetic with 108 precision — no floating point.

1. Introduction

“Wealth should flow like water.”

Concentrated wealth reduces economic velocity. When a large fraction of supply is held statically by a small number of entities, the tokens cease to participate in the productive economy. Traditional cryptocurrencies offer no mechanism to counteract this tendency — early holders and miners accumulate disproportionate balances that remain dormant indefinitely.

RillCoin's solution is algorithmic redistribution via concentration decay. When any cluster of UTXOs exceeds a configurable concentration threshold relative to the circulating supply, those holdings begin to decay at a rate determined by a sigmoid function of their concentration. Decayed tokens accrue to the active mining pool, supplementing block rewards and providing an ongoing incentive for miners to maintain the network.

The name “Rill” references a small, flowing stream — an apt metaphor for the protocol's design intent: wealth should circulate continuously rather than pool in reservoirs.

2. Protocol Constants

All constants are defined in rill-core/src/constants.rs. Integer-only arithmetic with u64 and 108 fixed-point precision (1 RILL = 100,000,000 rills, the base unit).

ConstantValueNotes
MAX_SUPPLY21,000,000 RILLMining rewards only
DEV_FUND_PREMINE1,050,000 RILL5% of max supply
TOTAL_SUPPLY22,050,000 RILLMAX_SUPPLY + DEV_FUND
INITIAL_REWARD50 RILLPer block at genesis
HALVING_INTERVAL210,000 blocks~4 years at 60s blocks
BLOCK_TIME_SECS60Target seconds per block
BLOCKS_PER_YEAR525,960365.25 × 24 × 60
COIN100,000,000 rills1 RILL in base units
DEV_FUND_BPS500 (5%)Basis points of block reward
DEV_VEST_BLOCKS2,103,840BLOCKS_PER_YEAR × 4
COINBASE_MATURITY100 blocksBefore coinbase can be spent
MIN_TX_FEE1,000 rills0.00001 RILL minimum
MAX_BLOCK_SIZE1,048,576 bytes1 MiB
DIFFICULTY_WINDOW60 blocksDifficulty adjustment window

Dev Fund

The dev fund premine of 1,050,000 RILL (5% of MAX_SUPPLY) is subject to linear vesting over 2,103,840 blocks (~4 years). At each block, a pro-rata portion of the dev fund becomes claimable by the development treasury address. This ensures long-term alignment between developers and the network.

3. Cryptography

Signatures — Ed25519

All transaction inputs are authorized with Ed25519 signatures (RFC 8032). Ed25519 provides 128-bit security, deterministic signatures, and fast batch verification — all desirable properties for a high-throughput blockchain. The public key is 32 bytes; the signature is 64 bytes.

Merkle Trees — BLAKE3

Block Merkle roots are computed using BLAKE3. BLAKE3's tree hashing mode makes it particularly well-suited for Merkle tree construction, providing both speed and parallel verification. Transaction IDs are computed as BLAKE3(bincode(transaction)).

Block Headers — SHA-256

Block headers use double SHA-256 for the proof-of-work commitment, maintaining compatibility with existing SHA-256 ASIC infrastructure. The header commits to: version, previous block hash, Merkle root, timestamp, difficulty target, and nonce.

Address Format — Bech32m

Addresses use Bech32m encoding (BIP-350) with human-readable parts:

  • rill1 — Mainnet addresses
  • trill1 — Testnet addresses

The address payload is the BLAKE3 hash of the Ed25519 public key, truncated to 20 bytes. Bech32m provides built-in error detection and produces human-readable, copy-paste-friendly strings.

4. Concentration Decay

See the Decay Mechanics reference page for full technical detail, including the sigmoid lookup table, fixed-point arithmetic, and lineage tracking. The following is a summary.

Concentration Metric

Concentration is measured in parts-per-billion (PPB). For a cluster with balance B and circulating supply S:

formula
concentration_ppb = cluster_balance × 1,000,000,000 / circulating_supply

Decay Rate

The decay rate is derived from a fixed-point sigmoid function of the concentration:

formula
decay_rate = (sigmoid(concentration_x) - 0.5) × DECAY_R_MAX_PPB × 2

where:
  DECAY_R_MAX_PPB       = 1,500,000,000  (150% per year at max concentration)
  DECAY_C_THRESHOLD_PPB = 1,000,000      (0.1% of supply — decay threshold)
  CONCENTRATION_PRECISION = 1,000,000,000

Decay Pool

Decayed amounts accumulate in the decay pool. Each block, DECAY_POOL_RELEASE_BPS = 100 (1%) of the pool is released to the block miner as supplemental reward. This creates a compounding incentive: as concentration grows, decay rates rise, increasing pool size, and increasing miner rewards.

5. Mining

RillCoin uses SHA-256 proof-of-work. Difficulty adjusts every DIFFICULTY_WINDOW (60) blocks to maintain the 60-second target. The difficulty adjustment uses a clamped ratio of actual vs. expected time, preventing extreme swings.

Block templates are served via getblocktemplate RPC. Miners compute a valid header hash below the target and submit via submitblock. The block reward is:

formula
block_reward = subsidy(height) + tx_fees + decay_pool_release

where subsidy(height) = INITIAL_REWARD >> (height / HALVING_INTERVAL)

Coinbase outputs are subject to a maturity period of COINBASE_MATURITY = 100 blocks before they can be spent.

6. Network

RillCoin uses libp2p for all peer-to-peer communication. The network stack provides:

  • Gossipsub — Block and transaction propagation
  • Kademlia DHT — Peer discovery and routing
  • TCP transport — Reliable message delivery
NetworkP2P PortRPC PortMagic Bytes
Mainnet1833318332RILL
Testnet2833328332TEST
Regtest3833338332REGT

7. Storage

Node storage uses RocksDB, a high-performance LSM tree key-value store. The following column families are maintained:

  • blocks — Full block data indexed by hash
  • headers — Block headers indexed by hash and height
  • utxos — Unspent transaction output set
  • clusters — Cluster balance aggregates for decay calculation
  • decay_pool — Running decay pool balance
  • mempool — Pending transactions (in-memory, not persisted)

The wire protocol uses bincode for compact, deterministic serialization of all on-chain data structures. Bincode is not human-readable but provides minimal overhead for performance-sensitive consensus paths.