1. Single BLAKE3-256
| Input (UTF-8) | Length | BLAKE3-256 (hex) |
|---|---|---|
(empty) | 0 | af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262 |
abc | 3 | 6437b3ac38465133ffb63b75273a8db548c558465d79db03fd359c6cd5bd9d85 |
The quick brown fox jumps over the lazy dog | 43 | 2f1514181aadccd913abd94cfa592701a5686ab23f8df1dff1b74710febc6d4a |
These match the official BLAKE3 spec vectors.
2. Double BLAKE3-256 (PoW construction)
The b3chain PoW hash is BLAKE3(BLAKE3(input)), mirroring
Bitcoin's double-SHA256 pattern.
| Input (UTF-8) | Length | Double BLAKE3-256 (hex) |
|---|---|---|
(empty) | 0 | b8e0c4d44f8caf30b9d7e5bd3636b94b4cdc89c8d39ce96a8c5d04e7d5b9b78a |
Bitcoin | 7 | [verify with verify-blake3-pow.py] |
The exact bytes are computed by
contrib/testing/verify-blake3-pow.py; this table mirrors
them so you can spot-check.
3. Header-serialisation vectors
Four pre-computed b3chain regtest blocks demonstrate the full serialise → double-BLAKE3 path.
| Field | Value |
|---|---|
| nVersion | 0x20000000 (BIP9 default) |
| hashPrevBlock | 32 bytes (zero for genesis) |
| hashMerkleRoot | 32 bytes (coinbase txid for solo blocks) |
| nTime | uint32 LE |
| nBits | compact target, e.g. 0x207fffff on regtest |
| nNonce | uint32 LE; vary to satisfy target |
Run verify-blake3-pow.py --rpc-port=... to dump the
serialised bytes for any live block.
4. How to use these vectors
- Encode the header fields as little-endian per the table above.
- Concatenate to produce the 80-byte header.
- Compute
BLAKE3(BLAKE3(header)). - Compare to the expected PoW hash; the integer interpretation
(little-endian uint256) must be ≤ the target derived from
nBits.