본문 바로가기

IT/Blockchain

Mastering Ethereum - Chapter 1: What is Ethereum?

728x90

 

Mastering Ethereum

 

https://github.com/ethereumbook/ethereumbook/tree/develop

 

GitHub - ethereumbook/ethereumbook: Mastering Ethereum, by Andreas M. Antonopoulos, Gavin Wood

Mastering Ethereum, by Andreas M. Antonopoulos, Gavin Wood - GitHub - ethereumbook/ethereumbook: Mastering Ethereum, by Andreas M. Antonopoulos, Gavin Wood

github.com

공개되어 있는 Ethereum book을 스터디 하고 각 챕터 별로 요약을 해보려고 합니다.

이번 글은 https://github.com/ethereumbook/ethereumbook/blob/develop/01what-is.asciidoc 에 대한 요약입니다.

 

이더리움이란 무엇인가?

 - 이더리움은 "세계 컴퓨터"로 불리며 블록체인 기술을 기반으로 한 스마트 컨트랙트 실행을 가능하게 합니다.
 - 비트코인과 비교하여 더 다양한 목적으로 사용 가능한 일반 목적의 블록체인으로 개발되었습니다.
 - 높은 가용성, 감사 용이성, 투명성, 중립성을 제공하면서 동시에 검열을 줄이거나 없애며 상대방의 위험을 줄입니다.

 비트코인과의 비교

 - 이더리움은 주로 디지털 화폐 결제 네트워크가 아니라 일반 목적의 프로그래밍 가능한 블록체인으로 디자인되었습니다.

 - 이더리움은 세 가지 핵심 요소로 구성: P2P 네트워크, 이더리움 가상 머신, 블록체인 데이터베이스
 - 비트코인의 스크립트 언어는 의도적으로 소비 조건의 참/거짓 판단으로 제한되어 있는 반면, 이더리움은 튜링 완전성(Turing completeness)을 가진 언어로, 일반 목적의 컴퓨터로 기능 가능합니다.

 

블록체인의 구성요소

 - 블록체인의 구성 요소 오픈, 퍼블릭 블록체인의 구성 요소는 다음과 같습니다(보통):

  • 표준화된 "가쉽" 프로토콜을 기반으로 한 참가자들을 연결하고 거래와 검증된 거래 블록을 전파하는 P2P 네트워크
  • 상태 변환을 나타내는 거래 형태의 메시지
  • 거래가 무엇이며 유효한 상태 변경이 무엇인지 결정하는 일련의 합의 규칙
  • 합의 규칙에 따라 거래를 처리하는 상태 기계
  • 검증 및 수용된 상태 전환을 모두 기록하는 암호화 보안 블록체인
  • 참가자들이 합의 규칙의 시행에 협력하도록 강제함으로써 블록체인의 제어를 분산화하는 합의 알고리즘
  • 열린 환경에서 상태 기계를 경제적으로 보호하기 위한 게임 이론적으로 타당한 인센티브 제도(예: 작업 증명 비용 및 블록 보상)
  • 위의 구성 요소 중 하나 이상의 오픈 소스 소프트웨어 구현("클라이언트")

 

이더리움의 탄생

 - 이더리움의 탄생 배경: 비트코인 모델의 한계를 극복하고 확장하려는 시도에서 출발

 - 비탈릭 부테린의 아이디어: 2013년 튜링 완전한 범용 블록체인에 대한 초기 백서 공유

 - 초기 참가자들의 합류: Gavin Wood 등 초기 참가자들이 비탈릭의 아이디어에 동참하고 개발에 기여

 - 이더리움의 비전 변화: 프로그래머블한 돈을 구축하는 플랫폼에서 블록체인 기반 일반 컴퓨팅 플랫폼으로 발전

 - 프로토콜 계층 구축: 2013년 12월부터 비탈릭과 Gavin은 이더리움 프로토콜을 개발

 - 이더리움의 목적: 특정 응용 프로그램에 초점을 맞추지 않고 다양한 애플리케이션을 지원할 수 있는 일반 목적의 블록체인

 - 세부 사항 추상화: 이더리움 플랫폼은 개발자들이 기본 메커니즘을 구현할 필요 없이 특정 애플리케이션을 프로그래밍할 수 있도록 설계

 - 기존 기술의 혁신적 결합: 비탈릭과 Gavin은 기존 기술을 혁신적인 방법으로 결합하고 프로토타입 코드를 제공

 - 개발 기간: 창립자들은 몇 년 동안 이더리움의 비전을 구축하고 개선했습니다.

 - 이더리움의 출시: 2015년 7월 30일 첫 번째 이더리움 블록이 채굴되었습니다.- 웹 3.0 개념과 결합하여 스마트 컨트랙트와 분산 애플리케이션(DApp) 개발이 가능하도록 함

 - 큰 개발자 커뮤니티가 형성되어 있어 다양한 자료와 지원이 가능

이더리움 개발의 단계

 - Frontier (블록 #0) - 이더리움의 초기 단계 (2015년 7월 30일~2016년 3월)

 - Ice Age (블록 #200,000) - 난이도 증가를 도입한 하드 포크

 - Homestead (블록 #1,150,000) - 이더리움의 두 번째 단계 (2016년 3월)

 - DAO (블록 #1,192,000) - 해킹된 DAO 스마트 컨트랙트 피해자에게 보상을 주는 하드 포크

 - Tangerine Whistle (블록 #2,463,000) - 가스 계산 변경 및 DoS 공격에 의한 상태 축적해소를 위한 하드 포크

 - Spurious Dragon (블록 #2,675,000) - DoS 공격 벡터, 상태 초기화, 리플레이 공격 보호를 목적으로 하는 하드 포크

 - Metropolis Byzantium (블록 #4,370,000) - 이더리움의 세 번째 단계 (2017년 10월)

 - Metropolis Constantinople - Metropolis의 다음 하드 포크 (계획됨)

 - Serenity - 이더리움 배포의 최종 단계 (예정)웹 3.0 개념과 결합하여 스마트 컨트랙트와 분산 애플리케이션(DApp) 개발이 가능하도록 함

 

이더리움: 일반 목적의 블록체인

 - 비트코인 블록체인: 비트코인 소유 상태 추적하는 분산 합의 상태 기계

 - 이더리움: 화폐 소유 상태뿐 아니라 일반 목적의 데이터 저장소 상태 추적

 - 키-값 데이터 저장소: 임의의 값을 키를 사용해 저장하는 저장소

 - 무작위 접근 메모리 비유: 이더리움 메모리가 일반 목적 컴퓨터의 RAM과 유사한 목적 제공

 - 코드 및 데이터 추적: 이더리움 블록체인을 사용해 메모리의 코드와 데이터 상태 변경 추적

 - 상태 기계 코드 실행: 이더리움은 코드를 실행하여 블록체인에 상태 변경 저장하기 위해 상태 기계에 코드 로드 가능

 - 합의 규칙과 분산 상태: 이더리움의 상태 변경은 합의 규칙에 따라 관리되며 전세계적으로 분산됨

 - 세계적 컴퓨터: 이더리움은 임의의 상태 추적 및 합의를 통해 작동하는 세계적 컴퓨터를 제공하는 블록체인 기반 플랫폼

 

이더리움의 구성 요소들

- P2P 네트워크: 이더리움은 TCP 포트 30303에서 작동하는 이더리움 메인 네트워크에서 실행되며, ÐΞVp2p 프로토콜을 사용합니다.

 - 합의 규칙: 이더리움의 합의 규칙은 참조 사양인 황서(Yellow Paper)에서 정의됩니다.

 - 트랜잭션: 이더리움 트랜잭션은 송신자, 수신자, 가치 및 데이터 페이로드를 포함하는 네트워크 메시지입니다.

 - 상태 기계: 이더리움 상태 변환이 이더리움 가상 머신(EVM)에서 처리됩니다. EVM은 스택 기반 가상 머신으로 바이트 코드를 실행합니다.

 - 데이터 구조: 이더리움의 상태는 각 노드의 데이터베이스(일반적으로 Google의 LevelDB)에 로컬로 저장되며, Merkle Patricia Tree라는 직렬화된 해시 데이터 구조에 트랜잭션과 시스템 상태가 포함됩니다.

 - 합의 알고리즘: 이더리움은 비트코인의 합의 모델인 나카모토 합의(Nakamoto Consensus)를 사용하며, PoW 기반으로 최장 체인과 현재 상태를 결정합니다. 그러나, 가까운 미래에 PoS 기반 투표 시스템인 캐스퍼(Casper)로 이동할 계획입니다.

 - 경제적 보안: 이더리움은 현재 Ethash라는 PoW 알고리즘을 사용하고 있으나, 미래에는 PoS로 전환될 예정입니다.

 - 클라이언트: 이더리움은 Go-Ethereum (Geth)과 Parity와 같은 상호운용 가능한 클라이언트 소프트웨어 구현을 여러 가지 제공합니다.

 

추가 정보 참고 자료들

 - 이더리움 옐로우 페이퍼(Yellow Paper): https://ethereum.github.io/yellowpaper/paper.pdf

 - 더 넓은 관객을 위한 비공식적 언어로 쓰여진 베이지 페이퍼(Beige Paper): https://github.com/chronaeon/beigepaper

 - ÐΞVp2p 네트워크 프로토콜: http://bit.ly/2quAlTE

 - 이더리움 가상머신 관련 정보 모음: http://bit.ly/2PmtjiS

 - LevelDB 데이터베이스 (블록체인 로컬 복사본 저장에 가장 많이 사용됨): http://leveldb.org

 - Merkle Patricia 트리: https://github.com/ethereum/wiki/wiki/Patricia-Tree

 - Ethash PoW 알고리즘: https://github.com/ethereum/wiki/wiki/Ethash

 - Casper PoS v1 구현 가이드: http://bit.ly/2DyPr3l

 - Go-Ethereum (Geth) 클라이언트: https://geth.ethereum.org/

 - Parity 이더리움 클라이언트: https://parity.io/

 

이더리움 튜링 완전성

 - 이더리움은 비트코인과 달리 튜링 완전성을 가지고 있습니다.

 - 튜링 완전성이란: 영국의 수학자 앨런 튜링의 이론을 의미하며, 모든 튜링 기계를 시뮬레이션할 수 있는 시스템을 말합니다.

 - 앨런 튜링의 업적: 1936년 상태 기계를 통해 기호를 읽고 쓰는 컴퓨터의 수학적 모델 개발, 일부 문제는 미해결(uncomputable)함을 증명 하였습니다.

 - 이더리움의 튜링 완전성: 이더리움 가상 머신(EVM)에서의 저장 프로그램 실행과 메모리 활용 덕분에 튜링 완전한 시스템이며, 이는 유니버설 튜링 기계(UTM)로 불립니다.

 - 이더리움의 혁신: 저장 프로그램 컴퓨터와 분산 블록체인의 결합을 통해 전세계 단일 상태(싱글톤)의 컴퓨터 생성, 합의 규칙에 의해 보안된 공통 상태를 만듭니다. 

 

튜링 완전성이 "기능"으로 취급되는 이유

 - 튜링 완전성이 없는 시스템이 결핍된 것이라고 생각할 수 있지만, 그보다는 튜링 완전성이 쉽게 이루어질 수 있는 특성 때문입니다. 실제로 가장 간단한 튜링 완전 상태 기계는 4개의 상태와 6개의 기호를 사용하며, 상태 정의는 22개의 명령만 필요합니다.

 - 튜링 완전성은 공개 접근 시스템, 예를 들면 공개 블록체인에서 꽤 위험한 특성을 가집니다. 그 이유는 앞서 언급한 정지 문제(halting problem) 때문입니다. 현대 프린터는 튜링 완전성을 지니고 있어 동결 상태에서 인쇄를 지시할 수 있습니다.

 - 이더리움이 튜링 완전하다는 것은 이더리움이 어떤 복잡도의 프로그램이라도 계산할 수 있다는 의미입니다. 하지만, 이러한 유연성은 일부 까다로운 보안 및 리소스 관리 문제를 가져옵니다. 불응하기 시작한 프린터는 끄고 다시 켤 수 있지만 이는 공개 블록체인에서는 불가능합니다.

 

튜링 완전성의 함의

 - 튜링은 프로그램의 종료 여부를 컴퓨터에서 시뮬레이션하여 예측할 수 없음을 증명했습니다. 단순히 말해서 프로그램을 실행하지 않고는 그 경로를 예측할 수 없습니다.

 - 튜링 완전한 시스템은 무한 루프를 돈다는데, 이는 종료되지 않는 프로그램을 설명하는 용어로 간단히 표현됩니다. 종료되지 않는 루프가 예기치 않게 발생할 수 있기 때문에 초기 조건과 코드간 복잡한 상호작용이 발생합니다.

 - 이더리움에서 이는 도전이 됩니다. 모든 참여 노드는 각 거래를 검증하고, 거기에 포함된 스마트 계약을 실행해야 합니다. 튜링은 이더리움이 스마트 계약이 종료되는지, 얼마나 오래 실행되는지 예측할 수 없음을 보여주었습니다.

 - 이 문제에 대한 해결책으로 이더리움은 가스라는 계량 메커니즘을 도입했습니다. 스마트 계약 실행 중 EVM은 각 명령어(계산, 데이터 접근 등)의 가스 소모량을 계산해 결정합니다.

 - 하지만 가스는 거래소에서 찾을 수 없습니다. 거래에 포함된 이더로만 구매할 수 있으며, 계약 필요한 가스의 양과 가격을 명시해야 합니다. 가스는 이더리움이 자원 사용에 제한을 두면서 튜링 완전한 계산을 허용하는 매커니즘입니다.

 - 이더리움의 세계 컴퓨터에서 이러한 계산을 하는 데 필요한 가스를 얻기 위해서는 이더가 필요합니다. 가스가 사용되고 남은 가스는 거래 송신자에게 환불됩니다.

 

일반 목적 블록체인에서 탈중앙화 애플리케이션(DApps)으로

 - 이더리움은 다양한 용도로 프로그래밍할 수 있는 일반 목적의 블록체인을 만드는 것으로 시작했습니다. 그러나 이더리움의 비전은 매우 빠르게 확장되어 DApps를 프로그래밍하는 플랫폼이 되었습니다. DApps는 스마트 계약보다 더 넓은 관점을 제시합니다. DApps는 최소한 스마트 계약과 웹 사용자 인터페이스입니다. 보다 일반적으로, DApps는 개방적이고 탈중앙화된 P2P 인프라 서비스 위에 구축된 웹 애플리케이션입니다.

 - DApp은 다음 구성 요소로 이루어져 있습니다:

  • 1. 블록체인 상의 스마트 계약
  • 2. 웹 프론트엔드 사용자 인터페이스

또한, 많은 DApps는 다른 탈중앙화된 구성 요소를 포함합니다:

  • 1. 탈중앙화된 (P2P) 스토리지 프로토콜 및 플랫폼
  • 2. 탈중앙화된 (P2P) 메시징 프로토콜 및 플랫폼

팁: DApps를 ÐApps로 표기할 수도 있습니다. Ð 문자는 이더리움을 참조하는 "ETH"라는 라틴 문자입니다. 이 문자를 표시하려면 유니코드 코드포인트 0xD0 또는 필요한 경우 HTML 문자 엔티티 eth (또는 10진수 엔티티 #208)를 사용하십시오.

 

인터넷의 제 3시대

 - Web 2.0에서 web3로 진화

 - Web 2.0: 사용자 생성 컨텐츠, 반응형 인터페이스, 상호작용에 초점

 - DApps: 월드 와이드 웹을 탈중앙화와 P2P 프로토콜 활용한 발전 단계로 이끔

 - web3: 중앙 집중식에서 탈중앙화 프로토콜 기반 애플리케이션으로의 발전

 - Ethereum web3.js: 브라우저 상에서 실행되는 JavaScript 애플리케이션과 이더리움 블록체인 연결

 - Swarm과 Whisper: P2P 스토리지 네트워크와 메시징 서비스 인터페이스 포함

 - 웹3 DApps 개발 스위트: 개발자들이 전체 애플리케이션을 구축할 수 있는 도구 제공

 

이더리움과 비트코인 개발문화 차이

 - 비트코인: 보수적 원칙에 따라 발전, 항상 충분한 연구를 거침

 - 이더리움: 미래 중심의 개발문화, 빠른 혁신과 발전

 - '빠르게 움직여서 사물을 부수자'라는 버릇진 않은 이더리움 개발 방식

 - 필요한 변경이 있으면 하위호환성 깨고, 클라이언트 업데이트 시키더라도 실시

 - 개발자는 유연하게 대처, 기반 가정의 변화에 수용할 준비 필요

 - 불변 시스템에 코드 배포와 발전하는 개발 플랫폼 간의 모순성

 - 스마트 계약 업그레이드 어려움, 새로운 계약 배포와 사용자 이전 준비

 - 아직 완전한 자율성과 탈중앙화 목표 완수 못함

 - 이더리움에서의 안정성 필요한 플랫폼보다 다소 부족

 - 적어도 몇 년간 이더리움에 부족한 안정성을 물리적 업그레이드로 근복

 - 긍정적 측면은, 이더리움이 매우 빠르게 발전, 소극적인 관리 효과

 - '자전거 창고' 문화 : 작은 디테일을 변명삼아 발전을 지연시키는 문화

 - 이더리움은 변화를 수용하며 빠르게 발전, 지속적인 혁신 중심의 개발자들의 추격이 필요함.

 

이더리움이 인기 있는 이유

- 웹 3.0 개념과 결합하여 스마트 컨트랙트와 분산 애플리케이션(DApp) 개발이 가능하도록 함
- 큰 개발자 커뮤니티가 형성되어 있어 다양한 자료와 지원이 가능

 

이더리움 배우기의 중요성

- 다양한 분야의 기술을 동시에 다룰 수 있는 플랫폼으로 프로그래밍, 정보 보안, 암호학 등을 지식 확장
- 개발자 친화적인 블록체인으로 빠르게 개발 실력 향상 가능
- 이 책에서는 이더리움의 모든 요소를 자세히 알아보고 실제 애플리케이션 개발 방법을 습득할 수 있음

728x90