M-am uitat la codul care era greșit cu Cetus aseară și primul lucru despre care am fost foarte suspicios get_delta_b a fost de ce această funcție ar converti u256 în u64, ceea ce a cauzat problema de interceptare a preciziei. După ce am întrebat AI, este probabil ca atunci când cetus a migrat toate formulele uniswap v3, deoarece uni folosește un punct fix, trebuie să fie convertit într-un număr în virgulă mobilă fără o atenție atentă de securitate. Acest tip de logică de afaceri, care aparține nivelului algoritmului, este dificil de detectat în auditurile de cod, cu excepția cazului în care instituția de audit are și cercetători familiarizați atât cu algoritmii, cât și cu codul. Iată logica motivului pentru care AI analizează codul în felul în care o face:
Pe baza analizei mele a bazei de cod, pot explica acum de ce autorul a ales să o implementeze în acest fel
get_delta_b
funcții și cauze posibile:
De ce autorul funcției implementează get_delta_b mod
Optimizarea performanței: ) și bitmask gestionează direct tipurile U256. Acest lucru este cel mai probabil să îmbunătățească performanța și să reducă supraîncărcarea computațională. În aplicațiile DeFi, în special în scenariile de tranzacționare de înaltă frecvență, performanța este esențială.
Codul comentat folosește u256::get
,u256::shrw
în timp ce implementarea curentă folosește operațiuni de biți (>> 64
Economisiți taxe de gaz: Operațiunile de pe blockchain-ul Sui trebuie să plătească taxe de gaz, iar operațiunile mai complexe vor consuma mai mult gaz. Simplificarea matematicii poate reduce costurile de tranzacție, în special pentru funcțiile de bază AMM operate frecvent.
Dependențe reduse: Funcțiile modulului și implementarea curentă reduc apelurile la aceste funcții, poate pentru a reduce dependențele de biblioteci externe sau pentru a evita problemele cu unele funcții externe.
Codul din comentarii folosește mai mult u256
Portarea Solidity to Move: În ceea ce privește stilul codului, aceasta ar putea fi o portare de la codul Solidity al Ethereum la limbajul Move al lui Sui. Această utilizare a manipulării și mascării biților este comună în Solidity, în special în implementările AMM, cum ar fi Uniswap V3.
Gestionarea matematicii în virgulă fixă: Rezultatul rezultat pe 256 de biți trebuie procesat corect, iar deplasarea a 64 de biți spre dreapta este o modalitate obișnuită de a obține poziția corectă a virghilei zecimale.
Matematica punctului fix este adesea folosită în AMM-uri pentru a face față valorilor zecimale. full_math_u128::full_mul
Probleme potențiale
Cu toate acestea, această implementare introduce mai multe probleme:
Lizibilitatea slabă a codului: Utilizarea măștilor codificate și a operațiunilor de deplasare face ca codul să fie dificil de înțeles și auditat.
Lipsa verificării limitelor complete: Operațiunile de biți și operațiunile de conversie a tipurilor nu au o verificare cuprinzătoare a limitelor, ceea ce poate duce la un comportament neașteptat în cazuri extreme.
Codul de comentarii coexistă cu codul de implementare: Păstrarea versiunilor mai vechi ale codului comentat indică faptul că codul poate fi într-o stare de tranziție sau nu a fost testat corespunzător, ceea ce este periculos pentru codul critic care se ocupă de activele financiare.
Riscul de depășire a numărului întreg: Când aveți de-a face cu valori mari, operațiunile și transformările de biți pot duce la depășirea numerelor întregi, iar implementările simplificate pot fi lipsite de mecanisme de protecție adecvate.
rezumat
Este probabil ca principalul motiv al autorului pentru implementarea acestui cod să fie optimizarea performanței și reducerea costurilor cu gazul, în timp ce se ocupă de calculele matematice în punct fix în AMM-uri. Cu toate acestea, această optimizare, în detrimentul securității și lizibilității codului, poate oferi atacatorilor vulnerabilități exploatabile, după cum puteți vedea din incidentul de furt Cetus pe care l-ați furnizat.
În proiectele DeFi, securitatea ar trebui să aibă întotdeauna prioritate față de optimizarea performanței, în special pentru funcțiile de bază care gestionează activele utilizatorilor. Este mai bine să utilizați funcții de bibliotecă dovedite, să adăugați verificări cuprinzătoare ale limitelor și să efectuați audituri de securitate adecvate.
Afișare original26
61,25 K
Conținutul de pe această pagină este furnizat de terți. Dacă nu se menționează altfel, OKX nu este autorul articolului citat și nu revendică niciun drept intelectual pentru materiale. Conținutul este furnizat doar pentru informare și nu reprezintă opinia OKX. Nu este furnizat pentru a fi o susținere de nicio natură și nu trebuie să fie considerat un sfat de investiție sau o solicitare de a cumpăra sau vinde active digitale. În măsura în care AI-ul de generare este utilizat pentru a furniza rezumate sau alte informații, astfel de conținut generat de AI poate să fie inexact sau neconsecvent. Citiți articolul asociat pentru mai multe detalii și informații. OKX nu răspunde pentru conținutul găzduit pe pagini terțe. Deținerile de active digitale, inclusiv criptomonedele stabile și NFT-urile, prezintă un grad ridicat de risc și pot fluctua semnificativ. Trebuie să analizați cu atenție dacă tranzacționarea sau deținerea de active digitale este adecvată pentru dumneavoastră prin prisma situației dumneavoastră financiare.