BLAKE3 Test Vectors

Canonical input/output pairs for BLAKE3-256 and the double-hash construction used by the b3chain proof-of-work. Use these to test any independent miner, hardware accelerator, or alternative client.

1. Single BLAKE3-256

Input (UTF-8)LengthBLAKE3-256 (hex)
(empty)0 af1349b9f5f9a1a6a0404dea36dcc9499bcb25c9adc112b7cc9a93cae41f3262
abc3 6437b3ac38465133ffb63b75273a8db548c558465d79db03fd359c6cd5bd9d85
The quick brown fox jumps over the lazy dog43 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)LengthDouble BLAKE3-256 (hex)
(empty)0 b8e0c4d44f8caf30b9d7e5bd3636b94b4cdc89c8d39ce96a8c5d04e7d5b9b78a
Bitcoin7 [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.

FieldValue
nVersion0x20000000 (BIP9 default)
hashPrevBlock32 bytes (zero for genesis)
hashMerkleRoot32 bytes (coinbase txid for solo blocks)
nTimeuint32 LE
nBitscompact target, e.g. 0x207fffff on regtest
nNonceuint32 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

  1. Encode the header fields as little-endian per the table above.
  2. Concatenate to produce the 80-byte header.
  3. Compute BLAKE3(BLAKE3(header)).
  4. Compare to the expected PoW hash; the integer interpretation (little-endian uint256) must be ≤ the target derived from nBits.

5. Source files