본문 바로가기

알기쉬운 블록체인

마이이더월렛 가스 개념과 수수료

 

이더리움은 이더리움 가상머신 (EVM : Ethereum Virtual Machine)이라고 불리는 실행 환경을 블록체인에 구현하고 있다.

네트워크에 참여하는 모든 노드는 블록 검증 프로토콜의 부분으로서 EVM을 실행한다.

노드들은 그들이 검증하고 있는 블록에 담겨진 트랜잭션들을

하나씩 처리해가면서 트랜잭션들에 의해 구동된 코드들을 EVM안에서 실행하게 된다.

네트워크의 모든 노드는 동일한 계산을 수행하고 동일한 값을 저장한다.

컨트랙트 실행이 네트워크의 노드들을 거쳐 중복적으로 복제된다는 사실은

당연히 이 프로세스의 비용을 비싸게 만든다.

따라서 오프 체인에서 처리할 수 있는 연산은 블록체인을 사용하지 않는 것이 유리하다.

실행되는 모든 운영작업에는 이에 해당하는 비용이 발생하며 이는 가스단위 수로 표시한다.

컨트랙트가 이용할 수 있는 모든 작업은 이에 상응하는 가스값을 가지고 있다.



가스와 트랜잭션 비용


많은 분들이 혼동하는 GAS = 이더가 맞을까?

수수료 단위인 gas를 이더라는 화폐와 동일한 개념으로 생각하는 것이다.

결론적으로 수수료로 지불되는 화폐는 이더가 맞다.

하지만 gas는 다른 개념이다.

비트코인이나 다른 코인들에서도 수수료를 그 해당 코인으로 지불하다보니

수수료는 코인이라고 생각하기 마련이다.

하지만 이더리움의 gas단위는 리터나 킬로그램 같은 단위이지 화폐개념이 아니다.


gas는 이더리움에서 송금이나 스마트 컨트랙트를 실행할 때 수수료를 책정하기 위해 만든 단위이다. 사용량도 정해져 있다.

마치 고기를 달 때 무게를 재는 단위인 kg과 같은 개념인 것이다.

모든 트랜잭션은 가스 한도 (또는 startGas라고도 불림)과 각 가스에 대해 지불하고자 하는 수수료를 포함해야 한다.

스마트 컨트랙트에서 한 번의 송금이나 코드 하나를 실행하기 위해 이 gas가 얼마나 필요한지는 이미 정해져 있다.

이더리움의 기술백서인 황서에 나와 있다.

 


따라서 수수료 = 쓰이는 gas의 총량 x gas price가 된다.

트랜잭션을 만드는 유저는 이 gas price를 설정함으로 수수료를 조정한다.

gas price는 Gwei라는 이더의 하위단위로 계산된다.

비트코인의 사토시와 같은 개념으로 1Gwei = 0. 000000001이더다.

1gas가 50Gwei라면 이더 송금에 쓰이는 수수료는 21,000x50 =1,050,000Gwei, 즉 0.00105이더가 된다.

gasprice는 이더리움 지갑에서 설정할 수 있다.

적정 수수료가 얼마인지는 이더 스캔에서 다른 트랜잭션을 찾아봐도 좋다.

다만, gasprice 가격이 올라가면 수수료가 비싸지니 수수료를 받아먹는 블록생성자가 빨리 담아준다.


채굴자들은 트랜잭션을 포함할지 그리고 수수료를 부과할지 안할지를 선택할 수 있다.

실제로 현재 모든 트랜잭션은 결국 채굴자로부터 선택되지만

사용자가 트랜잭션을 전송하기 위해 정한 수수료의 값은 해당 트랜잭션이 채굴될 때까지 걸리는 시간에 영향을 미친다.

 



어떤 트랜잭션의 주메시지와 이것에 의해 발생된 하위 미세지들이 구동한 연산단계들에 사용되는 가스의 총량이 가스 한도 이하면 이 트랜잭션은 처리된다.


또한 만약 총 가스양이 가스 한도를 초과할 경우,

트랜잭션 실행 도중 변화된 상태는 전부 원 상태로 되돌려지게 되지만

이미 사용된 가스 수수료는 반환되지 않고 채굴자에게 지불된다.


gaslimit은 정해진 가스양을 가지고 트랜잭션을 다 실행하기까지 자신이 쓸 용의가 있는 전체 가스양의 한도를 말한다. 이 이상은 수수료로 지불하기 싫다는 이야기다.

그래서 자신이 모든 컨트랙트를 실행할 경우 gas를 얼마 사용할지 알 수 있다.

하지만 다른 사람의 계약 계정에 이더를 보내 그 사람의 컨트랙트를 사용할 경우 그 컨트랙트에서 얼마나 많은 gas를 사용할 지 정확히 알 수 없다.  

gaslimit보다 gas를 더 사용하게 되면 컨트랙트의 실행이 멈추고 처음 실행되기 전으로 환원된다.