Analise smart-contract
03.04.2024

Intelligentsed lepingud koos pausi funktsiooniga

Jätame artiklite sarja, mis on pühendatud nutilepingute pettuslike skeemide kirjeldamisele. Täna analüüsime nutikaid lepinguid, millel on pausi funktsioon.

Pausi funktsiooniga nutikad lepingud annavad võimaluse ajutiselt või alaliselt peatada teatud toimingud või funktsioonid lepingu sees. Kuigi pausi funktsioonid võivad olla kasulikud turvalisuse ja hoolduse seisukohast, kujutavad nad endast ka potentsiaalset ohtu, kui neid kasutavad petturid. Enda kaitsmiseks ja võimalike ohtude tuvastamiseks peate mõistma riske, tavalisi pettusekavasid ja seda, kuidas neid nutilepingutes ära tunda.

Pausi funktsiooniga nutilepingute ohud:

  • Lubamata paus: Petturid võivad saada kontrolli pausi funktsiooni üle ja peatada lepingu ilma nõuetekohase autoriseerimiseta, mille tulemuseks võib olla äritegevuse katkestamine või rahaline kahju.

  • Pettuslikud viivitused: Pahatahtlikud lepingud võivad ajutiste hooldus- või turvameetmete ettekäändel peatada kriitilised tehingud, näiteks väljamaksed või ülekanded, eesmärgiga keelata kasutajatele juurdepääs nende varadele.

  • Vale väited hädaolukordade kohta: Petturid võivad lepingu peatamise õigustamiseks valetult väita, et tegemist on hädaolukorra või haavatavusega, ning seejärel kasutada pausi ajal kasutajate raha.

  • Turvalisuse ettekäändega: Pahatahtlikud lepingud võivad väita, et on avastatud turvaauk, mille tulemuseks on peatamisfunktsiooni aktiveerimine. Tegelikkuses võivad petturid kavatseda olukorda ära kasutada.

  • Hädaskeemid: Petturid võivad kasutada hirmu tekitavat keelt või stsenaariume, näiteks väites "sissemurdmiskatset" või "hädaolukorda", et õigustada pausi, mille jooksul nad võivad toime panna ebaseaduslikke tegusid.

Kuidas saate iseseisvalt kindlaks teha, kas sellised ohud on nutilepingutes olemas?

Kui soovite iseseisvalt kindlaks teha, kas nutilepingutes on olemas pausifunktsioon, on järgmised näpunäited selleks abiks.

  1. Vaadake lepingu lähtekoodist, kas seal on olemas pausifunktsioon. Veenduge, et pausimehhanism on hästi dokumenteeritud ja sellel on asjakohased juurdepääsukontrollid.

  2. Vaadake välja, kes kontrollib pausifunktsiooni. Pausifunktsiooni volitamata või kontrollimata valdamine on potentsiaalne probleem.

  3. Lugege dokumentatsiooni ja projekti spetsifikatsioone, et tagada, et need annavad selget ja täpset teavet pausifunktsiooni, selle eesmärgi ja selle kasutamise asjaolude kohta.

  4. Kontrollige pausifunktsiooni kasutamise läbipaistvust. Veenduge, et on olemas selged menetlused, kuidas hallata ja otsustada, kas aktiveerida või deaktiveerida Pause.

  5. Pöörake tähelepanu nutilepingu turvalisuse, eelkõige Pause-mehhanismi välisaudititele. Audiitorid peaksid hindama Pause-funktsiooni turvalisust ja läbipaistvust.

  6. Vaadelda lepingu käitumist ja tagada, et Pause-funktsioon aktiveeritakse ainult seaduslikel asjaoludel, näiteks hooldus- või ohutuspõhjustel.

  7. Võtta ühendust projekti kogukonna ja teiste kasutajatega, et mõista nende kogemusi ja muresid seoses Pause-funktsiooni kasutamisega.

  8. Pidage end kursis meie kogukonna viimaste arengutega (Telegrami kanal) ja pettuste tuvastamise parimate tavadega (meie blogi ja YouTube'i kanal).

Puutealuse nutilepingu potentsiaalselt pahatahtliku funktsiooni tuvastamiseks peate tegema nõuetekohast hoolsust, uurides projekti koodi ja dokumentatsiooni. Vältige lepinguid, mille käitumine on kahtlane või mille puhul puudub läbipaistvus seoses Pause-funktsiooni kasutamisega.

Lotus Market'i turvaskanner leiab 99,9% ajast kõik tavalised (sealhulgas varjatud) Pause-funktsioonid. Kasutage meie premium-tellimust ja kaitske oma raha ohtude eest.

Järgnevalt vaatame mõned kõige levinumad näited Pause-funktsioonist, mille Lotus Market platvorm edukalt leiab.

independently determine

Eside 1: Põhiline Pause-funktsioon


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

Vihjeid tuvastamiseks: Otsige lepingut, millel on funktsioonid nagu pause ja unpause või sarnased funktsioonid, millega saab vahetada pausi olekut.

Kontrollige, kas teatud funktsioonidele on rakendatud whenNotPaused tüüpi modifikaator, et tagada, et neid saab täita ainult siis, kui leping ei ole peatatud.

Kontrollige juurdepääsu kontrollimise mehhanismi, mis peaks võimaldama ainult omanikul või volitatud isikutel peatada ja tühistada lepingu peatamist.

Esimene 2: ajaga aktiveeritud paus


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

Vihjeid tuvastamiseks: Otsi lepingut, millel on ajaga aktiveeritud pausimehhanism, kus pausil ja pausi tühistamisel on kindel kestus.

Kontrolli, kas teatud funktsioonidele on rakendatud whenNotPaused tüüpi modifikaator. Veenduge, et leping kehtestab pausi kestuse ja võimaldab seda tühistada alles pärast kindlaksmääratud aja möödumist.

Pausi funktsioonide tuvastamisel nutilepingus on oluline uurida koodi, juurdepääsukontrolli ja pausimehhanismi eesmärki. Vaadake hoolikalt läbi dokumentatsioon ja lepingu haldamise mudel ning kaasake projekti kogukond, et hinnata lepingu õiguspärasust ja selle sobivust. Olge alati ettevaatlik ja teostage nõuetekohane hoolsus enne mis tahes tehingu või investeeringu tegemist, mis hõlmab peatatavaid lepinguid.

time-activated pause

Näide 3: tingimuslik pausifunktsioon


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

Vihjeid tuvastamiseks: Otsige lepingut, millel on tingimuslik pausimehhanism, mis võimaldab omanikul teha teatud tehinguid ka siis, kui leping on peatatud.

Kontrollige, kas tüübimuudataja whenNotPaused kehtib funktsioonide puhul, mis nõuavad, et leping oleks mittepausis.

Näide 4: funktsioon erakorralise pausi jaoks


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

Vihjeid tuvastamiseks: Otsige lepingut, millel on erakorralise pausi funktsioon, mis võimaldab omanikul lepingu kohe peatada ka ilma standardse peatamismenetluseta.

Kontrollige, kas on olemas tüüpi whenNotPaused modifikaator, et määrata, milliseid toiminguid on lepingu peatamise korral piiratud.

Pöörake tähelepanu lepingu erakorralise peatamise funktsioonidele ja veenduge, et nende kasutamine on rangelt kontrollitud ja hästi dokumenteeritud.

Sobitage lepingu peatamisfunktsioonid selle juhtimismudeliga ja otsustusprotsessidega peatamisfunktsiooni aktiveerimiseks ja deaktiveerimiseks.

Näide 5: omaniku poolt kontrollitud peatamine ajalise piiranguga


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

Vihjeid tuvastamiseks: Otsige omaniku poolt kontrollitava pausiga lepingut, mis sisaldab kindlat pausi kestust ja pausi tühistamist.

Kontrolli, kas asjakohastele funktsioonidele on rakendatud tüübi whenNotPaused modifikaator, et piirata toiminguid lepingu peatamise ajal.

owner-controlled pause with time limit

Esimene 6: Kolmanda osapoole paus koos ajalise piiranguga


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

Vihjeid tuvastamiseks: Otsige lepingut, millel on kolmanda osapoole hallatav peatamismehhanism, kus kolmas osapool saab lepingu peatada ja katkestada lepingu kindlaksmääratud kestusega.

Kontrollige tüüpi whenNotPaused modifikaatorit, et määrata, milliseid toiminguid on lepingu peatamise korral piiratud.

Kindlusta, et lepingus sisalduvate pausifunktsioonide juurdepääsukontrollimehhanismid, olgu need omaniku, kogukonna või kolmanda osapoole hallatavad, oleksid läbipaistvad ja hästi kavandatud.

Kui nutilepingus tuvastatakse pausifunktsioon, tuleks läbi viia põhjalik koodianalüüs, testida juurdepääsukontrolli ning mõista pausimehhanismi eesmärki ja kontrollimudelit. Kriitiline on läbi viia nõuetekohane hoolsuskohustus ja suhelda projektikogukonnaga, et hinnata lepingu õiguspärasust ja selle sobivust. Olge alati ettevaatlik ja viige läbi korralik uurimine enne selliste lepingute sõlmimist, mis pakuvad võimalike riskide vähendamiseks pausi võimalust.

 

Me loodame, et need näited aitasid teil paremini mõista nutilepingute pausifunktsiooni skeemi.

 

 

Kuidas kogu teave plokiahelas on avatud (eeldusel muidugi, et lepingu lähtekood on kontrollitud), saate nende teadmistega relvastatud iseseisvalt uurida nutilepinguid ja tuvastada erinevaid pettuse skeeme.

 

Me oleme aga selle kõik juba teie eest ära teinud! Registreeruge lisatellimuseks ja saate juurdepääsu eksklusiivsetele filtritele nutilepingute funktsioonide ja värske analüüsi kohta. Suurendage oma võimalusi investeerida edukalt kasumlikesse tokenitesse.

Regards, Lotus Market team.

All posts

Connect to a wallet

Metamask