본문 바로가기

BlockChain

스마트 컨트랙트 연산 gas(가스) 소모

스마트 컨트랙트에서 코드가 실행될때 코드가 저장하는 데이터, 연산 값들을 통해서 gas가 소모된다.

 

  1. 32btyes 새로 저장 == 20000gas
  2. 32bytes 기존 값 변환 == 5000
  3. 기존 변수를 삭제하면 10000gas를 돌려받는다.

 

lt.bet("0xab",{from:bettor,value:5000000000000000, gas:300000})

 

 

위 명령으로 트랜잭션을 일으켜 아래 코드가 실행되었을때 소모되는 가스량을 확인해 보았다.

 

    function pushBet(bytes1 challenges) internal returns(bool){
        BetInfo memory b;
        b.bettor = msg.sender;  // 20btyes
        b.answerBlockNumber = block.number + BET_BLOCK_INTERVAL; // 32bytes = 20000가스
        b.challenges = challenges;  //btye
        // 20bytes + btye == 20000gas

        _bets[_tail] = b;
        _tail++;    
        // 32bytes변화 : 20000gas = 첫번째 컨트렉트 제외하고는 5000gas가 소모됨.

        return true;
    }

 

 

 

 

첫번째 트랜잭션에서는 89245gas

두번째 트랜잭션에서는 74245gas

세번째 트랜잭션에서는 74245gas

 

가 각각 소모 되었다.

 

 

가스를 계산해보자

트랜잭션에서 기본으로 사용되는 gas = 21000gas

데이터에 사용되는 가스 ( 위 코드 주석 확인 ) 60000gas

event 가스 :

event값을 출력할때 375gas

parameter하나당 375gas

값이 저장될때 바이트당 8gas

== 4~5000gas

 

총 합 = 21000gas + 60000gas + 5000gas

== 86000gas

 

 

대략적이지만 사용된 가스와 매우 유사하다.

두번째 트랜잭션부터는 적어진 gas량이 소모 되는데 첫번째 트랜잭션에서는 tail 데이터에 새로운 값이 들어온걸로 처리되어 20000gas가 소모되었지만 두번째 트랜잭션 부터는 값이 변경되는 것으로 처리되어 5000gas만 소모가 되는 것이다.

'BlockChain' 카테고리의 다른 글

부트스트랩 노드  (1) 2022.03.28
[EVM] 이더리움 가상머신  (0) 2022.03.21
머클 패트리시아 트리  (0) 2022.03.14
openethereum 메인넷 구축  (1) 2021.11.30
스마트 컨트렉트, WEB3, 솔리디티  (0) 2021.10.12