# BIP-39 word list — source and validation

SeedGrid 32×64 uses the **official BIP-39 English word list**, reproduced
verbatim. No word has been added, removed, or modified.

## Source

- Repository: `bitcoin/bips`
- Path: `bip-0039/english.txt`
- Canonical URL:
  `https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/english.txt`
- This project's copy: [`data/bip39-english.txt`](../data/bip39-english.txt)

## Digest

SHA-256 of the committed word list (one word per line, trailing newline,
UTF-8):

```
2f5eed53a4727b4bf8880d8f3f199efc90e58503646d9ff8eff3a2ed3b24dbda
```

Verify locally:

```sh
shasum -a 256 data/bip39-english.txt   # macOS
sha256sum data/bip39-english.txt       # Linux
```

## Validation performed

| Check | Result |
| --- | --- |
| Word count | 2,048 |
| Unique words | yes (2,048 distinct) |
| First word (index 1) | `abandon` |
| Last word (index 2,048) | `zoo` |
| All lowercase alphabetic | yes |
| Every word used at most once in the grid | yes |

## How to reproduce

```sh
# Re-fetch from the official source:
curl -sS https://raw.githubusercontent.com/bitcoin/bips/master/bip-0039/english.txt \
  -o data/bip39-english.txt

# Validate + regenerate both grids (seedgrid.pdf + seedgrid-compact.pdf):
python3 scripts/generate_guide.py

# Validate the existing grids without rewriting:
python3 scripts/generate_guide.py --check
```

The generator fails hard (non-zero exit) if any of the following hold:

- the list does not contain exactly 2,048 words
- the list contains duplicates
- index 1 is not `abandon`
- index 2,048 is not `zoo`
- any entry is not a lowercase alphabetic word
- any sample coordinate mapping is wrong (including A=62,B=21 → 1,973 and
  A=64,B=32 → 2,048)

## Mapping rule

For every cell in the grid:

```
index = (A − 1) × 32 + B          # A in 1..64 (row), B in 1..32 (column)
```

and the BIP-39 word is `words[index - 1]` (0-based indexing). This is a
bijection from {1,…,64} × {1,…,32} to {1,…,2,048}.
