Smernice za revidiranje protokolov vložkov

Smernice za revidiranje protokolov vložkov

Čas branja: 6 min

V tem spletnem dnevniku smo orisali koncept protokolov za vlaganje likvidnosti in revizijske smernice za protokole za vlaganje. Smernice pokrivajo vrsto ranljivih točk, kot so mehanizmi dviga, napake pri zaokroževanju, zunanji klici, logika nadomestil, zanke, strukture, trajanje stakinga itd. Ta objava v spletnem dnevniku bo koristna referenca za revizijo protokolov stakinga in vam lahko pomaga prepoznati morebitne napake .

Kaj je Liquidity Staking?

Zastava likvidnosti omogoča uporabnikom, da zastavijo svoja imetja kriptovalut in zaslužijo nagrade, ne da bi pri tem žrtvovali likvidnost. Namesto da zaklenejo svoje kovance za določeno obdobje, lahko uporabniki prejmejo tekoči žeton, ki predstavlja njihova vložena sredstva. S tem žetonom je mogoče trgovati ali ga uporabljati kot katero koli drugo kriptovaluto, kar uporabnikom omogoča, da uporabljajo svoja sredstva, kot želijo, medtem ko še vedno zaslužijo nagrade za vlaganje.

Guidelines for Auditing Staking Protocols PlatoBlockchain Data Intelligence. Vertical Search. Ai.

Na primer, imate 100 ETH, ki jih želite zastaviti v omrežju Ethereum. Namesto da zaklenete svoj ETH za določeno obdobje, lahko uporabite storitev zastavljanja likvidnosti, kot je Lido, da zastavite svoj ETH in v zameno prejmete tekoči žeton, imenovan stETH. S stETH lahko še vedno trgujete ali uporabljate svoj vstavljeni ETH, medtem ko zaslužite nagrade za vložek.

Začnimo z revidiranjem pogodb o vložkih:

Preglejte vse revizijske specifikacije, ki so na voljo, preden začnete s kodo pogodbe. Lahko je v obliki bele knjige, datotek README ali česa drugega. Ti vam bodo dali predstavo o tem, kaj bo vsebovala koda pogodbe.

Ko si ogledujete dokument s specifikacijo revizije za pogodbo o vložku, bodite pozorni na te točke:

  • Vrste provizij in njihovi izračuni.
  • Mehanizem nagrajevanja za vstavljene žetone
  • Pooblastila lastnika
  • Ali bo pogodba držala ETH?
  • Katere žetone bo vsebovala pogodba?
  • Prvotna pogodba, iz katere je razcepljena

Preverite, ali se specifikacije ujemajo s kodo. Začnite s pristojbinami in tokenomiko, čemur sledi potrditev pooblastila lastnika. Preverite, ali so vse vrednosti nagrad in nadomestil v skladu z dokumentacijo.

Iskati ranljiva mesta?

1. Mehanizem dviga nagrade:

Preverite, ali je mehanizem nagrajevanja vstavljenih žetonov pravilno implementiran in ali so nagrade pošteno in sorazmerno razdeljene med vse vložnike. Projekti lahko razdelijo nagrade na dva načina: samodejno, občasno ali na zahtevo uporabnikov samih. Funkcijo dviga je mogoče implementirati in prilagoditi glede na poslovno logiko protokola.
Spodaj je nekaj kontrolnih točk:

  • Preverite, ali lahko kateri koli uporabnik dvigne več, kot znaša njegova nagrada + vloženi znesek.
  • V izračunu zneska preverite Prelivanje/Premanjkanje
  • Med izračunom preverite, ali lahko nekateri parametri negativno vplivajo na nagrade.
  • Če je v tej funkciji uporabljen block.timestamp ali block.number. Preverite, ali ga je mogoče kakor koli izkoristiti.

2. Logika plačila:

Če sta za polog in dvig določena provizija, se prepričajte, da noben uporabnik ne more zaobiti provizije. Poleg tega bodite pozorni na morebitne težave s prelivanjem ali prenizkim tokom. Samo skrbnik ali lastnik mora biti pooblaščen za spreminjanje nastavitev pristojbin. Preverite tudi, ali je bil določen prag najvišjih nadomestil, ki skrbniku preprečuje, da bi jih nastavil na pretirano visok znesek.

3. Mehanizem kovanja/zažiganja žetona LP:

Preverite, ali so bili mehanizmi za kovanje in sežiganje pravilno izvedeni. Funkcija zapisovanja mora razveljaviti vse spremembe stanja, ki jih naredi funkcija mint. Poleg tega je ključnega pomena preveriti, ali uporabniki prejmejo ustrezno količino žetonov med prvim vložkom, ko je sklad prazen.

Logiko funkcij kovanja in zapisovanja je mogoče matematično preveriti, da se odkrije morebitna skrita ranljivost. Poleg tega skupna ponudba kovanih žetonov LP ne sme preseči vloženih sredstev.

4. Napake pri zaokroževanju:

Čeprav so nekatere manjše napake pri zaokroževanju običajno neizogibne in niso zaskrbljujoče, se lahko znatno povečajo, ko jih je mogoče pomnožiti. Poiščite robne primere, kjer lahko dobite koristi od napak pri zaokroževanju z večkratnim zastavljanjem in razstavljanjem.

Da bi ugotovili, ali se lahko napake pri zaokroževanju v daljšem časovnem obdobju kopičijo do znatnega zneska, lahko matematično izračunamo obseg možnih napak pri zaokroževanju.

5. Trajanje stakinga:

Zagotovite, da so izračuni trajanja vložkov v pogodbi usklajeni z navedeno poslovno logiko. Prepričajte se, da uporabniki ne morejo unovčiti nagrad, preden se trajanje vlaganja konča, tako da obidete preverjanja trajanja. Preverite tudi, ali lahko napadalec izkoristi trajanje stakinga, da bi pridobil več nagrad.

6. Zunanji klici in obdelava žetonov:

Večina zunanjih klicev bo namenjena žetonskim pogodbam. Torej moramo določiti, katere vrste žetonov bo obravnavala pogodba o stakingu. Bistveno je, da preverite zunanje klice glede morebitnih napak in napadov ponovnega vstopa. Deflacijski žetoni ali žetoni s stroški prenosa, kot je Safemoon, lahko predstavljajo težavo, če njihova logika ni pravilno implementirana.

7. Preverjanje manipulacij s cenami:

Manipulacija s cenami prek hitrega posojila je eden najpogostejših vdorov v projekte DeFi. Lahko pride do situacij, ko lahko zlonamerni akterji uporabijo hitra posojila za manipulacijo cen med vstavljanjem ali razstavljanjem velikih količin žetonov. Previdno preglejte funkcije stakinga in unstakinga, da se izognete ekstremnim scenarijem, ki bi lahko povzročili hitre napade na manipulacijo cen na podlagi posojil in izgubo sredstev drugih uporabnikov.

8. Nekaj ​​dodatnih preverjanj:

  • Zank: Če pogodbena logika vključuje zanko čez nize, je pomembno zagotoviti, da omejitev blokovnega plina ni presežena. To se lahko zgodi, ko je velikost matrike zelo velika, zato morate raziskati, katere funkcije bi lahko povečale velikost matrike in ali bi lahko kateri koli uporabnik to izkoristil za povzročitev napada DoS. Preverite to poročilo.
  • Strukture: Pogodbe o vložkih uporabljajo vrsto strukture za shranjevanje podatkov o uporabnikih ali združenju. Ko deklarirate ali dostopate do strukture znotraj funkcije, je pomembno, da določite, ali želite uporabiti »pomnilnik« ali »pomnilnik«. Morda nam bo pomagalo prihraniti nekaj goriva. Za več informacij glejte k temu članku.
  • Spredaj teče: poiščite morebitne scenarije, v katerih bi lahko zlonamerni akterji izpeljali katero koli transakcijo v svojo korist.
  • Preverjanje vidnosti/kontrole dostopa: Do katere koli funkcije, ki je deklarirana kot zunanja ali javna, lahko dostopa vsak. Zato je pomembno zagotoviti, da nobena javna funkcija ne more izvajati občutljivih dejanj. Ključnega pomena je preveriti, ali ima protokol vstavljanja uvedene ustrezne kontrole za preprečevanje nepooblaščenega dostopa do vstavljenih kovancev in infrastrukture sistema.
  • Tveganja centralizacije: Pomembno je, da lastniku ne dajemo pretiranih pooblastil. Če je skrbniški naslov ogrožen, lahko to povzroči znatno škodo protokolu. Preverite, ali so privilegiji lastnika ali skrbnika ustrezni in zagotovite, da ima protokol vzpostavljen načrt za obravnavo situacij, ko pride do uhajanja skrbniških zasebnih ključev.
  • Ravnanje z ETH / WETH: Pogodbe pogosto vključujejo posebno logiko za ravnanje z ETH. Na primer, ko je msg.value > 0, lahko pogodba pretvori ETH v WETH, medtem ko še vedno omogoča neposreden sprejem WETH. Ko uporabnik določi WETH kot valuto, vendar pošlje ETH s klicem, lahko to prekine določene invariante in povzroči nepravilno vedenje.

Doslej smo razpravljali o protokolih zadrževanja likvidnosti in revizijskih smernicah za take protokole. Na kratko, Liquidity staking omogoča uporabnikom, da zaslužijo nagrade za staking brez žrtvovanja likvidnosti. Opisali smo ranljive točke v pogodbah o vložkih, na katere morajo biti revizorji pozorni, kot so mehanizmi dviga, logika nadomestil, mehanizem kovanja/zažiganja žetonov LP, napake pri zaokroževanju, trajanje vložkov, zunanji klici in preverjanja manipulacije cen. 

Revizorjem priporočamo, da pregledajo dokumente s specifikacijami revizije, uskladijo specifikacije s kodo ter preverijo provizije in validacijo tokenomike. Priporočamo tudi dodatna preverjanja, kot je zankanje po nizih, določanje pomnilnika ali shrambe za podatke tipa struct in scenariji za začetek. Te smernice bodo uporabne za revizijo protokolov stakinga in pomagajo pri prepoznavanju morebitnih napak.


11 Ogledov

Časovni žig:

Več od Quillhash