Analise smart-contract
03.04.2024

Viedie līgumi ar pauzes funkciju

Mēs turpinām sēriju rakstu, kas veltīti apgaismojošam apskatei par krāpnieciskajiem shēmiem viedās līgumos. Šodien mēs analizēsim viedos līgumus ar apturēšanas funkciju.

Viedie līgumi ar apturēšanas funkcijām nodrošina iespēju pagaidu vai pastāvīgi apturēt noteiktas darbības vai funkcijas līgumā. Lai gan apturēšanas funkcijas var būt noderīgas drošības un uzturēšanas nolūkos, tās arī rada potenciālu risku, ja tās izmanto krāpnieki. Lai aizsargātu sevi un atpazītu iespējamās draudzes, ir nepieciešams saprast riskus, bieži sastopamas krāpšanas shēmas, un kā tās atpazīt viedā līgumā.

Viedo līgumu ar apturēšanas funkcijas bīstamība:

  • Neatļauta apturēšana: Krāpnieki var pārņemt apturēšanas funkciju un apturēt līgumu bez pareizas pilnvaras, kas var izraisīt uzņēmējdarbības traucējumus vai finansiālus zaudējumus.

  • Viltus kavējumi: Ļaunprātīgi līgumi var apturēt būtiskas darbības, piemēram, izņemšanas vai pārvedumu darījumus, maskējot tos kā pagaidu uzturēšanās vai drošības pasākumus, ar nodomu liegto lietotāju piekļuvi viņu aktīviem.

  • Nepamatoti avāriju apgalvojumi: Krāpnieki var viltus apgalvot avārijas vai izmantojamos sarežģījumus, lai attaisnotu līguma apturēšanu un pēc tam izmantot lietotāju līdzekļus apturēšanas laikā.

  • Drošības iegansts: Ļaunprātīgi līgumi var apgalvot, ka ir atklāta drošības ievainojamība, kas izraisa apturēšanas funkcijas aktivizēšanu. Patiesībā krāpnieki var plānot izmantot situāciju.

  • Ārkārtas shēmas: Krāpnieki var izmantot bailīgu valodu vai scenārijus, piemēram, apgalvot "ielaušanās mēģinājumu" vai "ārkārtas situāciju", lai attaisnotu apturēšanu, kurā viņi varētu veikt nelikumīgas darbības.

Kā neatkarīgi noteikt, vai viedajos līgumos pastāv šādas draudzes?

Ja vēlaties neatkarīgi noteikt apturēšanas funkciju klātbūtni viedajos līgumos, noderīgi būs šādi padomi.

  1. Pārbaudiet līguma pirmkodu, lai redzētu, vai ir apturēšanas funkcija. Pārliecinieties, ka apturēšanas mehānisms ir labi dokumentēts un ir atbilstoši piekļuves kontroli.

  2. Uzziniet, kas kontrolē apturēšanas funkciju. Neautorizēta vai nepārbaudīta apturēšanas funkcijas piederība var būt potenciāls problēmas avots.

  3. Izlasiet dokumentāciju un projekta specifikācijas, lai pārliecinātos, ka tās sniedz skaidru un precīzu informāciju par apturēšanas funkciju, tās mērķi un apstākļiem, kuros to var izmantot.

  4. Pārbaudiet apturēšanas funkcijas pārvaldības pārredzamību. Pārliecinieties, ka ir skaidri procedūras apturēšanas aktivizēšanai vai deaktivizēšanai.

  5. Pievērsiet uzmanību ārējiem pārbaudēm par viedā līguma drošību, īpaši apturēšanas mehānismu. Pārbaudītājiem vajadzētu novērtēt apturēšanas funkcijas drošību un pārredzamību.

  6. Vērojiet līguma uzvedību un pārliecinieties, ka apturēšanas funkcija tiek aktivizēta tikai likumīgos apstākļos, piemēram, uzturēšanas vai drošības iemesliem.

  7. Iesaistieties projekta kopienā un citos lietotājos, lai izprastu viņu pieredzi un bažas par apturēšanas funkciju izmantošanu.

  8. Sekojiet mūsu kopienas jaunumiem (Telegrama kanāls) un labākajām praksēm krāpšanas atklāšanai (mūsu bloga un YouTube kanāls).

Lai atklātu potenciāli ļaunprātīgu funkcionalitāti apturēšanas viedajā līgumā, jāveic pienācīga pārbaude, rūpīgi pārbaudot projekta kodu un dokumentāciju. Izmantojiet līgumus ar aizdomīgu uzvedību vai trūkumiem pārredzamībā attiecībā uz apturēšanas funkcijas izmantošanu.

Lotus Market drošības skeneris 99,9% gadījumu atklāj visas izplatītās (ieskaitot slēptās) apturēšanas funkcijas. Izmantojiet mūsu premium abonementu un aizsargājiet savas līdzekļus no draudiem.

Nākamajā posmā mēs aplūkosim vairākus visbiežāk sastopamos apturēšanas funkcijas piemērus, ko veiksmīgi atrod Lotus Market platforma.

independently determine

Piemērs 1: Pamata apturēšanas funkcija


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

Padomi identifikācijai: Meklējiet līgumu ar funkcijām kā apturēt un atsākt vai līdzīgām funkcijām, kas var mainīt apturēšanas stāvokli.

Pārbaudiet, vai konkrētām funkcijām ir piemērots "whenNotPaused" veida modificētājs, lai pārliecinātos, ka tās var izpildīt tikai tad, ja līgums nav apturēts.

Pārbaudiet piekļuves kontroles mehānismu, kas ļauj apturēt un atsaukt līguma apturēšanu tikai īpašniekam vai pilnvarotām personām.

Piemērs 2: Laika aktivizēta apturēšanas funkcija


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

Padomi identifikācijai: Meklējiet līgumu ar laika aktivizētu apturēšanas mehānismu, kur apturēšana un atsākšana ir noteiktas ilguma.

Pārbaudiet, vai konkrētām funkcijām ir piemērots "whenNotPaused" veida modificētājs, lai pārliecinātos, ka līgums uzspiež apturēšanas ilgumu un atļauj apturēt to tikai pēc norādītā laika beigām.

Kad identificējat apturēšanas funkcijas viedajā līgumā, ir ļoti svarīgi izpētīt kodu, piekļuves kontroles mehānismu un apturēšanas mehānisma mērķi. Rūpīgi pārskatiet dokumentāciju un līguma pārvaldības modeli un sazinieties ar projektu kopienas pārstāvjiem, lai novērtētu līguma likumīgumu un piemērotību. Pirms veicat darījumu vai ieguldījumu, kas saistīts ar apturējamajiem līgumiem, vienmēr rīkojieties piesardzīgi un veiciet pienācīgu izpēti.

time-activated pause

Piemērs 3: Nosacīta apturēšanas funkcija


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

Padomi identifikācijai: Meklējiet līgumu ar nosacītu apturēšanas mehānismu, kas ļauj īpašniekam veikt noteiktas darbības pat tad, ja līgums ir apturēts.

Pārbaudiet, vai "whenNotPaused" veida modificētājs tiek piemērots funkcijām, kurām nepieciešams, lai līgums būtu neapturētā stāvoklī.

Piemērs 4: Ārkārtas apturēšanas funkcija


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

Padomi identifikācijai: Meklējiet līgumu ar ārkārtas apturēšanas funkciju, kas ļauj īpašniekam nekavējoties apturēt līgumu pat bez standarta apturēšanas procedūrām.

Pārbaudiet, vai ir "whenNotPaused" veida modificētājs, lai noteiktu, kuras operācijas ir ierobežotas, ja līgums ir apturēts.

Pievērsiet uzmanību līguma ārkārtas apturēšanas funkcijām un nodrošiniet to, ka to izmantošana ir stingri kontrolēta un labi dokumentēta.

Saskaņojiet līguma apturēšanas funkcijas ar tā pārvaldes modeli un lēmumu pieņemšanas procesiem, lai aktivizētu vai deaktivizētu apturēšanas funkciju.

Piemērs 5: Īpašnieka kontrolēta apturēšana ar laika ierobežojumu


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

Padomi identifikācijai: Meklējiet līgumu ar īpašnieka kontrolētu apturēšanas funkciju, kas ietver noteiktu apturēšanas termiņu un apturēšanas atcelšanu.

Pārbaudiet, vai ir "whenNotPaused" veida modificētājs, kas piemērots atbilstošajām funkcijām, lai ierobežotu darbības, kad līgums ir apturēts.

owner-controlled pause with time limit

Piemērs 6: Trešās puses apturēšanas funkcija ar laika ierobežojumu


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

Padomi identifikācijai: Meklējiet līgumu ar trešās puses pārvaldītu apturēšanas mehānismu, kurā trešā puse var apturēt un atvienot līgumu ar noteiktu ilgumu.

Pārbaudiet, vai ir "whenNotPaused" veida modificētājs, lai noteiktu, kuras operācijas ir ierobežotas, ja līgums ir apturēts.

Nodrošiniet, ka piekļuves kontroles mehānismi apturēšanas funkcijām līgumā, vai nu īpašnieka īpašumā, vai arī kopienas pārvaldībā vai trešās puses vadībā, ir pārredzami un labi izstrādāti.

Kad apturēšanas funkcija ir identificēta smart līgumā, ir svarīgi veikt rūpīgu koda analīzi, pārbaudīt piekļuves kontroles mehānismus un saprast apturēšanas mehānisma mērķi un vadības modeli. Ir būtiski veikt pienācīgu rūpniecisko pētījumu un iesaistīties projekta kopienā, lai novērtētu līguma likumīgumu un tā piemērotību paredzētajam mērķim. Pirms iesaistīšanās jebkurā darījumā vai investīcijā, kas ietver apturējamos līgumus, vienmēr izvērtējiet situāciju un veiciet rūpīgu pētījumu, lai samazinātu potenciālos riskus.

 

Mēs ceram, ka šie piemēri palīdzēja jums labāk izprast apturēšanas funkciju shēmas smart līgumos.

 

Tā kā visi blockchain informācijā ir atvērti (protams, ja līguma avota kods ir pārbaudīts), iegūstot šo zināšanu, jūs varat neatkarīgi pētīt smart līgumus un identificēt dažādas krāpnieciskas shēmas.

Tomēr mēs esam paveikuši visu šo darbu par jums! Reģistrējieties par maksas abonementu un iegūstiet piekļuvi ekskluzīviem filtriem par smart līgumu īpašībām un jaunākajiem analītikas datiem. Palieliniet savas iespējas veiksmīgi ieguldīt peļņu nesošos žetonus.

Ar cieņu, Lotus Market komanda.

All posts

Connect to a wallet

Metamask