Cela me rappelle les vieux jours de mempool sur Ethereum où nous devions faire une obfuscation de calldata XOR très similaire pour empêcher les concurrents de surenchérir haha C'est amusant de voir qu'il y a en fait encore un Far West dans le solanaland.
Michael Morrell
Michael Morrell4 déc., 10:08
Obfuscation des données d'instruction de swap HumidiFi : - Chiffre de flux basé sur XOR en place. - Symétrique (f(f(x)) = x) et fonctionne sur des morceaux de 64 bits. Algorithme : - Traiter les données par morceaux de 8 octets (u64). - Pour chaque morceau : -- XOR avec la clé statique `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 avec le `pos_mask` roulant (commence à 0, s'incrémente de 0x0001_0001_0001_0001 par morceau). - Gestion des restes (si len % 8 != 0) : - Compléter les octets restants avec des zéros jusqu'à 64 bits. - Appliquer les mêmes XOR (clé + pos_mask actuel). - Copier les octets valides dans le morceau original. Disposition d'entrée (après déobfuscation) : - Octets 0-7 : `swap_id` (u64) - Octets 8-15 : `amount_in` (u64) - Octet 16 : `is_base_to_quote` (u8) - Octets 17-23 : Rembourrage - Octet 24 : Sélecteur (retiré avant la désérialisation)
Si vous vous demandez "pourquoi encoder le calldata quand vous pouvez simuler", la réponse est simple : les simulations sont coûteuses en termes de temps de calcul, mais les enchères ont une faible latence, ce qui signifie que si vous simulez + réenchérissez, au moment où vous réenchérissez, l'initiateur aura déjà envoyé plusieurs nouvelles transactions. Cela signifie que vous devez avoir un moyen de reconnaître instantanément les paramètres des concurrents sur lesquels vous pouvez baser votre nouvelle enchère. C'est pourquoi vous analysez le calldata au lieu de faire des simulations. Et quand tout le monde fait cela, vous devez être un pas en avant et encoder le calldata d'une manière qui est impossible à décoder sans ingénierie inverse manuelle.
Comment technique rare.
4,34K