diff options
| author | bitflash-maintainer <noreply@bitflash.invalid> | 2026-08-26 22:41:53 +0000 |
|---|---|---|
| committer | bitflash-maintainer <noreply@bitflash.invalid> | 2026-08-26 22:41:53 +0000 |
| commit | bbe04dc8c96b4c4766d2771d3438233bf82687c0 (patch) | |
| tree | 62e5a1febfb8e9bc38d133ac7981e9ef93918484 /README.md | |
| parent | 991853fa55a749d28d6f9e507ce72b289df92785 (diff) | |
| parent | 9e39a50d1f110020b0841d31e4b931aa877cc448 (diff) | |
Merge upstream v1.2.19 into the fork
Merges upstream tag v1.2.19 (9e39a50) into merge/upstream-1.2.18 (991853f).
Unlike the 1.2.15->1.2.18 replay, bc3de30 is a true ancestor of our branch via
a9b4f89, so this is an ordinary three-way merge with merge-base bc3de30.
Delta: 36 files, +3265/-163, the Tor onion transport (managed Tor, signed
direct onion endpoints, onion-only dial mode) and the nHDNext restore fix.
src/main.cpp, main.h, script.cpp/h and db.cpp/h are byte-identical between the
two tags, and the poll() socket loop carries no diff hunks, so the merge is
consensus-neutral and the soak-tested socket paths are unchanged. relay/ is
untouched; the payout ledger (rpc.cpp) is untouched.
7 conflict blocks in 6 files, resolved as follows.
Makefile -- VERSION. Ours: stays 1.2.19+sec with the naming comment updated,
so artifacts from this tree cannot be mistaken for the upstream release.
src/Makefile, src/makefile.mingw -- HEADERS list. Ours (no market.h) plus
their tor.h. NODE_OBJS auto-merged correctly: no market.o, tor.o present.
src/selftest.cpp -- known-tests list. Union: payout-ledger (ours) and
managed-tor (theirs).
src/main_gui.cpp -- one block. Our /dumpaddresses kept; their
BtfStopManagedTor() on the StartNode failure path taken. The /rvrelay pin,
/noannounce and the marketplace removal auto-merged and were verified intact.
src/nostr.cpp -- two blocks in ResolveDescriptor. Signature takes both
out-params (our fExchangeOk, their rawOut). The body keeps our
drain-to-EOSE read -- returning early poisons the pooled socket for the next
caller -- and adds their rawOut capture. Our TLS 1.2 floor
(SSL_CTX_set_min_proto_version) is untouched by this merge; upstream 1.2.19
still has no floor of its own.
Upstream's release commit also added four build logs and a compiled Python
cache (build-1219.log, build-17.log, build-appimage.log, build-node.log,
scripts/__pycache__/bitflash_chain.cpython-313.pyc). Removed here; they are
build output, not source.
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 63 |
1 files changed, 53 insertions, 10 deletions
| @@ -22,7 +22,7 @@ Bitflash keeps Satoshi's original consensus rules and replaces two things: | |||
| 22 | 22 | ||
| 23 | **RandomX proof of work.** Memory-hard algorithm used by Monero. A laptop competes equally with a server. ASICs and GPUs have no advantage. | 23 | **RandomX proof of work.** Memory-hard algorithm used by Monero. A laptop competes equally with a server. ASICs and GPUs have no advantage. |
| 24 | 24 | ||
| 25 | **Anonymous addressing.** Every node has a `.btf` address derived from its public key, similar to a Tor `.onion`. Nodes reach each other through encrypted rendezvous tunnels, so no port forwarding is needed and a node behind CGNAT works normally. | 25 | **Anonymous addressing.** Every node has a `.btf` address derived from its public key, similar to a Tor `.onion`. Nodes reach each other through encrypted rendezvous tunnels by default, and can advertise a signed direct `.onion` endpoint for Tor peers. |
| 26 | 26 | ||
| 27 | No premine. No ICO. 50 BTF per block, halving on schedule, 21M cap, ~2 minute blocks. | 27 | No premine. No ICO. 50 BTF per block, halving on schedule, 21M cap, ~2 minute blocks. |
| 28 | 28 | ||
| @@ -30,14 +30,17 @@ No premine. No ICO. 50 BTF per block, halving on schedule, 21M cap, ~2 minute bl | |||
| 30 | 30 | ||
| 31 | Worth being precise, because the difference matters if you are relying on it. | 31 | Worth being precise, because the difference matters if you are relying on it. |
| 32 | 32 | ||
| 33 | **A peer you reach over `.btf` does not learn your IP.** All outbound connections go through a rendezvous tunnel; there is no IP-based peer dialling left in the node. The relay forwards encrypted bytes and cannot read or alter them. | 33 | **A peer you reach over `.btf` does not learn your IP.** Outbound peer discovery uses rendezvous tunnels by default. If both sides use Tor and the peer advertises a signed `.onion` endpoint, the node connects directly to that hidden service instead. In both cases the peer does not see your clearnet IP. |
| 34 | 34 | ||
| 35 | **The rendezvous relay does see your IP.** It has to — it is the thing your TCP connection terminates on. Relays are run by volunteers, so treat that as a party who knows you are on the network. | 35 | **The rendezvous relay sees your IP unless you use Tor.** It has to — it is the thing your TCP connection terminates on. With `-tor`, the relay sees Tor instead. With a signed direct `.onion` peer endpoint, the relay is not on that connection path at all. |
| 36 | 36 | ||
| 37 | **The node still listens on 8433.** Nothing dials by IP any more, but the listener is still there, so anyone who already knows your address and can reach that port may connect directly. If that matters to you, firewall it. | 37 | **The node still listens on 8433.** Nothing dials by IP any more, but the listener is still there, so anyone who already knows your address and can reach that port may connect directly. If that matters to you, firewall it. |
| 38 | 38 | ||
| 39 | This is unlinkability between peers, not anonymity against a network observer. | 39 | This is unlinkability between peers, not anonymity against a network observer. |
| 40 | For Tor routing, start the node with `-tor`; see [Tor mode](docs/tor.md). | 40 | For Tor routing and direct onion peer endpoints, start the node with `-tor`; |
| 41 | see [Tor mode](docs/tor.md). | ||
| 42 | For a plain SOCKS5 proxy without Tor-specific defaults, use | ||
| 43 | `-socks=HOST:PORT`. | ||
| 41 | 44 | ||
| 42 | --- | 45 | --- |
| 43 | 46 | ||
| @@ -49,6 +52,8 @@ configuration — it connects automatically and starts syncing. | |||
| 49 | **Linux:** make the `.AppImage` executable and run it. | 52 | **Linux:** make the `.AppImage` executable and run it. |
| 50 | 53 | ||
| 51 | **Windows:** extract the `-windows.zip` and run `Bitflash.exe`. | 54 | **Windows:** extract the `-windows.zip` and run `Bitflash.exe`. |
| 55 | If you want managed Tor without a separate Tor install, use the | ||
| 56 | `-windows-with-tor.zip` package and start Bitflash with `-managedtor`. | ||
| 52 | 57 | ||
| 53 | Every release ships a `SHA256SUMS` covering the assets. Verifying takes a second | 58 | Every release ships a `SHA256SUMS` covering the assets. Verifying takes a second |
| 54 | and is worth doing: | 59 | and is worth doing: |
| @@ -74,6 +79,14 @@ scripts/verify-release.sh latest | |||
| 74 | See [release verification](docs/release-verification.md) for the full release | 79 | See [release verification](docs/release-verification.md) for the full release |
| 75 | audit flow and the maintainer signing step. | 80 | audit flow and the maintainer signing step. |
| 76 | 81 | ||
| 82 | Public mirrors should make the latest checksum files available both under the | ||
| 83 | versioned release directory and at the release root: | ||
| 84 | |||
| 85 | ```text | ||
| 86 | https://releases.bitflash.network/v1.2.19/SHA256SUMS | ||
| 87 | https://releases.bitflash.network/SHA256SUMS # alias to latest | ||
| 88 | ``` | ||
| 89 | |||
| 77 | Bitflash also ships a deterministic UTXO-set commitment tool: | 90 | Bitflash also ships a deterministic UTXO-set commitment tool: |
| 78 | 91 | ||
| 79 | ```bash | 92 | ```bash |
| @@ -113,6 +126,12 @@ python3 scripts/build-explorer.py --datadir ~/.bitflash ./explorer-out | |||
| 113 | python3 scripts/build-explorer.py ~/.bitflash/blk0001.dat ~/.bitflash/blk0002.dat ./explorer-out | 126 | python3 scripts/build-explorer.py ~/.bitflash/blk0001.dat ~/.bitflash/blk0002.dat ./explorer-out |
| 114 | ``` | 127 | ``` |
| 115 | 128 | ||
| 129 | The generated explorer is static and self-contained: `index.html`, | ||
| 130 | `style.css`, `explorer.js`, `blocks.json`, `block/*.json`, and `logo.png`. It is | ||
| 131 | safe to host behind a strict policy such as `default-src 'none'; img-src 'self'; | ||
| 132 | style-src 'self'; script-src 'self'; connect-src 'self'; base-uri 'none'; | ||
| 133 | form-action 'none'`. | ||
| 134 | |||
| 116 | **Keep your node current.** Consensus rules have changed since the first | 135 | **Keep your node current.** Consensus rules have changed since the first |
| 117 | releases — 1.2.1 fixed a bug that let anyone spend anyone's coins, and 1.2.2 | 136 | releases — 1.2.1 fixed a bug that let anyone spend anyone's coins, and 1.2.2 |
| 118 | added a per-block signature-operation cap. A node on an older build will accept | 137 | added a per-block signature-operation cap. A node on an older build will accept |
| @@ -265,6 +284,7 @@ default both are created in the data directory; use `-poolstatusfile=PATH` and | |||
| 265 | `-poolroundsfile=PATH` to write them somewhere a dashboard or web sync can read. | 284 | `-poolroundsfile=PATH` to write them somewhere a dashboard or web sync can read. |
| 266 | The files are informational only: nodes still discover pools through Nostr and | 285 | The files are informational only: nodes still discover pools through Nostr and |
| 267 | `.btf`, not through any web domain. | 286 | `.btf`, not through any web domain. |
| 287 | See [public pool directory](docs/pool-directory.md) for the website/API shape. | ||
| 268 | 288 | ||
| 269 | **Participant** — mine to someone else's pool. Enter or select the pool's `.btf` address and enable Start Mining. | 289 | **Participant** — mine to someone else's pool. Enter or select the pool's `.btf` address and enable Start Mining. |
| 270 | 290 | ||
| @@ -319,8 +339,10 @@ Other options worth knowing: | |||
| 319 | ```bash | 339 | ```bash |
| 320 | -datadir=PATH # wallet and chain data elsewhere | 340 | -datadir=PATH # wallet and chain data elsewhere |
| 321 | -port=N # P2P listen port, default 8433 | 341 | -port=N # P2P listen port, default 8433 |
| 322 | -socks=HOST:PORT # SOCKS5 for outbound Nostr and .btf rendezvous dials | 342 | -socks=HOST:PORT # SOCKS5 for outbound Nostr, .btf relay, and onion peer dials |
| 323 | -tor[=HOST:PORT] # Tor mode; default local Tor SOCKS5 proxy is 127.0.0.1:9050 | 343 | -tor[=HOST:PORT] # Tor mode; default local Tor SOCKS5 proxy is 127.0.0.1:9050 |
| 344 | -managedtor[=PATH] # start Tor, create a hidden service, advertise its onion | ||
| 345 | -onionservice=HOST.onion:PORT # advertise this node's Tor hidden service | ||
| 324 | -debug # verbose log; without it debug.log is nearly silent | 346 | -debug # verbose log; without it debug.log is nearly silent |
| 325 | -help # full list | 347 | -help # full list |
| 326 | ``` | 348 | ``` |
| @@ -329,15 +351,23 @@ Other options worth knowing: | |||
| 329 | needed — the data directory takes an exclusive lock, so a second node pointed at | 351 | needed — the data directory takes an exclusive lock, so a second node pointed at |
| 330 | the same one will refuse to start. | 352 | the same one will refuse to start. |
| 331 | 353 | ||
| 332 | `-socks=127.0.0.1:9050` routes outbound Nostr discovery and `.btf` rendezvous | 354 | `-socks=127.0.0.1:9050` routes outbound Nostr discovery, `.btf` rendezvous |
| 333 | dials through a local SOCKS5 proxy such as Tor. When it is set, the node skips | 355 | dials, and direct `.onion` peer dials through a local SOCKS5 proxy such as Tor. |
| 356 | When it is set, the node skips | ||
| 334 | plain HTTP external-IP probes instead of leaking a direct request outside the | 357 | plain HTTP external-IP probes instead of leaking a direct request outside the |
| 335 | proxy. IPv6 proxy endpoints use brackets, for example `-socks=[::1]:9050`. | 358 | proxy. IPv6 proxy endpoints use brackets, for example `-socks=[::1]:9050`. |
| 336 | 359 | ||
| 337 | `-tor` is a privacy shorthand for the usual local Tor SOCKS5 listener at | 360 | `-tor` is a privacy shorthand for the usual local Tor SOCKS5 listener at |
| 338 | `127.0.0.1:9050`. It routes outbound Nostr discovery and `.btf` rendezvous | 361 | `127.0.0.1:9050`. It routes outbound Nostr discovery, `.btf` rendezvous dials, |
| 339 | dials through Tor, refuses direct `.onion` resolution, and keeps external-IP | 362 | and signed direct `.onion` peer dials through Tor, and keeps external-IP probes |
| 340 | probes disabled. Use `-tor=HOST:PORT` when Tor listens somewhere else. | 363 | disabled. Use `-tor=HOST:PORT` when Tor listens somewhere else. |
| 364 | |||
| 365 | `-managedtor[=PATH]` starts a Tor process for this node, writes a local `torrc`, | ||
| 366 | creates a v3 hidden service for port `8433`, routes outbound discovery through | ||
| 367 | that Tor instance, and signs the generated `.onion:8433` endpoint into the | ||
| 368 | node's `.btf` descriptor. Without `PATH`, Bitflash looks for `tor/tor.exe`, | ||
| 369 | `tor.exe`, or `tor` beside the binary and then on `PATH`. The hidden-service key | ||
| 370 | is stored under the Bitflash data directory in `managed-tor/onion-service/`. | ||
| 341 | 371 | ||
| 342 | ### When something looks wrong | 372 | ### When something looks wrong |
| 343 | 373 | ||
| @@ -424,6 +454,19 @@ make windows | |||
| 424 | ``` | 454 | ``` |
| 425 | Installs deps via pacman, produces `Bitflash-*-windows.zip`. | 455 | Installs deps via pacman, produces `Bitflash-*-windows.zip`. |
| 426 | 456 | ||
| 457 | To build the Windows package that also carries the Tor Expert Bundle: | ||
| 458 | |||
| 459 | ```bash | ||
| 460 | make windows-tor | ||
| 461 | ``` | ||
| 462 | |||
| 463 | That produces `Bitflash-*-windows-with-tor.zip`. The release script downloads | ||
| 464 | the Tor Expert Bundle from the official Tor archive, verifies its pinned SHA256, | ||
| 465 | optionally verifies the Tor Project GPG signature when `gpg` is available, and | ||
| 466 | places `tor/tor.exe` beside `Bitflash.exe` so `-managedtor` works without a | ||
| 467 | separate Tor install. For release builds, use `TOR_VERIFY_GPG=required make | ||
| 468 | windows-tor` to require the extra signature check. | ||
| 469 | |||
| 427 | --- | 470 | --- |
| 428 | 471 | ||
| 429 | ## At a glance | 472 | ## At a glance |