Analise smart-contract
03.04.2024

Duraklatma işlevine sahip akıllı sözleşmeler

Akıllı sözleşmelerdeki dolandırıcılık planlarının tanımlanmasına adanmış makale serisine devam ediyoruz. Bugün Pause işlevine sahip akıllı sözleşmeleri analiz edeceğiz.

Pause özelliklerine sahip akıllı sözleşmeler, sözleşme içindeki belirli işlemleri veya işlevleri geçici veya kalıcı olarak durdurma yeteneği sağlar. Pause özellikleri güvenlik ve bakım için faydalı olsa da dolandırıcılar tarafından kullanılmaları halinde potansiyel bir risk de oluştururlar. Kendinizi korumak ve olası tehditleri belirlemek için riskleri, yaygın dolandırıcılık planlarını ve bunları bir akıllı sözleşmede nasıl tanıyacağınızı anlamanız gerekir.

Duraklatma özelliğine sahip akıllı sözleşmelerin tehlikeleri:

  • Yetkisiz Duraklatma: Dolandırıcılar Duraklatma özelliğinin kontrolünü ele geçirebilir ve uygun yetkilendirme olmadan sözleşmeyi durdurabilir, bu da iş kesintisine veya mali kayba neden olabilir.

  • Kandırıcı Gecikmeler: Kötü niyetli sözleşmeler, kullanıcıların varlıklarına erişimini engellemek amacıyla geçici bakım veya güvenlik önlemleri kisvesi altında para çekme veya transfer gibi kritik işlemleri askıya alabilir.

  • Yanlış acil durum iddiaları: Dolandırıcılar, bir sözleşmenin askıya alınmasını haklı göstermek için sahte acil durumlar veya güvenlik açıkları iddia edebilir ve ardından duraklama sırasında kullanıcıların fonlarını kullanabilir.

  • Güvenlik Bahanesi: Kötü niyetli sözleşmeler, bir güvenlik açığının keşfedildiğini iddia ederek askıya alma işlevinin etkinleştirilmesine neden olabilir. Gerçekte, dolandırıcılar bu durumdan faydalanmak isteyebilir.

  • Acil Durum Şemaları: Dolandırıcılar, yasadışı eylemlerde bulunabilecekleri bir duraklamayı haklı çıkarmak için "hırsızlık girişimi" veya "acil durum" iddiası gibi korku uyandıran bir dil veya senaryolar kullanabilir.

Akıllı sözleşmelerde bu tür tehditlerin olup olmadığını bağımsız olarak nasıl belirleyebilirsiniz?

Akıllı sözleşmelerde Duraklatma işlevlerinin varlığını kendi başınıza belirlemek istiyorsanız, aşağıdaki ipuçları bunu yapmanıza yardımcı olacaktır.

  1. Bir Duraklatma özelliği olup olmadığını görmek için sözleşmenin kaynak kodunu inceleyin. Duraklatma mekanizmasının iyi belgelendiğinden ve uygun erişim kontrollerine sahip olduğundan emin olun.

  2. Duraklatma işlevini kimin kontrol ettiğini bulun. Duraklatma işlevinin yetkisiz veya kontrolsüz bir şekilde kullanılması potansiyel bir sorundur.

  3. Duraklatma işlevi, amacı ve hangi durumlarda kullanılabileceği hakkında açık ve doğru bilgiler sağladıklarından emin olmak için belgeleri ve proje şartnamelerini okuyun.

  4. Duraklatma işlevinin kullanımının şeffaflığını kontrol edin. Pause'un etkinleştirilmesi ya da devre dışı bırakılmasına karar vermek ve yönetmek için açık prosedürler olduğundan emin olun.

  5. Akıllı sözleşme güvenliğinin, özellikle de Pause mekanizmasının dış denetimlerine dikkat edin. Denetçiler, Duraklatma özelliğinin güvenliğini ve şeffaflığını değerlendirmelidir.

  6. Sözleşmenin davranışını gözlemleyin ve Duraklatma işlevinin yalnızca bakım veya güvenlik nedenleri gibi meşru koşullar altında etkinleştirildiğinden emin olun.

  7. Duraklatma özelliğini kullanma konusundaki deneyimlerini ve endişelerini anlamak için proje topluluğu ve diğer kullanıcılarla etkileşim kurun.

  8. Topluluğumuzdaki en son gelişmelerden (Telegram kanalı) ve dolandırıcılık tespiti için en iyi uygulamalardan (Blogumuz ve YouTube kanalımız) haberdar olun.

Bir Pause akıllı sözleşmesindeki potansiyel olarak kötü niyetli işlevselliği tespit etmek için, projenin kodunu ve belgelerini inceleyerek gerekli özeni göstermelisiniz. Şüpheli davranışları olan ya da Pause özelliğinin kullanımına ilişkin şeffaflık eksikliği olan sözleşmelerden kaçının.

Lotus Market'in güvenlik tarayıcısı, tüm yaygın (gizli olanlar dahil) Pause özelliklerini %99,9 oranında bulur. Premium aboneliğimizi kullanın ve fonlarınızı tehditlerden koruyun.

Bundan sonra, Lotus Market Platformunun başarıyla bulduğu Pause özelliğinin en yaygın örneklerinden birkaçına bakacağız.

independently determine

Örnek 1: Temel Pause işlevi


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

Tanımlama için ipuçları: Duraklatma durumunu değiştirebilen pause ve unpause gibi işlevlere veya benzer işlevlere sahip bir sözleşme arayın.

Sadece sözleşme askıya alınmadığında yürütülebilmelerini sağlamak için belirli işlevlere uygulanan whenNotPaused türü değiştiriciyi kontrol edin.

Sadece sahibinin veya yetkili kişilerin bir sözleşmeyi askıya almasına ve askıdan kaldırmasına izin vermesi gereken erişim kontrol mekanizmasını kontrol edin.

Örnek 2: Zamanla etkinleştirilen duraklatma


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

Tanımlama için ipuçları: Duraklatma ve duraklatma iptalinin belirli bir süreye sahip olduğu, zamanla etkinleştirilen bir duraklatma mekanizmasına sahip bir sözleşme arayın.

Belirli işlevlere uygulanan whenNotPaused türünde bir değiştirici olup olmadığını kontrol edin. Sözleşmenin duraklatma süresini zorunlu kıldığından ve yalnızca belirtilen süre geçtikten sonra iptal edilmesine izin verdiğinden emin olun.

Bir akıllı sözleşmedeki Duraklatma özelliklerini belirlerken, kodu, erişim kontrollerini ve duraklatma mekanizmasının amacını incelemek çok önemlidir. Belgeleri ve sözleşme yönetim modelini dikkatle inceleyin ve sözleşmenin meşruiyetini ve amaca uygun olup olmadığını değerlendirmek için proje topluluğuyla etkileşim kurun. Askıya alınabilir sözleşmeleri içeren herhangi bir işlem veya yatırıma girmeden önce her zaman dikkatli olun ve durum tespiti yapın.

time-activated pause

Örnek 3: Koşullu duraklatma işlevi


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

Tanımlama için ipuçları: Sözleşme askıya alınmış olsa bile sahibinin belirli işlemleri gerçekleştirmesine izin veren koşullu duraklatma mekanizmasına sahip bir sözleşme arayın.

whenNotPaused tür değiştiricisinin sözleşmenin duraklatılmamış durumda olmasını gerektiren işlevler için geçerli olup olmadığını kontrol edin.

Örnek 4: Acil durum duraklatma işlevi


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

Tanımlama için ipuçları: Standart askıya alma prosedürleri olmasa bile sözleşme sahibinin sözleşmeyi hemen askıya almasına olanak tanıyan acil durum duraklatma özelliğine sahip bir sözleşme arayın.

Sözleşme askıya alındığında hangi işlemlerin kısıtlandığını belirlemek için whenNotPaused türünde bir değiştirici olup olmadığını kontrol edin.

Sözleşmenin acil durum duraklatma özelliklerine dikkat edin ve kullanımlarının sıkı bir şekilde kontrol edildiğinden ve iyi belgelendiğinden emin olun.

Sözleşmenin askıya alma işlevlerini yönetim modeliyle ve askıya alma işlevini etkinleştirmeye ve devre dışı bırakmaya yönelik karar alma süreçleriyle eşleştirin.

Örnek 5: Zaman sınırı olan sahip kontrollü duraklatma


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

Tanımlama için ipuçları: Belirli bir duraklatma süresi içeren ve duraklatmayı iptal eden sahip kontrollü bir duraklatma içeren bir sözleşme arayın.

Sözleşme askıya alındığında işlemleri kısıtlamak için uygun işlevlere uygulanan whenNotPaused türünde bir değiştirici olup olmadığını kontrol edin.

owner-controlled pause with time limit

Örnek 6: Süre sınırı olan üçüncü taraf duraklatma


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

Tanımlama için ipuçları: Üçüncü tarafın sözleşmeyi belirli bir süreyle askıya alabileceği ve bağlantısını kesebileceği üçüncü taraf tarafından yönetilen bir askıya alma mekanizmasına sahip bir sözleşme arayın.

Bir sözleşme askıya alındığında hangi işlemlerin kısıtlandığını belirlemek için whenNotPaused türünde bir değiştirici olup olmadığını kontrol edin.

Sözleşmedeki Duraklatma özellikleri için erişim kontrol mekanizmalarının, ister sahibine ait, ister topluluk tarafından yönetilen ya da üçüncü taraf olsun, şeffaf ve iyi tasarlanmış olduğundan emin olun.

Akıllı bir sözleşmede bir Duraklatma işlevi tespit edildiğinde, kapsamlı bir kod analizi yapılmalı, erişim kontrolleri test edilmeli ve duraklatma mekanizmasının amacı ve kontrol modeli anlaşılmalıdır. Sözleşmenin meşruiyetini ve amaca uygun olup olmadığını değerlendirmek için durum tespiti yapmak ve proje topluluğuyla etkileşim kurmak kritik önem taşımaktadır. Olası riskleri azaltmak için duraklatma seçeneği sunan sözleşmelere girmeden önce her zaman dikkatli olun ve uygun araştırmaları yapın.

 

Umarız bu örnekler akıllı sözleşmelerdeki Duraklatma işlevinin şemasını daha iyi anlamanıza yardımcı olmuştur.

 

 

Blok zincirindeki tüm bilgiler açık olduğundan (elbette sözleşmenin kaynak kodunun doğrulanması şartıyla), bu bilgiyle donanmış olarak akıllı sözleşmeleri bağımsız olarak inceleyebilir ve çeşitli dolandırıcılık planlarını belirleyebilirsiniz.

 

Ancak, biz zaten sizin için her şeyi yaptık! Premium abonelik için kaydolun ve akıllı sözleşmelerin özellikleri ve yeni analizler hakkında özel filtrelere erişin. Karlı tokenlara başarılı bir şekilde yatırım yapma şansınızı artırın.

Saygılar, Lotus Market ekibi.

All posts

Connect to a wallet

Metamask