‘마스터링 이더리움’ 세미나 1 – 1장. 이더리움이란무엇인가
감수자의 글 , 옮긴이 머리말, 이 책에 대하여, 베타리더 후기까지 가볍게 읽어 봅니다. 감수자의 글에서 아래 인용한 부분은 주의를 기울여 읽어 보기를 권합니다.
- 탈중앙화된 블록체인과 이에 기반을 둔 애플리케이션은 기술적효율성의 향상자체가 목적이라기보다는 ‘신뢰’를 구축하기 위한 사회/경제적 비용을 줄여서 중앙화된 주체에 의존하지 않게 되거나 덜 의존하게 만들고, 나아가 이러한 기술이 사용되는 사회적 맥락에 대한 근본적인 재성찰을 요구하고 있다.
- 이더리움은 탈중앙화 가치에 매우 강한 집착을 가지고 있으면서도 블록체인에 기반을 둔 애플리케이션이 사회 전 분야에 걸쳐서 사용될 수 있도록 노력하고 있는, 매우 야심만만한 네트워크이자 커뮤니티다.
- 탈중앙성을 훼손하고 확장성의 문제를 해결하려는 많은 경쟁 솔루션이 선택하는 쉬운 길을 마다하고 어렵고 시간이 오래 걸리는 길을 선택하고자 하는 것은 블록체인의 근본적인 가치에 대한 확고한 신념 때문이다.
- 제가 이더리움을 지지하는 이유도 이 때문입니다.
1장. 이더리움이란 무엇인가?
누군가에게 ‘이더리움이 무엇인지’에 대해 설명해야 한다고 생각하고 첫 페이지를 읽습니다.
이더리움이 무엇인지를 설명하려면, 먼저 ‘블록체인이 무엇인지’를 설명해야 할 것 같습니다. 블록체인에서 이더리움을 어떻게 포지셔닝 하느냐에 따라 추가적으로 설명해야 할 것이 있을 것 같습니다. 저는 이더리움을 블록체인 플랫폼으로 포지셔닝하니 ‘블록체인 플랫폼으로서의 이더리움’에 대해서 설명해야 합니다.
다른 플랫폼 개념과 마찬가지로, 블록체인 플랫폼을 사용해서 블록체인을 잘 모르더라도 쉽게 블록체인(서비스)을 개발할 수 있습니다. 여기서 ‘어떻게’에 답하려고 하면 개발자 관점에서 탈중앙화된 애플리케이션 개발에 대해서 설명해야 할 것입니다. 여기서 또 다시 ‘어떻게’에 답하기 위해선 좀 더 깊이 들어가야 하고, 스마트 컨트랙트에 대해서 설명해야 할 것입니다. 스마트 컨트랙트가 어떻게 동작하는지를 설명하려면 실용적인 관점과 컴퓨터 과학 관점의 설명을 해야 할 것 같습니다.
이더리움 진영은 이더리움을 ‘월드 컴퓨터’라고 포지셔닝 하기를 원하는 것 같습니다. 그들의 바램대로 ‘월드 컴퓨터로서의 이더리움’을 설명해 봅시다. ‘월드’와 ‘컴퓨터’.
본문에서 컴퓨터 과학 관점에서 설명할 때 ‘이것은 전역적으로 접근 가능한 싱글톤 상태와 그 상태를 변화시킬 수 있는 가상 머신으로 구성되어 있다’라고 합니다. 이 설명을 보면, ‘월드 컴퓨터’란 ‘글로벌 하게 한 대만 존재하는 컴퓨터’를 의미하는 것으로 보입니다. 물론 실제로 그렇다는 것이 아니라 의미적으로 그렇다는 거겠죠.
- From a computer science perspective, Ethereum is a deterministic but practically unbounded state machine, consisting of a globally accessible singleton state and a virtual machine that applies changes to that state.
- deterministic이 의미하는 바에 대해서 논의해 봅니다.
실용적인 관점의 설명을 보면, ‘월드 컴퓨터’를 가능하게 하는 방법으로 블록체인과 가상 머신에서 실행되는 프로그램이라는 개념을 도입했다는 것을 알 수 있겠죠. ‘이더’도 설명하고 있는데 너무 세부적으로 들어가네요. 이에 대해서는 이더리움이 무엇인가에서 설명하지 않는게 좋을 것 같고, 9페이지의 ‘이더리움과 튜링 완전’과 같이 분리된 곳에서 설명하면 될 것 같습니다.
- From a more practical perspective, Ethereum is an open source, globally decentralized computing infrastructure that executes programs called smart contracts. It uses a blockchain to synchronize and store the system’s state changes.
블록체인 플랫폼으로서 이더리움을 포지셔닝 한다면, 개발자는 스마트 컨트랙트를 작성하는 것만으로 블록체인 특성을 갖는 애플리케이션을 작성할 수 있게 됩니다.
- The Ethereum platform enables developers to build powerful decentralized applications with built-in economic functions. While providing high availability, auditability, transparency, and neutrality, it also reduces or eliminates censorship and reduces certain counterparty risks.
비트코인과의 비교
비트코인을 제대로 학습하고 나면 이더리움 학습은 생각보다 쉽습니다. 이더리움이 비트코인의 많은 부분을 계승하고 있기 때문입니다. 그렇다고 학습 해야 할 것이 적다는 것은 아닙니다. 이더리움의 꿈(3세대 웹)이 원대한 만큼 그 꿈을 이루기 위한 수단들도 많이 필요하기 때문입니다.
눈치 빠른 분들은 별 다른 정의 없이 이더리움을 ‘플랫폼’으로 언급하고 있음을 발견했을 것입니다. 플랫폼은 제가 가장 선호하는 가장 짧은 이더리움에 대한 정의입니다. 이더리움은 ‘블록체인 플랫폼’입니다. 비트코인과 비교해 보면, ‘비트코인은 블록체인, 이더리움은 블록체인 플랫폼’.
블록체인 플랫폼이 되려다보니 튜링 완전 프로그래밍이 가능해야 했고, 튜링 완전 프로그래밍이 가능해 지다 보니 애플리케이션을 만들 수 있게 되었고, 블록체인 플랫폼 위에서 실행되는 애플리케이션이니 블록체인이라고 부를 수 있는 특성을 가진 애플리케이션이 되었고, 블록체인의 특성을 갖는 애플리케이션은 자연스럽게 탈중앙화된 애플리케이션이 되는 거고. 어떤 기능(예를 들어 화폐 기능)을 탈중앙화하기 위해 블록체인과 관련 기능을 모두 직접 개발하는 것이 아니라, 이더리움이라는 블록체인 플랫폼에서 블록체인 기능은 플랫폼이 제공해 주니 필요한 기능만 만들라는 것이고.
‘비트코인이 옳다(낫다), 이더리움이 옳다(낫다)’ 이런 거는 하지 맙시다. 불필요한 시간 낭비고 에너지 낭비입니다. 그냥 ‘비트코인은 비트코인으로, 이더리움은 이더리움으로’ 이해하고 배우면 됩니다.
블록체인 구성요소
공개 블록체인의 구성요소를 매우 잘 정의하고 있습니다. 정의를 5번 이상 읽고 가능하면 외워보고, 그 의미를 다시 한 번 깊이 새겨둘 필요가 있습니다.
공개 블록체인의 구성요소는 일반적으로 다음과 같다.
- A peer-to-peer (P2P) network connecting participants and propagating transactions and blocks of verified transactions, based on a standardized “gossip” protocol
- 상태 전이를 나타내는 트랜잭션 형식의 메시지
- A set of consensus rules, governing what constitutes a transaction and what makes for a valid state transition
- 합의 규칙에 따라 트랜잭션을 처리하는 상태 머신
- A chain of cryptographically secured blocks that acts as a journal of all the verified and accepted state transitions
- A consensus algorithm that decentralizes control over the blockchain, by forcing participants to cooperate in the enforcement of the consensus rules
- A game-theoretically sound incentivization scheme (e.g., proof-of-work costs plus block rewards) to economically secure the state machine in an open environment
- 위에서 언급한 것들을 구현한 하나 이상의 오픈 소스 소프트웨어(clients)
아래 정리한 내용도 주의를 기울여 읽어 봅니다.
- 비트코인 등장 이후 ‘블록체인’이라는 용어의 등장. 다양한 성격의 블록체인들 등장. 다 같은 블록체인이 아님. 위의 구성요소들에 관해서 먼저 물어보고, 개방성(open), 공공성(public), 국제화(global), 탈중앙화(decentralized), 중립성(neutral), 검열 저항성(censorship-resistant)등과 같은 블록체인이 가지는 핵심적 성격을 식별하게 해줄 평가 기준들을 사용해서 평가해 봐야 한다.
- 비트코인은 참조 구현을 제시. 참조 구현을 비트코인 코어라고 함. bitcoind라는 오픈 소스 클라이언트로 개발되고 있음. 이더리움은 이와 달리 명세를 제공. 명세에 따라 클라이언트를 개발.
이더리움의 탄생
가볍게 한 번 읽고, 아래 인용한 본문 내용을 주의를 기울여 다시 한 번 읽어 봅니다. 이더리움은 범용 블록체인, 즉 블록체인 플랫폼으로 포지셔닝 하고 있음을 알 수 있습니다.
- 이더리움 창립자들은 프로그래밍을 통해 다양한 애플리케이션을 지원할 수 있는 특정 목적에 국한되지 않는 블록체인에 대해 생각하고 있었다. 이 생각은 이더리움과 같은 범용 블록체인을 사용하여 개발자가 피어투피어 네트워크, 블록체인, 합의 알고리즘 등의 기본 메커니즘을 구현하지 않고도, 특정 애플리케이션을 프로그래밍할 수 있다는 것이다. 이더리움 플랫폼은 세부사항을 추상화하고 탈중앙화 블록체인 애플리케이션을 위한 결정적이고 안전한 프로그래밍 환경을 제공한다.
블록체인에 대한 이해 수준이 낮은 기획자나 개발자들이 빠지는 대표적인 함정은 ‘중앙화된 앱을 솔리디티로 개발해서 이더리움에서 실행하면 탈중앙화된 앱’이 된다고 생각하는 것입니다.
블록체인이 해결하려고 했던 문제를 생각해 봐야 합니다. ‘탈중앙화’로 언급되는 해결책에서 끝나면 안 됩니다. 왜 탈중앙화할 수 밖에 없었는지를 생각해야 합니다. ‘정보의 이동’이라면 탈중앙화라는 해결책은 등장할 필요도 없었습니다. ‘가치의 이동’이 필요 했기 때문에 탈중앙화가 필연적이었다는 것을 가슴에 새기고 또 새겨야 합니다.
언젠가는 모든 웹 서비스가 중앙화된 형태에서 탈중앙화된 형태로 바뀔 날이 올지도 모릅니다. 하지만 지금은 이런 수준이 아닙니다. 중앙화된 웹 서비스가 공존하고 있는 상황에서 ‘가치의 이동’에 중점을 맞추는 것이 절대적으로 필요합니다. 블록체인이 잘 할 수 있는 것에서 부터 시작하자는 것입니다.
탈중앙화의 첫 번째 대상은 ‘가치의 이동’입니다. 디파이라 불리는 탈중앙 금융이 블록체인의 성공적인 킬러 앱이 될 수 있는 이유는 바로 가치의 이동에서 찾을 수 있습니다. 금융이 결국은 가치의 이동을 다루고, 가치의 이동에 따른 부가가치를 생성해내며, 부가가치에 추가적인 부가가치를 파생시킵니다. 기존 금융에는 가치의 이동과 가치의 이동에 따른 부가가치의 생성과 추가적인 부가가치의 파생 과정에 수많은 중간자들과 장벽들이 존재합니다.
이더리움 개발의 4단계
이더리움은 프론티어, 홈스테드, 메트로폴리스, 세레니티라는 네 가지 주요 단계에 따라 개발. 주요 단계 사이에는 중간 하드 포크가 추가될 수 있습니다. 2019년 10월 주요 단계는 메트로폴리스입니다. 세레니티는 이더리움 2.0으로 불리기도 하는데 2020년 12월 1일에 성공적으로 런칭되었습니다. 이더리움 2.0 전환은 한 번에 완료되는 것은 아니며 수년에 걸쳐 단계적으로 진행된다.
출처 : 디지털투데이 (DigitalToday)(http://www.digitaltoday.co.kr)
‘하드 포크하면 체인이 분리되어 새로운 코인이 생긴다’라고 단순하게 하드 포크를 설명하시는 분들이 있는데 이것은 잘못된 설명입니다. 소프트 포크와 하드 포크를 구분하는 기준은 ‘하위 호환성이 있느냐’입니다. 하위 호환성이 없는 경우 커뮤니티가 어떻게 받아들이냐에 따라 체인이 분리되기도 하고 그렇지 않기도 합니다.
이더리움: 범용 블록체인
이더리움을 ‘월드 컴퓨터’라고 하는 이유를 설명해 줄 수 있는 절입니다. 더 정확히는 ‘합의로 작동하는 월드 컴퓨터’.
아래 인용한 본문 내용을 여러 번 반복해서 읽어 봅니다.
- The original blockchain, namely Bitcoin’s blockchain, tracks the state of units of bitcoin and their ownership. You can think of Bitcoin as a distributed consensus state machine, where transactions cause a global state transition, altering the ownership of coins. The state transitions are constrained by the rules of consensus, allowing all participants to (eventually) converge on a common (consensus) state of the system, after several blocks are mined.
- Ethereum answers the question: “What if we could track any arbitrary state and program the state machine to create a world-wide computer operating under consensus?“
범용 컴퓨터 대부분과의 중요한 차이점 중 두 가지는 이더리움의 상태 변화가 합의 규칙에 의해 관리되고 상태가 전체적으로 배포된다는 것이다. 말하자면 이더리움은 다음과 같은 질문에 대한 대답이다. “임의의 상태를 추적하고 상태머신을 프로그래밍하여 합의로 작동하는 월드-와이드 컴퓨터를 만들수 있다면 어떨까요?
이더리움의 구성요소
아래 요약한 내용 정도는 기억해 둡시다.
- 피어투피어 네트워크
- 이더리움은 TCP 포트 30303으로 접속 가능한 이더리움 메인 네트워크에서 실행되며, ÐΞVp2p라는 프로토콜을 실행한다.
- 합의 규칙
- 트랜잭션
- 상태머신
- 이더리움 상태 전이는 바이트코드를 실행하는 스택 기반 가상 머신인 EVM에 의해 처리된다. ‘스마트 컨트랙트’라는 EVM 프로그램은 고수준 프로그래밍 언어(예: 솔리디티)로 작성되고, EVM에서 실행되도록 바이트코드로 컴파일 된다.
- 데이터 구조
- 이더리움의 상태는 트랜잭션 및 시스템 상태가 머클 패트리샤 트리라고 하는 시리얼라이지된 해시 데이터 구조로, 각 노드의 데이터베이스(일반적으로 구글의 LevelDB)에 저장된다.
- 합의 알고리즘
- 현재 이대시(Ethash)라는 작업증명 방식에서 조만간 지분증명(PoS) 가중 투표 시스템인 코드명 캐스퍼(Casper)로 전환할 계획이다.
- 경제적 보안성
- 클라이언트
- 가장 유명한 클라이언트로 게스(Geth)와 패리티(Parity)가 있다.
이더리움과 튜링 완전
다음 질문에 답하려고 노력하면서 본문을 읽습니다.
“블록체인에 있어 튜링 완전이 위험한 이유는?” – ‘정지 문제가 해결되지 않음’, ‘무한 실행 가능성’, ‘서비스 거부 공격’이 포함되도록
“이더리움은 어떻게 튜링 완전이 갖는 문제를 해결하는가?”
“블록체인에 있어 튜링 완전 위험에 대한 비트코인의 대응 방식은?”
“만약 비트코인에서 무한 실행이 발생했다면 어떤 대응이 가능할까?” – 일반적으로 여러분의 컴퓨터에서 무한 실행되는 프로그램이 있다면 해당 프로그램을 종료하거나 그래도 안 되면 컴퓨터를 종료할 수 있습니다. P2P 네트워크로 연결된 블록체인은 이런 방식이 통하지 않습니다. 이와 같은 효과를 낼 수 있는 방법을 생각해 봅니다.
“가스와 이더의 관계는?”
아래 인용한 내용을 다시 한 번 주의 깊게 읽습니다.
이더리움의 획기적인 혁신은 저장된 프로그램 컴퓨터의 범용 컴퓨팅 아키텍처와 탈중앙화된 블록체인을 결합하여 탈중앙화된 단일 상태(싱글톤) 월드 컴퓨터를 만든 것이다. 이더리움 프로그램은 ‘어디에서나’ 실행되지만, 합의 규칙에 의해 보장되는 공통 상태를 만들어 낸다.
가스는 각 프로그램이 사용할 수 있는 리소스를 제한해서 이더리움 튜링 완전 계산을 허용하는 메커니즘이다.
범용적인 블록체인에서 탈중앙화 애플리케이션(DApp)으로
DApp을 스마트 컨트랙트로 오해하지 않도록 주의하면서 본문을 읽습니다.
아래 인용한 내용을 다시 읽어 봅니다.
댑은 ‘스마트 컨트랙트’보다 넓은 의미를 갖는다. 댑은 최소 구성 요건으로 보자면, 스마트 컨트랙트와 웹 사용자 인터페이스를 합한 것이다. 좀 더 넓게 보자면, 댑은 공개되고 탈중앙화된 피어투피어 기반 서비스 위에 제공되는 웹 애플리케이션이다.
댑은 다음과 같은 탈중앙화 구성요소를 포함할 수 있다.
- 탈중앙화(P2P) 스토리지 프로토콜과 플랫폼
- 탈중앙화(P2P) 메시지 프로토콜과 플랫폼
제3세대 인터넷
이더리움은 제3세대 인터넷으로 포지션하고 있습니다. 이를 위해 블록체인 플랫폼에 더해 추가적인 요소들을 더하고 있습니다. 웹 애플리케이션으로 댑을, 저장소로 스웜을, 메시징 서비스로 위스퍼를 포함합니다. 댑 개발을 편리하게 할 수 있도록 자바 스크립트 라이브러리를 제공하는데 그 이름도 이를 반영해서 “web3.js” 입니다.
아래 인용한 내용을 다시 한 번 읽어 봅니다.
web3.js는 브라우저 안에서 실행되는 자바스크립트 애플리케이션과 이더리움 블록체인을 연결한다. web3.js 라이브러리는 또한 스웜이라는 P2P 스토리지 네트워크와 위스퍼라는 P2P 메시징 서비스를 포함한다. 이 세 가지 구성요소는 웹 브라우저에서 동작하는 자바스크립트 라이브러리에 포함되어서 개발자들은 웹3 댑을 구축할 수 있는 완전한 애플리케이션 개발 세트를 갖게 된다.
이더리움의 개발 문화
아래 인용한 내용을 기억하고, 스마트 컨트랙트 개발 시에 주의를 기울일 항목으로 정리해 둡니다.
- 이더리움에서 개발자가 직면한 가장 큰 과제 중 하나는 변경 불가능한 시스템에 코드를 배포하는 것과 여전히 진화 중인 개발 플랫폼 사이에 존재하는 본질적인 모순이다. 스마트 컨트랙트는 단순하게 ‘업그레이드’할 수 없다. 새로운 애플리케이션을 배포하고, 사용자와 앱, 자금을 이전하고 다시 시작할 준비가 되어야 한다.
- 스마트 컨트랙트를 폐기하고 재시작할 준비가 되어야 한다. 즉, 스마트 컨트랙트를 어느 정도 통제할 수 있어야 한다는 것이다.
왜 이더리움을 배우나?
이 절의 제목은 ‘왜 이더리움을 배워야 하는가?’로 바꾸는게 더 적당해 보입니다. 이더리움을 배우는 이유야 사람마다 다르겠지요.
다수의 블록체인 플랫폼들을 요구사항에 맞게 비교 선택할 수 있는 수준이 되면 ‘왜 우리는 이러한 상황에서 이더리움을 선택했는가?’에 답할 수 있을 것 같습니다.