Gas
Gas란
Gas Limit(Used)
Gas Limit은 1) Block Gas Limit과 2) Transaction Gas Used로 구분된다.
- Block Gas Limit
- Block에 들어간 전체 Transaction Gas Used의 합
- Transaction Gas Used
- 하나의 Transaction 실행에 사용된 Gas 양의 총합
Gas Price
- 하나의 트랜잭션을 얼마나 빠르게 실행할지를 결정하기 위한 값.
- 네트워크 상태에 따라 최소 Gas Price 값은 유동적으로 변한다.
- 트랜잭션을 실행할때 Gas Price 값을 높이면 블록에 포함될 가능성이 높아지고 낮추면 블록에 포함될 가능성이 낮아진다.
Gas 계산법
거래 수수료
- 거래수수료 = Gas Limit(Transaction Gas Used) * Gas Price
- Gas Limit은 최초 Transaction에는 예상 Limit이 들어가고 Transaction 실행 후에 실제 사용된 Gas Limit으로 수수료를 지급한다.
- 예상 리밋에서 남은 금액은 환불된다.
- 따라서 내가 가진만큼의 예상 Limit은 실제 Gas Limit보다 큰 값이여도 관계가 없다.
- 하지만 실제 Gas Limit보다 작은 예상 Limit 값을 설정하면 트랜잭션이 실행되지 않는다.
- Block Gas Limit보다 크게 설정할 경우에도 트랜잭션은 반려된다.
Block 채굴 보상
- Bitcoin과 달리 Coinbase(채굴보상)는 거래 형태가 아닌 블록 내 beneficiary로 블록 채굴 보상(2ETH) + 거래 수수료 총합으로 지급된다.
- Bitcoin과 마찬가지로 Block 채굴 보상은 신규로 발행되는 코인이고, 거래 수수료는 기존에 이미 발행되었던 코인을 사용한다.
Uncle 보상
- Ethereum 상에서는 Fork를 일부 허용하는 방식을 사용하고 있기 때문에 Uncle Block에 대해서 특정 계산에 따라 보상을 제공한다.
그외의 보상
- Uncle Block을 포함한 메인 체인의 블록 채굴자에게는 트랜잭션 한 개당 0.0625 이더를 추가적으로 제공한다.
Gas Refund
Run Smart Contract
- EOA가 Smart Contract를 호출하게 되면 예상되는 가스 금액을 먼저 계산하여 지출 한 뒤, 실제 사용되는 양을 제외하고 남은 금액을 Refund 한다.
Out of Gas
- Smart Contract 실행 도중 Gas가 부족한 경우 revert가 실행되고, 변경된 state가 모두 되돌려지고, 사용자에게 코드가 실행되었던 부분을 제외한 Gas 금액을 환불한다.
Selfdestruct
- Smart Contract 상에서 SelfDestruct 펑션을 호출하게되면 컨트랙트가 사용 불가능 상태로 바뀌게 되고, 일정 Gas를 사용자에게 환불을 해주게된다.
- 이것은 컨트랙트 생성 시 이미 지급하였던 사용된 가스를 다시 환불받게 된다.
- 21년 비탈릭은 이를 악용하는 사용자를 막기위해 Refund가 불가능하게 하는 eip-3298을 제안하였으나 아직 채택되지 않아 반영되지 않았다.
- 악용사례 예
- 가스가 저렴할때 스마트 컨트랙트를 미리 배포를 해둔다.
- 가스 가격이 비싼 시기에 해당 스마트 컨트랙트의 SelfDestruct 펑션을 호출하여 가스를 환불 받는다.
- 환불받은 가스로 새로운 거래에 사용한다.