Analise smart-contract
03.04.2024

Älykkäät sopimukset, joissa on taukotoiminto

Jatkamme sarjaa artikkeleita, jotka keskittyvät älysopimusten huijausjärjestelmien kuvaukseen. Tänään analysoimme Pause-toiminnolla varustettuja älysopimuksia.

Pause-ominaisuuksilla varustetut älysopimukset mahdollistavat tiettyjen toimintojen tai funktioiden tilapäisen tai pysyvän keskeyttämisen sopimuksen sisällä. Vaikka Pause-ominaisuudet voivat olla hyödyllisiä turvallisuuden ja ylläpidon kannalta, ne voivat myös aiheuttaa mahdollisen riskin, jos huijarit käyttävät niitä. Suojautuaksesi ja tunnistaaksesi mahdolliset uhat, sinun on ymmärrettävä riskit, yleiset huijausjärjestelmät ja miten ne tunnistetaan älysopimuksessa.

Pause-toiminnon sisältävien älysopimusten vaarat:

  • Luvaton Pause: Huijarit voivat saada haltuunsa Pause-toiminnon ja keskeyttää sopimuksen ilman asianmukaista valtuutusta, mikä voi johtaa liiketoiminnan keskeytymiseen tai taloudellisiin menetyksiin.

  • Petolliset viivästykset: Haitalliset sopimukset voivat keskeyttää kriittiset tapahtumat, kuten kotiutukset tai siirrot, väliaikaisen ylläpidon tai turvallisuustoimenpiteiden varjolla, tarkoituksenaan estää käyttäjiä pääsemästä käsiksi varoihinsa.

  • Väärät hätätilanteiden ilmoitukset: Huijarit voivat väittää väärin hätätilanteista tai haavoittuvuuksista oikeuttaakseen sopimuksen keskeyttämisen ja käyttää sitten käyttäjien varoja keskeytyksen aikana.

  • Turvallisuusveruke: Haitalliset sopimukset voivat väittää, että turvallisuusaukko on löydetty, mikä johtaa keskeytystoiminnon aktivointiin. Todellisuudessa huijarit voivat aikomuksena hyödyntää tilannetta.

  • Hätätilanteet: Huijarit voivat käyttää pelkoa herättäviä kieliä tai skenaarioita, kuten väittää "murtoyritystä" tai "hätätilannetta" oikeuttaakseen keskeytyksen, jonka aikana he voivat tehdä laittomia tekoja.

Miten voit itsenäisesti tunnistaa tällaiset uhat älysopimuksissa?

Jos haluat itsenäisesti tunnistaa Pause-toimintojen olemassaolon älysopimuksissa, seuraavat vinkit ovat hyödyllisiä.

  1. Tutki sopimuksen lähdekoodi nähdäksesi, onko siinä Pause-toiminto. Varmista, että keskeytysmekanismi on hyvin dokumentoitu ja sillä on asianmukaiset käyttöoikeudet.

  2. Selvitä, kuka hallitsee Pause-toimintoa. Luvaton tai tarkastamaton Pause-toiminnon hallinta on mahdollinen ongelma.

  3. Lue dokumentaatio ja projektin määritykset varmistaaksesi, että ne tarjoavat selkeää ja tarkkaa tietoa Pause-toiminnosta, sen tarkoituksesta ja olosuhteista, joissa sitä voidaan käyttää.

  4. Tarkista Pause-toiminnon käytön läpinäkyvyys. Varmista, että on olemassa selkeitä menettelytapoja keskeytyksen aktivoimiseksi tai deaktivoimiseksi.

  5. Kiinnitä huomiota älysopimuksen turvallisuuden ulkoisiin tarkastuksiin, erityisesti Pause-mekanismiin. Tarkastajien tulisi arvioida Pause-toiminnon turvallisuutta ja läpinäkyvyyttä.

  6. Seuraa sopimuksen käyttäytymistä ja varmista, että Pause-toiminto aktivoidaan vain oikeutetuissa olosuhteissa, kuten ylläpidon tai turvallisuuden vuoksi.

  7. Osallistu projektin yhteisöön ja muihin käyttäjiin ymmärtääksesi heidän kokemuksensa ja huolensa Pause-toiminnon käytöstä.

  8. Pysy ajan tasalla viimeisimmistä kehityksistä yhteisössämme (Telegram-kanava) ja parhaista käytännöistä petosten havaitsemiseksi (blogimme ja YouTube-kanavamme).

Havaitaksesi mahdollisesti haitalliset toiminnot Pause-älysopimuksessa, sinun on suoritettava due diligence, tutkittava projektin koodi ja dokumentaatio tarkasti. Vältä sopimuksia, joissa on epäilyttävää toimintaa tai puutteellista läpinäkyvyyttä Pause-toiminnon käytössä.

Lotus Marketin turvaskanneri löytää kaikki yleiset (myös piilotetut) Pause-ominaisuudet 99,9 % ajasta. Käytä premium-tilaustamme ja suojaa varasi uhilta.

Seuraavaksi tarkastelemme muutamia yleisimmistä Pause-ominaisuuksista, jotka Lotus Market Platform onnistuneesti löytää.

independently determine

Esimerkki 1: Perus Pause-toiminto


    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
      }
  }
  

Tunnistusvinkit: Etsi sopimusta, jossa on pause- ja unpause-toimintoja tai vastaavia toimintoja, jotka voivat vaihtaa keskeytystilaa.

Tarkista, onko tietyille toiminnoille sovellettu whenNotPaused-tyyppistä modifioijaa, jotta ne voidaan suorittaa vain, kun sopimusta ei ole keskeytetty.

Tarkista käyttöoikeusmekanismi, jonka tulisi sallia vain omistajan tai valtuutettujen henkilöiden keskeyttää ja poistaa sopimuksen keskeytys.

Esimerkki 2: Ajan aktivoima keskeytys


    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
      }
  }
  

Tunnistusvinkit: Etsi sopimusta, jossa on ajan aktivoima keskeytysmekanismi, jossa keskeytyksellä ja keskeytyksen poistolla on tietty kesto.

Tarkista, onko tietyille toiminnoille sovellettu whenNotPaused-tyyppistä modifioijaa. Varmista, että sopimus noudattaa keskeytyksen kestoa ja sallii sen poiston vasta määritellyn ajanjakson jälkeen.

Kun tunnistat Pause-toimintoja älysopimuksessa, on tärkeää tarkastella koodia, käyttöoikeuksia ja keskeytysmekanismin tarkoitusta. Tarkista huolellisesti dokumentaatio ja sopimuksen hallintamalli ja ole yhteydessä projektin yhteisöön arvioidaksesi sopimuksen laillisuuden ja soveltuvuuden. Käytä aina varovaisuutta ja tee huolellinen taustatutkimus ennen kuin ryhdyt mihinkään tapahtumaan tai sijoitukseen, joka koskee keskeytettäviä sopimuksia.

time-activated pause

Esimerkki 3: Ehdollinen keskeytystoiminto


    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
      }
  }
    

Tunnistusvinkit: Etsi sopimusta, jossa on ehdollinen keskeytysmekanismi, joka sallii omistajan suorittaa tiettyjä tapahtumia, vaikka sopimus olisi keskeytetty.

Tarkista, sovelletaanko whenNotPaused-tyyppistä modifioijaa toimintoihin, jotka vaativat sopimuksen olevan ei-keskeytettynä.

Esimerkki 4: Hätäkeskeytystoiminto


    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
      }
  }
    

Tunnistusvinkit: Etsi sopimusta, jossa on hätäkeskeytystoiminto, joka sallii omistajan keskeyttää sopimuksen välittömästi ilman tavanomaisia keskeytysmenettelyjä.

Tarkista, onko whenNotPaused-tyyppinen modifioija käytössä toimintojen kohdalla, jotka rajoittuvat, kun sopimus on keskeytetty.

Kiinnitä huomiota sopimuksen hätäkeskeytystoimintoihin ja varmista, että niiden käyttö on tarkasti hallittua ja hyvin dokumentoitua.

Sovita sopimuksen keskeytystoiminnot sen hallintomalliin ja päätöksentekoprosesseihin keskeytystoiminnon aktivoinnin ja deaktivoinnin osalta.

Esimerkki 5: Omistajan hallitsema keskeytys aikarajalla


    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
      }
  }
  

Tunnistusvinkit: Etsi sopimusta, jossa omistajan hallitsemaan keskeytykseen sisältyy tietty keskeytyksen ja keskeytyksen peruutuksen kesto.

Tarkista, onko whenNotPaused-tyyppinen modifioija sovellettu asianmukaisiin toimintoihin, jotta ne rajoittuvat, kun sopimus on keskeytetty.

owner-controlled pause with time limit

Esimerkki 6: Kolmannen osapuolen aikarajoitettu keskeytys


    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
      }
  }
  

Tunnistusvinkit: Etsi sopimusta, jossa on kolmannen osapuolen hallitsema keskeytysmekanismi, jossa kolmas osapuoli voi keskeyttää ja palauttaa sopimuksen tietyn keston ajaksi.

Tarkista, onko käytössä whenNotPaused-tyyppinen modifioija, jolla voidaan määrittää, mitkä toiminnot ovat rajoitettuja, kun sopimus on keskeytetty.

Varmista, että sopimuksen keskeytystoiminnon käyttöoikeusmekanismit, olipa ne omistajan hallinnassa, yhteisön hallitsemia tai kolmannen osapuolen, ovat läpinäkyviä ja hyvin suunniteltuja.

Kun tunnistat keskeytystoiminnon älykkäässä sopimuksessa, on tärkeää suorittaa perusteellinen koodianalyysi, testata käyttöoikeudet ja ymmärtää keskeytysmekanismin tarkoitus ja hallintamalli. On tärkeää suorittaa due diligence ja olla yhteydessä projektin yhteisöön arvioidakseen sopimuksen legitimiteettiä ja sitä, onko se tarkoituksenmukainen. Ole aina varovainen ja tee huolellinen tutkimus ennen kuin sitoudut sopimuksiin, jotka tarjoavat keskeytysvaihtoehdon mahdollisten riskien lieventämiseksi.

 

Toivomme, että nämä esimerkit ovat auttaneet sinua ymmärtämään paremmin keskeytystoiminnon kaavioita älykkäissä sopimuksissa.

 

Koska kaikki blockchainin tiedot ovat avoimia (edellyttäen tietenkin, että sopimuksen lähdekoodi on vahvistettu), voit tämän tiedon avulla itsenäisesti tutkia älykkäitä sopimuksia ja tunnistaa erilaisia huijauskeinoja.

Olemme kuitenkin tehneet kaiken tämän puolestasi! Tilaa premium-tilaus ja saat pääsyn eksklusiivisiin suodattimiin älykkäiden sopimusten ominaisuuksista ja tuoreista analyyseistä. Paranna mahdollisuuksiasi onnistuneesti sijoittaa tuottoisiin tokeneihin.

Terveisin, Lotus Market -tiimi.

All posts

Connect to a wallet

Metamask