Analise smart-contract
03.04.2024

Intelligens szerződések szünet funkcióval

Folytatjuk a cikksorozatot, amely az okosszerződésekben rejlő csalási sémákat tárgyalja. Ma a Szünet funkcióval rendelkező okosszerződéseket elemezzük.

A Szünet funkcióval rendelkező okosszerződések lehetőséget biztosítanak bizonyos műveletek vagy funkciók ideiglenes vagy végleges leállítására a szerződésen belül. Bár a Szünet funkciók hasznosak lehetnek a biztonság és a karbantartás szempontjából, potenciális kockázatot is jelenthetnek, ha csalók használják őket. A védelem érdekében és a lehetséges fenyegetések felismeréséhez meg kell érteni a kockázatokat, a gyakori csalási sémákat, és azt, hogyan ismerhetjük fel őket egy okosszerződésben.

A Szünet funkcióval rendelkező okosszerződések veszélyei:

  • Jogosulatlan Szünet: A csalók átvehetik az irányítást a Szünet funkció felett, és megfelelő engedély nélkül leállíthatják a szerződést, ami üzleti zavarokhoz vagy anyagi veszteségekhez vezethet.

  • Megtévesztő Késedelmek: A rosszindulatú szerződések felfüggeszthetik a kritikus tranzakciókat, mint például a kifizetéseket vagy az átutalásokat, ideiglenes karbantartás vagy biztonsági intézkedések ürügyén, azzal a szándékkal, hogy megtagadják a felhasználóktól a hozzáférést az eszközeikhez.

  • Hamis Vészhelyzeti Állítások: A csalók hamisan állíthatják, hogy vészhelyzet vagy sebezhetőség áll fenn, hogy igazolják a szerződés felfüggesztését, majd a szünet alatt felhasználhatják a felhasználók pénzeszközeit.

  • Biztonsági Kifogás: A rosszindulatú szerződések állíthatják, hogy egy biztonsági sebezhetőség került felfedezésre, ami a felfüggesztési funkció aktiválását eredményezi. Valójában a csalók kihasználhatják a helyzetet.

  • Vészhelyzeti Sémák: A csalók félelemkeltő nyelvezetet vagy forgatókönyveket használhatnak, például "betörési kísérlet" vagy "vészhelyzet" állításával, hogy igazolják a szünetet, amely alatt jogellenes cselekményeket követhetnek el.

Hogyan lehet önállóan meghatározni, hogy ilyen fenyegetések vannak-e jelen az okosszerződésekben?

Ha önállóan szeretné meghatározni, hogy van-e Szünet funkció az okosszerződésekben, az alábbi tippek hasznosak lesznek.

  1. Vizsgálja meg a szerződés forráskódját, hogy van-e benne Szünet funkció. Győződjön meg róla, hogy a szünet mechanizmus jól dokumentált és megfelelő hozzáférés-ellenőrzéssel rendelkezik.

  2. Derítse ki, ki irányítja a Szünet funkciót. A jogosulatlan vagy ellenőrizetlen birtoklás a Szünet funkcióval potenciális probléma.

  3. Olvassa el a dokumentációt és a projekt specifikációit, hogy biztos legyen abban, hogy egyértelmű és pontos információkat nyújtanak a Szünet funkcióról, annak céljáról és az alkalmazás körülményeiről.

  4. Ellenőrizze a Szünet funkció használatának átláthatóságát. Győződjön meg arról, hogy világos eljárások vannak a Szünet aktiválásának vagy deaktiválásának kezelésére és eldöntésére.

  5. Figyeljen az okosszerződés biztonságának külső auditjaira, különösen a Szünet mechanizmusra. Az auditoroknak értékelniük kell a Szünet funkció biztonságát és átláthatóságát.

  6. Figyelje a szerződés viselkedését, és győződjön meg róla, hogy a Szünet funkció csak jogszerű körülmények között aktiválódik, például karbantartás vagy biztonsági okok miatt.

  7. Lépjen kapcsolatba a projekt közösségével és más felhasználókkal, hogy megértse tapasztalataikat és aggályaikat a Szünet funkció használatával kapcsolatban.

  8. Tartsa naprakészen a legújabb fejleményeket közösségünkben (Telegram csatorna) és a csalásfelismerés legjobb gyakorlatait (Blogunk és YouTube csatornánk).

A Szünet funkcióval rendelkező okosszerződésekben potenciálisan rosszindulatú funkciók észleléséhez el kell végezni a kellő gondosságot, alaposan meg kell vizsgálni a projekt kódját és dokumentációját. Kerülje azokat a szerződéseket, amelyek gyanús viselkedést mutatnak vagy amelyeknél hiányzik az átláthatóság a Szünet funkció használatával kapcsolatban.

A Lotus Market biztonsági szkenner 99,9%-os pontossággal találja meg az összes általános (beleértve a rejtett) Szünet funkciót. Használja prémium előfizetésünket, és védje meg pénzeszközeit a fenyegetésektől.

Következőként megvizsgálunk néhányat a Szünet funkció leggyakoribb példái közül, amelyeket a Lotus Market Platform sikeresen megtalál.

independently determine

Példa 1: Alapvető szünet funkció


    contract BasicPauseToken {
      address public owner;
      bool public paused;
  
      constructor() {
          owner = msg.sender;
          paused = false;
      }
  
      modifier whenNotPaused() {
          require(!paused, "Contract is paused");
          _;
      }
  
      function pause() public {
          require(msg.sender == owner, "Only the owner can pause");
          paused = true;
      }
  
      function unpause() public {
          require(msg.sender == owner, "Only the owner can unpause");
          paused = false;
      }
  
      function transfer(address to, uint256 amount) public whenNotPaused {
          // Transfer logic when the contract is not paused
      }
  }
  

Tippek az azonosításhoz: Keressen olyan szerződést, amelyben vannak pause és unpause funkciók vagy hasonló funkciók, amelyek a szünet állapotát tudják váltani.

Ellenőrizze, hogy van-e whenNotPaused típusú módosító bizonyos funkciókhoz alkalmazva, hogy biztosítsa, hogy ezek csak akkor hajthatók végre, ha a szerződés nincs felfüggesztve.

Ellenőrizze a hozzáférés-ellenőrzési mechanizmust, amelynek lehetővé kell tennie, hogy csak a tulajdonos vagy az engedélyezett személyek felfüggeszthessék és visszavonhassák a szerződés felfüggesztését.

Példa 2: Időalapú szünet


    contract TimeActivatedPauseToken {
      address public owner;
      bool public paused;
      uint256 public pauseStartTime;
      uint256 public pauseDuration;
  
      constructor(uint256 _duration) {
          owner = msg.sender;
          paused = false;
          pauseStartTime = 0;
          pauseDuration = _duration;
      }
  
      modifier whenNotPaused() {
          require(!paused, "Contract is paused");
          _;
      }
  
      function pause() public {
          require(msg.sender == owner, "Only the owner can pause");
          paused = true;
          pauseStartTime = block.timestamp;
      }
  
      function unpause() public {
          require(msg.sender == owner, "Only the owner can unpause");
          require(block.timestamp >= pauseStartTime + pauseDuration, "Pause duration not over");
          paused = false;
      }
  
      function transfer(address to, uint256 amount) public whenNotPaused {
          // Transfer logic when the contract is not paused
      }
  }
    

Tippek az azonosításhoz: Keressen olyan szerződést, amely időalapú szünet mechanizmussal rendelkezik, ahol a szünet és a szünet megszüntetésének meghatározott időtartama van.

Ellenőrizze, hogy van-e whenNotPaused típusú módosító bizonyos funkciókhoz alkalmazva. Győződjön meg arról, hogy a szerződés érvényesíti a szünet időtartamát, és csak a megadott időtartam elteltével engedi a megszüntetését.

A Szünet funkciók azonosításakor egy okosszerződésben kritikus fontosságú a kód, a hozzáférés-ellenőrzések és a szünet mechanizmusának céljának vizsgálata. Gondosan át kell nézni a dokumentációt és a szerződéskezelési modellt, és kapcsolatba kell lépni a projekt közösségével, hogy értékelni lehessen a szerződés legitimitását és alkalmasságát. Mindig óvatosságot kell tanúsítani és kellő gondossággal kell eljárni, mielőtt bármilyen tranzakciót vagy befektetést végezne felfüggeszthető szerződésekkel.

time-activated pause

Példa 3: Feltételes szünet funkció


    contract ConditionalPauseToken {
      address public owner;
      bool public paused;
  
      constructor() {
          owner = msg.sender;
          paused = false;
      }
  
      modifier whenNotPaused() {
          require(!paused || msg.sender == owner, "Contract is paused");
          _;
      }
  
      function pause() public {
          require(msg.sender == owner, "Only the owner can pause");
          paused = true;
      }
  
      function unpause() public {
          require(msg.sender == owner, "Only the owner can unpause");
          paused = false;
      }
  
      function transfer(address to, uint256 amount) public whenNotPaused {
          // Transfer logic when the contract is not paused, except for the owner
      }
  }
    

Tippek az azonosításhoz: Keressen olyan szerződést, amely feltételes szünet mechanizmussal rendelkezik, ami lehetővé teszi a tulajdonos számára, hogy bizonyos tranzakciókat végrehajtson, még akkor is, ha a szerződés felfüggesztésre került.

Ellenőrizze, hogy a whenNotPaused típusú módosító alkalmazva van-e olyan funkciókra, amelyek megkövetelik, hogy a szerződés ne legyen felfüggesztve.

Példa 4: Vészhelyzeti szünet funkció


    contract EmergencyPauseToken {
      address public owner;
      bool public paused;
  
      constructor() {
          owner = msg.sender;
          paused = false;
      }
  
      modifier whenNotPaused() {
          require(!paused || msg.sender == owner, "Contract is paused");
          _;
      }
  
      function pause() public {
          require(msg.sender == owner, "Only the owner can pause");
          paused = true;
      }
  
      function emergencyPause() public {
          require(msg.sender == owner, "Only the owner can initiate emergency pause");
          paused = true;
      }
  
      function unpause() public {
          require(msg.sender == owner, "Only the owner can unpause");
          paused = false;
      }
  
      function transfer(address to, uint256 amount) public whenNotPaused {
          // Transfer logic when the contract is not paused, except for the owner
      }
  }
    

Tippek az azonosításhoz: Keressen olyan szerződést, amely vészhelyzeti szünet funkcióval rendelkezik, ami lehetővé teszi a tulajdonos számára, hogy azonnal felfüggessze a szerződést még a szokásos felfüggesztési eljárások nélkül is.

Ellenőrizze, hogy van-e whenNotPaused típusú módosító, amely meghatározza, mely műveletek korlátozottak, amikor a szerződés felfüggesztésre került.

Figyeljen a szerződés vészhelyzeti szünet funkcióira, és győződjön meg róla, hogy használatuk szigorúan ellenőrzött és jól dokumentált.

Párosítsa a szerződés felfüggesztési funkcióit annak irányítási modelljével és a felfüggesztési funkció aktiválására és deaktiválására vonatkozó döntéshozatali folyamatokkal.

Példa 5: Tulajdonos által szabályozott szünet időkorláttal


    contract TimedPauseToken {
      address public owner;
      bool public paused;
      uint256 public pauseStartTime;
      uint256 public pauseDuration;
  
      constructor(uint256 _duration) {
          owner = msg.sender;
          paused = false;
          pauseStartTime = 0;
          pauseDuration = _duration;
      }
  
      modifier whenNotPaused() {
          require(!paused, "Contract is paused");
          _;
      }
  
      function pause() public {
          require(msg.sender == owner, "Only the owner can pause");
          paused = true;
          pauseStartTime = block.timestamp;
      }
  
      function unpause() public {
          require(msg.sender == owner, "Only the owner can unpause");
          require(block.timestamp >= pauseStartTime + pauseDuration, "Pause duration not over");
          paused = false;
      }
  
      function transfer(address to, uint256 amount) public whenNotPaused {
          // Transfer logic when the contract is not paused
      }
  }
    

Tippek az azonosításhoz: Keressen olyan szerződést, amely tulajdonos által szabályozott szünet funkcióval rendelkezik, amely meghatározott időtartamú szünetet és szünet törlést tartalmaz.

Ellenőrizze, hogy van-e whenNotPaused típusú módosító az érintett funkciókhoz alkalmazva, hogy korlátozza a műveleteket, amikor a szerződés felfüggesztésre került.

owner-controlled pause with time limit

Példa 6: Harmadik fél által szabályozott szünet időkorláttal


    contract ThirdPartyTimedPauseToken {
      address public owner;
      address public thirdParty;
      bool public paused;
      uint256 public pauseStartTime;
      uint256 public pauseDuration;
  
      constructor(address _thirdParty, uint256 _duration) {
          owner = msg.sender;
          thirdParty = _thirdParty;
          paused = false;
          pauseStartTime = 0;
          pauseDuration = _duration;
      }
  
      modifier whenNotPaused() {
          require(!paused || msg.sender == owner || msg.sender == thirdParty, "Contract is paused");
          _;
      }
  
      function pause() public {
          require(msg.sender == thirdParty, "Only the third party can pause");
          paused = true;
          pauseStartTime = block.timestamp;
      }
  
      function unpause() public {
          require(msg.sender == thirdParty, "Only the third party can unpause");
          require(block.timestamp >= pauseStartTime + pauseDuration, "Pause duration not over");
          paused = false;
      }
  
      function transfer(address to, uint256 amount) public whenNotPaused {
          // Transfer logic when the contract is not paused, except for the owner and the third party
      }
  }
    

Tippek az azonosításhoz: Keressen olyan szerződést, amely harmadik fél által kezelt felfüggesztési mechanizmussal rendelkezik, ahol a harmadik fél felfüggesztheti és lekapcsolhatja a szerződést meghatározott időtartamra.

Ellenőrizze, hogy van-e whenNotPaused típusú módosító, amely meghatározza, mely műveletek korlátozottak, amikor egy szerződés felfüggesztésre kerül.

Győződjön meg róla, hogy a szerződés felfüggesztési funkcióinak hozzáférés-ellenőrzési mechanizmusai, legyenek azok tulajdonos által birtokoltak, közösség által kezelt vagy harmadik fél által irányítottak, átláthatók és jól tervezettek.

Amikor egy felfüggesztési funkciót azonosítanak egy okos szerződésben, alapos kódanalízist kell végezni, tesztelni kell a hozzáférés-ellenőrzéseket, és meg kell érteni a felfüggesztési mechanizmus célját és irányítási modelljét. Kritikus fontosságú az alapos átvilágítás elvégzése és a projekt közösségével való kapcsolatfelvétel a szerződés legitimitásának és alkalmasságának felmérése érdekében. Mindig körültekintően járjon el, és végezzen megfelelő kutatást, mielőtt olyan szerződésekbe lépne, amelyek felfüggesztési opciót kínálnak a potenciális kockázatok enyhítése érdekében.

 

Reméljük, hogy ezek a példák segítettek jobban megérteni a szünet funkció működését az okos szerződésekben.

 

Mivel a blokkláncon minden információ nyitott (feltéve, hogy a szerződés forráskódja ellenőrzött), ezen ismeretek birtokában önállóan is tanulmányozhatja az okos szerződéseket, és azonosíthat különféle csalási sémákat.

Mi azonban már mindezt elvégeztük ön helyett! Iratkozzon fel prémium előfizetésünkre, és férjen hozzá exkluzív szűrőkhez az okos szerződések funkcióiról és friss elemzésekről. Növelje esélyeit a nyereséges tokenekbe történő sikeres befektetésre.

Üdvözlettel, a Lotus Market csapata.

All posts

Connect to a wallet

Metamask