본문 바로가기
Blockchain

[Blockchain] 이더리움이란?

by 개발자 염상진 2022. 7. 7.

이더리움이란?

이더리움은 비트코인의 제한적인 기능을 넘어 스마트 컨트랙트 기능을 확장하여 제3의 신뢰 제공자 없이도 거래 이행이 가능하도록 하는 오픈소스 퍼블릭 블록체인입니다. 개발자라면 누구든지 dApp을 만들어 이더리움메인넷에 올려서 서비스를 제공할 수 있습니다. dApp을 개발하기 위한 언어로 솔리디티(Solidity)를 지원하고 있고, 이더리움 메인넷에 올라가는 솔리디티 코드들은 EVM(Ethereum Virtual Machine) 위에서 작동합니다.

 

 

이더리움은 어떻게 탄생했나요?

이더리움 창시자 비탈릭 부테린은 2011년 비트코인 매거진을 창립합니다. 당시 비트코인이 제한된 스마트 컨트랙트로 암화화폐 교환에만 치중되어 있는 것을 보고 일반 웹이나 앱처럼 어플리케이션을 돌릴 수 있는 퍼블릭 블록체인을 고안하기 시작하였고, 2013년 일반적인 스크립트 언어를 기반으로한 이더리움 백서를 공개합니다.

2014년 비탈릭 부테린과 창업 멤버들은 클라우드 소싱으로 이더를 팔아 $18,000,000을 모금하였고, 이더리움 로드맵 중 첫번째 단계인 프론티어를 2015년에 공개합니다. 이 후 가파르게 성장하였고, 현재 홈스테드를 지나 콘스탄티노플 단계까지 왔습니다.

 

 

2016년에는 DAO 해킹 사건으로 인해 $50,000,000 상당의 이더(Eth)가 도난당하는 사고가 발생합니다. 이로 인해 이더리움 커뮤니티는 격렬한 토론 끝에 하드포크가 단행됩니다. 현재 이더리움은 포크가 된 새로운 블록체인이며, 기존 이더리움은 이더리움 클래식(ETC)가 되었습니다.

 

비트코인 vs 이더리움

비트코인과 이더리움 모두 메인넷을 가진 퍼블릭 블록체인이라는 점에서 동일합니다. 하지만 비트코인은 암호화폐 교환에 집중하여 기능이 제한적인 반면 이더리움은 화폐 교환 뿐만 아니라 스크립트 언어인 솔리디티와 EVM을 지원하여 스마트 컨트랙트를 활용해 dApp을 개발하도록 합니다.

비트코인은 무허가 퍼블릭 트랜잭션만을 허용하는 반면, 이더리움에서는 무허가 트랜잭션과 허가 트랜잭션 모두를 수용하고 있습니다.

채굴 보상 시스템에서도 차이가 있습니다. 비트코인은 트랜잭션을 검증하고 블록을 생성하는 노드가 보상을 받습니다. 이더리움은 블록 생성에 대한 보상은 제공하지 않으며 트랜잭션 수수료를 제공합니다. 

 

 

EVM(Ethereum Virtual Machine)

먼저 Virtual Machine은 코드와 하드웨어 사이의 추상화 수준을 제공합니다. 말이 어려운데, 쉽게 말해서 프로세서가 x86이던 x64건 ARM이건, 혹은 윈도우나 맥이나 리눅스 OS 등 프로그램이 실행되는 환경이 다르더라도 실행을 보장하는 가상의 실행환경(가짜 컴퓨터)입니다. 실제로는 존재하지 않지만 하드웨어 위에 올라가 계층적으로 소프트웨어의 이식성을 증가시키고, 애플리케이션의 독립적인 실행을 보장하게 됩니다.

EVM은 프로그램 코드와 이더리움 블록체인 사이에 위치한 가상머신(VM)입니다. 즉 블록체인 네트워크 위에서 프로그램이 작동되도록 보장합니다. 

이더리움 스마트 컨트랙트 기반 dApp은 솔리디티로 작성됩니다. 이를 블록체인 위에 올리기 위해서는 솔리디티가 고급 언어이므로 EVM이 바로 해석하지는 못하기 때문에 가상머신이 이해할 수 있는 바이트코드로 변환해주는 작업이 필요합니다. 이 바이트코드를 가지고 OP코드로 변환한 뒤에야 EVM이 코드를 읽을 수 있게 됩니다. 

 

솔리디티로 작성된 dApp 프로그램 코드는 solc을 통해 컴파일 되고 EVM이 읽을 수 있는 바이트코드로 변환됩니다. 바이트코드로 된 프로그램은 Geth을 통해 이더리움 네트워크에 올릴 수 있게 됩니다. 

 

그럼 바이트코드는 어떻게 OP코드로 변환되어 EVM이 해석하게 되는 걸까요? EVM 내부적으로는 Opcode를 효율적으로 저장하기 위해 바이트코드를 사용합니다. 모든 Opcode에는 1바이트가 할당되고, 100개가 넘는 Opcode가 존재합니다. 1바이트에는 16진수 2개가 할당되고 이를 통해 데이터와 Opcode를 해석해 EVM이 프로그램을 이해할 수 있게 됩니다.

 

Opcode 종류

 

자, 예를 들어 0x6001600101이라는 바이트코드가 있다고 가정합니다. 코드가 실행되면서 바이트코드는 각 바이트로 쪼개 집니다. 즉 0x60 0x01 0x60 0x01 0x01로 쪼개집니다. 첫번째 코드 0x60은 PUSH 연산자입니다. PUSH 연산자 뒤에는 스택에 넣을 데이터가 옵니다. 즉 스택에 1을 PUSH합니다. 두번째 바이트도 동일하게 PUSH 1을 수행합니다. 세번째 명령어 0x01은  ADD 연산입니다. 즉 스택에서 2개의 0x01을 꺼내 합산한 후 다시 결과값을 스택에 넣습니다.

 

솔리디티(Solidity)

EVM 위에서 스마트 컨트랙트를 실행하는 객체지향(Object Oriented), 정적 타입(Static Typed) 고급(High Level) 스크립트 언어입니다. 솔리디티는 컨트랙트 기반의 고급 프로그래밍 언어로 C++과 파이썬, 자바스크립트 기반으로 제작되었고 자바스크립트와 유사한 구문을 가지고 있습니다. 런타임 언어와는 달리 컴파일시 제약조건을 확인합니다.

솔리디티가 처음 제안된 건 2014년 8월 가빈 우드였습니다. 우드는 이더리움에서 CTO로 재직하였고, 이후 크리스찬 라이트와즈너가 이어받아 솔리디티 개발을 이끌게 됩니다. 그리고 2015년 8월 솔리디티가 정식으로 론칭됩니다.

일반 애플리케이션을 배포하기 위해서는 앱스토어나 구글플레이에 앱을 등록하고 심사를 거칩니다. 이더리움 또한 솔리디티 언어를 사용해 프로그래밍한 후 이더리움 블록체인에 앱을 배포하면 됩니다. 다만 앱 스토어나 구글 플레이 처럼 중앙기관 심사를 거치지 않고 수수료 비용을 지불하고 dApp을 배포할 수 있습니다. 

튜링 완전 언어 솔리디티

비트코인에서도 스크립트를 사용하지만 솔리디티의 가장 큰 차이점은 튜링 완전성 언어라는 점입니다. 튜링 머신은 1930년대 앨런 튜링(Alan Turing)이 유니버셜 튜링 머신이라는 개념을 제안하면서 등장합니다. 튜링 머신은 가상의 기계로 강력한 컴퓨팅 파워를 가진 수학적 연산 모델을 의미합니다.

어떤 프로그래밍 언어가 튜링 머신과 동등한 연산 능력을 가지면 튜링 완전하다(Turing Complete)고 합니다. 반대로 연산 능력이 튜링 머신보다 떨어지면 튜링 불완전하다(Turing Incomplete)고 합니다. 튜링 머신은 현재 일반적으로 사용되는 기본적인 연산과 조건문, 반복문을 모두 수행할 수 있는 기계입니다.

비트코인의 스크립트는 반복문이 존재하지 않습니다. 반면 이더리움의 EVM에서 작동하는 솔리디티는 반복문을 지원하는 대표적인 튜링 머신으로 자리잡았습니다. 이를 통해 스마트 컨트랙트를 유연하게 구현할 수 있게 됩니다. 

솔리디티 관련 dApp 백엔드 개발을 위한 다양한 도구들이 공개되어 있습니다.

 

 

 

[Blockchain] 이더리움 머클 패트리시아 트리(MPT)란?

블록체인이 기존 서비스들을 대체하기에 가장 큰 힘은 탈중앙성에서 나옵니다. 즉 네트워크에 참여한 모든 노드들이 동일한 데이터를 공유하고 관리하는 시스템은 투명한 거래와 보안성을 보

about-tech.tistory.com

 

 

[Blockchain] 이더리움 Geth 사용 방법

로컬 테스트넷에서 Geth 실행하는 방법 Geth를 로컬 테스트넷에서 실행하기 위해서는 먼저 데이터 디렉토리 + genesis.json 파일이 준비되어야 합니다. 데이터 디렉토리에서는 송수신한 블록 데이터

about-tech.tistory.com

 

 

[Blockchain] 비트코인 UTXO 뜻 원리

비트코인에서 잔액을 확인하기 위해서는 UTXO에 저장된 양을 보고 확인할 수 있습니다. UTXO(Unspent Transaction Outputs)란 소비되지 않은 거래 출력값을 의미합니다. UT비트코인 블록체인에서 트랜잭션

about-tech.tistory.com

 

댓글