Golden numbers¶
The golden numbers are E46’s frozen test answers. For every library we write the rule twice: once in plain Python (slow, easy to read) and once in C++ (fast, used by the node). Both must give exactly the same answers on these files. Once a file is published here it is frozen: nobody edits it. If a rule ever changes, it gets a new file, so old results stay checkable forever.
They’re published so anyone can test their own implementation of E46 against ours, byte for byte. That’s mission v4 (honest evidence) in practice.
The key numbers at a glance¶
Number |
Value |
Where it’s defined |
|---|---|---|
Block spacing |
150 s |
|
ASERT half-life |
7,200 s (2 h) |
§2, decision #16 |
MAX_TARGET (easiest difficulty) |
|
|
Header size |
120 bytes |
§2b |
Total supply T |
46,000,000 E46 |
§3 |
Decay epoch |
17,280 blocks (about 1 month) |
§3 |
Decay shift k |
20 |
§3 |
Neutrino (smallest reward) |
1 base unit |
§3 |
Reward split |
80% miner / 10% N-pool / 10% Z-pool (each pool gets reward ÷ 10 rounded down; the miner gets the rest) |
§5, WO-07 |
Stake cap N / finder cap Z |
576 × subsidy / 0.1 × subsidy |
§5 |
Coinbase maturity |
100 blocks ⓘOnly newly mined coins wait. Block rewards, Rad rewards (E46i) and pool payouts become spendable after 100 blocks, about 4 hours. E46 someone sends you is spendable once it is in a block, about 2½ minutes. Why: if two blocks are found at once, one is dropped and its reward never existed; the wait stops that loss spreading to people who were paid with it. More |
§2d |
Rad puzzle size S |
2^20 candidates per nonce |
§4, decision #11 |
Z_base (Rad level) |
41 (provisional) |
§4 |
Collision tier |
48 matching bits |
§4, decision #13 |
Commitment stamp Z_commit |
18 bits (provisional) |
§2f |
Frozen test-vector files¶
Want to see these numbers come alive? The Learn by exam page builds and signs a real transaction step by step, and its --debug mode prints every byte.
Fingerprint = SHAKE256 of the whole file, 32 bytes, in hex. Download a file, hash it, and compare (Python: hashlib.shake_256(open(f,'rb').read()).hexdigest(32)). A different fingerprint means a different file.
WO |
What it tests |
File |
Size |
SHAKE256 fingerprint |
|---|---|---|---|---|
WO-01 |
RL v3 hash (librl) |
{download} |
1.06 MB |
|
WO-02 |
SHAKE256 / KMAC256 |
{download} |
0.78 MB |
|
WO-03 |
Merkle and event roots |
{download} |
5.36 MB |
|
WO-03B |
Count-bound roots |
{download} |
5.80 MB |
|
WO-04 |
Bech32m codec |
{download} |
0.24 MB |
|
WO-05 |
Addresses and IDs |
{download} |
0.02 MB |
|
WO-06 |
Header, PoW, ASERT |
{download} |
0.14 MB |
|
WO-07 |
Emission, pools, E46i |
{download} |
0.01 MB |
|
WO-08 |
Rad engine |
{download} |
0.81 MB |
|
WO-11 |
SLH-DSA keys + KMAC seeds |
{download} |
0.01 MB |
|
WO-11 |
NIST ACVP SLH-DSA-SHAKE-128s keygen + signature |
{download} |
0.02 MB |
|
WO-11 |
NIST ACVP empty-context sign/verify |
{download} |
0.05 MB |
|
WO-12 |
Transactions, txid/wtxid, sighash |
{download} |
0.46 MB |
|
All files listed are committed and frozen. The two NIST files are copies of NIST’s official test vectors (usnistgov/ACVP-Server), filtered to SLH-DSA-SHAKE-128s. Each file also records the Python reference that produced it; the generator scripts (e46/golden/generate_wo*.py --check) rebuild every file and confirm it hasn’t changed.