Ethereum Akıllı Sözleşmelerde Hata Ayıklama

Blockchain içindeki bir işlemin hata ayıklaması, gerçek zamanlı olarak bir kod çalıştırmadığınız için c ++ veya JavaScript'teki geleneksel bir uygulamada hata ayıklamadan farklıdır, bunun yerine blockchain yerine bir işlemin hata ayıklamak için tarihi bir işlem yürütmesi birleştirme kodu ile eşleştirilir.

Akıllı sözleşme, blok zincirinin tepesinde çalışan bir kod parçasıdır, akıllı sözleşmelerin tam anlamıyla anlaşılması gerekir, Akıllı sözleşmenin hata ayıklaması, işlemlerin dahili olarak nasıl çalıştığını ve devam ettiğini veya fiili işlemin başarısız olduğunu adım adım işlem analiz eder.

Önce hata ayıklama işleminde hata türlerini ayrıntılı olarak tartışalım.

Katılıkta Hata Tipleri -

1. Sözdizimi Hatası

Akıllı sözleşme kodunun sözdiziminde bir sorun olduğunda bir sözdizimi hatası ortaya çıkar, kodunuz sözdizimi hatasıyla karşılaştığında, akıllı sözleşmeniz blockchain üzerinde derlenemez veya konuşlandırılamaz.

Sözdizimi hatası, remix IDE'de yukarıdaki koddan noktalı virgül (;) kaldırıldığında aşağıdaki resimde görüldüğü gibi remix kullanılarak kolayca tanınabilir, sözdizimi hatası çözümü ile birlikte bir hata mesajı görüntüler.

Sözdizimi hatası, trüf, remiks veya herhangi bir IDE kullanılarak kolayca teşhis edilebilir.

2. Çalışma zamanı Hatası

Çalışma zamanı hataları, yalnızca blockchain için akıllı bir sözleşme imzaladığınızda ve sağlamlık kodunuz EVM (Ethereum sanal makinesi) tarafından anlaşılan byte koduyla derlendiğinde ortaya çıkar. EVM, sağlamlık kodunu çalıştıran ve çalışma zamanı hatasını çalıştıran Ethereum'un bir bileşeni olarak tanımlanmıştır, EVM akıllı sözleşme kodunuzla ilgili bir sorun yaptığınızı veya kodun mantığına karşı işlem yaptığınızı düşündüğünde ortaya çıkar.

Çalıştırma zamanı hatalarının teşhisi, sözdizimi hatasından daha zordur, çünkü bu hatalar blok zincirinde konuşlandırılmadan önce tanımlanmaz, yalnızca durum değişikliği akıllı sözleşmede gerçekleştiğinde ortaya çıkabilir, çalışma zamanı hataları ve çalışma zamanı hatalarının hata ayıklaması hakkında daha fazla tartışacağız. detaylar.

3. Mantık Hataları

Mantık hataları herhangi bir IDE veya araç kullanarak hata ayıklamaz, çünkü mantık hataları EVM tarafından yakalanmaz, EVM'ye göre her şey mükemmeldir ve kod kolayca çalıştırılabilir. mantık hatası, geliştirici bir hata yaptığında ve saldırganlar için akıllı bir sözleşmede döngü deliklerini açtığında ortaya çıkar.

Mantık Hatası Örneği: Ünlü DAO saldırısı (Reentrancy), kullanıcı dengesini güncellemeden önce geliştiricinin hata yaptığı ve eter aktardığı bir mantık hatası örneğidir.

Mantıksal hatalar akıllı sözleşme denetimi ile tanımlanabilir, çünkü bazen geliştiricinin zihniyetine göre her şey yolunda gider ve akıllı sözleşmede bir hata olmayabilir, ancak bir denetçi döngüsel delikler bulmak, iş mantığını ve kontrol etmek için akıllı bir sözleşme yapabilir. Akıllı sözleşmedeki güvenlik kusurlarını bul.

Akıllı doğrulama sözleşmesinin mantıksal doğrulaması için Resmi Doğrulama kullanılabilir.

Çalışma zamanı hatası türleri

Gaz Dışı

Bir işlemi gerçekleştirmek için yeterli miktarda gaz sağlamadığınızda veya bir işlemi tamamlamak için gaz yeterli olmadığında gaz dışı hata oluşur.

Eski haline dönmek

Akıllı sözleşme mantığına göre gerçekleştirilemeyen bir işlemi gerçekleştirmeye çalıştığınızda işlemin geri alınması gerçekleşecek, bu nedenle EVM bir hata döndürecek ve işlem geri alınacaktır.

Geçersiz opcode

Varolmayan bir kodu aramaya çalıştığınızda geçersiz opcode oluşuyor.

geçersiz atlama

Geçersiz bir işlevi, var olmayan bir işlevi çağırmaya çalıştığınızda, örneğin olmayan başka bir sözleşme aracılığıyla bir sözleşme işlevini çağırdığınızda geçersiz atlama gerçekleşir. Bu tür bir hata, assembly dili kullandığınızda ve yanlış belleğe işaret ettiğinizde de ortaya çıkar.

Yığın Taşması

Yığın Taşması işlevini yinelemeli olarak çağırmaya çalıştığınızda gerçekleşir ve bunu durdurmak için hiçbir koşul yoktur, sağlamlık yığında en fazla 1024 kare olabilir, bu nedenle bir yığın Taşma gerçekleşirse, bir işlev kendisini yalnızca 1024x kez çağırabilir.

Yığın Akışı

Yığın alt akışı, var olmayan bir değişkeni açmaya çalıştığınızda assembly dilinde gerçekleşir.

Her türlü hata ve işlemlerde hata ayıklamada kullanılacak örnek Akıllı Sözleşme kodu-

pragma katılığı 0.4.24;
sözleşme örneği {
   uint256 genel miktarInContract;
   halka açık adresin adresini bildir;
  yapıcı (adres _ sahibi) halka açık {
     zorunlu (_owner! = adres (0));
     gereken (msg değeri> 0.1 eter);
     amountInContract = msg.value;
     amountOwner = _owner;
   }
 function () external {
  eski haline dönmek();
 }
fonksiyonu withdraw () public {
gerektirir (msg.sender == amountOwner);
msg.sender.transfer (adres (bu) .balance);
}
}

Hata ayıklayıcı, herhangi bir işlemi (oluşturma veya çağrı) adım adım hata ayıklama ve bellek / depolama alanını görselleştirme yeteneği sağlar. Her adımdan sonra gaz maliyetini opcode ve kalan gaza göre izlemeye yardımcı olur.

Bir işlemin hata ayıklaması-

Yukarıda belirtilen kodda belirtilen kurucu ödenebilir, bir sözleşme kurucu dağıtırken, 0.1 eterin üstünde eter değeri gönderilmesini gerektirir. 0,1'den az eter gönderilirse veya adres sıfırsa, bir hata atar ve işlem geri alınır.

Aşağıda gösterildiği gibi, işlem geri alınır, bu nedenle remix IDE kullanarak bir işlem adım adım hata ayıklayacağız.

Adım 1. Remix kullanılarak dağıtım işlemi Ethereum blockchain'e gönderildikten sonra, yukarıda gösterildiği gibi işlem başarısız oldu. Şimdi işlem hata ayıklamak ve işlem başarısızlık olası nedeni bulmak için remix IDE debugger düğmesine basın.

Adım 2. Hata ayıklamayı başlatmak için blok numarasını ve işlem karmasını girin ve hata ayıklamayı başlat düğmesine basın, bu hata ayıklama işlemini başlatır.

Meclis dili işlemleri, kullanılan gaz ve kalan gaz ile birlikte, yukarıda gösterildiği gibi bir işlemin hata ayıklaması sırasında görüntülenir; ayrıca, asıl işlemin, aşağıda gösterildiği gibi opcode paralelinde başarısız olduğu remix IDE'de de kod vurgulanır.

İşlem, montaj işlem kodunda geri alındı. Gerçek işlemin geri alındığı yerde kod vurgulanır.

Yukarıdaki resimde gösterildiği gibi, işlemin eterscan içinde geri döndürüldüğü durumda, gönderilen değer 0.1 eterdir, bu gereken değerden daha düşüktür; bu senaryoda işlemin başarısız olmasının nedeni budur.

Bu işlem, kullanılan gaz hakkında daha fazla bilgi edinmek, her adımda kalan gaz, değişiklikleri belirtmek ve bellek / depolama alanını görselleştirmek için herhangi bir işlemin hata ayıklamak için kullanılabilir.

Akıllı sözleşme hata ayıklama, trüf çerçevesi kullanılarak da yapılabilir, bir işlemin hata ayıklaması için bir işlem karmaşasına ihtiyacınız vardır.

Okuduğunuz için teşekkürler. Ayrıca önceki blog yayınlarımızı inceleyin.

QuillAudits, QuillHash Technologies tarafından tasarlanan güvenli bir akıllı sözleşme denetim platformudur. Üstün manuel incelemesi ve otomatik araçlarıyla güvenlik açıklarını kontrol etmek için akıllı sözleşmeleri doğrulamak için tamamen otomatik bir platformdur. Platformun bütünlüğüne zarar verebilecek potansiyel güvenlik açıklarını bulmak için hem akıllı sözleşme denetimleri hem de sızma testleri yapıyoruz.

Çalışmalarımızla güncel olmak için, Topluluğumuza Katılın: -

Telgraf | Twitter | Facebook | LinkedIn