[Ethereum] - ch1. 이더리움이란?

‍허진·2023년 3월 12일
0

Blockchain

목록 보기
14/19
post-thumbnail

본 글은 'Mastering Ethereum(Andreas M.Antonopoulos, Gavin Wood 저)'을 바탕으로 작성되었습니다.

컴퓨터 과학 관점에서 보자면, 이더리움은 결정론적(deterministic)이지만, 사실상 한정되지 않은 상태 머신(unbounded state machine)이며, 이것은 전역적으로(globally) 접근 가능한 싱글톤(singleton) 상태와 그 상태를 변화시킬 수 있는 가상 머신으로 구성되어 있다.

좀 더 실용적인 관점에서 볼 때, 이더리움은 스마트 컨트랙트(smart contract)라는 프로그램을 실행하는 오픈 소스에 기반을 둔, 전 세계에 걸쳐 탈중앙화된 컴퓨팅 인프라스트럭처다. 블록체인을 사용하여 시스템의 상태 변화를 동기화하고 저장하며, 이더(Ether)라고 하는 암호화폐를 이용하여 실행 자원 비용을 측정하고 제한한다.

> 비트코인과의 비교

이더리움은 비트코인과 같은 다른 개방형 블록체인과 많은 공통 요소를 공유한다. 예를 들면, 참여자들을 연결하는 피어투피어(peer-to-peer) 네트워크, 상태 변경을 동기화하는 비잔틴 결함 허용 합의(Byzantine fault-tolerant consensus) 알고리즘(작업증명 블록체인), 디지털 서명과 해시, 디지털 화폐(Ether) 같은 암호학 기반 기술의 사용 등이 그런 공통 요소에 해당한다.

그러나 여러 면에서 이더리움의 목적과 구성은 비트코인과 같은 이전의 개방형 블록체인과는 현저하게 다르다.

이더리움의 주된 목적은 비트코인과 같이 그 자체로 디지털 화폐 지급 네트워크가 되는 것이 아니다. Ether(이더리움의 디지털 화폐) 역시 월드 컴퓨터로서의 이더리움 플랫폼 사용료를 지불하기 위한 유틸리티 화폐(utility currency)다.

매우 제한된 스크립트 언어를 사용하는 비트코인과 달리, 이더리움은 임의성과 무한 복잡성을 가진 코드를 실행할 수 있는 가상 머신(virtual machine)을 운영하는 범용 프로그래밍이 가능한 블록체인으로 설계되었다. 이더리움 언어는 비트코인 스크립트 언어와는 다르게 튜링 완전(Turing complete) 언어다.

> 블록체인 구성요소

공개 블록체인(public blockchain)의 구성요소는 일반적으로 다음과 같다.

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

비트코인에서는 이러한 구성요소의 기준이 되는 구현체(reference implementation)가 비트코인 코어(Bitcoin Core) 오픈 소스 프로젝트가 개발한, bitcoind라는 클라이언트 소프트웨어로 개발된다.

이와 달리 이더리움에서는 기준이 되는 구현체가 아닌 기준 사양(reference specification)을 사용하며, 이더리움에서는 이러한 기준 사양에 따라 만들어진 많은 클라이언트가 존재한다.

> 이더리움의 탄생

비트코인 모델을 능가하는 새로운 혁신을 생각한 사람들이 이더리움을 구상하기 시작했다. 그러나 초기에는 이를 비트코인 기반 위에 구축하거나, 새로운 블록체인을 시작해야 하는 난제에 직면했다. 비트코인 기반 위에 구축하는 건 여러 제약 조건이 존재했고, 부가적인 오프체인(off-chain) 계층을 필요로 했다. 그리고 이는 공개 블록체인을 사용하는 장점을 없애버렸다.

이를 해결하기 위해 비탈릭 부테린(Vitalik Buterin)이 융통성 있고 스크립트 가능한(튜링 완전은 아님) 컨트랙트를 제안하였다. 그리고 2013년 12월에 튜링 완전한 범용 블록체인인 이더리움의 개념을 설명하는 화이트 페이퍼를 공유했다.

이더리움 백서

2013년 12월부터 비탈릭과 개빈('Mastering Ethereum'의 공동 저자)은 아이디어를 개선하고 진화시켜 지금의 이더리움 프로토콜 계층을 구축했다.

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

> 이더리움 개발의 4단계

이더리움의 개발은 네 단계로 나누어 진행되었고, 각 단계마다 주요한 변경사항이 있었는데 이러한 변경사항들은 이전 버전과 호환되지 않는 '하드 포크(hard fork)' 방식으로 진행되었다.

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

타임라인으로 표시하면 다음과 같다.

블록 #0
> 프론티어(Frontier) : 2015.7.30 - 2016.3.XX, 이더리움 초기 단계

블록 #200,000
> 아이스 에이지(Ice Age) : 기하급수적으로 증가하는 난이도 증가를 도입하여 지분증명(PoS)으로 전환하도록 동기를 부여하는 하드 포크

블록 #1,150,000
> 홈스테드(Homestead) : 2016년 3월에 시작된 이더리움의 두 번째 단계

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

블록 #2,463,000
> 탠저린 휘슬(Tangerine Whistle) : 특정 I/O가 많은 작업에 대한 가스 계산을 변경하고, 해당 작업의 가스 비용이 낮은 서비스 거부(Denial-of-Service, DoS) 공격으로부터 축적된 상태를 지우는 하드 포크

블록 #2,675,000
> 스퓨리어스 드래곤(Spurious Dragon) : 더 많은 Dos 공격 벡터를 처리하고 다른 상태를 지우는 하드 포크, 또한, 재생 공격 방지 메커니즘

블록 #4,370,000
> 메트로폴리스 비잔티움(Metropolis Byzantium) : 메트로폴리스는 이더리움의 세 번째 단계로, 2017년 10월에 하드 포크되었다.

블록 #7,080,000
> 콘스탄티노플(Constantinople) : 콘스탄티노플 하드 포크 내용 정리

블록 #9,069,000
> 이스탄불(Istanbul) : 이스탄불 하드 포크 내용 정리

블록 #12,244,000
> 베를린과 런던(Berlin and London) : 가스 비용 최적화를 위한 EIP-1559 프로토콜의 도입이다. 이는 이더리움 네트워크의 가스 요금 결정 방식을 변경하여 사용자가 보다 합리적인 요금으로 거래할 수 있게 했다.

블록 #??????
> 세레니티(Serenity) : 이더리움 2.0으로 완전히 변신하는 하드 포크로, 증명 방식이 PoS 방식으로 완전히 전환되고 개발자에게 더 친숙한 컨트랙트 개발 환경을 구축한다. 아직 일어나지 않았지만 2023년에 예정되어 있다.

> 이더리움: 범용 블록체인

비트코인의 블록체인은 비트코인 단위 및 소유 상태를 추적한다. 비트코인은 트랜잭션이 상태 전이(state transition)을 일으켜 코인의 소유권을 변경하고, 이 상태 전이는 모든 참가자가 합의하게 된다.

이더리움 또한 탈중앙화 상태 머신이다. 그러나 화폐 소유 상태에 더불어 범용 데이터 젖아소, 즉 키-밸류 튜플(key-value tuple)로 표현할 수 있는 모든 데이터를 저장할 수 있는 저장소의 상태 전이를 추적한다. 이더리움에는 코드와 데이터를 저장하는 메모리가 있으며, 이더리움의 블록체인이 이들의 상태 변화를 추적한다.

> 이더리움의 구성요소

이더리움의 구성요소는 다음과 같다.

  • P2P(peer-to-peer) 네트워크
    : 이더리움은 TCP 포트 30303으로 접속 가능한 이더리움 메인 네트워크(Ethereum main network)에서 실행되며, DEVp2p라는 프로토콜을 실행한다.
  • 합의 규칙(consensus rules)
    : 이더리움의 합의 규칙은 기준 사양인 Yellow Paper에 정의되어 있다.
    이더리움 황서
  • 상태 머신(state machine)
    : 이더리움 상태 전이는 바이트코드(bytecode, 기계어 명령여)를 실행하는 스택 기반 가상 머신인 EVM(Ethereum Virtual Machine, 이더리움 가상 머신)에 의해 처리된다. '스마트 컨트랙트'라는 EVM 프로그램은 고수준 프로그래밍 언어(ex. Solidity)로 작성되고 EVM에서 실행되도록 바이트코드로 컴파일된다.
  • 데이터 구조(data structures)
    : 이더리움의 상태는 트랜잭션 및 시스템 상태가 머클 패트리샤 트리(Merkle Patricia Tree)라고 하는 시리얼라이즈(serialize)된 해시 데이터 구조로, 각 노드의 데이터베이스(database, 일반적으로 구글의 LevelDB)에 저장된다.
  • 합의 알고리즘(consensus algorithm)
    : 이더리움은 비트코인의 합의 모델인 나카모토 합의(Nakamoto Consensus)를 사용한다. 나카모토 합의는 순차 단일 서명 블록을 사용하여 작업증명(PoW)의 중요도 가중치가 가장 긴 체인(현재 상태)을 결정한다. 그러나 조만간 지분증명(PoS) 가중 투표 시스템인 코드명 캐스퍼(Casper)로 전환할 계획이다.
  • 경제적 보안성(econimic security)
    : 이더리움은 현재 이대시(Ethash)라는 작업증명(PoW) 알고리즘을 사용하지만, 향후엔 결국 지분증명(PoS) 알고리즘을 사용할 예정이다.
  • 클라이언트(clients)
    : 이더리움은 클라이언트 소프트웨어를 상호운영할 수 있는 몇 가지 구현체를 갖고 있는데, 가장 유명한 것은 게스(Go-Ethereum, Geth)패리티(Parity)다.

> 이더리움과 튜링 완전

튜링 완전에 대한 설명은 다음을 참고하도록 하자.

튜링 완전

튜링은 컴퓨터에서 프로그램을 시뮬레이션하여 프로그램 종료 여부를 예측할 수 없음을 증명했다. 즉, 프로그램을 실행하지 않고서는 프로그램의 경로를 예측할 수 없다. 튜링 완전 시스템은 '무한 루프'에서 실행될 수 있다.

이더리움에서 이것은 하나의 도전 과제다. 모든 참여 노드는 모든 트랜잭션을 검증하고 그 트랜잭션이 호출하는 스마트 컨트랙트를 실행해야 한다. 그러나 튜링이 증명한 것처럼, 이더리움은 스마트 컨트랙트가 종료될지 혹은 실제로 스마트 컨트랙트를 실행하지 않고 얼마나 오랫동안 실행될지를 예측할 수 없다(경우에 따라서는 무한 실해으이 가능성도 있다).

이것은 사실상 서비스 거부 공격(DoS)가 가능하다는 것이다. 이러한 프로그램으로 인해 메모리 부하를 유발하고 중앙처리장치를 과열시키는 정도까지 가능하다. 월드 컴퓨터에서 자원을 남용하는 프로그램은 세계의 자원을 남용한다.

이더리움은 스마트 컨트랙트가 사용하는 자원을 제한하기 위해 가스(gas)라는 과금 메커니즘을 도입한다. EVM이 스마트 컨트랙트를 실행하게 되면, 가슨느 각 명령어의 비용을 일일이 계산한다. 각 명령어는 가스 단위로 미리 정해진 비용이 있다. 스마트 컨트랙트를 실행시킬 때 트랜잭션은 스마트 컨트랙트를 실행하는 데 사용할 수 있는 가스의 최대 사용량을 가지고 있어야 한다. 만약 계산에 소비되는 가스의 총량이 트랜잭션에서의 가스 가용량을 초과한다면 EVM은 실행을 중지할 것이다. 가스는 각 프로그램이 사용할 수 있는 리소스를 제한해서 이더리움 튜링 완전 계산을 허용하게 하는 메커니즘이다.

가스 추가 설명

> 범용적인 블록체인에서 탈중앙화 애플리케이션(DApp)으로

이더리움은 다양한 용도로 프로그래밍을 할 수 있는 범용적인 블록체인을 만들기 위한 하나의 방법으로 출발했다. 그러나 매우 빠르게 이더리움의 비전이 댑(DApp) 프로그래밍을 위한 플랫폼으로 확장되었다. 댑은 '스마트 컨트랙트'보다 넓은 의미를 갖고 있다. 댑은 최소 구성 요건에서 보자면, 스마트 컨트랙트와 웹 사용자 인터페이스를 합한 것이다. 좀 더 넓게 보자면, 댑은 공개되고 탈중앙화된 P2P 기반 서비스 위에 제공되는 웹 어플리케이션이다.

댑의 최소 구성요소는 다음과 같다.

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

추가로, 많은 댑은 다음과 같은 탈중앙화 구성요소를 포함한다.

  • 탈중앙화(P2P) 스토리지 프로토콜과 플랫폼
  • 탈중앙화(P2P) 메시지 프로토콜과 플랫폼

> Web 3.0

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

댑의 개념은 웹 어플리케이션의 모든 측면에서 P2P 프로토콜로 탈중앙화를 도입하여, 월드 와이드 웹(World Wide Web)을 자연스럽게 다음 단계로 발전시키기 위한 것이다. 웹의 세 번째 버전을 의미하는 Web 3.0은 이러한 진화를 설명하기 위한 용어다.

> 이더리움의 개발 문화

비트코인에서의 개발은 매우 보수적인 원칙을 따른다. 모든 변경사항은 기존 시스템이 중단되지 않도록 신중하게 검토되고, 대부분의 변경은 이전 변경사항과 호환이 되는 경우(소프트 분기)에만 구현된다.

그에 비해 이더리움에서는 개발 문화가 과거보다는 미래에 초점이 맞추어져 있다. 이더리움의 구호는 '빨리 움직이고 파괴하라(move fast and break things)'는 것이다. 변화가 필요하다면 때로는 이 변화가 이전에 설정했던 가정들을 무효화하거나, 호환성을 깨거나, 혹은 강제적인 업그레이드가 필요해지더라도 강행한다. 이더리움의 개발 문화는 이전 호환성을 다소 희생해서라도 빠른 혁신, 빠른 진화, 미래 지향적인 개선을 전개한다.

이는 개발자가 유연함을 유지하고 기본 가정의 일부가 변경되는 것에 따른 인프라스트럭처를 다시 구축할 준비를 해야 한다는 뜻이다. 이더리움에서 개발자가 직면한 가장 큰 과제 중 하나는 변경 불가능한 시스템에 코드를 배포하는 것과 여전히 진화 중인 개발 플랫폼 사이에 존재하는 본질적인 모순이다. 스마트 컨트랙트는 단순하게 '업그레이드' 할 수 없다. 새로운 어플리케이션을 배포하고, 사용자와 앱, 자금을 이전하고 다시 시작할 준비가 되어야 한다.

역설적으로, 이것은 좀 더 자율적이고 덜 중앙화된 통제권을 가진 시스템을 만들겠다는 목표가 아직은 완전히 실현되지 않았음을 의미한다. 자율성과 탈중앙화의 실현은 1~2년 내에 완성될 수 있을 정도의 수준보다는 더 큰 안전성이 요구된다. 플랫폼을 '진화'시킥 위해서는 스마트 컨트랙트를 폐기하고 재시작할 준비가 되어야 한다.

profile
매일 공부하기 목표 👨‍💻 

0개의 댓글