2017-11-30 24 views
0
pragma solidity ^0.4.0; 

contract A{ 
    byte[10] arr; 

    function setElement(uint index, byte value) public { 
     require(index >= 0 && index < arr.length); //Should I leave it as is? 
     arr[index] = value; 
    } 

    function getElement(uint index) view public returns (byte) { 
     require(index >= 0 && index < arr.length); //Or not? 
     return arr[index]; 
    } 
} 

내가 어설 스타일 예외는 다음과 같은 경우에 생성되는 알다시피뿐만 아니라 :Solidity에서 인덱스 작업을 할 때 특정 조건이 필요합니까?

  • 당신이 (너무 크거나 부정적인 인덱스 배열에 액세스하는 경우 즉, X [i]를 어디에서> = x.length 또는 i < 0).

하지만 매번 상태를 확인해야합니까?

또한 가스를 집행자에게 환불하고 싶습니다.

답변

1

올바르게 사용하고 있습니다. require은 입력 매개 변수를 확인하는 데 사용되며, assert은 계약의 내부를 확인하는 것입니다 (주로 테스트 용 임). require 조건이 실패하면 나머지 가스는 환불됩니다. Solidity documentation에서

: 기능을 주장하고 필요로하는 편의 조건을 확인하고 조건이 충족되지 않을 경우 예외를 throw 할 수 있습니다

. 어설 션 기능은 내부 오류를 테스트하는 데에만 사용해야하며 은 불변 부를 확인해야합니다. 요구 함수는 입력 또는 계약 상태 변수와 같은 유효한 조건이 인지 확인하거나 외부 계약에 대한 호출에서 반환 값의 유효성을 검사하는 데 사용해야합니다.