[Solidity] Truffle 공부 - 8(Gas 계산)

in mini.topia4 months ago

Solidity 메모8!

유튜브 영상 자료(Dapp Campus)를 따라해보면서 배우고 있는 중입니다. 한번 따라해보면 처음에 익숙해지는데 꽤나 좋을 것 같습니다.

여기서는 로또비스무리한 컨트랙트를 만들고 있군요. 그래서 Lottery Contract로 만들어 보고 있습니다.


이번에는 스마트컨트랙트에 선언된 기능이 실행되는데 예상되는 Gas 계산 방법입니다.

gas 관련 정보

  • gas(gasLimit와 동일한 의미) : 단위가 없는 숫자
  • gasPrice(wei단위를 쓰지만 너무 적은 단위이기 때문에 gwei(10 ** 9) 단위로 많이 쓴다.)
  • ETH : 1 ETH = 10 ** 18 wei
  • 수수료 = gas(21000) * gasPrice(gwei 단위(1gwei == 10 ** 9wei))

gas 계산 방법

  • 32bytes 새로 저장 == 20000gas가 사용된다.
  • 블럭체인에서 가장 비용이 많이 드는 것은 체인의 용량을 늘리는 것이다.
  • 수수료 절감을 위해서는 데이터를 블럭에 최소한으로 저장해야 한다.
  • 블럭에도 Gas Limit가 존재한다.(블럭에 담기는 트랜잭션들이 총 사용 할 수 있는 GasLimit 양, 최근에는 1200만 조금 넘는 수준)
  • 블럭의 gas limit가 넘는 트랜잭션은 담을 수 없다.(넘지 않는 수준에서 최대한 수수료를 많이 포함하여 처리)
  • 32 bytes 기존 변수에 있는 값을 바꿀 때 = 5000gas 소모
  • 기존 변수를 초기화해서 쓰지 않을 때(delete) : 10000gas 를 돌려 받음

스마트 컨트랙트 저장

  • 이더리움에서 기본적으로 사용되는 저장 단위가 32byte
  • 이벤트를 발생시킬 때에도 가스가 사용된다.(대략 변수당 375, 변수 연산 저장 등.. 대체로 4~5000 가스가 사용됨)
  • 최초 스마트 컨트랙트에 저장 할 때에는 20000 gas가 사용되지만, 값을 변화 시킬때에는 5000gas가 사용된다.
  • 그러므로 동일한 트랜잭션을 일으키더라도 처음과 그다음 트랜잭션에 사용되는 가스량이 달라진다.