1. Anasayfa
  2. 100 Günde Solidity

🧵 #100GündeSolidity 081 – Tests : Echidna

🧵 #100GündeSolidity 081 – Tests : Echidna
Echidna
0

Echidna

Sevgili okuyucular, hoş geldiniz! Bugün #100DaysOfSolidity serisinin 81. bülteninde, muhteşem bir araç olan Echidna‘yı konuşacağız. Kendi kendine yazan akıllı sözleşmeleri test etmek için geliştirilen bu araç, Solidity geliştiricileri için gerçekten eğlenceli ve özgün bir deneyim sunuyor.

Echidna, adını Avustralya’nın egzotik memelisi olan yarı balıkçıl tavşan ile paylaşıyor ve en karmaşık sözleşmeleri bile test etmek için tasarlanmış bir araç olarak karşımıza çıkıyor. Bu aracın sağladığı avantajlar, Solidity geliştiricilerinin daha güvenli ve güvenilir sözleşmeler yazmalarına yardımcı oluyor.

Ancak, Echidna kullanmak sadece avantajlarla dolu değil. Dezavantajları ve dikkat edilmesi gereken yönleri de var. Bu nedenle, bu bültenimizde hem avantajlarına hem de dezavantajlarına dair konuşacağız.

Hazırsanız, Echidna’nın dünyasına adım atabiliriz!

Echidna, Solidity akıllı sözleşmelerinin otomatik olarak test edilmesi için geliştirilmiş bir araçtır. Bu araç, Solidity kodlarının güvenliğini ve doğruluğunu test etmek için tasarlanmıştır. Echidna, sözleşmelerdeki potansiyel hataları tespit etmek için farklı test senaryolarını otomatik olarak yürütür ve böylece geliştiricilerin hataları düzeltmesine ve sözleşmeleri daha güvenli hale getirmesine yardımcı olur. Echidna, Ethereum Virtual Machine (EVM) üzerinde çalışan Solidity sözleşmelerini test edebilir ve geliştiricilere hızlı ve verimli bir test süreci sunar.

Echidna Nasıl Çalışır?

Echidna, sözleşmelerdeki potansiyel hataları tespit etmek için farklı test senaryolarını otomatik olarak yürütür. Bu test senaryoları, sözleşmelerin farklı durumlar altında nasıl davranacağını simüle etmek için kullanılır.

Echidna, sözleşmelerin kodunu anlar ve belirli bir test senaryosuna göre sözleşmeyi çalıştırır. Test senaryoları, sözleşmenin işlevlerine parametreler geçirerek ve öngörülmeyen durumları simüle ederek çalıştırılır. Örneğin, Echidna bir sözleşmenin bakiyesine ait sınırların ötesine geçen bir işlem yapar veya sözleşmedeki bir işlevin yanlış parametreleri ile çağrı yapar. Böylece, Echidna, sözleşmelerin nasıl davranacağını kontrol eder ve potansiyel hataları tespit eder.

Echidna aynı zamanda, sözleşmenin birden fazla test senaryosunu yürütmesine ve sonuçlarını raporlamasına olanak tanır. Geliştiriciler, bu raporlar sayesinde hataları belirleyebilir ve sözleşmelerini daha güvenli ve güvenilir hale getirebilir.

Echidna ile Sözleşmeler Nasıl Test Edilir?

Echidna ile sözleşmeler, Solidity kodu olarak yazılır ve Echidna tarafından otomatik olarak test edilir. Echidna, test senaryolarını otomatik olarak üretir ve sözleşmeyi bu senaryolara göre test eder.

Echidna kullanarak sözleşme test etmek için şu adımları izleyebilirsiniz:

  1. Echidna’yı indirin ve yükleyin. Echidna, Python 3.6 veya üstü bir sürümde çalışır ve Solidity sözleşmelerini test etmek için solc derleyicisi gerektirir.
  2. Solidity sözleşmesini yazın ve Echidna ile test etmek istediğiniz fonksiyonları belirleyin.
  3. Echidna konfigürasyon dosyasını hazırlayın. Bu dosya, test senaryolarını belirler ve test sürecini yapılandırır.
  4. Echidna’yı kullanarak sözleşmeyi test edin. Echidna, sözleşmeyi farklı test senaryolarıyla otomatik olarak çalıştırır ve sonuçları raporlar.
  5. Echidna’nın ürettiği raporları analiz edin ve hataları düzeltin.

Bu adımları takip ederek, Echidna kullanarak Solidity sözleşmelerini otomatik olarak test edebilirsiniz. Bu, sözleşmelerin daha güvenli ve güvenilir hale gelmesine yardımcı olur ve geliştiricilerin hataları daha hızlı ve verimli bir şekilde tespit etmelerine olanak tanır.

Echidna’nın Avantajları ve Dezavantajları

Echidna’nın avantajları şunlardır:

  1. Otomatik Test: Echidna, Solidity sözleşmelerini otomatik olarak test etmek için tasarlanmıştır. Bu, geliştiricilerin hataları daha hızlı ve verimli bir şekilde tespit etmelerine olanak tanır.
  2. Çoklu Senaryo Testi: Echidna, sözleşmelerin birden fazla test senaryosunu yürütmesine ve sonuçlarını raporlamasına olanak tanır. Bu, sözleşmelerin daha doğru ve kapsamlı bir şekilde test edilmesine yardımcı olur.
  3. Güçlü Sözleşme Analizi: Echidna, sözleşmelerdeki potansiyel hataları tespit etmek için güçlü bir analiz yöntemi kullanır. Bu yöntem, sözleşmelerin güvenliğini ve doğruluğunu artırır.
  4. Kolay Kullanım: Echidna, kolay kullanımı ile geliştiricilerin zaman ve çaba tasarrufu yapmalarına olanak tanır.

Echidna’nın dezavantajları şunlar olabilir:

  1. Bazı Hataların Tespit Edilememesi: Echidna, tüm hataları tespit edemeyebilir. Özellikle, sözleşmelerdeki karmaşık hataların tespit edilmesi zor olabilir.
  2. Dil Bağımlılığı: Echidna, Solidity diliyle yazılan sözleşmeleri test etmek için kullanılabilir. Farklı bir dille yazılan sözleşmeleri test etmek için farklı araçlar kullanmanız gerekebilir.
  3. Yüksek Test Süresi: Echidna, sözleşmeleri birden fazla senaryoda test eder. Bu, test süresinin uzamasına neden olabilir.

Genel olarak, Echidna, Solidity sözleşmelerinin test edilmesinde yararlı bir araçtır. Ancak, tüm hataları tespit edemeyebilir ve yüksek test süresi nedeniyle bazı gecikmeler olabilir.

Echidna Kullanırken Dikkat Edilmesi Gerekenler

Echidna kullanırken dikkat edilmesi gereken bazı konular şunlardır:

  1. Echidna’yı doğru şekilde kurun ve yapılandırın: Echidna’yı kullanmadan önce, kurulum ve yapılandırma talimatlarını doğru bir şekilde izlemeniz gerekiyor. Ayrıca, gerekli bağımlılıkların ve araçların yüklü olduğundan emin olun.
  2. Doğru Test Senaryolarını Oluşturun: Echidna, sözleşmelerin doğru bir şekilde test edilmesi için farklı senaryolar yürütür. Bu nedenle, doğru test senaryolarını oluşturmak ve yürütmek önemlidir.
  3. Yeterli Test Süresi Planlayın: Echidna, birden fazla senaryoda sözleşmeleri test eder. Bu nedenle, yeterli test süresi planlamak önemlidir.
  4. Sözleşmelerinizi Güvenilir Bir Ortamda Test Edin: Echidna, sözleşmelerin güvenilir bir ortamda test edilmesi için tasarlanmıştır. Test ortamınızın güvenilir olduğundan emin olun.
  5. Düzgün Hata Yönetimi: Echidna, hataları tespit etmek için kullanılır. Ancak, hataların doğru bir şekilde yönetilmesi ve düzeltilmesi önemlidir.
  6. Echidna’yı Sürekli Güncel Tutun: Echidna, geliştiriciler tarafından düzenli olarak güncellenir. Bu nedenle, Echidna’yı güncel tutmak, en son özelliklerden ve hata düzeltmelerinden yararlanmak için önemlidir.

Bu noktalara dikkat ederek Echidna’yı doğru bir şekilde kullanabilirsiniz ve Solidity sözleşmelerinizin daha güvenli ve doğru bir şekilde test edilmesini sağlayabilirsiniz.

Echidna ile İlgili Örnekler ve Sonuç Bağlamı

Echidna ile ilgili bir örnek senaryo, bir DeFi protokolü için bir likidite havuzu sözleşmesinin test edilmesidir. Echidna, sözleşmelerin belirli durumlarda nasıl davrandığını test etmek için farklı senaryolar yürütebilir. Örneğin, Echidna, likidite havuzu sözleşmesinin token depolama ve çekme fonksiyonlarını test edebilir. Ayrıca, Echidna, sözleşmenin birden fazla kullanıcının aynı anda işlem yapması durumunda nasıl davrandığını da test edebilir.

Echidna ile test edilen sözleşmelerin sonuçları, hataların belirlenmesi ve düzeltme sürecinin takip edilmesi açısından önemlidir. Echidna, hataların tespit edilmesine yardımcı olur ve geliştiricilerin sözleşmelerindeki hataları düzeltmelerine olanak tanır. Bu nedenle, Echidna kullanarak yapılan testlerin sonuçları, sözleşmelerin daha güvenli ve doğru bir şekilde kullanılmasını sağlar.

Sonuç olarak, Echidna, Solidity sözleşmelerinin güvenilirliğini artırmak için kullanılan bir araçtır. Echidna, sözleşmelerin farklı senaryolarda nasıl davrandığını test eder ve hataları tespit eder. Echidna’nın avantajları, testlerin otomatik olarak yapılabilmesi, farklı senaryoların test edilebilmesi ve hataların tespit edilmesidir. Ancak, Echidna’nın dezavantajları da vardır, örneğin, testlerin yürütülmesi için yeterli zaman ve kaynak gereklidir. Echidna’yı doğru şekilde kullanarak, Solidity sözleşmelerinizi daha güvenli ve doğru bir şekilde test edebilirsiniz.

Uygulama Analizi

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

/*
echidna-test TestEchidna.sol --contract TestCounter
*/
contract Counter {
    uint public count;

    function inc() external {
        count += 1;
    }

    function dec() external {
        count -= 1;
    }
}

contract TestCounter is Counter {
    function echidna_test_true() public view returns (bool) {
        return true;
    }

    function echidna_test_false() public view returns (bool) {
        return false;
    }

    function echidna_test_count() public view returns (bool) {
        // Here we are testing that Counter.count should always be <= 5.
        // Test will fail. Echidna is smart enough to call Counter.inc() more
        // than 5 times.
        return count <= 5;
    }
}

/*
echidna-test TestEchidna.sol --contract TestAssert --check-asserts
*/
contract TestAssert {
    // Asserts not detected in 0.8.
    // Switch to 0.7 to test assertions
    function test_assert(uint _i) external {
        assert(_i < 10);
    }

    // More complex example
    function abs(uint x, uint y) private pure returns (uint) {
        if (x >= y) {
            return x - y;
        }
        return y - x;
    }

    function test_abs(uint x, uint y) external {
        uint z = abs(x, y);
        if (x >= y) {
            assert(z <= x);
        } else {
            assert(z <= y);
        }
    }
}

Bu örnekte, Echidna ile yapılan bir test senaryosu sunuluyor. Öncelikle TestEchidna.sol isimli akıllı sözleşme dosyası kaydediliyor. Daha sonra bu sözleşmenin bulunduğu klasörde aşağıdaki komut çalıştırılıyor:

docker run -it –rm -v $PWD:/code trailofbits/eth-security-toolbox

Bu komut, Echidna’yı içeren trailofbits/eth-security-toolbox imajını indirerek, Echidna’yı kullanıma hazır hale getiriyor. Echidna ile yapılacak testlerde kullanılacak olan TestCounter ve TestAssert isimli sözleşmeler de TestEchidna.sol dosyasında tanımlanıyor.

TestCounter sözleşmesi, Counter sözleşmesini miras alıyor ve içerisinde üç adet test fonksiyonu tanımlanıyor. İlk iki fonksiyon echidna_test_true ve echidna_test_false, sadece true veya false döndürüyorlar. Bu fonksiyonlar Echidna’nın, özellikle assert kullanarak belirli durumların doğru veya yanlış olup olmadığını test ederken doğru çalıştığını teyit etmek için kullanılabilir. Üçüncü fonksiyon echidna_test_count, Counter.count değişkeninin her zaman 5’ten küçük veya eşit olmasını test ediyor. Ancak, bu testin başarısız olması bekleniyor, çünkü Echidna, Counter.inc () fonksiyonunu 5’ten daha fazla çağırmak için yeterince akıllıdır.

TestAssert sözleşmesinde ise iki adet fonksiyon tanımlanıyor. İlk fonksiyon test_assert, _i parametresinin her zaman 10’dan küçük olduğunu doğruluyor. İkinci fonksiyon ise test_abs, x ve y parametrelerine göre mutlak değer hesaplayarak, hesaplanan değeri assert kullanarak doğruluyor.

Sonuç olarak, bu örnekte Echidna ile basit test senaryoları gösterilmektedir. Echidna’nın akıllı sözleşmeleri otomatik olarak test etmek için kullanılabilen bir araç olduğu ve özellikle assert kullanarak doğrulama yapabildiği açıkça ortaya konulmuştur.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

/*
echidna-test TestEchidna.sol --contract TestCounter
*/
contract Counter {
    uint public count;

    function inc() external {
        count += 1;
    }

    function dec() external {
        count -= 1;
    }
}

contract TestCounter is Counter {
    function echidna_test_true() public view returns (bool) {
        return true;
    }

    function echidna_test_false() public view returns (bool) {
        return false;
    }

    function echidna_test_count() public view returns (bool) {
        // Here we are testing that Counter.count should always be <= 5.
        // Test will fail. Echidna is smart enough to call Counter.inc() more
        // than 5 times.
        return count <= 5;
    }
}

/*
echidna-test TestEchidna.sol --contract TestAssert --check-asserts
*/
contract TestAssert {
    // Asserts not detected in 0.8.
    // Switch to 0.7 to test assertions
    function test_assert(uint _i) external {
        assert(_i < 10);
    }

    // More complex example
    function abs(uint x, uint y) private pure returns (uint) {
        if (x >= y) {
            return x - y;
        }
        return y - x;
    }

    function test_abs(uint x, uint y) external {
        uint z = abs(x, y);
        if (x >= y) {
            assert(z <= x);
        } else {
            assert(z <= y);
        }
    }
}

Bu akıllı sözleşme, Echidna kullanarak zaman ve çağrı yapıcılarını (callers) test etmek için tasarlanmıştır. Echidna, sözleşmenin oluşturulduğu tarihi değiştirebilir ve önceden belirlenmiş zaman aralığına (varsayılan olarak 7 gün) kadar değişiklik yapabilir.

Sözleşme ayrıca varsayılan çağrı yapıcıları (callers) da değiştirebilir. Sözleşme sahibi, bu fonksiyonları belirli adreslerle değiştirerek testi başarısız hale getirebilir.

Sözleşmenin ana işlevi, bir değişkeni “setFail” fonksiyonuna çağırarak testin başarılı olup olmadığını kontrol etmektir. Eğer Echidna, “setFail” fonksiyonunu çağırmakta başarılı olursa, test başarısız olur. Ancak, Echidna’nın çağrı yapması için belirlenmiş olan blok gecikmesi zamanından daha fazla bir süre geçmişse, fonksiyon çağrılmayacaktır.

Sözleşmenin diğer bir fonksiyonu, belirli bir çağrı yapıcıyı (caller) ayarlamak için kullanılır. Bu fonksiyon, yalnızca geçerli bir çağrı yapıcıyı girdi olarak kabul eder ve daha sonra “echidna_test_sender” fonksiyonu ile varsayılan çağrı yapıcıları ile karşılaştırır.

Bu örnek, zaman ve çağrı yapıcıları (callers) gibi sözleşme özelliklerini test etmek için Echidna’nın nasıl kullanılabileceğini göstermektedir. Ancak, sözleşmenin test edilmesi için gerekli olan yapılandırma dosyaları ve parametreler, daha karmaşık testler için değiştirilmelidir.

Sonuç Bağlamı

Echidna, akıllı sözleşmelerin güvenliği için oldukça kullanışlı bir araçtır. Fuzzing yöntemi sayesinde otomatik olarak sözleşmeleri test eder ve potansiyel güvenlik açıklarını tespit eder. Echidna, sözleşmelerin doğru çalıştığını ve istenilen şekilde davrandığını doğrulamak için de kullanılabilir.

Echidna’nın avantajları arasında otomatik test oluşturma, potansiyel güvenlik açıklarını tespit etme, kullanımının kolay olması ve açık kaynaklı olması yer alırken, dezavantajları arasında yetersiz belgelendirme, bazı sözleşmelerde düşük performans ve sahte pozitif sonuçların oluşabilmesi yer alabilir.

Bu örneklerde, Echidna’nın nasıl kullanılacağı, testlerin nasıl oluşturulacağı ve nasıl çalıştırılacağı gösterilmektedir. İlk örnekte, basit bir sayaç sözleşmesi oluşturulur ve Echidna ile test edilir. İkinci örnekte, zaman ve çağrıyı simüle ederek akıllı sözleşmelerin güvenlik testleri gerçekleştirilir.

Sonuç olarak, Echidna gibi araçlar, akıllı sözleşmelerin güvenliği ve doğruluğu için önemli bir araçtır ve geliştiricilerin güvenli ve doğru sözleşmeler oluşturmasına yardımcı olur.

Solidity Programlama Dili Öğrenme yolculuğunuz hakkında daha iyi rehberlik almak için Solidity nedir? Ethereum Akıllı Sözleşmelerinin Dili Rehberi içeriğimize göz atın. Dilerseniz Yeni Başlayanlar için Solidity – Akıllı Sözleşme Geliştirme Hızlandırılmış Kursuna katılın.

Çalışmaya nereden başlayacağım diyenler için Blockchain ​​Developer Olmak İçin Yol Haritası içeriğine de muhakkak bakın.

Gelin aklınızdaki soruları SUPERPEER sohbetinde cevaplayalım.

Bu makaleyi okuduğunuz için teşekkürler! Bana destek olmak isterseniz;

Beni TwitterLinkedin ve YouTube‘da takip edin.

Kısa bir yorum bırakmayı UNUTMAYIN!

solidity101 - Solidity, 2015 yılında Christian Reitwiessner liderliğinde piyasaya sürülen, büyük harf kullanımına göre ikinci en büyük kripto para piyasası olan Ethereum tarafından oluşturulan yepyeni bir programlama dilidir.

Yazarın Profili

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir