halving_interval = 210000 cycle_interval = 1260000 # LCM of 210000 and 2016 for cycle conjunctions initial_subsidy = 5000000000 # 50 BTC in sats def subsidy(height): return initial_subsidy >> (height // halving_interval) def starting_sat(height): total = 0 full_epochs = height // halving_interval for e in range(full_epochs): subs = initial_subsidy >> e total += halving_interval * subs remaining = height % halving_interval subs = initial_subsidy >> full_epochs total += remaining * subs return total # Epic sats: first sat of halving epochs 1 to 32 epic_sats = [] for n in range(1, 33): h = n * halving_interval sat = starting_sat(h) epic_sats.append((n, h, sat)) # Legendary sats: first sat of cycles 1 to 5 legendary_sats = [] for m in range(1, 6): h = m * cycle_interval sat = starting_sat(h) legendary_sats.append((m, h, sat)) # Output print("Epic Sats:") for n, h, sat in epic_sats: print(f"Epoch {n}, Block {h}, Sat {sat}") print("\nLegendary Sats:") for m, h, sat in legendary_sats: print(f"Cycle {m}, Block {h}, Sat {sat}")