diff options
| author | Victorio Nascimento <155357371+Vic-Nas@users.noreply.github.com> | 2026-07-27 16:45:28 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-07-27 17:45:28 -0300 |
| commit | 6ca1a1d6799474f8ca977b93ab630af7ace879c2 (patch) | |
| tree | a0312ebc10fc6a56742d0e5caa85c31eb6d3eaa7 /README.md | |
| parent | 56df9830d5a002ff9ce3fac47e497673f8159e39 (diff) | |
Add Linux GUI installer via Wine (#3)
* Add Linux GUI installer via Wine
* Fix launcher creation and add BTF_RELAY env var support
* Pool server, Linux GUI, unified binary, README update
* Root Makefile: make linux / make windows, cleaner README
* Remove headless.cpp
* Fix XPM color count mismatch causing toolbar image errors on Linux
* XPM icons: same code on Windows and Linux, no ifdefs around image loading
* Fix GTK icon crash and Linux printf format
* btfrv: 10s socket timeout on relay connects
* Faster peer discovery: more dials per pass, shorter backoff and sleep
* Parallel btf peer connections
* Fix GetMyExternalIP - was disabled, now uses modern IP echo services
* Fix tunnel disconnect on idle and restore external IP detection
* Filter stale Nostr descriptors
* Sort peers by freshness, fresh first
* Pool: add .btf Stratum listener — miners connect via rendezvous, no port forwarding needed
* btf pool: self-replacing listeners, one per relay, no queuing between miners
* Mining modes: solo/operator/participant — pool server on-demand, participant Stratum client
* Status bar: show external IP and .btf address
* README: clean rewrite, concept-first, minimal
* make linux produces AppImage
* make linux produces AppImage
* Pool dashboard: connect instructions, tabs, share bars
* Perf fixes: GetMyExternalIP threaded, btf listener counted
* Perf fixes: GetMyExternalIP threaded, btf listener counted
* Fix pool payouts: defer until coinbase maturity
* Pool: clean mode switching, IP warning
* Pool: clean mode switching
* Fix gPoolRunning: remove static
* AppImage: use real icon from bitcoin.ico
* Fix exit crash; Mining menu
* Fix exit crash; Mining menu
* Fix exit crash; Mining menu
* Fix exit crash; Mining menu
* Fix exit crash; Mining menu
* Windows build: use mingw32-make
* Windows build: simpler make invocation
* Add deps-windows target
* Windows build fixes
* Windows build fixes
* Windows makefile: fix obj dir
* Windows: output to repo root
* Windows: bundle DLLs into zip
* Replace wxWidgets with ImGui+GLFW: same build on Linux and Windows
* Fix %I64d that slipped back through rebase (main.h, net.h)
* MinGW: add _mkdir shim for non-MSVC Windows; fix %I64d
* Fix gPoolRunning extern outside ifndef _WIN32
* Remove -lboost_system: boost is header-only in this codebase
* Status bar: copy buttons for IP and .btf address
* Windows: add app icon via windres, strip wx stuff from rc file
* Clean GUI: single Options menu item, bigger font, better spacing, cleaner options dialog; update README
* GUI: embed Roboto font at 16px for clear readability on all platforms
* Windows: windres depends on obj dir target
* Fix balance hidden off-screen: put on own line below address bar
* Windows: inline mkdir in every rule, remove dir target that confused make
* Windows: move all target to top so it's the default rule
* Fix pool server not starting: always start when operator selected, re-sync dialog state on open
* Write debug.log to data directory (AppData/Roaming/Bitflash on Windows)
* Participant miner: use wallet address as username so payouts go to wallet
* Add .gitattributes to lock LF line endings, prevent CRLF drift
* Refactor pool mining to btf-only transport
* Persist pool settings and startup wiring
* Prune stale peers and expose pool queries
* Fix build regressions and add CLI mode/arg parity
* Fix rpc miner stats declaration order
* Centralize pool runtime extern declarations
* Separate operator/participant dashboards and restore peer stats
* Add live telemetry strip and clearer per-mode runtime metrics
* Reduce mining dashboard clutter and remove manual pool entry
* Count only authorized pool miners
* Seed initial pool job on startup
* Use a real share target for pool work
* Switch pool accounting to round-based shares
* Fix nostr pool announcer stats call sites
* Fix pool stats definition order
* Improve pool worker status display
* Add mutex include for participant status
* Replace ImClamp in dashboard layout
* Clarify participant work status
* Log participant status transitions
* Reduce peer discovery log noise
* Add participant status badge
* Track participant auth acknowledgements
* Log and validate pool job delivery
---------
Co-authored-by: Bitflash Pool Dev <pool@bitflash>
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 265 |
1 files changed, 64 insertions, 201 deletions
| @@ -1,272 +1,135 @@ | |||
| 1 | <div align="center"> | 1 | <div align="center"> |
| 2 | 2 | ||
| 3 | <img src="docs/social.png" width="820" alt="Bitflash — Satoshi's Bitcoin reborn, mined with your CPU"/> | 3 | <img src="docs/social.png" width="820" alt="Bitflash"/> |
| 4 | 4 | ||
| 5 | # Bitflash ⚡ `BTF` | 5 | # Bitflash `BTF` |
| 6 | 6 | ||
| 7 | ### Satoshi's Bitcoin, reborn — mine with your **CPU**, stay **invisible**, run **anywhere**. | 7 | CPU-only cryptocurrency. A revival of Bitcoin 0.1.0 with RandomX proof of work and anonymous `.btf` addressing over Nostr. |
| 8 | |||
| 9 | A faithful revival of the original 2009 `bitcoin-0.1.0`, rebuilt for today: | ||
| 10 | **memory-hard CPU mining** that shuts out ASICs and GPUs, **anonymous addressing** | ||
| 11 | that hides your IP and punches through CGNAT, and a **fair launch** with no premine. | ||
| 12 | |||
| 13 | <br/> | ||
| 14 | 8 | ||
| 15 | -2ea44f?style=for-the-badge) | 9 | -2ea44f?style=for-the-badge) |
| 16 |  | 10 |  |
| 17 |  | 11 |  |
| 18 | 12 | ||
| 19 |  | 13 | **[Download](../../releases/latest)** |
| 20 |  | ||
| 21 |  | ||
| 22 |  | ||
| 23 |  | ||
| 24 | |||
| 25 | **[⬇️ Download for Windows](../../releases/latest)** · **[🐧 Build for Linux](#-linux-node--miner)** · **[🧠 How it works](#-how-it-works)** | ||
| 26 | |||
| 27 | <br/> | ||
| 28 | |||
| 29 | <img src="docs/wallet.png" width="640" alt="Bitflash wallet mining with RandomX"/> | ||
| 30 | |||
| 31 | <sub>The Bitflash wallet — mining with RandomX, connected to the network, coins accruing. No pools, no ASICs, no gatekeepers.</sub> | ||
| 32 | 14 | ||
| 33 | </div> | 15 | </div> |
| 34 | 16 | ||
| 35 | --- | 17 | --- |
| 36 | 18 | ||
| 37 | ## 💡 One CPU, one vote | 19 | ## What it is |
| 38 | |||
| 39 | Bitcoin promised money mined by anyone with a computer. Then ASIC farms and mining | ||
| 40 | pools took over, and "anyone" became "whoever owns a warehouse." Bitflash gives that | ||
| 41 | promise back. | ||
| 42 | |||
| 43 | - 🧩 **Memory-hard proof of work (RandomX).** The same algorithm Monero uses to keep | ||
| 44 | mining on ordinary CPUs. No ASICs. No GPU farms. Your laptop competes on equal footing. | ||
| 45 | - 🕶️ **Anonymous by default.** Your node is reachable by a self-certifying `.btf` | ||
| 46 | address instead of an IP — a Tor-style hidden service built into the coin, over | ||
| 47 | [Nostr](https://nostr.com). Peers never see your IP. | ||
| 48 | - 🌐 **Works behind any firewall.** No public IP? Stuck behind CGNAT? No port | ||
| 49 | forwarding? Doesn't matter. Nodes rendezvous through a lightweight relay and connect | ||
| 50 | anyway. | ||
| 51 | - ⚖️ **Fair launch.** No premine. No ICO. No founder's reward. The genesis block mints | ||
| 52 | the same 50 coins everyone else mines for. | ||
| 53 | - 🪙 **Sound money.** 50 BTF per block, halving on schedule, hard cap of **21,000,000** — | ||
| 54 | exactly like the original. | ||
| 55 | 20 | ||
| 56 | --- | 21 | Bitflash keeps Satoshi's original consensus rules and replaces two things: |
| 57 | 22 | ||
| 58 | <div align="center"> | 23 | **RandomX proof of work.** Memory-hard algorithm used by Monero. A laptop competes equally with a server. ASICs and GPUs have no advantage. |
| 59 | 24 | ||
| 60 | ## 🔥 Don't let the network die — run a node | 25 | **Anonymous addressing.** Every node has a `.btf` address derived from its public key, similar to a Tor `.onion`. Nodes find each other through Nostr relays and connect via encrypted rendezvous tunnels. Your IP is never exposed to other nodes, and no port forwarding is needed. |
| 61 | 26 | ||
| 62 | A cryptocurrency is only as alive as the people running it. Every node that mines, | 27 | No premine. No ICO. 50 BTF per block, halving on schedule, 21M cap, ~2 minute blocks. |
| 63 | relays, and stays online makes Bitflash **faster, freer, and impossible to shut down.** | ||
| 64 | No companies. No servers to trust. No gatekeepers — just people, one CPU each. | ||
| 65 | 28 | ||
| 66 | ### Download it. Run it. Keep it alive. | 29 | --- |
| 67 | 30 | ||
| 68 | **[⬇️ Windows](../../releases/latest)** · **[🐧 Linux](#-linux-node--miner)** · **[🛰️ Run a relay](#-become-a-relay-volunteer--automatically)** | 31 | ## Quick start |
| 69 | 32 | ||
| 70 | *The network needs you online. Close this tab and it's one node weaker.* | 33 | Download the latest release and run. No install, no configuration — it connects automatically and starts syncing. |
| 71 | 34 | ||
| 72 | </div> | 35 | **Linux:** `Bitflash-1.1.0-x86_64.AppImage` — make executable and run. |
| 73 | 36 | ||
| 74 | --- | 37 | **Windows:** Extract `Bitflash-1.1.0-windows.zip` and run `Bitflash.exe`. |
| 75 | 38 | ||
| 76 | ## ✨ Features | 39 | --- |
| 77 | 40 | ||
| 78 | | | | | 41 | ## Mining |
| 79 | |---|---| | ||
| 80 | | 🧠 **RandomX PoW** | CPU-only, ASIC/GPU-resistant mining — one CPU, one vote | | ||
| 81 | | 🔐 **`.btf` hidden addresses** | Self-certifying, unforgeable node identity; your IP is never exposed | | ||
| 82 | | 🛰️ **Nostr peer discovery** | No central servers, no DNS seeds — nodes find each other over open relays | | ||
| 83 | | 🚪 **CGNAT traversal** | Rendezvous transport lets nodes behind carrier NAT reach each other | | ||
| 84 | | 🔒 **End-to-end encrypted P2P** | X25519 + XChaCha20-Poly1305 channel; the relay only ever sees ciphertext | | ||
| 85 | | 💸 **Instant transfers** | Send coins peer-to-peer in under a second | | ||
| 86 | | 🖥️ **Retro wallet** | The classic, no-nonsense Bitcoin 0.1.0 interface, one "Generate Coins" click away | | ||
| 87 | | 🐧 **Windows & Linux** | GUI wallet on Windows, headless daemon for Linux servers | | ||
| 88 | 42 | ||
| 89 | --- | 43 | Open **Options** from the menu bar. Under Mining Mode: |
| 90 | 44 | ||
| 91 | ## 🚀 Quick start | 45 | **Solo** — mine directly to your wallet. Default. |
| 92 | 46 | ||
| 93 | ### 🪟 Windows (GUI wallet + miner) | 47 | **Operator** — run a pool. The pool server uses `.btf` rendezvous only. The window shows the pool's `.btf` address, discovered pools, and owed payouts. |
| 94 | 48 | ||
| 95 | 1. **[Download the latest release](../../releases/latest)** and unzip it anywhere. | 49 | Pool announcements are published on Nostr with live status fields, so external tools can query the latest pool state by `.btf` address. |
| 96 | 2. Double-click **`bitflash.exe`**. | ||
| 97 | 3. Wait ~1 minute — it finds peers on its own and starts syncing. | ||
| 98 | 4. **Options → Generate Coins** to start mining with your CPU. That's it. 🎉 | ||
| 99 | 50 | ||
| 100 | No install, no config, no command line. It connects automatically, even behind CGNAT. | 51 | **Participant** — mine to someone else's pool. Enter or select the pool's `.btf` address and enable Start Mining. |
| 101 | 52 | ||
| 102 | ### 🐧 Linux (node + miner) | 53 | SRBMiner and XMRig connect to operator pools through the `.btf` path: |
| 103 | 54 | ||
| 104 | ```bash | 55 | ```bash |
| 105 | # grab the source, then: | 56 | SRBMiner-MULTI --algorithm randomx --pool POOL_BTF_ADDRESS --wallet YOUR_BTF_ADDRESS --password x |
| 106 | bash build-linux.sh # installs deps, builds secp256k1 + RandomX + the node | 57 | xmrig -a rx/0 -o POOL_BTF_ADDRESS -u YOUR_BTF_ADDRESS -p x |
| 107 | ./src/bitflash-node -gen # run + mine (auto-discovers peers, no config needed) | ||
| 108 | ``` | 58 | ``` |
| 109 | 59 | ||
| 110 | Run it 24/7 as a service — see [`docs/`](docs) and the systemd snippet below. | ||
| 111 | |||
| 112 | --- | 60 | --- |
| 113 | 61 | ||
| 114 | ## 🧠 How it works | 62 | ## Headless / server mode |
| 115 | |||
| 116 | Bitflash keeps Satoshi's consensus intact and swaps two things: **the proof of work** | ||
| 117 | and **how nodes find and reach each other**. | ||
| 118 | 63 | ||
| 119 | ### Anonymous rendezvous (the `.btf` network) | 64 | ```bash |
| 120 | 65 | ./bitflash /nogui # node only | |
| 121 | Every node has a `.btf` address derived from its public key — like a Tor `.onion`, but | 66 | ./bitflash /nogui /gen /operator # pool operator |
| 122 | built into the coin. Nodes publish a signed descriptor over Nostr, and connect through a | 67 | ./bitflash /nogui /gen /participant=POOL_BTF_ADDRESS # mine to pool |
| 123 | meeting relay so **neither side ever learns the other's IP**, and **no port forwarding is | ||
| 124 | ever needed**. | ||
| 125 | |||
| 126 | ```mermaid | ||
| 127 | flowchart LR | ||
| 128 | A["🧑💻 Node A<br/>(behind CGNAT)"] -- "encrypted" --> R(("🛰️ Meeting<br/>relay")) | ||
| 129 | B["🧑💻 Node B<br/>(behind CGNAT)"] -- "encrypted" --> R | ||
| 130 | R -. "pairs by .btf key<br/>sees only ciphertext" .-> A | ||
| 131 | R -. "pairs by .btf key<br/>sees only ciphertext" .-> B | ||
| 132 | N["🛰️ Nostr relays"] -. "discover .btf peers" .-> A | ||
| 133 | N -. "discover .btf peers" .-> B | ||
| 134 | ``` | 68 | ``` |
| 135 | 69 | ||
| 136 | The relay is dumb on purpose: it pairs peers by their `.btf` key and forwards bytes. The | 70 | As a systemd service: |
| 137 | real connection is end-to-end encrypted (X25519 + XChaCha20-Poly1305) and authenticated | ||
| 138 | to each peer's static key, so a malicious relay can't read or tamper — it can only refuse. | ||
| 139 | |||
| 140 | <div align="center"> | ||
| 141 | |||
| 142 | <img src="docs/discovery.png" width="680" alt="Bitflash node connecting by .btf through the rendezvous and mining RandomX"/> | ||
| 143 | 71 | ||
| 144 | <sub>A node tunneling to a peer by its <code>.btf</code> address through the rendezvous, and finding a RandomX proof of work — automatic, no configuration, no IP exposed.</sub> | 72 | ```ini |
| 145 | 73 | [Unit] | |
| 146 | </div> | 74 | Description=Bitflash node |
| 75 | After=network.target | ||
| 147 | 76 | ||
| 148 | ### RandomX proof of work | 77 | [Service] |
| 78 | ExecStart=/opt/bitflash/bitflash /nogui /gen /operator | ||
| 79 | Restart=always | ||
| 80 | User=bitcoin | ||
| 81 | WorkingDirectory=/opt/bitflash | ||
| 149 | 82 | ||
| 150 | Blocks are mined with **RandomX**, a memory-hard algorithm that runs efficiently on | 83 | [Install] |
| 151 | general-purpose CPUs and terribly on specialized hardware. This is what keeps mining | 84 | WantedBy=multi-user.target |
| 152 | decentralized: no ASIC advantage, no GPU farms — just CPUs, one vote each. | 85 | ``` |
| 153 | 86 | ||
| 154 | --- | 87 | --- |
| 155 | 88 | ||
| 156 | ## 🛠️ Build from source | 89 | ## Running a relay |
| 157 | 90 | ||
| 158 | ### Linux | 91 | Relays are the meeting points that let nodes behind NAT connect to each other. More relays make the network more resilient. |
| 159 | 92 | ||
| 160 | ```bash | 93 | ```bash |
| 161 | bash build-linux.sh | 94 | sudo bash relay/install-bitflash-relay.sh 8434 |
| 95 | ./bitflash /nogui /announcerelay=YOUR_PUBLIC_IP:8434 | ||
| 162 | ``` | 96 | ``` |
| 163 | 97 | ||
| 164 | Installs `build-essential cmake libssl-dev libdb5.3++-dev libsodium-dev | 98 | Relays forward encrypted bytes and cannot read or modify traffic. |
| 165 | nlohmann-json3-dev libboost-dev`, builds `libsecp256k1` (Schnorr) and `RandomX` from | ||
| 166 | source, then the `bitflash-node` binary. Debian/Ubuntu. | ||
| 167 | |||
| 168 | ### Windows | ||
| 169 | |||
| 170 | Built with **MSYS2 UCRT64** (g++ 16, wxWidgets 3.2, OpenSSL 3, Berkeley DB). See | ||
| 171 | [`build.sh`](build.sh) and `src/makefile.mingw`. | ||
| 172 | 99 | ||
| 173 | ### 🛰️ Become a relay volunteer — automatically | 100 | --- |
| 174 | 101 | ||
| 175 | Relays are the meeting points that let nodes behind CGNAT find each other. More | 102 | ## Build from source |
| 176 | relays, in more places, make the network **faster** and **harder to knock | ||
| 177 | offline**. If you have a VPS with a public IP, you can add one — and **the whole | ||
| 178 | network discovers it automatically. No approval, no gatekeeper, no waiting.** | ||
| 179 | 103 | ||
| 180 | **1. Run the relay — one command:** | 104 | **Linux:** |
| 181 | ```bash | 105 | ```bash |
| 182 | sudo bash relay/install-bitflash-relay.sh 8434 | 106 | make linux |
| 183 | ``` | 107 | ``` |
| 184 | Builds a tiny, dependency-free daemon, applies anti-flood firewall rules, and | 108 | Installs deps via apt, builds libsecp256k1 and RandomX, produces `Bitflash-*.AppImage`. |
| 185 | installs it as a `systemd` service (auto-restarts, survives reboot). | ||
| 186 | 109 | ||
| 187 | **2. Open TCP port `8434`** in your firewall / cloud panel. | 110 | **Windows (MSYS2 UCRT64):** |
| 188 | |||
| 189 | **3. Announce it** by running a node that advertises your relay: | ||
| 190 | ```bash | 111 | ```bash |
| 191 | ./bitflash-node -gen -announcerelay=YOUR_PUBLIC_IP:8434 | 112 | make windows |
| 192 | ``` | 113 | ``` |
| 193 | That node publishes your relay over Nostr; every other node discovers it within | 114 | Installs deps via pacman, produces `Bitflash-*-windows.zip`. |
| 194 | a minute and adds it to its failover list. **Done — you're part of the backbone.** | ||
| 195 | |||
| 196 | > 🔒 A relay is **trustless** — it only forwards end-to-end-encrypted bytes and | ||
| 197 | > pairs peers by their `.btf` key. It **cannot read, tamper with, or MITM** your | ||
| 198 | > traffic; a malicious relay can at most refuse to forward, and nodes simply fail | ||
| 199 | > over. That's exactly why anyone can run one safely. A 1 GB VPS is plenty. | ||
| 200 | |||
| 201 | <details> | ||
| 202 | <summary>Run the Linux node 24/7 (systemd)</summary> | ||
| 203 | |||
| 204 | ```ini | ||
| 205 | # /etc/systemd/system/bitflash-node.service | ||
| 206 | [Unit] | ||
| 207 | Description=Bitflash node/miner | ||
| 208 | After=network.target | ||
| 209 | |||
| 210 | [Service] | ||
| 211 | WorkingDirectory=/root/bitflash/src | ||
| 212 | ExecStart=/root/bitflash/src/bitflash-node -gen | ||
| 213 | Restart=always | ||
| 214 | User=root | ||
| 215 | |||
| 216 | [Install] | ||
| 217 | WantedBy=multi-user.target | ||
| 218 | ``` | ||
| 219 | ```bash | ||
| 220 | systemctl daemon-reload && systemctl enable --now bitflash-node | ||
| 221 | ``` | ||
| 222 | </details> | ||
| 223 | 115 | ||
| 224 | --- | 116 | --- |
| 225 | 117 | ||
| 226 | ## 📊 At a glance | 118 | ## At a glance |
| 227 | 119 | ||
| 228 | | Parameter | Value | | 120 | | | | |
| 229 | |---|---| | 121 | |---|---| |
| 230 | | Ticker | **BTF** | | 122 | | Ticker | BTF | |
| 231 | | Proof of work | RandomX (CPU, memory-hard) | | 123 | | Proof of work | RandomX (CPU, memory-hard) | |
| 232 | | Block reward | 50 BTF, halving on schedule | | 124 | | Block reward | 50 BTF, halving on schedule | |
| 233 | | Max supply | 21,000,000 BTF | | 125 | | Max supply | 21,000,000 BTF | |
| 234 | | Target block time | ~2 minutes | | 126 | | Block time | ~2 minutes | |
| 235 | | Address privacy | `.btf` hidden-service addressing over Nostr | | 127 | | Privacy | `.btf` hidden-service addressing over Nostr | |
| 236 | | Premine / ICO | **None** | | 128 | | Premine | None | |
| 237 | | Platforms | Windows (GUI), Linux (headless) | | 129 | | Pool server | Built-in — `.btf` rendezvous only | |
| 238 | |||
| 239 | --- | ||
| 240 | |||
| 241 | ## 🗺️ Roadmap | ||
| 242 | |||
| 243 | - [x] Faithful port of `bitcoin-0.1.0` to a modern toolchain | ||
| 244 | - [x] RandomX CPU proof of work | ||
| 245 | - [x] Nostr peer discovery (replacing IRC) | ||
| 246 | - [x] `.btf` anonymous addressing + CGNAT rendezvous | ||
| 247 | - [x] Automatic peer discovery — zero config | ||
| 248 | - [x] Headless Linux node/miner | ||
| 249 | - [x] Fair-launch, stable-parameter relaunch | ||
| 250 | - [x] Redundant relays across regions with automatic failover | ||
| 251 | - [x] Automatic relay discovery over Nostr (self-announcing volunteer relays) | ||
| 252 | |||
| 253 | --- | ||
| 254 | |||
| 255 | ## ⚠️ Disclaimer | ||
| 256 | |||
| 257 | Bitflash is **experimental software**, released in the spirit of the original Bitcoin: | ||
| 258 | *"This is a design and prototype. Use at your own risk. It comes with no warranty of any | ||
| 259 | kind."* It has real cryptography and a live network, but it is young. Don't put in more | ||
| 260 | than you're willing to lose, and don't rely on it for anything critical. | ||
| 261 | 130 | ||
| 262 | --- | 131 | --- |
| 263 | 132 | ||
| 264 | ## 📜 License | 133 | Experimental software. Young network. Don't put in more than you are willing to lose. |
| 265 | |||
| 266 | MIT — see [LICENSE](LICENSE). Built on Satoshi Nakamoto's original Bitcoin (2009), | ||
| 267 | extended by the Bitflash developers (2026). | ||
| 268 | 134 | ||
| 269 | <div align="center"> | 135 | MIT. Built on Bitcoin 0.1.0 (Satoshi Nakamoto, 2009). |
| 270 | <br/> | ||
| 271 | <b>⚡ One CPU. One vote. Mining returns to the people. ⚡</b> | ||
| 272 | </div> | ||