이전글
가스와 이더
이번 글에서는 이더리움이 무한 루프 문제를 해결하기 위해 도입한 가스(gas)에 대해 알아보겠습니다.
I. 가스
지금까지 튜링 완전한 환경에서 개발자가 무한 루프의 발생 여부를 판별할 수 없다는 점을 알아봤습니다. 또한 이러한 문제가 블록체인에 심각한 손상을 줄 수 있다는 점 또한 알아봤습니다.
이제 이더리움이 이러한 문제를 어떻게 해결했는지 알아보겠습니다. 먼저 다음과 같은 코드가 존재한다고 가정해 보겠습니다.
i = 0
while i < 5:
i -= 1
위 코드가 정상적으로 작성되었다면 변수 i가 매번 1씩 증가하여 5번 반복 후 프로그램이 종료되어야 합니다. 하지만 위 코드는 변수 i가 감소하도록 잘 못 작성되었기 때문에 무한 루프가 발생합니다. 블록체인 노드가 이 코드를 실행한다면 블록체인 네트워크는 무한 루프에 빠져 멈출 것입니다. 비트코인 네트워크는 위와 같은 상황을 막기 위해 반복문을 코드에서 제외시켰습니다. 하지만 이더리움 네트워크는 위 코드를 허용하되 가스라는 개념을 추가로 도입했습니다.
가스가 무한 루프를 어떻게 해결했는지 알아보겠습니다. 먼저 블록체인의 각 명령어마다 가스를 단위로 하는 비용을 정해놓습니다. 예를 들어 변수 할당은 10 가스를, 변수 연산은 20 가스를, while은 10 가스를 소모한다고 가정해 보겠습니다. 위 코드에 해당 내용을 적용한다면, i가 0으로 초기화될 때 10 가스를 소모하고, 이후 i가 5와 비교하는 연산과 i에서 1을 빼는 연산, 이 값을 다시 i에 할당하는 연산과 다시 i와 5를 비교하도록 돌아가는 연산(while)을 합하여 60 가스씩 매 반복마다 소모한다고 볼 수 있습니다. 즉, 위 코드에서 소모되는 가스는 총 10 + 60 * (반복 횟수)가 됩니다. 여러 차례 반복될 때마다 소모되는 가스 양은 계속 증가한다고 볼 수 있습니다.
이제 트랜잭션을 생성하는 과정에서 최대로 소모될 가스를 정해야 합니다. 예를 들어, 1210 가스를 최대치로 설정해 놓는다면 다음과 같은 일이 벌어집니다.
먼저 10 가스를 소모합니다. 이제 남은 소모 가능한 가스는 1200 가스입니다. 이후 반복문이 동작한다면 60 가스 씩 매번 소모되어 20번 반복 후 남은 가스는 0이 될 것입니다. 정해놓은 모든 가스를 소모했다면 어떤 일이 발생할까요? 답은 간단합니다. 모든 가스를 소모했으므로 연산을 강제 종료합니다. 결론적으로 트랜잭션은 무한 루프에서 벗어나게 됩니다.
이더리움은 모든 명령어에 소모될 가스를 미리 정한 뒤, 트랜잭션을 생성할 때마다 소모될 최대치의 가스를 입력받습니다. 만약 코드가 무한 루프에 빠진다면 모든 가스가 소모된 뒤 강제로 종료될 것입니다. 따라서 무한 루프가 발생하는 문제가 해결됩니다. 이는 튜링 완전함을 기반으로 하되 일부 튜링 불완전함을 준 것입니다.
II. 이더
가스가 무한 루프를 해결할 수 있음을 알게 되었습니다. 그렇다면 가스는 어디에서 얻을 수 있을까요? 정답은 바로 이더입니다. 이더는 이더리움 블록체인에서 사용하는 암호화폐입니다. 이더는 이더리움 채굴자로 참여해 채굴 보상으로 얻거나, 거래소에서 구입할 수 있습니다.
이더와 가스를 교환하는 비율은 정확히 정해져 있지 않습니다. 따라서 트랜잭션을 생성하는 사람은 이더와 가스의 교환비 즉, 하나의 트랜잭션에서 소모될 이더의 양을 정할 수 있습니다.
실제 트랜잭션 생성과정에서 가스 당 이더리움 가격을 정한 후 가스의 최대치를 정합니다. 이 값을 이용하면 다음과 같이 소모될 최대 가스를 계산할 수 있습니다.
소모될 최대 가스비(이더) = 소모될 최대 가스의 양 * 가스 당 이더 가격(Gwei)
여기에서 등장하는 Gwei는 이더의 단위 중 하나로, 1 Gwei는 0.000000001 이더입니다. 가스 당 이더의 값이 커질수록(Gwei가 상승할수록) 채굴자의 이익이 커지기 때문에 해당 트랜잭션은 더욱 빨리 처리됩니다. 또한 소모되고 남은 가스의 경우 다시 돌려받을 수 있습니다.
지금까지 가스와 이더가 어떻게 튜링 완전함이 가진 문제를 해결했는지 알아봤습니다. 감사합니다.
다음글
'이더리움 > 이더리움과 월드 컴퓨터' 카테고리의 다른 글
[이더리움과 월드 컴퓨터] 2-1. 주소 (0) | 2023.02.06 |
---|---|
[이더리움과 월드 컴퓨터] 1-4. 스마트 컨트랙트와 댑(DApp) (0) | 2023.02.05 |
[이더리움과 월드 컴퓨터] 1-2. 튜링 완전과 튜링 불완전 (0) | 2023.01.29 |
[이더리움과 월드 컴퓨터] 1-1. 블록체인: 단일 장부와 단일 메모리 (0) | 2023.01.26 |
[이더리움과 월드 컴퓨터] 0. 이더리움 소개 (0) | 2023.01.24 |