upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/docs/fair-launch.md
diff options
context:
space:
mode:
authorbitflash-maintainer <noreply@bitflash.invalid>2026-09-05 22:46:52 +0000
committerbitflash-maintainer <noreply@bitflash.invalid>2026-09-05 22:46:52 +0000
commitceae3d076b5ad11ee84729ae43f14e9312896646 (patch)
tree7e9132aa871fdc01cb95268d2f5ea3bb11853ddf /docs/fair-launch.md
parentbe63e83d79e7e00e6b8ca889a70e6a19886aa1d8 (diff)
parent66e0b9158d050c46b1ff2509faeee3f4573cac1c (diff)
Bring main onto the line this project actually ships
main had drifted to a history with no ancestor in common with the tree we build and deploy. It sat at be63e83 (2026-08-09) with 28 commits; the shipped line, deploy/soak-2026-08-21, had 383. The two shared nothing -- git merge-base returns no result at all -- so anyone cloning this repository landed on a default branch that was neither current nor related to the running node. The 28 commits on main were audited before this merge: every one is already present in the tree by content, including the two that are hardest to see because they were rewritten afterwards -- the payout reorg-safety work (PayoutBlockStillOnChain, since evolved to re-check on every retry rather than once at maturity) and the nostr relay certificate verification (SSL_set1_host, now with a Windows root-store path). Nothing on main is lost by this merge. Recorded as a merge rather than a force-push: main only ever moves forward, its old history stays reachable as the first parent, and this is revertible. The tree is taken wholesale from the merged branch, so main's content is now exactly what was built and tested. What this brings onto main: - compactblock: BIP152-style compact block relay ported from upstream 1.2.23, primitives and unit test only, with the RAND_bytes failure path closed and the reconstruction allocation bounded. - upstream/main 17741d9: isolated testnet parameters and genesis, optional 2 MB large pages for RandomX. Mainnet genesis verified byte-identical through upstream's BuildGenesisBlock() refactor. - deploy: every image built on bookworm so binaries run on Debian 12, and the container build now honours the RandomX and libsecp256k1 pins it had been silently ignoring since before 1.2.15. Gates at this tree: 15/15 selftests, compactblock's 17 checks, consensus constants unchanged against e4f898c apart from the pre-existing MAX_BLOCK_SIZE_GEN, mainnet genesis intact, money-log check ok.
Diffstat (limited to 'docs/fair-launch.md')
-rw-r--r--docs/fair-launch.md70
1 files changed, 70 insertions, 0 deletions
diff --git a/docs/fair-launch.md b/docs/fair-launch.md
new file mode 100644
index 0000000..9603910
--- /dev/null
+++ b/docs/fair-launch.md
@@ -0,0 +1,70 @@
1# Bitflash fair-launch verifier
2
3Bitflash ships a deterministic fair-launch audit script:
4
5```bash
6python3 scripts/verify-fair-launch.py --max-blocks 1000 --out bitflash-fair-launch-report.json --json
7```
8
9The verifier reads `blk*.dat` directly from the local Bitflash data directory.
10It does not use Berkeley DB, does not call the node binary, and does not need
11network access. It uses the same shared Python chain parser as the UTXO
12commitment and proof tools, so block serialization fixes land in one place.
13
14The report proves the launch baseline that can be checked from the chain:
15
16- the genesis block hash matches the source constant;
17- the genesis merkle root matches the source constant;
18- the genesis transaction is a single coinbase transaction;
19- the genesis output total is exactly `50.00000000 BTF`;
20- the scanned block range and mined coinbase total are reproducible.
21
22For machines that do not have a synced data directory yet, the source constants
23can be checked without disk blocks:
24
25```bash
26python3 scripts/verify-fair-launch.py --reconstruct-genesis
27```
28
29## Deterministic output
30
31Use `--json` or `--out` for canonical JSON. The JSON is written with sorted
32keys, fixed separators, ASCII escaping, and one trailing newline. It deliberately
33does not include local paths or wall-clock generation time, so two auditors
34scanning the same block range produce the same bytes.
35
36That makes the report shareable:
37
38```bash
39python3 scripts/verify-fair-launch.py --max-blocks 1000 --out report.json --json
40sha256sum report.json
41```
42
43If another auditor runs the same command against the same chain prefix, the
44`sha256sum` should match.
45
46## OpenTimestamps
47
48OpenTimestamps is optional and external. It anchors the report in Bitcoin
49without adding any bridge or dependency to Bitflash consensus.
50
51After generating a canonical JSON report:
52
53```bash
54ots stamp report.json
55ots verify report.json.ots
56```
57
58The `.ots` file proves that the exact report bytes existed no later than the
59Bitcoin block that confirms the timestamp.
60
61## What this does not claim
62
63This is not a retroactive genesis commitment. The Bitflash genesis block already
64exists, so adding a new on-chain commitment to genesis would create a different
65chain. This verifier instead audits the launch state that is already on-chain
66and makes the result reproducible and timestampable.
67
68It also does not prove real-world miner identity. It proves the genesis state,
69the absence of non-coinbase premine in genesis, and the deterministic coinbase
70totals over the scanned prefix.