Det här påminner mig om de gamla mempool-dagarna på Ethereum när vi var tvungna att göra väldigt liknande XOR calldata-obfuskering för att stoppa konkurrenter från att byta om haha Kul att se att det faktiskt fortfarande finns en vilda västern i Solanaland.
Michael Morrell
Michael Morrell4 dec. 10:08
Obskuskering av HumidiFi-bytesinstruktionsdata: - Strömchiffer baserad på plats XOR. - Symmetrisk (f(f(x)) = x) och arbetar på 64-bitars chunkar. Algoritm: - Bearbeta data i 8-byte (u64) chunkar. - För varje chunk: -- XOR med statisk 'HUMIDIFI_IX_DATA_KEY': [58, 255, 47, 255, 226, 186, 235, 195, 123, 131, 245, 8, 11, 233, 132, 219, 225, 40, 79, 119, 169, 121, 169, 58, 197, 1, 122, 9, 216, 164, 149, 97][0..7]; -- XOR med rullande 'pos_mask' (börjar på 0, ökar med 0x0001_0001_0001_0001 per chunk). - Resterande hantering (om len % 8 != 0): - Nollpad-återstående byte till 64 bitar. - Applicera samma XOR (nyckel + nuvarande pos_mask). - Kopiera giltiga bytes tillbaka till originalskivan. Inmatningslayout (efter deobfuskation): - Bytes 0-7: 'swap_id' (u64) - Bytes 8-15: 'amount_in' (u64) - Byte 16: 'is_base_to_quote' (u8) - Bytes 17-23: Utfyllnad - Byte 24: Selector (poppade före deserialisering)
Om du undrar "varför koda samtalsdata när du kan simma", är svaret enkelt: simuleringar är dyra i beräkningstid men budgivningen har låg latens, vilket betyder att om du simulerar + ombjuder så har ursprungsgivaren redan skickat flera nyare transaktioner när du byter anbud. Det betyder att du behöver ett sätt att omedelbart känna igen konkurrenternas parametrar som du kan basera ditt nya bud på. Det är därför du tolkar calldata istället för att göra simuleringar. Och när alla gör detta måste du ligga steget före och koda anropsdatan på ett sätt som är omöjligt att avkoda utan manuell omvänd ingenjörskonst.
Sällsynt teknisk kommentar.
5,02K