견고성-오류 처리

Solidity는 오류 처리를위한 다양한 기능을 제공합니다. 일반적으로 오류가 발생하면 상태가 원래 상태로 되돌아갑니다. 다른 검사는 무단 코드 액세스를 방지하는 것입니다. 다음은 오류 처리에 사용되는 몇 가지 중요한 방법입니다.

  • assert(bool condition)− 조건이 충족되지 않는 경우이 메서드 호출은 유효하지 않은 opcode를 유발하고 상태에 대한 변경 사항이 되돌려집니다. 이 방법은 내부 오류에 사용됩니다.

  • require(bool condition)− 조건이 충족되지 않을 경우이 메서드 호출은 원래 상태로 되돌아갑니다. -이 방법은 입력 또는 외부 구성 요소의 오류에 사용됩니다.

  • require(bool condition, string memory message)− 조건이 충족되지 않을 경우이 메서드 호출은 원래 상태로 되돌아갑니다. -이 방법은 입력 또는 외부 구성 요소의 오류에 사용됩니다. 사용자 지정 메시지를 제공하는 옵션을 제공합니다.

  • revert() −이 방법은 실행을 중단하고 상태에 대한 변경 사항을 되돌립니다.

  • revert(string memory reason)−이 방법은 실행을 중단하고 상태에 대한 변경 사항을 되돌립니다. 사용자 지정 메시지를 제공하는 옵션을 제공합니다.

Solidity에서 오류 처리가 어떻게 작동하는지 이해하려면 다음 코드를 시도하십시오.

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

revert가 호출되면 다음과 같이 16 진수 데이터를 반환합니다.

산출

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