- #1 starts with a `1`
- #2 starts with either a `2` or `3`
- #3 starts with a `4`, `5`, `6`, or `7`
- #4 starts with any of the remaining possible hex chars
- then the pattern repeats for the next group of four keys, and so on...
is it actually possible that one seed phrase could/would actually make a series of consecutive keys that fit not just that specific pattern, but really any kind of repeating pattern at all...?? And how would you even find/make such a seed phrase...??
It is possible.
import random
import hashlib
import base58
for puzzle in range(1, 161):
lower = 2 ** (puzzle - 1)
upper = (2 ** puzzle) - 1
seed = "SatoshiNakamotoPuzzle" + str(puzzle)
random.seed(seed)
dec = random.randint(lower, upper)
private_key_hex = "%064x" % dec
private_key_bytes = bytes.fromhex(private_key_hex)
extended_key = b'\x80' + private_key_bytes
extended_key += b'\x01'
checksum = hashlib.sha256(hashlib.sha256(extended_key).digest()).digest()[:4]
wif_bytes = extended_key + checksum
wif_compressed = base58.b58encode(wif_bytes).decode()
print(f"Puzzle = {puzzle} {DEC} = {dec} seed = {seed} wif = {wif_compressed}")
[results snipped]
Ayo, there’s a pattern in the seed, but them keys and decimal numbers? Nah, they straight-up random.
But bruh, tryna find and reverse-engineer the seed? That’s impossible. You’d have an easier time brute-forcing private keys than crackin’ that seed, no cap.

Ok, I think I see my mistake... I just went back to the original comment, and I realize now that I had read "a single master seed" as "master seed
phrase" and not "a seed used to prime a RNG" ... Meaning, I thought the idea being proposed was that the puzzles were initially created by, like, using some off-the-shelf wallet software to automatically create a new wallet, complete with a BIP-39 seed phrase and a list of associated private keys, and then changing/masking those private keys to make the puzzles' keys, which (of course) would have
disassociated them all from the original BIP-39 seed phrase... And I couldn't for the life of me figure out how
that would be easier than just generating them all the way you show above...
So, I am dumb, just not the way I'd feared
