비트코인과 이더리움은 가상화폐 시장에서 손에 꼽히는 대형코인들입니다.
이번 글에서는 두 가상화폐가 어떻게 다른지를
비트코인과 이더리움 모두 블록체인을 기반으로 구축된 가상화폐임은 분명하지만, 여러 부분에서 차이가 존재합니다.
비트코인은 단순해서 돈을 주고받는 것만 가능하고, 이더리움은 비트코인보다 복잡해서 스마트 컨트랙트라는 것이 가능합니다.
예를들어, 부모와 자녀간에
시험점수가 90점이 넘으면 5만원의 용돈을 주겠다.
는약속을 했다고 합시다.
비트코인을 사용할 경우:
비트코인을 사용하면, 자녀는 자신의 시험점수를 부모님에게 직접 보여주고 "90점 넘었으니까 용돈 주세요!"라는 말과 함께, 5만원치의 비트코인을 입금받게 될 것입니다.
이더리움을 사용할 경우:
그런데 여기서, 이더리움을 사용하면 더 복잡한 작업이 가능해집니다. 이더리움의 스마트 컨트랙트를 이용해 '90점이 넘을경우 5만원치의 이더리움을 자녀의 계좌로 송금'이라는 계약을 이더리움 시스템상에 등록하면, 시스템이 자녀의 시험성적을 직접 확인해서 90점이 넘은 경우 자동으로 5만원을 송금할 것입니다.
이더리움의 특징에 대해 이해하기 위해서는 먼저 비트코인에서 사용되는 스크립트에 대해 먼저 이해하고 넘어갈 필요가 있습니다.
비트코인은 스크립트(script)로 작성된 코드를 읽어 거래를 수행합니다. 비트코인의 스크립트는 굉장히 단순합니다. 비트코인 스크립트는 코드 수행과정에서 발생할 수 있는 무한루프나, 불필요한 복잡성을 제거하기 위해 단순한 방향으로 만들어졌습니다. 프로그래밍 언어에서 흔하게 사용되는 루프(loop)가 비트코인에서는 존재하지 않는데요, 이러한 특징이 코드와 거래(transaction) 수행을 단순하게 만들어줍니다. 비트코인을 화폐 그 자체로만 동작할 수 있도록 해주는 것이죠. 이러한 스크립트의 특징을 튜링 불완전성(turing incompleteness)을 띈다고 말합니다. 튜링이 완전하기 위해 요구되는 ‘아주 작은 단위로 이루어진 명령문의 반복 실행’이 비트코인에서는 불가능하기 때문이죠. 앞서 예시로 든 시험지의 상황에서는, 해당 조건을 코드에 집어넣기 위해 불가피하게 소요되는 반복문을 비트코인 스크립트에서는 지원하지 않기 때문에 이더리움과 동작 방식이 다를 수 밖에 없었던 것입니다.
답은 보안적인 원칙과 관련됩니다. 아주 단순한 정도의 반복문이라도 존재하면, 언제든 해커들의 표적이 될 수 있습니다. 반복문은 해킹 공격을 할 때 가장 쉽게 사용되는 코딩방식이기 때문이죠. 공격자가 비트코인 시스템 상에 잘못된 블록을 무제한으로 만들어내는 반복문을 끼워넣게 된다면, 거대한 시스템이 망가지는 아찔한 상황이 발생할 수 있습니다. 이러한 공격을 DOS공격이라고 합니다.
튜링 불완전성은, 그 어떤 빈틈도 허용하지 않는 완벽한 시스템을 구축하고자 하는 비트코인 개발자의 의도일 것입니다.
블록체인 기술을 최대한으로 이용하기 위해, 비트코인의 튜링 불완전성을 깨뜨리고 가상화폐가 복잡한 기능도 수행할 수 있도록 하는 가상화폐가 등장하는데 그것이 바로 2세대 블록체인 기술로 평가받는 이더리움입니다.
앞선 시험지 예시에서처럼, 이더리움은 단순하게 화폐를 주고받는 방식이 아닌, 특정한 조건에 따라 화폐가 움직이도록 할 수 있습니다. 이를 가능하게 하는 것이 솔리디티(Solidity)라는 이더리움에서 사용되는 언어입니다.
비트코인에 스크립트가 있다면, 이더리움에는 솔리디티라는 언어가 있습니다.
튜링 불완전성이 아닌, 튜링 완전성에 기반하여 만들어졌습니다. 솔리디티는 튜링 완전성의 기반 위에서 어떤 연산이던지 수행할 수 있게 됩니다. 이는 다양한 분산 어플리케이션(dApp)의 개발로 이어지게 됩니다.
그런데 한가지 의문점이 생길 수 있겠죠?
비트코인에서는 보안적인 문제 때문에 튜링 불완전성에 기반하여 만들었는데, 이더리움이 튜링 완전성에 기반하여 만들어졌다면 보안성은 어떻게 확보할 수 있을까요?
가스(Gas)라는 개념이 이를 해결해줍니다!
이더리움의 솔리디티는 DOS 공격을 단순화시킬 수 있습니다. 바로 가스(Gas)가 있기 때문인데요. 블록체인은 채굴자가 코드를 검증하고 실행하게 되기 때문에, 해당 코드 설계에 참여한 모든 채굴자의 기계에서 실행되게 된다면 블록체인 자체가 마비될 수 있습니다. 이러한 상황을 해결하기 위해 이더리움에서는 가스라는 개념을 사용합니다. 가스는 이더리움 코드를 실행시키기 위한 '연료'라고 생각할 수 있습니다. 이더리움은 여러 연산들을 제공하는 대신, 각 연산마다 가스가 소모되도록 만들었습니다. 연산에서 소모되는 가스는, 이더리움을 사용하는 수수료라고 생각해도 괜찮습니다. 예를들어, 50가스가 필요한 이더리움 코드를 만들었다면, 50가스가 소모되고 난 뒤에는 해당 코드는 수행될 수가 없게 되는겁니다.
수수료를 낼 돈이 없으니, 이더리움은 당연히 일을 하지 않게 되겠죠. 이러한 방식은, 부정한 반복문을 방지할 수 있습니다. 무한정으로 코드가 반복된다면, 무한정으로 가스가 필요한데 이러한 가스는 결국 사용자에게 부담이 될 것이기 때문입니다.
비트코인과 이더리움의 가장 큰 차이는 튜링 불완전성(turing incompleteness) 튜링 완전성(turing completeness)에 있습니다. 이러한 차이가 가능할 수 있도록 하는 가스라는 개념에 대해서도 알아보았습니다. 다음 포스팅에서는 이더리움이 가지는 확장성에 집중해보고자 합니다.