[이더리움 개발 - 초보 실전#1] Gas Price와 Gas Limit 어떻게 설정해야 하나?

in #kr6 years ago (edited)

안녕하세요.

생각보다 자료가 많지 않아 맨땅에 해딩과 삽질을 무지막지하게 하고 있는 입장에서 저처럼 처음 이더리움 컨트랙을 개발하시는 분들의 삽질을 줄여드리기 위해 제가 이더리움 컨트랙을 학습하고 개발하고 배포하면서 격은 찾기 어렵고 이해하기 어려웠던 것들을 개발자입장에서 개발자가 좀더 이해하기 쉽도록 정리해보려 합니다.

이번엔 Ethereum main net에 token contract를 배포하면서 격었던 아주 기초적인 Gas price와 Gas limit의 이해에 대한 부분입니다.

일단 인터넷과 책을 보면 많이 나오는 Gas price와 Gas limit에 대해서 적어보면

  1. Ethereum에서 거래는 gas라는 수수료를 지불해야만 하고 이를 위해서 gas price와 gas limit를 반드시 설정해야 한다.
  2. gas price는 transaction처리 시간에 영향을 미친다.
  3. gas limit에 앞서 block gas limit에 대해서 먼저 이해하애 하며 block gas limit는 한블록에서 처리할 수 있는 최대한의 gas 소비량으로 gat소비가 block gas limit를 넘어가면 transaction이 처리되지 않는다.
  4. gas limit는 내가 실행시킨 거래에서 소비할수 있는 최대의 gas 소비량을 이야기하며 block gas limit를 초과해서 설정할 경우 처리되지 않는다.
  5. 그리고 gas는 gas price * gas limit이다.

즉,

GAS Limit : 본 송금 '작업'에서 소비되는 가스량
(estimated 한 수치라서 변경가능합니다. 하지만 넘 작게하면 거부됨)

GAS Price : 내가 가스당 지불할 가격
(경매처럼 내가 금액을 제안하는 것임)

MAX TOTAL : GAS Limit * GAS Price 로 형성된 최종지불금액

<발췌: https://steemit.com/kr/@jinkim/gas-gas-limit-block-gas-limit-gas-price-total-fee>

라고 합니다.

정의에 대해서 이해하는데는 아주 큰 도움이 된 글이었지만 실제 배포할때는 다음과 같은 문제에 봉착 했습니다.

  1. 그래서 Gas Price는 얼마를 줘야 하나? 그리고 몇 달러(or ETH)나 쓰게 될까?
  2. Gas Limit는 어떻게 설정해야 할까?

이에 대한 답을 적어보면 아래와 같습니다.

  1. GasPrice : 위에서 설명 되어 있는대로 Gas 당 사용할 가스 가격으로 이는 ETH를 뜻합니다. ETH/Gas 인셈인거죠. 기준 가격으로 보통 1Gwei를 사용하며 Ethereum Network의 transaction 처리 상황에 따라 시세가 지속적으로 변합니다. (1Gwei = 0.00000001Eth = 1000000000wei) 따라서 transction을 실행시킬 시점의 Gas시세를 확인하여 설정해야 하며 https://ethgasstation.info/ 에서 시세를 확인하실 수 있습니다. 아래 이미지에서 보시면 글을 작성하고 있는 현재 시세는 표준이 3Gwei이며 빠른처리를 위해서는 6Gwei를 권장한다고 되어 있습니다. 이 값을 참조해서 Gas Price를 책정하시면 되겠습니다. 다만 safeLow보다 값이 작을 경우 지나치게 긴시간 동안 pending상태에 빠져서 transaction처리가 안될 수 있으니 standard 이상의 값을 사용하시길 바랍니다.

  2. GasLimit : transaction은 GasPrice * GasLimit만큼의 ETH를 소유하고 있어야 실행시킬 수 있습니다. 소비할 최대 gas(ETH)를 제한하기 위함입니다. 그렇기 때문에 gas price 와 gas limit를 너무 크게 설정하면 transaction 실행이 안됩니다. 둘째 ETH를 충분히 가지고 있을 경우라도 transaction 처리시 예상치 못하게 지나치게 많은 gas를 소비하면 어마어마한 ETH을 사용하게 되기 때문에 그것을 방지하기 위한 목적으로 설정하는 값이라 생각이됩니다. 실제 작동도 transaction이 정상적으로 처리되다가 소비한 gas가 gas limit를 넘어가게 되면 out of gas 라는 오류를 내며 transaction처리가 중단됩니다. 처음 배포할때 Gas Price의 설정이 100Gwei로 되어 있는줄 모르고 16000gas limit를 설정하고 실행한 transaction이 16000gas이상을 사용해야 처리가 끝날수 있었어서 out of gas오류를 내고 종료되었는데, 이때 딱 정확하게 0.016Ether를 소비하고 종료됐었죠.

"어라? transaction이 중간에 out of gas를 토하고 종료됐는데 ether가 소비 되었다고요?" 라고 물어 보실분 계실텐데, 맞습니다. 정상적으로 실행되다가 종료되었음으로 gas를 소비합니다. 그래서 gas price와 gas limit의 설정은 아주 중요합니다.

정리하면 이렇습니다

  1. Gas Price는 1가스당 지불할 ETH의 가격을 이야기 하며 단위는 1Gwei(1000000000wei)를 기준으로 한다.
  2. 적정 gas price는 https://ethgasstation.info/의 recommended gas price의 standard 값이며 빠른 실행을 원한다면 그보다 좀더 높은 값으로 설정한다.
  3. Gas Limit는 transaction처리시 소비할 최대 gas 량을 의미하며, gas limit * gas price 이상의 ETH를 소지하고 있어야 한다.
  4. Gas Limit를 적게 설정해서 소비할 gas가 부족해 transaction이 중단된 경우더라도 이미 소비한 gas는 돌려받지 못한다.

초보의 삽질이 줄어들 날을 기대하며 이만 줄입니다.

감사합니다.

PS; Gas, Gas Limit, Gas Price, Block Gas Limit등에 대한 자세한 개념은 아래 링크를 참고해 주세요
https://steemit.com/kr/@jinkim/gas-gas-limit-block-gas-limit-gas-price-total-fee

Sort:  

이더리움 개발해보고 싶었는게 정보도 없고 막막해서 안했는데 좋은 포스팅 감사합니다~

저도 시작한지 몇달 안되고 관겨경력자가 회사에 없다보니 삽질을 참 많이합니다. 앞으로 시간이 될때 짬짬히 초보로서 삽질했던 것들들을 풀어서 올려보려해요. 도움이 되셨으면 합니다. 감사합니다. ^^

Congratulations @crazyluv! You have completed the following achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes received

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

To support your work, I also upvoted your post!

Do you like SteemitBoard's project? Then Vote for its witness and get one more award!

간만에 콜라보래이션

[골든티켓x짱짱맨x weee] 18-2차 현타토끼 이모티콘 증정 !
https://steemit.com/goldenticket/@goldenticket/x-x-weee-18-2

참여하세요!

Congratulations @crazyluv! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

Award for the number of upvotes

Click on the badge to view your Board of Honor.
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

SteemFest³ - SteemitBoard support the Travel Reimbursement Fund.

Support SteemitBoard's project! Vote for its witness and get one more award!