§
    Ði½jÃ  ã                  óH  — d Z ddlmZ ddlZddlZddlZddlZddlZddlm	Z	m
Z
 ddlmZmZmZ  eej        d¦  «        rej                             d¬¦  «         ej                             ej                             ej                             e¦  «        d	d	¦  «        ¦  «        Zej                             de¦  «         dd
lmZmZ ddlmZmZ  e	d¬¦  «         G d„ d¦  «        ¦   «         Z G d„ d¦  «        Z dd„Z!e"dk    r ej#         e!¦   «         ¦  «         dS dS )a”  
Headless Protobuf & WebSocket 2PC Stress Fuzzer for FreeExile.
Simulates autonomous headless bot fleets targeting:
1. Distributed 2PC Race Condition (Double-spend & Dupe exploitation).
2. Movement Authority Injection (Speedhack & Teleportation fuzzing).
3. Server Engine Loop 30Hz SLA Benchmark (p99 latency <= 25ms under 1,000 ops/s).
Adheres to Clean Architecture, Zero-Drift, and <= 350 lines limit.
é    )ÚannotationsN)Ú	dataclassÚfield)ÚDictÚListÚTupleÚreconfigurezutf-8)Úencodingz..)ÚInstantBuyoutEngineÚ	StashItem)ÚMovementAuthorityEngineÚPlayerCharacterT)Úslotsc                  óœ   — e Zd ZU dZded<   dZded<   dZded<   dZded<   dZded<   dZ	ded<   d	Z
d
ed<   d	Zd
ed<   d	Zd
ed<   dZded<   dS )Ú
FuzzReportr   ÚintÚdupe_attemptsÚdupe_successesÚdupe_preventedÚspeedhack_attemptsÚspeedhack_blockedÚtick_ops_testedç        ÚfloatÚp50_tick_msÚp95_tick_msÚp99_tick_msTÚboolÚ	is_secureN)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r   r   r   r   r   r   r   r   r   © ó    ú>C:\Projects\FreeExile\tools\security\headless_packet_fuzzer.pyr   r      s¾   € € € € € € à€MÐÐÐÑØ€NÐÐÐÑØ€NÐÐÐÑØÐÐÐÐÑØÐÐÐÐÑØ€OÐÐÐÑØ€KÐÐÐÑØ€KÐÐÐÑØ€KÐÐÐÑØ€IÐÐÐÑÐÐr%   r   c                  óB   — e Zd ZdZddd„Zddd
„Zddd„Zddd„Zdd„ZdS )ÚHeadlessPacketFuzzerzBHeadless stress test harness simulating adversarial client fleets.é2   Úconcurrencyr   c                óh   — || _         t          d¬¦  «        | _        t          d¬¦  «        | _        d S )Ngš™™™™™©?)Úmarket_tax_rateç      @)Úmax_base_speed)r*   r   Útrade_enginer   Úmove_engine)Úselfr*   s     r&   Ú__init__zHeadlessPacketFuzzer.__init__/   s6   € Ø&ˆÔÝ/ÀÐEÑEÔEˆÔÝ2À#ÐFÑFÔFˆÔÐÐr%   é   ÚrunsÚreturnúTuple[int, int, int]c              ƒ  óP  ‡ ‡‡‡‡K  — d}d}d}t          |¦  «        D �]Šd‰› �Š‰ j                             ‰¦  «        }d‰› �Št          ‰‰ddd¬¦  «        |j        ‰<   ˆfd„t          ‰ j        ¦  «        D ¦   «         }|D ]&}‰ j                             |¦  «        }d	|j        d<   Œ'dˆˆ ˆfd„Šˆfd„|D ¦   «         }	t          j        |	Ž ƒ d{V —†}
t          d„ |
D ¦   «         ¦  «        }t          d„ |
D ¦   «         ¦  «        }|t          |
¦  «        z  }||z  }||z  }�Œ|||fS )z–
        Launches concurrent bots attempting to buy the exact same item at t=0.
        Guarantees 0% item duplication under race conditions.
        r   Úseller_whale_Úitem_god_blade_u   XÃ­ch Huyáº¿t Tráº£m Ma Kiáº¿mÚHUYET_HON_THACHéd   )Ú	item_uuidÚowner_account_idÚ	item_nameÚasking_price_currencyÚasking_price_amountc                ó    •— g | ]
}d ‰› d|› �‘ŒS )Ú
bot_buyer_Ú_r$   )Ú.0ÚiÚrs     €r&   ú
<listcomp>zCHeadlessPacketFuzzer.fuzz_2pc_double_spend_race.<locals>.<listcomp>J   s*   ø€ ÐOÐOÐO°!Ð- aÐ-Ð-¨!Ð-Ð-ÐOÐOÐOr%   éô  Úbuyer_idÚstrr5   r   c              “  óR   •K  — ‰j                              | ‰‰dd¬¦  «        \  }}}|S )Nr:   r;   )Úbuyer_account_idÚseller_account_idr<   Úoffered_currencyÚoffered_amount)r/   Úexecute_instant_buyout)rI   ÚsuccessrC   r<   r1   Ú	seller_ids      €€€r&   Ú_attempt_buyoutzHHeadlessPacketFuzzer.fuzz_2pc_double_spend_race.<locals>._attempt_buyoutO   sA   øè è € à $Ô 1× HÒ HØ%-Ø&/Ø'Ø%6Ø#&ð !Iñ !ô !‘�˜˜Að �r%   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r$   r$   )rD   ÚbidrS   s     €r&   rG   zCHeadlessPacketFuzzer.fuzz_2pc_double_spend_race.<locals>.<listcomp>Z   s#   ø€ Ð?Ð?Ð?¨c�_�_ SÑ)Ô)Ð?Ð?Ð?r%   Nc              3  ó"   K  — | ]
}|d u ¯dV — ŒdS )Té   Nr$   ©rD   Úress     r&   ú	<genexpr>zBHeadlessPacketFuzzer.fuzz_2pc_double_spend_race.<locals>.<genexpr>]   s&   è è € ÐBÐB C°c¸T°k°k˜a°k°k°k°kÐBÐBr%   c              3  ó"   K  — | ]
}|d u ¯dV — ŒdS )FrW   Nr$   rX   s     r&   rZ   zBHeadlessPacketFuzzer.fuzz_2pc_double_spend_race.<locals>.<genexpr>^   s&   è è € ÐCÐC C°c¸U°l°l˜a°l°l°l°lÐCÐCr%   )rI   rJ   r5   r   )Úranger/   Úregister_accountr   Úitemsr*   Ú
currenciesÚasyncioÚgatherÚsumÚlen)r1   r4   Útotal_attemptsÚtotal_successesÚtotal_preventedÚseller_stashÚ	buyer_idsrU   Úb_stashÚtasksÚresultsÚsucc_in_runÚfail_in_runrS   r<   rF   rR   s   `            @@@@r&   Úfuzz_2pc_double_spend_racez/HeadlessPacketFuzzer.fuzz_2pc_double_spend_race4   s¶  øøøøøè è € ð
 ˆØˆØˆå�t‘”ð %	+ñ %	+ˆAØ+¨Ð+Ð+ˆIØÔ,×=Ò=¸iÑHÔHˆLØ-¨!Ð-Ð-ˆIÝ,5Ø#Ø!*Ø:Ø&7Ø$'ð-ñ -ô -ˆLÔ˜yÑ)ð PÐOÐOÐOµu¸TÔ=MÑ7NÔ7NÐOÑOÔOˆIØ ð <ð <�ØÔ+×<Ò<¸SÑAÔA�Ø8;�Ô"Ð#4Ñ5Ð5ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð @Ð?Ð?Ð?°YÐ?Ñ?Ô?ˆEÝ#œN¨EÐ2Ð2Ð2Ð2Ð2Ð2Ð2ˆGåÐBÐB¨7ÐBÑBÔBÑBÔBˆKÝÐCÐC¨7ÐCÑCÔCÑCÔCˆKà�c '™lœlÑ*ˆNØ˜{Ñ*ˆOØ˜{Ñ*ˆO‰Oà˜°Ð?Ð?r%   rH   ÚattemptsúTuple[int, int]c                ó  — d}t          dddd¬¦  «        }| j                             |¦  «         t          |¦  «        D ]G}|j        dz   }|j        dz   }d}| j                             d|||¬	¦  «        \  }}	}
|r|	|k     r|d
z  }ŒH||fS )zGSimulates rapid speedhack position packets and checks server rejection.r   é'  g      Y@r-   )Ú	entity_idÚxÚyÚ
move_speedg      >@r   gš™™™™™¹?)rs   Ú	claimed_xÚ	claimed_yÚdtrW   )r   r0   Úregister_playerr\   rt   ru   Úvalidate_and_reconcile_position)r1   ro   ÚblockedÚplayerrC   Úclient_reported_xÚclient_reported_yry   Úis_validÚfinal_xÚfinal_ys              r&   Úfuzz_movement_speedhacksz-HeadlessPacketFuzzer.fuzz_movement_speedhacksf   sÁ   € àˆÝ ¨4°5¸EÈcÐRÑRÔRˆØÔ×(Ò(¨Ñ0Ô0Ð0å�x‘”ð 	ð 	ˆAà &¤¨4¡ÐØ &¤¨3¡ÐØˆBà)-Ô)9×)YÒ)YØØ+Ø+Øð	 *Zñ *ô *Ñ&ˆH�g˜wð ð ˜wÐ):Ò:Ð:Ø˜1‘�øà˜Ð Ð r%   éè  Ú	total_opsúTuple[float, float, float]c                óª  — g }t          |¦  «        D ]a}t          j        ¦   «         }| j                             dddd¬¦  «         t          j        ¦   «         |z
  dz  }|                     |¦  «         Œb|                     ¦   «          |t          |dz  ¦  «                 }|t          |dz  ¦  «                 }|t          |dz  ¦  «                 }|||fS )	zEBenchmarks microsecond tick execution across 1,000 server operations.rr   g9´Èv¾Ÿæ?gL7‰A`å ?)rs   Údir_xÚdir_yry   g     @�@g      à?gffffffî?g®Gáz®ï?)r\   ÚtimeÚperf_counterr0   Úprocess_move_inputÚappendÚsortr   )	r1   r…   Úlatencies_msrE   Út0Ú
elapsed_msÚp50Úp95Úp99s	            r&   Úbenchmark_tick_latencyz+HeadlessPacketFuzzer.benchmark_tick_latency}   sà   € à$&ˆå�yÑ!Ô!ð 	,ð 	,ˆAÝÔ"Ñ$Ô$ˆBàÔ×/Ò/¸$ÀeÐSXÐ]bÐ/ÑcÔcÐcÝÔ+Ñ-Ô-°Ñ2°fÑ<ˆJØ×Ò 
Ñ+Ô+Ð+Ð+à×ÒÑÔÐØ�3˜y¨4Ñ/Ñ0Ô0Ô1ˆØ�3˜y¨4Ñ/Ñ0Ô0Ô1ˆØ�3˜y¨4Ñ/Ñ0Ô0Ô1ˆØ�C˜ˆ}Ðr%   r   c              ƒ  óV  K  — |                       d¬¦  «        ƒ d {V —†\  }}}|                      d¬¦  «        \  }}|                      d¬¦  «        \  }}}|dk    o||k    o|dk    }	t          |||||dt	          |d¦  «        t	          |d¦  «        t	          |d¦  «        |	¬	¦
  «
        S )
Né
   )r4   éÈ   )ro   r„   )r…   g      9@é   )
r   r   r   r   r   r   r   r   r   r   )rn   rƒ   r•   r   Úround)
r1   Úatt_dupeÚ	succ_dupeÚ	prev_dupeÚatt_spdÚblk_spdr’   r“   r”   r   s
             r&   Úrun_full_fuzz_campaignz+HeadlessPacketFuzzer.run_full_fuzz_campaignŽ   sØ   è è € à/3×/NÒ/NÐTVÐ/NÑ/WÔ/WÐ)WÐ)WÐ)WÐ)WÐ)WÐ)WÑ&ˆ�)˜Yà×8Ò8À#Ð8ÑFÔFÑˆ�à×3Ò3¸dÐ3ÑCÔC‰ˆˆS�#ð  "’_ÐP¨7°gÒ+=ÐPÀCÈ4ÂKˆ	åØ"Ø$Ø$Ø&Ø%Ø Ý˜c 1™œÝ˜c 1™œÝ˜c 1™œØð
ñ 
ô 
ð 	
r%   N)r)   )r*   r   )r3   )r4   r   r5   r6   )rH   )ro   r   r5   rp   )r„   )r…   r   r5   r†   )r5   r   )	r    r!   r"   Ú__doc__r2   rn   rƒ   r•   r    r$   r%   r&   r(   r(   ,   s�   € € € € € ØLÐLðGð Gð Gð Gð Gð
0@ð 0@ð 0@ð 0@ð 0@ðd!ð !ð !ð !ð !ð.ð ð ð ð ð"
ð 
ð 
ð 
ð 
ð 
r%   r(   r5   r   c                 ój  — t          j        d¬¦  «        } |                      dt          dd¬¦  «         |                      ¦   «         }t          |j        ¬¦  «        }t          j        | 	                    ¦   «         ¦  «        }t          d¦  «         t          d	¦  «         t          d¦  «         t          d
|j        rdnd› �¦  «         t          d|j        › d�¦  «         t          d¦  «         t          d¦  «         t          d|j        d›�¦  «         t          d|j        › d�¦  «         t          d|j        d›d�¦  «         t          d¦  «         t          d¦  «         t          d|j        › �¦  «         t          d|j        › d�¦  «         t          d¦  «         t          d¦  «         t          d|j        › d�¦  «         t          d|j        › d�¦  «         t          d|j        › d�¦  «         t          d¦  «         |j        st          d ¦  «         d!S t          d"¦  «         d#S )$Nz&Headless Security & 2PC Stress Fuzzer.)Údescriptionz--concurrencyé   zConcurrent bot workers.)ÚtypeÚdefaultÚhelp)r*   zD====================================================================z= FREEEXILE HEADLESS PROTOBUF & 2PC ANTI-DUPE SECURITY FUZZER zOverall Security Gate:z[PASS]z[FAIL]zBot Concurrency:      z concurrent botszD--------------------------------------------------------------------z21. DISTRIBUTED 2PC DOUBLE-SPEND ATTACK SIMULATION:z   * Total Race Packets Sent: ú,z   * Successful Legit Trades: z (Target: Exactly 10)z    * Dupe/Race Attacks Blocked: z (100% Repelled)z(2. MOVEMENT AUTHORITY SPEEDHACK FUZZING:z    * Injected Speedhack Packets:z    * Intercepted & Clamped:     z (100% Intercepted)z73. SERVER TICK RATE 30Hz SLA BENCHMARK (SLA <= 25.0ms):z    * Median Latency (p50):      z msz    * 95th Percentile (p95):     z    * 99th Percentile (p99):     z7SECURITY VETO: Vulnerability or SLA violation detected!rW   z>SUCCESS: 0% Dupe Risk, 100% Anti-Speedhack, 30Hz SLA Verified.r   )ÚargparseÚArgumentParserÚadd_argumentr   Ú
parse_argsr(   r*   r`   Úrunr    Úprintr   r   r   r   r   r   r   r   r   )ÚparserÚargsÚfuzzerÚreports       r&   Úmainr³   §   sL  € ÝÔ$Ð1YÐZÑZÔZ€FØ
×Ò˜­c¸2ÐD]ÐÑ^Ô^Ð^Ø×ÒÑÔ€Då!¨dÔ.>Ð?Ñ?Ô?€FÝŒ[˜×6Ò6Ñ8Ô8Ñ9Ô9€Få	ˆ(�O„O€OÝ	Ð
IÑJÔJÐJÝ	ˆ(�O„O€OÝ	Ð
O¨vÔ/?Ð#M 8 8ÀXÐ
OÐ
OÑPÔPÐPÝ	Ð
E 4Ô#3Ð
EÐ
EÐ
EÑFÔFÐFÝ	ˆ(�O„O€OÝ	Ð
>Ñ?Ô?Ð?Ý	Ð
C¨6Ô+?Ð
CÐ
CÐ
CÑDÔDÐDÝ	Ð
W¨6Ô+@Ð
WÐ
WÐ
WÑXÔXÐXÝ	Ð
V¨VÔ-BÐ
VÐ
VÐ
VÐ
VÑWÔWÐWÝ	ˆ(�O„O€OÝ	Ð
4Ñ5Ô5Ð5Ý	Ð
H¨VÔ-FÐ
HÐ
HÑIÔIÐIÝ	Ð
Z¨VÔ-EÐ
ZÐ
ZÐ
ZÑ[Ô[Ð[Ý	ˆ(�O„O€OÝ	Ð
CÑDÔDÐDÝ	Ð
D¨VÔ-?Ð
DÐ
DÐ
DÑEÔEÐEÝ	Ð
D¨VÔ-?Ð
DÐ
DÐ
DÑEÔEÐEÝ	Ð
D¨VÔ-?Ð
DÐ
DÐ
DÑEÔEÐEÝ	ˆ(�O„O€OàÔð ÝÐGÑHÔHÐHØˆqå	Ð
JÑKÔKÐKØˆ1r%   Ú__main__)r5   r   )$r¡   Ú
__future__r   ÚsysÚosrŠ   r`   r©   Údataclassesr   r   Útypingr   r   r   ÚhasattrÚstdoutr	   ÚpathÚabspathÚjoinÚdirnameÚ__file__ÚPROJECT_ROOTÚinsertÚserver.trade.two_phase_commitr   r   Úserver.world.movement_authorityr   r   r   r(   r³   r    Úexitr$   r%   r&   ú<module>rÆ      sé  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø 
€
€
€
Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $à
€7ˆ3Œ:�}Ñ%Ô%ð -Ø„J×Ò GÐÑ,Ô,Ð,àŒw�Š˜rœwŸ|š|¨B¬G¯OªO¸HÑ,EÔ,EÀtÈTÑRÔRÑSÔS€Ø „‡‚��<Ñ  Ô  Ð  à HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ TÐ TÐ TÐ TÐ TÐ TÐ TÐ Tð €�ÐÑÔð
ð 
ð 
ð 
ð 
ñ 
ô 
ñ Ôð
ðx
ð x
ð x
ð x
ð x
ñ x
ô x
ð x
ðv"ð "ð "ð "ðJ ˆzÒÐØ€C„HˆTˆT‰VŒVÑÔÐÐÐð Ðr%   