Analise smart-contract
03.04.2024

Chytré smlouvy s funkcí Pauza

Pokračujeme v sérii článků věnovaných popisu podvodných schémat v chytrých kontraktech. Dnes budeme analyzovat chytré kontrakty s funkcí Pause.

Chytré kontrakty s funkcí Pause poskytují možnost dočasně nebo trvale zastavit určité operace nebo funkce v rámci kontraktu. Funkce Pause mohou být užitečné z hlediska bezpečnosti a údržby, ale představují také potenciální riziko, pokud je využívají podvodníci. Abyste se mohli chránit a identifikovat potenciální hrozby, musíte porozumět rizikům, běžným podvodným schématům a vědět, jak je v chytré smlouvě rozpoznat.

Nebezpečí chytrých smluv s funkcí Pauza:

  • Neautorizovaná Pauza: Podvodníci mohou získat kontrolu nad funkcí Pause a zastavit kontrakt bez řádného oprávnění, což může vést k narušení podnikání nebo finanční ztrátě.

  • Klamné prodlevy: Podvodné smlouvy mohou pozastavit kritické transakce, jako jsou výběry nebo převody, pod záminkou dočasné údržby nebo bezpečnostních opatření, s úmyslem znemožnit uživatelům přístup k jejich aktivům.

  • Falešné tvrzení o naléhavých případech: Podvodníci mohou falešně tvrdit, že se jedná o naléhavé případy nebo zranitelná místa, aby ospravedlnili pozastavení smlouvy, a pak během pauzy využívat finanční prostředky uživatelů.

  • Záminka bezpečnosti: Podvodné smlouvy mohou tvrdit, že byla objevena bezpečnostní zranitelnost, což vede k aktivaci funkce pozastavení. Ve skutečnosti mohou mít podvodníci v úmyslu této situace využít.

  • Náhradní schémata: Podvodníci mohou používat jazyk nebo scénáře vyvolávající strach, například tvrzení o "pokusu o vloupání" nebo "nouzové situaci", aby ospravedlnili pozastavení, během kterého mohou spáchat nezákonné činy.

Jak můžete nezávisle zjistit, zda jsou takové hrozby v inteligentních smlouvách přítomny?

Pokud chcete sami zjistit přítomnost funkce Pauza v chytrých kontraktech, pomohou vám k tomu následující tipy:

  1. Prozkoumejte zdrojový kód kontraktu a zjistěte, zda obsahuje funkci Pauza. Ujistěte se, že je mechanismus pozastavení dobře zdokumentován a má vhodné kontroly přístupu.

  2. Zjistěte, kdo funkci pozastavení ovládá. Neoprávněné nebo nekontrolované vlastnictví funkce Pauza je potenciálním problémem.

  3. Přečtěte si dokumentaci a specifikace projektu a ujistěte se, že poskytují jasné a přesné informace o funkci Pauza, jejím účelu a okolnostech, za kterých může být použita.

  4. Zkontrolujte transparentnost použití funkce Pauza. Zajistěte, aby existovaly jasné postupy pro správu a rozhodování o aktivaci nebo deaktivaci funkce Pause.

  5. Věnujte pozornost externím auditům bezpečnosti inteligentních kontraktů, zejména mechanismu Pause. Auditoři by měli hodnotit bezpečnost a transparentnost funkce Pauza.

  6. Sledujte chování kontraktu a zajistěte, aby byla funkce Pauza aktivována pouze za legitimních okolností, například z důvodu údržby nebo bezpečnosti.

  7. Spolupracujte s komunitou projektu a dalšími uživateli, abyste pochopili jejich zkušenosti a obavy z používání funkce Pauza.

  8. Sledujte nejnovější vývoj v naší komunitě (kanál Telegram) a osvědčené postupy pro odhalování podvodů (náš blog a kanál YouTube).

Chcete-li odhalit potenciálně škodlivou funkci v chytrém kontraktu Pause, musíte provést náležitou kontrolu a důkladně prozkoumat kód a dokumentaci projektu. Vyhněte se smlouvám s podezřelým chováním nebo netransparentním používáním funkce Pause.

Skener zabezpečení společnosti Lotus Market v 99,9 % případů najde všechny běžné (včetně skrytých) funkce Pause. Využívejte naše prémiové předplatné a chraňte své finanční prostředky před hrozbami.

Následující kapitola se bude věnovat několika nejběžnějším příkladům funkce Pauza, které platforma Lotus Market úspěšně vyhledává.

independently determine

Příklad 1: Základní funkce Pauza


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

Tipy pro identifikaci: Hledejte kontrakt s funkcemi jako pause a unpause nebo podobnými funkcemi, které mohou přepínat stav pozastavení.

Zkontrolujte, zda je na určité funkce použit modifikátor typu whenNotPaused, abyste zajistili, že je lze provést pouze tehdy, když kontrakt není pozastaven.

Zkontrolujte mechanismus řízení přístupu, který by měl umožnit pozastavení a zrušení pozastavení smlouvy pouze vlastníkovi nebo oprávněným osobám.

Příklad 2: Časově aktivovaná pauza


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

Tipy pro identifikaci: Hledejte smlouvu s mechanismem časově aktivované pauzy, ve které má pauza a zrušení pauzy určitou dobu trvání.

Zkontrolujte, zda je na určité funkce aplikován modifikátor typu whenNotPaused. Ujistěte se, že smlouva vynucuje trvání pauzy a umožňuje její zrušení až po uplynutí stanovené doby.

Při identifikaci funkcí pauzy v inteligentní smlouvě je zásadní prozkoumat kód, kontrolu přístupu a účel mechanismu pauzy. Pečlivě projděte dokumentaci a model správy smlouvy a zapojte komunitu projektu, abyste posoudili legitimitu smlouvy a to, zda je vhodná pro daný účel. Vždy buďte obezřetní a proveďte hloubkovou kontrolu, než se zapojíte do jakékoli transakce nebo investice zahrnující smlouvy s možností pozastavení.

time-activated pause

Příklad 3: Funkce podmíněné pauzy


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

Tipy pro identifikaci: Hledejte smlouvu s mechanismem podmíněné pauzy, který umožňuje vlastníkovi provádět určité transakce, i když je smlouva pozastavena.

Zkontrolujte, zda se modifikátor typu whenNotPaused vztahuje na funkce, které vyžadují, aby smlouva nebyla ve stavu pozastavení.

Příklad 4: Funkce nouzového pozastavení


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

Tipy pro identifikaci: Hledejte smlouvu s funkcí nouzového pozastavení, která umožňuje vlastníkovi okamžitě pozastavit smlouvu i bez standardních postupů pozastavení.

Zkontrolujte, zda existuje modifikátor typu whenNotPaused, který určuje, které operace jsou omezeny, když je smlouva pozastavena.

Věnujte pozornost funkcím nouzového pozastavení smlouvy a zajistěte, aby jejich použití bylo přísně kontrolováno a dobře zdokumentováno.

Přizpůsobte funkce pozastavení smlouvy jejímu modelu správy a rozhodovacím procesům pro aktivaci a deaktivaci funkce pozastavení.

Příklad 5: Vlastníkem řízené pozastavení s časovým omezením


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

Tipy pro identifikaci: Hledejte smlouvu s pauzou řízenou vlastníkem, která obsahuje konkrétní dobu trvání pauzy a pauzu zrušte.

Zkontrolujte, zda je na příslušné funkce aplikován modifikátor typu whenNotPaused, který omezuje operace při pozastavení smlouvy.

owner-controlled pause with time limit

Příklad 6: Pauza třetí strany s časovým omezením


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

Tipy pro identifikaci: Hledejte smlouvu s mechanismem pozastavení spravovaným třetí stranou, kde třetí strana může smlouvu pozastavit a odpojit s nastavenou dobou trvání.

Zkontrolujte, zda existuje modifikátor typu whenNotPaused, abyste zjistili, které operace jsou omezeny, když je smlouva pozastavena.

Ujistěte se, že mechanismy řízení přístupu k funkcím pozastavení v kontraktu, ať už vlastněném vlastníkem, spravovaném komunitou nebo třetí stranou, jsou transparentní a dobře navržené.

Pokud je v inteligentním kontraktu identifikována funkce pozastavení, měla by být provedena důkladná analýza kódu, otestováno řízení přístupu a měl by být pochopen účel a model řízení mechanismu pozastavení. Je velmi důležité provést hloubkovou kontrolu a zapojit komunitu projektu, aby bylo možné posoudit legitimitu smlouvy a to, zda je vhodná pro daný účel. Před uzavřením smluv, které nabízejí možnost pauzy, buďte vždy obezřetní a proveďte řádný průzkum, abyste zmírnili potenciální rizika.

 

Doufáme, že vám tyto příklady pomohly lépe pochopit schéma funkce pauzy v chytrých smlouvách.

 

 

Jelikož jsou všechny informace v blockchainu otevřené (samozřejmě za předpokladu, že je ověřen zdrojový kód smlouvy), můžete vyzbrojeni těmito znalostmi nezávisle studovat chytré smlouvy a identifikovat různá podvodná schémata.

 

Však my už jsme to všechno udělali za vás! Přihlaste se k prémiovému předplatnému a získejte přístup k exkluzivním filtrům funkcí chytrých kontraktů a čerstvým analýzám. Zvyšte své šance na úspěšné investování do výnosných tokenů.

S pozdravem, tým Lotus Market.

All posts

Connect to a wallet

Metamask