Solidity View / Pure

kich555·2021년 11월 12일
1

Solidity

목록 보기
3/6

View & Pure

contract Example {
	uint256 public a = 5
  
	function exampleA() view public returns (uint256) {
          return a;
    }
  
 	function exampleB() pure public returns (uint256) {
    uint256 public b = 3
        return b;
    }
}    

위 함수에 있는 view, pure들은 무엇일까?

  • view는 말 그대로 function 밖의 변수들을 볼 (읽을) 수 있으나 변경은 불가능할때 사용한다.

  • pure는 function 밖의 변수들을 볼수도, 변경 할 수도 없을때 사용한다.

왜 pure 인가? 
=> pure를 사용한 function은 순수하게 함수 내부에 선언된 변수들 만으로 구성되어 있기 때문
  • 아무것도 없을 때는 function 밖의 변수들을 볼 수도, 변경할 수도 있다.

예시를 통해 알아보자.

View

contract Example {
    uint256 public a = 5
    
    function viewExampleA() view public returns (uint256) {
      return a + 2;
  }
}

위 함수는 정상일까?

정답은 Yes 이다.
전역에 선언된 a의 값을 읽고, a에 2를 더한 것을 반환하였기 때문

contract Example {
    uint256 public a = 5
    
    function viewExampleB(uint256 _value) view public {
    a = _value;
  }
}

그러면 위 함수는 정상일까?

정답은 No 이다.

view로 선언하였지만 a의 값을 _value 로 변경하였기 때문

Pure

contract Example {
    uint256 public a = 5
    
    function viewExampleA() pure public returns (uint256) {
      return a + 2;
  }
}

pure로 선언된 위 함수는 정상일까?

정답은 No 이다.

pure 로 선언되었지만 외부 변수인 a를 읽으려 했음으로
Undeclared identifier 인 Declaration Error를 발생시킨다.

contract Example {
  
    function viewExampleA() pure public {
       uint256 a = 5
       a + 2;
  }
}

위 함수의 경우엔 어떨까? 정상일까?

정답은 Yes 이다.

함수에서 사용한 변수 aviewExampleA 함수 내부에 선언한 변수 a이기 때문

profile
const isInChallenge = true; const hasStrongWill = true; (() => { while (isInChallenge) { if(hasStrongWill) {return 'Success' } })();

0개의 댓글