iuna

iuna

iuna - experimental mainnet-candidate protocol
git clone https://getiuna.org/git/iuna.git
Log | Files | Refs | README | LICENSE

commit d73df9df66b518a83356dd2feda96031b563483d
parent 8b476b4294f886ca36fa0afb745f439489808486
Author: Joris Hartog <jorishartog@hotmail.com>
Date:   Wed, 19 Aug 2026 21:39:31 +0200

Cover combined economic sweep pressure

Diffstat:
MPLAN.md | 3++-
Msrc/domain/adversarial_tests.rs | 24++++++++++++++++++++++++
2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/PLAN.md b/PLAN.md @@ -60,7 +60,8 @@ dimensions to adversarial strategies and classifies observed censorship as unavailable, network-isolation dependent, fee-pressure dependent, or finalizer-disruption dependent. Fee pressure, gossip latency, peer isolation, and offline finalizer schedules are now modeled as runner inputs instead of only as -strategy labels. +strategy labels. Combined network-isolation plus offline-finalizer pressure is +covered as a separate matrix regression. Goal: quantify whether attacks are impossible, only possible under network isolation, or possible but expensive. diff --git a/src/domain/adversarial_tests.rs b/src/domain/adversarial_tests.rs @@ -3628,6 +3628,15 @@ fn economic_sweep_runner_classifies_attack_costs_across_dimensions() { offline_finalizer_percent: 0, fee_pressure_burns_per_block: 4, }, + EconomicSweepCase { + seed: 1_305, + burn_percent: 50, + lineage_percent: 50, + peer_isolation_percent: 50, + gossip_latency_blocks: 0, + offline_finalizer_percent: 100, + fee_pressure_burns_per_block: 0, + }, ]; let results = run_economic_sweep(&cases, 4); @@ -3676,6 +3685,21 @@ fn economic_sweep_runner_classifies_attack_costs_across_dimensions() { assert_eq!(results[4].class, EconomicAttackClass::RequiresFeePressure); assert!(results[4].metrics.fee_pressure_burns > 0); assert!(results[4].metrics.fee_pressure_displaced_burns > 0); + + assert_eq!(results[5].strategy, AdversaryStrategy::CombinedStrategy); + assert_eq!( + results[5].class, + EconomicAttackClass::RequiresNetworkIsolation + ); + assert!(results[5].metrics.unseen_third_party_burns > 0); + assert_eq!(results[5].metrics.censored_third_party_burns, 0); + assert!(results[5].metrics.fallback_opportunities > 0); + assert!(results[5].metrics.fallback_blocks > 0); + assert!(results[5].metrics.recovery_rate > 0.0); + assert_eq!( + results[5].metrics.successful_censorship_cost_per_burn(), + None + ); } #[test]