가스(Gas) ?
이더리움(Ethereum) 블록체인 생태계에서 가스(Gas)는 특정 행동(Operation - e.g. 실행 함수 등)을 실행하기 위해 필요한 컴퓨터 연산량을 재는 단위입니다. 이 필요한 연산량을 만족시키기 위하여 트랜잭션(Transaction - Operation을 담은 묶음)을 실행(요청)하는 사용자는 반드시 가스 수수료(Gas Fee)를 내야만 합니다.
예를 들어, 블록체인을 통해 당신의 주소로부터 대상자의 주소로 이더리움(ETH) 코인을 전송하고 싶다면, 당신은 보내야 하는 이더리움 코인 외에 이 "보낸다"의 행동을 대신 수행해줄(실제로는 그것이 보내졌다는 사실을 같이 기록해주고 검증해줄) 네트워크를 위해 가스 수수료를 더 내야 합니다. 이러한 행위는 마치 은행을 이용하는 우리가 입금/출금 수수료를 내는 것과 같은 행위입니다.
은행과 블록체인 네트워크(구현에 따라)는 비슷하면서도 다른 모습을 보입니다. 특히, 입/출금에 관련된 시스템은 굉장히 유사하게 동작합니다. 위에서 설명한 것과 같이 당신이 해야 하는 일(다른 사람에게 돈을 보낸다)을 대신 해주고 수수료를 챙겨가는 것은 굉장히 비슷한 프로세스임을 보여줍니다. 그러나, 블록체인의 다른 점은 알다시피 은행처럼 단 하나의 중앙집중형 노드가 아니라는 점입니다.
은행은 스스로 서비스를 만들고 그를 제공하는 대신 수수료를 받습니다. 그러므로 특정 서비스에 따라 자신들의 손익계산에 따라 수수료를 받지 않을수도 있습니다. 대신, 그들은 원하는대로 우리의 정보를 다루거나 서비스를 변경할 수 있습니다.
반면, 블록체인은 불특정 다수에 의한 네트워크를 이루고 있습니다. 이 분산된 네트워크의 생태계를 원활히 유지하려면 각자가 노력(투자)해야 합니다. 네트워크에 존재하는 모든 참여자들이 같은 수준과 같은 상황에서 투자할 수는 없기 때문에, 더 높은 성능의 참여자들이 대신 일을 처리해 주어야 합니다. 그러면 그들에게 더 높은 성능을 투자하고 유지하려는 동기(Motivation)가 필요하기 때문에 수수료는 그들을 위한 보상으로써의 장치가 됩니다. 대신, 네트워크 전체 하위에서 일어나는 정보와 서비스는 모두에게 기록되고 유지되기 대문에, 그들이 원하는대로 우리의 정보를 다루거나 마음대로(숨긴채로) 서비스를 변경할 수는 없습니다.
가스 수수료는 모든 이더리움 내에서 요청하는 모든 동작에서 요구됩니다.
- 다른 사람에게 ETH를 송금하고 싶다면?
- 스마트 컨트랙트를 실행하고 싶다면?
- NFT를 구매하고 싶다면?
가스는 톨게이트의 톨비와 같습니다. 우리가 고속도로를 이용하려면 톨비를 내야 합니다. 그리고 그 톨비를 이용하여 정부는 고속도로를 관리합니다. 또한, 더 커다란 자동차를 이용하는 경우 더 많은 톨비를 내야 합니다. 이것과 같이 더 복잡한 트랜잭션일수록 더 많은 컴퓨터 연산을 요구하게 되고, 결국 더 많은 가스 수수료가 요구됩니다.
Gas Limit ?
가스 수수료는 "Gwei" 라고 하는 단위로 표기됩니다. 1 Gwei 는 .000000001 (= 10의 -9승) ETH 와 같습니다. Gwei의 단위가 매우 작아 보이지만, 수수료의 한계가 정해지지 않는다면 더 큰 단위의 수수료를 지불하게 될 수도 있습니다. 따라서 우리가 수행하고자 하는 모든 트랜잭션에 대하여, 우리는 기꺼이 낼 수 있는 가스 수수료를 정할 수 있습니다.
즉, 우리가 특정 트랜잭션을 실행하는 데에 기꺼이 내고자 하는 최대 가스 총량이 바로 가스 한도(Gas Limit) 입니다.
또한, 가스에는 사용자부터 입력 받는 가스 가격(Gas Price)이 있습니다. 이 가격은 우리가(혹은 시스템에서 얻은 정보를 기반으로) 직접 작성할 수 있는데, 더 높은 가격의 가스를 제공할수록 트랜잭션은 더욱 빨리 실행됩니다.
위와 같은 정보들로부터 (가스 한도 X 가스 가격 = 가스 요금), 즉, 트랜잭션을 실행하기 위한 가스 수수료가 계산될 수 있습니다. 단, 가스 수수료를 많이 냈더라도 실제로 부과되는 수수료는 가스 한도를 넘지 않는 선에서 소모된 가스로부터 계산됩니다.
즉, 가스 가격은 트랜잭션을 실행하는데에 실제로 들어가게 되는 가스 요금의 단위로써 작용하지만, 실제로는 트랜잭션을 실행하는데 소모된 가스와의 계산을 통해 실제 가스 수수료가 계산되고, 이는 가스 한도를 넘지 않는 선에서 측정되므로, 주입된 가스 요금을 넘어서는 가스가 발생하지는 않습니다. 이는 잘못 구현된 컨트랙트 등 잘못 실행된 트랜잭션으로 인한 막대한 금전적 손해를 막기 위해 이용됩니다.
단, 반대로 주의해야 할 점은 너무 낮은 가스 한도를 책정하는 경우, 트랜잭션은 실행되지 못한 채 가스 수수료만이 부과되게 됩니다. 따라서 트랜잭션이 실행될 수 있을 만큼의 넉넉한 가스 한도를 책정하는 것이 훨씬 유리합니다.
트랜잭션과 가스의 관계
가스 요금을 높게 책정해야 트랜잭션이 실행된다는 사실이 때로는 불편할 수 있습니다. 은행에서의 업무 처리는 일정한 수수료임에도 불구하고 문제없이 잘 수행됩니다. 그러나 이더리움 생태계에서 적은 가스 요금의 트랜잭션은 무시되거나 느리게 처리될 수 있습니다.
그것은 구성된 블록체인 생태계의 특징이자 한계입니다. 여러분이 어떤 요청사항(트랜잭션)을 요구할 때, 실시간으로 다른 위치의 다른 사람 또한 자신의 요청사항을 요구하고 있습니다. 각 사용자들은 자신의 원하는 때에 자신의 트랜잭션을 실행하고자 합니다. 그러나 이를 처리한 결과를 담아내는 블록의 크기와 참여자들(컴퓨터 연산)에는 한계가 있습니다.
결국 모든 사람들은 자신의 트랜잭션이 먼저 실행되기를 원하고 (수요가 많아지고) 처리할 수 있는 블록에는 한계가 있을 때 (공급이 제한될 때), 더 높은 이득을 취할 수 있는 것을 선택하게 될 것이고 이는 결국 더 높은 수수료(결국 보상으로 돌아오게 되는)가 담겨 있는 트랜잭션이 선택되는 것입니다. 그리고 이러한 자연스러운 현상으로 가스 수수료는 자체적으로 상승하게 됩니다.
그러면 여기 처리되지 않은 트랜잭션들은 다 어디에 있고, 블록에 담을 트랜잭션들은 어디에 있을까요? 바로 메모리풀(mempool) 입니다. 이더리움의 전송된 트랜잭션들은 모두 메모리풀로 이동합니다. 이곳에는 전송되었지만 아직 처리/확인되지 않은 트랜잭션들이 모여 있으며, 검증 수행 가능한 참여자들의 유효성 검사를 기다리고 있습니다. 트랜잭션을 검증하고 블록에 포함시키고자 하는 참여자들(Miner)은 이 메모리풀에서 그러한 재료들을 수집합니다.
즉, "자신의 컴퓨터 연산과 시간을 투자하는 참여자들(Miner)이 왜 나의 트랜잭션을 선택하고 그것을 검증하여 블록에 포함시키고자 하는가? 그 이유는 나의 트랜잭션이 더 많은 수수료(보상)를 지불할 수 있기 때문이다." 라는 흐름으로 이 이더리움 블록체인 네트워크가 이해될 수 있는 것입니다.
결론적으로 트랜잭션을 원활히 원하는 때에 실행시키고 싶다면 이더리움 블록체인이 납득할만한(블록 채굴에 포함할만한) 충분한 가스 수수료를 동반해야 하며, 이를 통해 블록체인 네트워크가 온전히 돌아갈 수 있음을 기억하시길 바랍니다.
참고 자료
https://community.metamask.io/t/what-is-gas-why-do-transactions-take-so-long/3172
'개발자 💻 > Blockchain' 카테고리의 다른 글
[Ethereum] Remix를 이용하여 스마트 컨트랙트 배포하기 (0) | 2023.07.17 |
---|