비탈릭 Twitter에 갔다가, 비탈릭이 칭찬한 글이 있어서 읽어보니 상당히 도움이 되더군요.
ETH를 송금할 때 늘 만나게 되는 가스비.
그냥 수수료이겠거니하고 지불해왔지만 한번 알아보고 지나가려 합니다.
GAS
이더리움은 EVM(Ethereum Virtual Machine)이라는 블록체인환경에서 실행됩니다. 잘 아시다시피 네트워크에 참여하는 모든 노드들이 블록을 확인하는 프로토콜의 일부로서 EVM을 실행하고 있습니다. 이렇게 노드가 서로의 증인이 되기 때문에 안전한 구조인데요. 여러분이 ETH를 보낸다면 네트워크의 모든 노드들이 동일한 계산을 수행하고 동일한 값을 저장해야 하는 일련의 '작업'이 필요해 집니다.
그리고 이런 작업량을 GAS, 혹은 특정금액으로 환산되기 때문에 GAS Value라고 표현합니다.
잘 보시면 작명센스가 아주 좋습니다. 이더는 영어로 Ether이고, 이건 우리가 알고있는 석유화학물질 에테르죠. 에테르는 유기용매로서 에테르추출법을 실행하면 가스가 발생합니다. 그래서 Ether도 거래에 사용하면 가스가 발생합니다. (갑작스런 Trivia)
GAS Limit & Price
모든 ETH거래에는 GAS Limit 와 GAS Price가 포함되어 있어야합니다.
GAS Limit의 개념은 쉽습니다. 지금 사용자가 하려는 거래가 '작업'을 발생시킬텐데 "그 '작업'이 최대 몇 가스를 발생시킨다." 라는 작업량 예상치 입니다. estimated 된 것이라서 송금창에서 수정도 가능합니다.
GAS Price는 자유롭게 호가하는 것이라서 이게 문제인데요. 현재 모든 ETH거래가 마이너들(Miners)에 의해 선택되기 때문에 사용자가 보내려는 GAS Price는 거래가 걸리는 시간에 영향을 미칩니다.
이게 대체 무슨 말인지 알아보겠습니다.
먼저 알아야할 개념은 Block Gas Limit 입니다.
사실 마이너들에게나 중요한 개념이지만 최근 다시 문제시 되고 있으므로 한번 알아봅니다.
Block Gas Limit는 한 블록에 담을 수 있는 GAS Limit의 갯수 입니다. 현재 한 블럭은 4,712,357 개의 가스를 포용하도록 되어있습니다. 즉, GAS Limit이 21000 인 Transaction을 약 224개 묶어서 한 블록에 담을 수 있습니다. 이 블록은 약 15~20초 마다 생성이 되고 있는데요.
빈번한 ICO로 이더의 Transaction이 문제시되자 많은 마이닝풀들이 이 Block Gas Limit를 더 크게하는데 동참하고 있습니다. (https://steemit.com/kr/@kanghamin/31zeoh 참고)
그럼 한 블록에 담을 수 있는 가스량이 많아지고 거래는 더 빨라질 수 있습니다.
쉽게 표현하면, 이더를 목적지로 송금하는 것은 기차를 타고 목적지로 가는 것입니다.
기차는 마이너들이 운영합니다.
그런데 손님이 많아져서 기차칸이 10칸(10량)만으론 이제 수용이 안됩니다.
기차칸을 15칸으로 증설하자는 움직임입니다.
그런데
왜 GAS Price가 송금속도와 연관이 있느냐
위에서 언급한 '작업'에 들어가는 비용은 정해져있습니다. 이 비용이 부족하면 아예 거래가 성사되지 않습니다. 그러나 비용이상 지불했다고 하더라도, Block GAS Limit을 초과시키는 GAS Limit은 거부될 수 있습니다.
예를 들어, 각 거래의 GAS Limit이 10, 20, 30, 40, 50 인 5개의 거래가 있다고 가정해 보겠습니다.
Block GAS Limit가 100 인 경우, 처음 4개의 거래가 블록에 맞을 수 있습니다. 마이너들은 블록에 포함할 거래를 "선택"적으로 조합합니다. 그런데 다른 마이너는 블록 (50 + 40)에서 마지막 두 개의 먼저 Transaction에 포함할 수 있으며, 그 경우 남은 공간에 첫 번째 Transaction(10)만 포함할 수 있습니다. 20과 30은 먼저 신청했더라도 Pending 됩니다.
그렇게 현재 Block GAS Limit를 초과시키는 거래는 네트워크에 의해 거부되고 사용자는 "거래가 Block GAS Limit를 초과하였다"라는 메시지를 받게되는 것이죠. 수익을 위해 최적화하는 마이너에게 GAS Price가 많이 낮거나, 0인 거래를 먼저 수락하도록 설득하기는 어려울 것입니다.
이제 송금창을 보시면 GAS Limit와 GAS Price가 무엇을 의미하는지 전보다 감이 오실 듯 합니다.
사실상 마이너에게 지급되는 수수료는 GAS Limit와 GAS Price를 곱한 총액이므로, GAS Price만 속도에 영향을 주진 않습니다. Transaction Fee 전체가 속도에 영향을 미칩니다.
결론
- GAS Limit : 본 송금 '작업'에서 소비되는 가스량
(estimated 한 수치라서 변경가능합니다. 하지만 넘 작게하면 거부됨)
- GAS Price : 내가 가스당 지불할 가격
(경매처럼 내가 금액을 제안하는 것임)
- MAX TOTAL : GAS Limit * GAS Price 로 형성된 최종지불금액
(feat. 수수료없는 EOS짱짱맨)
※ 원문 : http://hudsonjameson.com/2017-06-27-accounts-transactions-gas-ethereum/