JD의 블로그

[마스터링 이더리움] 1장 이더리움이란 무엇인가 본문

블록체인

[마스터링 이더리움] 1장 이더리움이란 무엇인가

GDong 2021. 10. 19. 07:52

블록체인에 대해서는 예전부터 들어왔지만 항상 관심을 가지지 않았었는데, 최근에 기술적으로 또는 비즈니스적으로 블록체인을 어떻게 활용할 수 있을지에 대한 관심이 많이 생겨서 가장 유명하고 기본서로 익히 알려져있는 "마스터링 이더리움"을 정리해보고자 한다.

 

이더리움을 한 문장으로 요약하면 뭐라고 할 수 있을까?

실용적인 관점에서 이더리움은 스마트 컨트랙트 애플리케이션을 실행하는 오픈 소스에 기반을 두고 전 세계에 탈 중앙화된 형태로 구성된 컴퓨터 인프라스트럭쳐라고 할 수 있다. 블록체인을 이용해 상태 변화를 동기화하고 저장하며, 이더라고 불리는 암호화폐를 통해 실행 자원 비용을 측정하고 제한한다. 

 

이더리움 플랫폼을 이용하면 경제적 기능을 내장한 강력한 탈중앙화된 애플리케이션을 개발 할 수 있다. 그리고 이런 애플리케이션은 고가용성, 감사 가능성, 투명성, 중립성이라는 특성을 가진다. 

 

그러면 이더리움은 비트코인과 어떻게 다른가?

이더리움은 다른 개방형 블록체인과 많은 유사점을 지니는데, 참여자들은 피어투피어 네트워크로 연결되며, 상태 변경을 동기화하는 비잔틴 결함 허용 합의 알고리즘을 사용하고, 디지털 서명과 해시, 디지털 화폐와 같은 암호학 기반 기술을 사용하는 점이 그런 것이다.

 

하지만 이더리움은 그 목적과 구성 측면에서 다른 개방형 블록체인과 다른데, 이더리움의 주된 목적은 그 자체로 디지털 화폐 지급 네트워크가 되는 것이 아니다. 디지털 화폐인 이더는 이더리움의 한 부분으로 운용에 있어 필수적이지만 이는 이더리움 플랫폼 사용료를 지불하기 위한 유틸리티 화폐에 불과하다.

 

또한 매우 제한된 스크립트 언어를 사용하는 비트코인과 달리 이더리움은 임의성과 무한 복잡성을 가진 코드를 실행 가능한 가상 머신을 운영하는 범용 프로그래밍이 가능한 블록체인으로 설계되었다. 

 

블록체인을 구성하는 요소는 무엇인가?

공개 블록체인을 구성하는 요소는 다음과 같다.

  • 표준화된 가십 프로토콜을 기반으로 참여자들을 연결하고 트랜잭션 및 검증된 트랜잭션 블록을 연결하는 피어 투 피어 네트워크
  • 상태 전이를 나타내는 트랜잭션 형태의 메시지
  • 트랜잭션의 구성 요건과 트랜잭션의 유효성을 판단하는 합의 규칙의 집합
  • 합의 규칙에 따라 트랜잭션을 처리하는 상태 머신
  • 검증되고 적용된 모든 상태 전이의 장부 역할을 해줄 수 있는 암호학적으로 보호된 체인
  • 모든 참여자가 협력할 수 있도록 강제함으로써 블록체인의 통제 권한을 탈중앙화하는 합의 알고리즘
  • 공개된 환경에서 상태 머신에 경제적인 보안성을 제공할 수 있는 게임 이론적으로 유효한 인센티브 메커니즘 (작업증명 비용 + 블록 보상)
  • 위에서 언급한 것들을 구현한 하나 이상의 오픈 소스 소프트웨어

 

블록체인의 성격을 파악하기 위해서는 개방성, 공공성, 국제화, 탈중앙화, 중립성, 검열 저항성 등과 같은 평가 기준이 필요하다.

 

이더리움은 어떻게 탄생했는가?

이더리움은 2013년 말 비탈릭 부테린이 비트코인과 마스터코인(비트코인을 확장하여 가장 기초적인 스마트 컨트랙트를 제공하는 오버레이 프로토콜)의 기능을 확장하는 방안을 생각하기 시작하면서 탄생했다. 비탈릭은 튜링 완전한 범용 블록체인으로써 이더리움을 설명하는 백서를 설명하고 이를 통해 여러 사람들의 도움을 받기 시작했다.

 

이더리움 창립자들은 프로그래밍을 통해 다양한 애플리케이션을 지원할 수 있는 특정 목적에 국한되지 않는 블록체인에 대해 생각하고 있었다. 이 생각은 이더리움과 같은 범용 블록체인을 사용하여 개발자가 피어투피어 네트워크, 블록체인, 합의 알고리즘 등의 기본 메커니즘을 구현하지 않고도 특정 애플리케이션을 프로그래밍할 수 있다는 것이다. 이더리움 플랫폼은 이런 세부사항을 추상화하고 탈중앙화 블록체인 애플리케이션을 위한 결정적이고 안전한 프로그래밍 환경을 제공한다. 

 

2013년부터 시작된 이런 노력으로 2015년 7월 30일 첫 번째 이더리움 블록이 채굴되었다.

 

이더리움 개발은 어떻게 진행되었는가?

이더리움 개발은 4 단계로 나누어 진행되었으며 각 단계마다 주요 변경사항이 발생했다.

 

각 단계에는 이전 버전과 호환되지 않는 방식으로 기능을 변경하는 '하드 포크(hard fork)'라고 하는 하위 버전이 포함될 수 있다.

 

네 가지 주요 개발 단계는 프론티어(Frontier), 홈스테드(Homestead), 메트로폴리스(Metropolis), 세레니티(Serenity)라는 코드명으로 명명됐다. 현재까지 적용된(혹은 예정된) 중간 하드 포크는 아이스 에이지, DAO, 탠저린 휘슬, 스퓨리어스 드래곤, 비잔티움, 콘스탄티노플이라고 불리는 하드 포크이다.

 

블록 번호에 따라 날짜가 표시된다.

 

블록 #0

프론티어: 2015년 7월 30일부터 2016년 3월까지 지속된 이더리움의 초기 단계

 

블록 #200,000

아이스 에이지: 기하급수적으로 증가하는 난이도 증가를 도입하여 지분증명으로 전환하도록 동기를 부여하는 하드 포크

 

블록 #1,150,000

홈스테드 : 2016년 3월에 시작된 이더리움의 두 번째 단계

 

블록 #1,192,000

DAO: 해킹된 DAO 컨트랙의 피해자에게 보상금을 지급하고 이더리움 및 이더리움 클래식을 2개의 경쟁 시스템으로 분할하는 하드 포크

 

블록 #2,463,000

탠저린 휘슬: 특정 I/O가 많은 작업에 대한 가스 계산을 변경하고, 해당 작업의 가스 비용이 낮은 서비스 거부 공격으로부터 축적된 상태를 지우는 하드 포크

 

블록 #2,675,000

스퓨리어스 드래곤: 더 많은 DoS 공격 벡터를 처리하고 다른 상태를 지우는 하드 포크, 또한 재생 공격 방지 메커니즘

 

블록 #4,370,000

메트로폴리스 비잔티움: 메트로폴리스는 이더리움의 세 번째 단계로 2017년 10월에 하드 포크 되었으며 비잔티움은 메트로폴리스를 위해 계획된 2개의 하드 포크 중 첫 번째 것이다.

 

범용 블록체인으로써의 이더리움은 무엇인가?

비트코인의 블록체인은 비트코인 단위 및 소유 상태를 추적한다. 비트코인은 트랜잭션이 상태 전이를 일으켜 코인의 소유권을 변경하는 탈중앙화된 합의 상태 머신이라고 할 수 있다. 상태 전이는 여러 블록이 채굴된 후 모든 참가자가 시스템의 공통(합의) 상태로 수렴할 수 있도록 합의 규칙에 의해 제한된다.

 

이더리움 또한 탈중앙화된 상태 머신이지만 화폐 소유 상태만 추적하는 것이 아니라 Key-Value 튜플로 표현할 수 있는 모든 데이터를 저장할 수 있는 저장소의 상태 전이를 추적한다. 특정 키는 Key-Value 데이터 저장소에서 임의의 값을 보유하고 그 값을 참고한다. 이더리움에는 코드와 데이터를 저장하는 메모리가 있으며, 이더리움은 블록체인을 사용하여 이 메모리가 시간에 따라 어떻게 변하는지 추적한다. 

 

이더리움? => 임의의 상태를 추적하고 상태 머신을 프로그래밍하여 합의로 작동하는 월드-와이드 컴퓨터

 

다양한 용어, 이더리움의 구성 요소는 무엇인가?

  • 피어투피어 네트워크(P2P network)
    • 이더리움은 TCP 포트 30303으로 접속 가능한 이더리움 메인 네트워크에서 실행되며, 특정 프로토콜을 실행한다.
  • 합의 규칙(Consensus rules)
    • 이더리움의 합의 규칙은 기준 사양인 Yello Paper에 정의되어 있다.
  • 트랜잭션(Transactions)
    • 이더리움 트랜잭션은 보낸 사람, 받는 사람, 값 및 데이터 페이로드가 포함된 네트워크 메시지다.
  • 상태 머신(State machine)
    • 이더리움 상태 전이는 바이트코드를 실행하는 스택 기반 가상머신인 EVM(Ethereum Virtual Machine, 이더리움 가상 머신)에 의해 처리된다. '스마트 컨트랙트'라는 EVM 프로그램은 고수준 프로그래밍 언어(예: 솔리디티)로 작성되고, EVM에서 실행되도록 바이트코드로 컴파일된다.
  • 데이터 구조
    • 이더리움의 상태는 트랜잭션 및 시스템 상태가 머클 패트리샤 트리(Merkle Patricia Tree)라고 하는 시리얼라이즈된 데이터 구조로, 각 노드의 데이터베이스(일반적으로 구글의 Level DB)에 저장된다. 
  • 합의 알고리즘(Consensus algorithm)
    • 이더리움은 비트코인의 합의 모델인 나카모토 합의를 사용한다. 나카모토 합의는 순차 단일 서명 블록을 사용하여 작업증명의 중요도 가중치가 가장 긴 체인을 결정한다. 그러나 이 책을 지필할 시점을 기준으로 나중에 지분증명 가중 투표 시스템인 코드명 캐스퍼로 전환할 계획이였다. (현재는 전환된 것으로 보임)
  • 경제적 보안성(Economic Security)
    • 이더리움은 현재 이대시라는 작업증명 알고리즘을 사용하지만, 향후엔 결국 지분 증명 알고리즘을 사용할 예정이다.
  • 클라이언트
    • 이더리움은 클라이언트 소프트웨어를 상호운용할 수 있는 몇 가지 구현체를 갖고 있는데 가장 유명한 것은 게스(Go-Ethereum, Geth)와 패리티(Parity)이다.

 

계속 나오는 튜링 완전이란 무엇인가?

튜링 완전은 앨런 튜링이 순차적 메모리에서 읽고 쓸 수 있는 방식으로 기호를 조작하는 상태 머신을 만들었는데 이 상태 머신으로 풀 수 있는 것을 튜링 완전하다고 정의했다. 이더리움은 가상 머신이라는 상태 머신상에서 메모리에 데이터를 읽고 쓰면서 저장된 프로그램을 실행할 수 있는 이더리움 기능은 튜링 완전 시스템을 가능하게 하므로 유니버설 튜링 머신이라고 볼 수 있다. 

 

이더리움의 획기적인 혁신은 저장된 프로그램 컴퓨터의 범용 컴퓨팅 아키텍처와 탈중앙화된 블록체인을 결합하여 탈중앙화된 단일 상태(싱글톤) 월드 컴퓨터를 만든 것이다. 

 

이더리움에서 모든 참여 노드(클라이언트)는 모든 트랜잭션을 검증하고 그 트랜잭션이 호출하는 스마트 컨트랙트를 실행해야 한다. 그러나 튜링이 증명한 것처럼, 이더링무은 스마트 컨트랙트가 종료될지 혹은 실제로 스마트 컨트랙트를 실행하지 않고 얼마나 오랫동안 실행될지 예측할 수 없다(경우에 따라서 무한 실행의 가능성도 있음). 노드가 유효성을 검증할 때 우연히 또는 의도적으로 스마트 컨트랙트가 영원히 지속되도록 만들 수 있는데 이는 마치 서비스 거부 공격과 유사하다. 이더리움이 사전에 자원 사용을 예측할 수 없다면 스마트 컨트랙트가 사용하는 자원을 어떻게 제한하는가?

 

이 질문에 답하기 위해 이더리움은 가스(gas)라는 과금 메커니즘을 도입했다. EVM이 스마트 컨트랙트를 실행하게 되면, 가스는 각 명령어(계산, 데이터 접근 등)의 비용을 일일이 계산한다. 각 명령어는 가스 단위로 미리 정해진 비용이 있다. 스마트 컨트랙트를 실행시킬 때 트랜잭션은 스마트 컨트랙트를 실행하는 데 사용할 수 있는 가스의 최대 사용량을 가지고 있어야 한다. 만약 계산에 소비되는 가스의 총량이 트랜잭션에서의 가스 가용량을 초과한다면 EVM은 실행을 중지한다. 

 

즉, 가스는 각 프로그램이 사용할 수 있는 리소스를 제한해서 이더리움 튜링 완전 계산을 허용하게 하는 메커니즘이다.

 

 

탈중앙화 애플리케이션(DApp)

댑은 스마트 컨트랙트와 웹 사용자 인터페이스를 합한 것이다. 좀 더 넓게 보면 댑은 공개되고 탈중앙화된 피어투피어 기반 서비스 위에 제공되는 웹 애플리케이션이다. 

 

댑의 최소 구성은 다음과 같다.

  • 블록체인 스마트 컨트랙트
  • 웹 프런트엔드 사용자 인터페이스

많은 댑은 탈중앙화 스토리지 프로토콜과 플랫폼 혹은 탈중앙화 메시지 프로콜과 플랫폼을 포함한다.

 

웹 3.0이란?

2004년에 웹 2.0은 사용자 생성 콘텐츠, 반응형 인터페이스 및 상호작용성에 대한 웹의 진화를 설명하는 용어로 부각되었다. 웹 2.0은 기술 사양 뿐 아니라 웹 애플리케이션의 새로운 초점을 설명하는 용어다. 

 

댑의 개념은 웹 애플리케이션의 모든 측면에서 피어투피어 프로토콜로 탈중앙화를 도입하여, 월드 와이드 웹을 자연스럽게 다음 단계로 발전시키기 위한 것이다. (중앙 집중적으로 관리되는 애플리케이션으로부터 탈중앙화 프로토콜에 의해 구축된 애플리케이션으로의 전환)

 

이후의 장들에서는 이더리움 web3.js 자바스크립트 라이브러리를 살펴볼 것이다. web3.js는 브라우저 안에서 실행되는 자바스크립트 애플리케이션과 이더리움 블록체인을 연결한다. web3.js 라이브러리는 또한 스웜(Swarm)이라는 P2P 스토리지 네트워크와 위스퍼(Whisper)라는 P2P 메시징 서비스를 포함한다. 이 세 가지 구성요소는 웹 브라우저에서 동작하는 자바스크립트 라이브러리에 포함되어서 개발자들은 웹3 댑을 구축할 수 있는 완전한 애플리케이션 개발 세트를 갖게 된다.

 

자바스크립트 애플리케이션에 익숙한 개발자라면, 작동 가능한 이더리움 코드들을 매우 빠르게 생산해 낼 수 있다. 그러나 '좋고 안전한' 코드를 작성하기란 매우 어렵다.

 

 

'블록체인' 카테고리의 다른 글

Web2 vs Web3  (0) 2021.10.27
[마스터링 이더리움] 2장 이더리움 기초  (0) 2021.10.21
이중 지불 문제  (0) 2021.10.11
테라와 미러 프로토콜  (0) 2021.10.11