f1a7a7f872
presale: - Split unbounded finalize_presale distribution into batched batch_distribute() extrinsic (same pattern as batch_refund_failed_presale) to prevent block weight exhaustion with many contributors - Fix u128 overflow in calculate_reward_dynamic() by using multiply_by_rational_with_rounding() for safe intermediate multiplication - Fix pre-existing batch_refund test assertion (platform fee deduction was not accounted for in expected refund amount) validator-pool: - Bound PoolMembers::iter() with .take(MaxPoolSize) in select_validators_for_era() to prevent unbounded iteration in on_initialize - Fix on_initialize weight accounting to include all DB reads/writes from do_new_era() and select_validators_for_era() (was only counting 2 reads)