____  ___    _  _     _   _ _____     _______
 / ___|/ _ \  | || |   | | | |_ _\ \   / / ____|
| |  _| | | | | || |_  | |_| || | \ \ / /|  _|
| |_| | |_| | |__   _| |  _  || |  \ V / | |___
 \____|\___/     |_|   |_| |_|___|  \_/  |_____|

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

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

BY: @ryugihyeok | CREATED: April 25, 2018, 5:54 a.m. | VOTES: 2 | PAYOUT: $0.00 | [ VOTE ]

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

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

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() 이 친구는 퍼포먼스? 옵코드? 가 다르다고 말씀해주시는데..

더 공부해봐야겠다.

TAGS: [ #kr ] [ #develop ] [ #solidiry ] [ #revert ] [ #assert ]

Replies

NO REPLIES FOUND.

[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>