Zephyrnet-logo

Richtlijnen voor het controleren van uitzetprotocollen

Datum:

Leestijd: 6 minuten

In deze blog hebben we het concept geschetst van protocollen voor het uitzetten van liquiditeit en auditrichtlijnen voor protocollen voor uitzetten. De richtlijnen hebben betrekking op een aantal kwetsbare punten, zoals opnamemechanismen, afrondingsfouten, externe oproepen, vergoedingslogica, loops, structs, uitzetduur, enz. Deze blogpost is een nuttige referentie voor het controleren van uitzetprotocollen en kan u helpen bij het identificeren van mogelijke bugs. .

Wat is liquiditeitsstaking?

Liquiditeitsinzet stelt gebruikers in staat om hun cryptocurrency-bezit in te zetten en beloningen te verdienen zonder liquiditeit op te offeren. In plaats van hun munten voor een vaste periode vast te zetten, kunnen gebruikers een liquide token ontvangen die hun ingezette activa vertegenwoordigt. Dit token kan worden verhandeld of gebruikt zoals elke andere cryptocurrency, waardoor gebruikers hun activa kunnen gebruiken zoals ze willen, terwijl ze nog steeds staking-beloningen verdienen.

U heeft bijvoorbeeld 100 ETH die u wilt inzetten op het Ethereum-netwerk. In plaats van uw ETH voor een vaste periode vast te zetten, kunt u een liquiditeitsinzetservice zoals Lido gebruiken om uw ETH in te zetten en in ruil daarvoor een liquiditeitstoken genaamd stETH te ontvangen. Met stETH kunt u nog steeds uw ingezette ETH verhandelen of gebruiken terwijl u uitzetbeloningen verdient.

Laten we aan de slag gaan met het controleren van stakingcontracten:

Onderzoek alle beschikbare auditspecificaties voordat u begint met de contractcode. Het kan de vorm hebben van een witboek, README-bestanden of iets anders. Deze geven u een idee van wat de contractcode zal bevatten.

Let bij het bekijken van het auditspecificatiedocument voor het uitzetcontract op de volgende punten:

  • Soorten vergoedingen gebaseerd en hun berekeningen.
  • Beloningsmechanisme voor ingezette tokens
  • Bevoegdheden van de eigenaar
  • Houdt het contract ETH vast?
  • Welke tokens zal het contract bevatten?
  • Origineel contract waaruit het is gevorkt

Controleer of de specificaties overeenkomen met de code. Begin met vergoedingen en tokenomics, gevolgd door validatie van de autoriteit van de eigenaar. Controleer of alle beloningen en kosten in overeenstemming zijn met de documentatie.

Kwetsbare plekken om naar te zoeken?

1. Mechanisme voor het opnemen van beloningen:

Controleer of het beloningsmechanisme voor ingezette token correct is geïmplementeerd en dat beloningen eerlijk en proportioneel worden verdeeld over alle stakers. Projecten kunnen op twee manieren beloningen uitdelen: automatisch, periodiek of op verzoek van de gebruikers zelf. Een opnamefunctie kan worden geïmplementeerd en aangepast volgens de bedrijfslogica van het protocol.
Hieronder staan ​​een aantal controlepunten:

  • Controleer of een gebruiker meer kan opnemen dan zijn beloning + ingezette bedrag.
  • Controleer op Overflow/underflow in de bedragberekening
  • Controleer of bepaalde parameters een negatieve invloed kunnen hebben op beloningen tijdens de berekening.
  • Als blok.tijdstempel of bloknummer wordt gebruikt in deze functie. Controleer of het op enigerlei wijze kan worden misbruikt.

2. Vergoedingslogica:

Als er voor de storting en opname kosten in rekening worden gebracht, controleer dan of geen enkele gebruiker de kosten kan omzeilen. Wees bovendien waakzaam voor mogelijke overloop- of onderloopproblemen. Alleen de beheerder of eigenaar mag gemachtigd zijn om vergoedingsinstellingen te wijzigen. Controleer ook of er een drempel voor maximale vergoedingen is vastgesteld, zodat de beheerder deze niet op een te hoog bedrag kan instellen.

3. Het munt-/brandmechanisme van LP Token:

Controleer of de munt- en brandmechanismen correct zijn geïmplementeerd. Een brandfunctie moet alle statuswijzigingen ongedaan maken die door een mint-functie zijn gemaakt. Bovendien is het van cruciaal belang om te verifiëren dat gebruikers het juiste aantal tokens ontvangen tijdens de eerste inzet, wanneer de pool leeg is.

De logica van munt- en brandfuncties kan wiskundig worden geverifieerd om eventuele verborgen kwetsbaarheden aan het licht te brengen. Ook mag het totale aanbod van geslagen LP-tokens de ingezette activa niet overschrijden.

4. Afrondingsfouten:

Ook al zijn bepaalde kleine afrondingsfouten doorgaans onvermijdelijk en geen probleem, ze kunnen aanzienlijk toenemen als het mogelijk is ze te vermenigvuldigen. Zoek naar randgevallen waarbij men kan profiteren van afrondingsfouten door herhaaldelijk uit te zetten en uit te zetten.

Om te bepalen of afrondingsfouten over een langere periode tot een substantieel bedrag kunnen oplopen, kunnen we het bereik van mogelijke afrondingsfouten wiskundig berekenen.

5. Uitzetduur:

Zorg ervoor dat de berekeningen van de uitzetduur in het contract overeenkomen met de gespecificeerde bedrijfslogica. Controleer of gebruikers geen beloningen kunnen inwisselen voordat de uitzetduur is afgelopen door de duurcontroles te omzeilen. Controleer ook of de duur van staking kan worden misbruikt door een aanvaller om meer beloningen te krijgen.

6. Externe oproepen en tokenafhandeling:

De meeste externe oproepen zijn naar de tokencontracten. We moeten dus bepalen welke soorten tokens het uitzetcontract zal verwerken. Het is essentieel om externe oproepen te controleren op fouten en herintredingsaanvallen. Deflatoire tokens of tokens met overdrachtskosten, zoals Safemoon, kunnen een probleem vormen als hun logica niet correct is geïmplementeerd.

7. Prijsmanipulatiecontroles:

Prijsmanipulatie via een flitslening is een van de meest voorkomende hacks op DeFi-projecten. Er kunnen situaties zijn waarin kwaadwillende actoren flitsleningen kunnen gebruiken om prijzen te manipuleren tijdens het in- of uitzetten van grote hoeveelheden tokens. Beoordeel de uitzet- en uitzetfuncties zorgvuldig om randscenario's te vermijden die zouden kunnen leiden tot op flitsleningen gebaseerde prijsmanipulatieaanvallen en verlies van het geld van andere gebruikers.

8. Enkele aanvullende controles:

  • Lussen: Als de contractlogica het doorlussen van arrays inhoudt, is het belangrijk ervoor te zorgen dat de blokgaslimiet niet wordt overschreden. Dit kan gebeuren wanneer de array erg groot is, dus u moet onderzoeken welke functies de array kunnen vergroten en of een gebruiker deze kan misbruiken om een ​​DoS-aanval te veroorzaken. Kijk hier eens naar verslag.
  • structuren: Staking-contracten gebruiken het struct-type om gebruikers- of poolgegevens op te slaan. Bij het declareren of openen van een struct binnen een functie, is het belangrijk om aan te geven of "geheugen" of "opslag" moet worden gebruikt. Het kan ons helpen wat gas te besparen. Voor meer informatie verwijzen wij u naar naar dit artikel.
  • Front-running: Zoek naar scenario's waarin kwaadwillende actoren elke transactie in hun voordeel kunnen uitvoeren.
  • Functie Zichtbaarheid/ Toegangscontrole Controles: Elke functie die is gedeclareerd als extern of openbaar, is voor iedereen toegankelijk. Daarom is het belangrijk ervoor te zorgen dat geen enkele publieke functie gevoelige handelingen kan verrichten. Het is van cruciaal belang om te verifiëren dat het uitzetprotocol de juiste controles heeft geïmplementeerd om ongeoorloofde toegang tot zowel de uitgezette munten als de infrastructuur van het systeem te voorkomen.
  • Centralisatie risico's: Het is belangrijk om de eigenaar niet te veel bevoegdheden te geven. Als het beheerdersadres wordt gecompromitteerd, kan dit aanzienlijke schade aan het protocol veroorzaken. Controleer of de eigenaars- of beheerdersbevoegdheden juist zijn en zorg ervoor dat het protocol een plan bevat voor het afhandelen van situaties waarin de privésleutels van een beheerder zijn gelekt.
  • ETH / WETH-afhandeling: Contracten bevatten vaak specifieke logica voor het omgaan met ETH. Als msg.value bijvoorbeeld > 0 is, kan een contract ETH naar WETH converteren terwijl WETH nog steeds rechtstreeks kan worden ontvangen. Wanneer een gebruiker WETH als valuta opgeeft, maar ETH met de oproep verzendt, kan dit bepaalde invarianten doorbreken en tot onjuist gedrag leiden.

Tot nu toe hebben we protocollen voor het uitzetten van liquiditeit en de controlerichtlijnen voor dergelijke protocollen besproken. Kortom, Liquidity staking stelt gebruikers in staat staking-beloningen te verdienen zonder liquiditeit op te offeren. We hebben de kwetsbare plekken in staking-contracten geschetst waar auditors op moeten letten, zoals opnamemechanismen, vergoedingslogica, mechanisme voor het slaan/verbranden van LP-tokens, afrondingsfouten, staking-duur, externe oproepen en prijsmanipulatiecontroles. 

We raden auditors aan om documenten met auditspecificaties te onderzoeken, specificaties te matchen met code en de vergoedingen en tokenomics-validatie te controleren. We raden ook aanvullende controles aan, zoals looping over arrays, het specificeren van geheugen of opslag voor struct type data en front-running scenario's. Deze richtlijnen zijn handig voor het controleren van uitzetprotocollen en helpen bij het identificeren van mogelijke bugs.


4 keer bekeken

spot_img

Laatste intelligentie

spot_img