Sağlamlık - Hata Giderme

Solidity, hata işleme için çeşitli işlevler sağlar. Genellikle bir hata meydana geldiğinde, durum orijinal durumuna geri döndürülür. Diğer kontroller, yetkisiz kod erişimini önlemek içindir. Hata işlemede kullanılan önemli yöntemlerden bazıları aşağıdadır -

  • assert(bool condition)- Koşulun karşılanmaması durumunda, bu yöntem çağrısı geçersiz bir işlem koduna neden olur ve duruma yapılan herhangi bir değişiklik geri alınır. Bu yöntem, dahili hatalar için kullanılacaktır.

  • require(bool condition)- Koşulun karşılanmaması durumunda, bu yöntem çağrısı orijinal durumuna geri döner. - Bu yöntem, girişlerdeki veya harici bileşenlerdeki hatalar için kullanılacaktır.

  • require(bool condition, string memory message)- Koşulun karşılanmaması durumunda, bu yöntem çağrısı orijinal durumuna geri döner. - Bu yöntem, girişlerdeki veya harici bileşenlerdeki hatalar için kullanılacaktır. Özel bir mesaj sağlama seçeneği sunar.

  • revert() - Bu yöntem, yürütmeyi durdurur ve duruma yapılan değişiklikleri geri döndürür.

  • revert(string memory reason)- Bu yöntem, yürütmeyi durdurur ve duruma yapılan değişiklikleri geri döndürür. Özel bir mesaj sağlama seçeneği sunar.

Misal

Solidity'de hata işlemenin nasıl çalıştığını anlamak için aşağıdaki kodu deneyin.

pragma solidity ^0.5.0;

contract Vendor {
   address public seller;
   modifier onlySeller() {
      require(
         msg.sender == seller,
         "Only seller can call this."
      );
      _;
   }
   function sell(uint amount) public payable onlySeller { 
      if (amount > msg.value / 2 ether)
         revert("Not enough Ether provided.");
      // Perform the sell operation.
   }
}

Geri dönüş çağrıldığında, aşağıdaki gibi onaltılık verileri döndürür.

Çıktı

0x08c379a0                     // Function selector for Error(string)
0x0000000000000000000000000000000000000000000000000000000000000020 // Data offset
0x000000000000000000000000000000000000000000000000000000000000001a // String length
0x4e6f7420656e6f7567682045746865722070726f76696465642e000000000000 // String data