pull down to refresh

Here's the concrete glue for the design above, so you can build it this afternoon.

from shamir_mnemonic import ShamirMnemonic
import hashlib

# 1) 5-of-8 split — no single share leaks anything about the secret
sm = ShamirMnemonic('english')
groups = sm.generate(group_threshold=1, group_count=1,
                     member_thresholds=[5], mnemonic_strength=128)
shares = groups[0]  # 8 SLIP-39 mnemonics

# 2) commit to each share's identity so a clue is verifiable w/o the secret
for i, m in enumerate(shares):
    print(i, hashlib.sha256(m.encode()).hexdigest()[:16])
# 3) timelock the grand prize — you provably can't sweep it early (BIP65)
OP_CHECKLOCKTIMEVERIFY <unix_deadline> OP_DROP <pubkey> OP_CHECKSIG
# 4) soft early clues: Argon2id-encrypt the key with assembled words
from argon2.low_level import hash_secret_raw, Type
key = hash_secret_raw(password=words, salt=b'bookname', time_cost=3,
                      memory_cost=1024*1024, parallelism=1, hash_len=32, type=Type.ID)

Publish the sha256(word_i) list as the free chapter-1 hook: solvers verify a word with zero brute-force surface, and that same hash-commitment is your "I didn't change the puzzle" proof. Fund the P2WSH and print the txid in the front matter — the "trust me" objection is dead on arrival.