[KR][마루타] revert() assert() require() 뭔 차이지..

ryugihyeok(36)
Published in
#kr
Words
174
Reading
1 min
Listen
Play
8y

뭐 검색해보면 블라블라 영어로 되어있어서..

그냥 리믹스에 해보았다..

require()

function aa(){

   require(1 != 1);

   for(uint i = 0; i < 100; i++){ }

}

transaction cost    60942 gas 

execution cost       82 gas 

assert()

function aa(){

   assert(1 != 1);

   for(uint i = 0; i < 100; i++){ }

}

 transaction cost    3000000 gas 

 execution cost    2939280 gas 

revert()

function aa(){

   if(1 != 1)

       revert();

      for(uint i = 0; i < 100; i++){ }

}

 transaction cost    77127 gas 

 execution cost    16335 gas 

결론

require은 조건에 맞지 않으면 return 시켜서 로직을 끝낸다. 그러므로 유저는 불필요한 로직을 실행 시키지 않고, 남은 Gas비용을 환불 받을 수 있다.

일반적으로 함수 초입 부분에 사용 되며, 인자 값을 비교할 때 자주 사용해야한다고 한다.

assert는 조건에 맞지 않아도 해당 function은 끝까지 돌아간다. 환불 받을 수는 있지만, 불필요한 로직도 다 실행 되고, Gas비용을 환불 받으니까. require 보다는 적게 받거나, 못 받을 것 같다.

변경 후 상태 확인 / 절대 불가능한 로직 검사 / 오버플로우 언더플로우 검사 / 일반적으로 함수의 끝 부분에 사용된다고 한다.

revert() 이 친구는 퍼포먼스? 옵코드? 가 다르다고 말씀해주시는데..

더 공부해봐야겠다.

[KR][마루타] revert() assert() require() 뭔 차이지.. | Ecency