왜 이더리움 가스비가 갑자기 대폭 하락했나요?
이 글은 리듬 Blockbeats에 게시되었으며, 저자: 0x88입니다.
서론: 4월 25일, 데이터에 따르면 이더리움의 Gas 비용이 약 50gwei 하락하여 2021년 이후 최저치를 기록했습니다. 이전에 gas 비용이 계속 상승하여 체인 상 수수료가 한때 1500gwei에 근접했습니다. 그러나 최근 이더리움의 gas 비용이 급락한 이유는 이더리움이 블록 Gas Limit을 증가시킨 것과 관련이 있을 수 있습니다. 4월 22일, 이더리움은 블록 Gas Limit을 약 1250만 Gwei에서 1500만 Gwei로 약 20% 증가시켰습니다. 그렇다면 도대체 어떤 요소가 이더리움의 Gas 비용에 영향을 미칠까요? 이 글이 그 해답을 드릴 것입니다.
주: 이 글은 2020년 9월 23일 처음 게시되었으며, 일부 데이터는 당시의 데이터입니다. 읽을 때 오늘 발표 시점의 데이터가 크게 변동할 수 있음을 유의하시기 바랍니다.
Uniswap이 20만 개 이상의 사용자 주소에 돈을 뿌릴 때, 많은 사람들이 기쁜 마음과 함께 "이 gas 비용 너무 비싸다"고 생각했을 것입니다.
그날은 이더리움 역사상 기념할 만한 날로, gas 추천 최고치는 1000 GWEI에 도달했습니다. 이는 당시 역사적인 최고점이었습니다.
역사를 목격하고 모두가 에어드랍을 받는 그날 아침, 많은 사람들이 gas 비용에 대한 문제를 겪었습니다. gas 비용이 비싼 것은 문제가 아니었고, 문제는 지갑에서 제안한 최대값으로도 계획된 시간 내에 거래가 이루어지지 않는 것이었습니다. 모두 Metamask에서 대기 중으로 표시되어 한 바퀴 한 바퀴 돌아가는 모습이 마음을 불편하게 했습니다.
왜 기본 gas 비용을 사용했는데도 즉시 거래가 이루어지지 않을까요? 이 글에서는 이더리움 거래 수수료 메커니즘과 이더리움에서 거래를 시작할 때 발생하는 문제를 자세히 설명하겠습니다.
Gas의 논리
이 문제는 이더리움 계정부터 시작해야 합니다.
이더리움 네트워크에는 두 가지 유형의 계정이 있습니다: 외부 계정(Externally Owned Account)과 계약 계정(Contract Account)입니다.
외부 계정은 사용자가 사용하는 계정으로, 개인 키 소유자가 제어합니다. 계약 계정은 애플리케이션 로직이 포함된 스마트 계약으로, 계약 코드가 제어합니다(대개 프로젝트 측 소유). 사용자가 DeFi 애플리케이션을 사용할 때, 자신의 계정으로 DeFi 프로젝트의 스마트 계약과 상호작용하는 것입니다.
각 유형의 계정 간에는 자유롭게 상호작용할 수 있으며, 지갑 간에 송금할 수 있고, 계약 간에도 서로 호출할 수 있습니다. 모든 체인 상 상호작용은 일정한 계산량을 소모해야 하며, 계산량 소모의 크기는 계산 난이도에 따라 결정되며, Gas는 계산량의 측정 단위입니다. 예를 들어, 덧셈 연산은 비교적 간단하여 3개의 Gas를 소모하고, 나눗셈 연산은 상대적으로 복잡하여 5개의 Gas를 소모합니다.
각 Gas 단위는 그에 상응하는 가격이 있으며, 이를 Gas 가격(Gas Price)이라고 합니다. Gas 가격은 Wei 단위로 측정됩니다. 사용자는 ETH를 구매하여 Gas 비용을 지불해야 합니다. 1 ETH = 1e18 Wei이며, 우리가 일반적으로 보는 단위 GWei는 1e9 Wei입니다. 일반적으로 지갑 소프트웨어는 역사적인 Gas Price를 통해 사용자가 발행할 거래의 비용을 예측합니다.
전체 노드가 집중되는 것을 피하기 위해, 분산화를 추구하는 블록체인은 각 블록의 용량을 엄격히 제한합니다. 예를 들어 비트코인의 블록 크기 제한(Block Size Limit)과 이더리움의 블록 Gas Limit이 있습니다. 리듬 BlockBeats에서 글을 쓸 당시, 이더리움의 각 블록의 블록 Gas Limit은 약 12,000,000 Gas로, 이는 각 블록의 총 계산량의 상한선입니다. 평균적으로 15초마다 하나의 블록이 생성됩니다. 거래 수요가 블록 용량을 초과할 때, 사용자는 자신의 거래가 신속하게 블록에 확인되도록 경쟁해야 합니다. 이때 사용자는 Gas에 대해 입찰을 하게 되며, 채굴자는 Gas Price가 높은 거래를 우선적으로 블록에 포함시킵니다.
일반적으로 사용자가 송금을 진행할 때 지갑에서 조정 가능한 Gas Limit 옵션을 볼 수 있습니다. 블록 Gas Limit과는 달리, Gas Limit은 특정 거래에 대해 사용자가 수용할 수 있는 Gas 사용량의 상한을 의미합니다. 때때로 계약 내에 결함이 있을 수 있어, 하나의 거래가 무한 루프를 통해 계속 계산될 수 있습니다. Gas Limit이 없다면, 이 거래는 사용자의 지갑 내 모든 ETH를 소모하게 됩니다. 채굴자가 일반적으로 수취하는 비용은 해당 거래를 실행할 때 소모된 계산량(Gas Used by Transaction)에 따라 정산되며, Gas Limit 내 남은 ETH는 사용자 계좌로 돌아갑니다.
따라서 우리는 소모된 ETH 수량(Ether Cost) = 거래 수수료(Gas Fee/Transaction Fee) = 각 거래에서 소모된 Gas 수량(Gas Used By Transaction) * Gas 가격(Gas Price)이라는 결론을 도출할 수 있습니다.
이더리움의 수수료 메커니즘과 계정 유형을 이해한 후, 사용자가 거래 시 자주 겪는 문제를 살펴보겠습니다.
대기 중 거래(Pending)/거래 가속?
사용자가 거래를 시작할 때마다 거래는 거래 풀(Mempool)에 들어갑니다. 앞서 언급했듯이, 채굴자는 풀에서 Gas Price가 가장 높은 거래를 우선적으로 패키징합니다(채굴자의 이익 추구). 따라서 사용자가 설정한 Gas Price는 거래가 패키징되고 실행되는 속도를 결정합니다. 네트워크가 혼잡할 때 Gas Price가 급등하면 사용자의 거래는 오랜 시간 동안 대기 중 상태에 있을 수 있습니다. 대기 중 거래를 신속하게 처리하기 위해 사용자는 더 높은 Gas Price를 지불하여 거래를 가속화할 수 있습니다(리듬 주: 채굴자에게 더 많은 보상을 제공하여 우선 처리하는 것으로 이해할 수 있습니다).
거래 가속은 어떻게 작동할까요? 거래 가속의 논리를 더 자세히 이해하기 위해서는 또 다른 매개변수인 Nonce를 이해해야 합니다. 각 계정에서 발송하는 거래는 순서대로 배열된 거래 번호인 Nonce를 가집니다. Nonce는 0부터 시작하며, 매번 송금을 시작할 때마다 해당 계정의 Nonce 값이 1씩 증가합니다.
사용자가 거래를 가속화하고 싶을 때, 이더리움 지갑에서 가속화 거래 옵션을 선택할 수 있으며, 이때 더 높은 Gas 비용을 지불해야 합니다. 사용자가 동의하면 새로운 거래를 시작하는 것이며, 새로운 거래는 대기 중 거래의 Nonce 값과 동일합니다.
이더리움 네트워크 규정에 따라 Nonce 값은 연속적으로 점프할 수 없으며, 동일한 주소의 각 거래의 Nonce 값은 중복될 수 없으므로, 채굴자는 새로 생성된 거래를 패키징합니다. 새 거래가 패키징되어 확인된 후, 이전의 낮은 Gas Price 거래는 폐기됩니다.
사용자가 거래 가속을 원하지 않는 경우, 해당 거래가 거래 풀에서 패키징되지 않은 상태라면 언제든지 거래를 취소할 수 있습니다. 거래 취소의 논리는 거래 가속과 동일하며, 사용자는 더 높은 Gas Price를 설정하되 대기 중 거래와 동일한 Nonce 값을 가진 거래를 시작하되 거래 금액을 0으로 설정합니다. 따라서 본질적으로 거래 취소의 비용은 거래 가속의 비용과 동일하게 비용이 발생합니다.
대기 중 거래가 확인되기 전까지 후속 거래는 모두 대기해야 하므로, 사용자는 대기 시간이 너무 길어 여러 거래를 반복해서 시작하지 않도록 주의해야 합니다.
거래 실패(Fail)
리듬 BlockBeats는 현재 가장 일반적인 거래 실패 원인이 거래 Gas가 소진되었다는 것(Out of Gas)임을 발견했습니다. 즉, 이 거래의 계산량이 사용자가 설정한 Gas Limit을 초과했다는 것입니다. 일반적으로 이러한 경우 거래 상태는 실패로 표시되며, Gas가 소진되었다고 알림이 표시되고, 지불한 Gas는 환불되지 않습니다.
일부 사용자는 이것이 공정하지 않다고 생각할 수 있지만, 본질적으로 채굴자는 작업을 수행하고 있으며, 중간에 Gas가 부족해 작업을 계속할 수 없으므로 채굴자는 작업을 포기해야 합니다. 그러나 이전의 작업은 "임금"을 지불받아야 하므로, 이전에 지불한 Gas 비용이 환불되지 않는 것은 이해할 수 있습니다. 이러한 상황에 직면한 사용자는 거래를 다시 시작하고 해당 거래의 Gas Limit을 높여야 합니다.
또 다른 거래 실패 상황은 사용자가 스마트 계약에 거래 송금을 시도했으나 특정 오류로 인해 계약을 실행할 수 없을 때, 거래가 Bad Instruction으로 반환되는 경우입니다.
예를 들어, 사용자가 크라우드 펀딩 활동에 참여할 때 다음과 같은 상황이 발생할 수 있습니다:
한도가 초과됨;
또는 사용자가 화이트리스트에 포함되지 않음;
또는 사용자가 토큰을 초과 청약하는 등의 상황.
이 경우 사용자가 설정한 Gas Limit은 모두 소진되어 결국 거래가 실패하게 됩니다.
그러나 이더리움 비잔틴 하드 포크 이후 새로운 연산자 Reverted(EIP-140)가 추가되었습니다. 계약 내에서 오류가 발생하여 거래가 실패할 경우, 거래는 Gas Limit이 설정한 모든 Gas를 소모하지 않으며, 계약은 실행을 중단하고 남은 Gas 비용을 환불하며 사용자에게 오류 원인을 알립니다.
물론 사용자의 지갑에 ETH가 Gas 비용을 지불할 만큼 충분하지 않을 경우에도 거래는 실패로 간주됩니다.
핫스팟이 없을 때 이더리움 네트워크는 평화롭고, 모든 송금 비용은 시간과 금액 모두 통제 가능하지만, 바람이 불어오면 네트워크에서 다양한 문제를 겪게 됩니다. gas 비용의 논리는 신규 사용자가 지갑을 사용할 때 가장 큰 장애물입니다.
기본적으로 gas 비용과 관련된 모든 문제는 이 글에서 다루었습니다. 체인 상 거래는 복잡하지 않으며, 간단히 말해 모든 작업에 문제가 생기면 돈을 더 지불하면 해결됩니다.
현재 이 운동은 이더리움에서 유동성 채굴의 열기가 잠시 멈춘 것처럼 보이며, 이 운동은 거품을 만들어낼 뿐만 아니라 더 많은 사용자가 지갑 사용에 익숙해지도록 했습니다. 지갑은 마침내 고빈도 사용 도구가 되었습니다.
체인 상 거래에서 발생하는 문제는 사실 지갑의 최적화를 위한 공간을 제공하며, 신규 사용자에게 "원클릭 가속", "원클릭 취소"와 같은 서비스를 제공할 수 있을 것입니다.