본문 바로가기

Blockchain/Blockchain In Action

[Blockchain In Action] 1장 블록체인의 기초.

Blockchain In Action 1장.


블록체인 인 액션 책을 읽고 공부한 내용을 기록한 글 입니다.
글에 나와있는 내용과 사진은 모두 블록체인 인 액션에 포함된 내용 혹은 이를 정리한 것 입니다.
문제가 될 시 삭제하겠습니다.

블록체인 이해하기

많은 사람들은 초기에 은행과 같은 중개자 없이도 인간이 만든 경계를 넘어 전 세계 누구에게나 디지털 화폐를 P2P로 전송할 수 있다는 사실에 열광했다.
트랜잭션은 소유권, 증서, 음악, 예술, 비밀 코드, 회사들 간의 계약, 자율 운행 결정, 매일 일어나는 일상 활동에서 비롯되는 수많은 결과물을 포함한다.
트랜젝션 레코드는 블록체인 프로토콜과 애플리케이션에 기반한 다른 상세 정보도 아우른다.

책에 나와있는 그림 1.2 (이더리움 퍼블릭 블록체인의 스냅샷)을 보면,
각 블록은 트랜잭션들의 집합으로 이루어져 있고, 블록 넘버로 식별한다.
(블록 10163275는 142개의 트랜잭션을 가지고 있다.)
사이트를 방문할 때마다 보이는 블록들이 매번 달라진다.
하지만 특정 블록 넘버로 검색해 볼 수 있고, 몇 개의 Tx(트랜잭션)을 가지고 있는지 확인할 수 있다.
이러한 부분이 바로 블록체인의 변조 불가능 속성을 보여주는 예시라고 할 수 있다. 

Blockchain-In-Action 그림 1.2

블록체인은 피어 참가자들 간의 트랜잭션으로 이루어진 탈중앙화 시스템에 신뢰를 구축해주는 기술이다. 
여기까지는 솔직히 잘 감이 오지 않는다. 
블록체인의 목적은 참여자들이 올린 트랜잭션을 확인하고 검증해주며, 검증에 실패시는 거부, 성공했을 시는 실행해주며,
각 참여자의 동의 하에 이러한 일련의 과정들을 증거로서 남겨두는 것이다.
그림 1.3은 책에 나와있는 블록체인 기반 신뢰 인프라를 나타낸 그림이다.

Blockchain-In-Action 그림 1.3

블록체인 스택에서는 세 가지 레벨에 대한 프로그래밍을 보여준다.

Blockchain-In-Action 그림 1.4

  1. 프로토콜 레벨 프로그래밍
    • 이 레벨은 블록체인 자체의 배포와 오퍼레이팅을 위해 필요한 소프트웨어와 관련된 것이다. 이 소프트웨어는 오퍼레이팅 시스템이나 네트워킹 소프트웨어와 유사하다. 시스템 프로그래머나 운영자가 이 레벨의 프로그래밍을 다룬다.
  2. 스마트 컨트랙트 레벨 프로그래밍
    • 이 레벨은 확인과 규칙을 위한 규칙을 설계 및 프로그래밍 하는 레벨이다. 해당 블록체인에 기록할 데이터와 메세지를 규정하는 스마트 컨트랙트(또는 룰 엔진) 프로그래밍에 관한 것이다. 스마트 컨트랙트는 사용자 애플리케이션을 대신해 블록체인을 가동해 줄 엔진이다. 
  3. 애플리케이션 레벨 프로그래밍
    • 이 레벨은 블록체인 프로토콜 외부에 있는 웹 애플리케이션 프레임워크와 유저 인터페이스 설계 콘셉트들을 이용해 프로그래밍 하는 것이다. 

 

Dapp = 신뢰 중개를 구현한 블록체인 함수들을 구동시키는 애플리케이션 로직을 가진 웹 또는 엔터프라이즈 애플리케이션을 말한다. 


Smart Contract = Dapp의 로직을 표현해주는 변조 불가능하고 실행 가능한 코드다. 스마트 컨트랙트에서 정의한 데이터 변수와 함수들은 블록체인에서 확인, 저장, 검증을 가능케하는 Dapp의 규칙을 강제하기 위한 상태와 오퍼레이션을 집합적으로 표현한다.

Node = 탈중앙화 시스템의 참여자들을 위한 블록체인 소프트웨어와 그것이 설치된 장비 또는 하드웨어를 집합적으로 부르는 말.


블록체인 프로그래밍

블록체인 프로그래밍을 차별화하는 4 가지의 근본적인 개념이 있다. 

  1. 블록체인 인프라
    • 블록체인 프로토콜, 스마트 컨트랙트, 애플리케이션을 지원하는 특정한 컴퓨팅 하드웨어와 소프트웨어 스택.
    • 이러한 인프라의 주 구성 요소는 컴퓨팅 노드와 이 노드들을 연결하는 네트워크다.
    • 블록체인 인프라는 도시를 연결하는 철도나 도로처럼 내재적으로 탈중앙화가 이루어져 있다.
    • Dapp을 배포한다는 것은 철도나 도로위에 기차 및 자동차를 배치하는 것과 같다.
  2. 분산 장부 기술
    • 인프라 위에 장부가 있는데, 모든 참여자의 장부에 트랜잭션과 데이터를 동시에 기록한다.
    • 장부는 모든 참여자가 동일한 사실을 공유하고 있기 때문에 분산되어 있다고 할 수 있다.
    • 각 블록은 이전 블록의 서명과 연결되어 immutable하다.
  3. 탈중개 프로토콜
    • 탈중앙화 시스템의 참여자들은 상호 간에 연결하고 통신하고 거래하기 위해 동일한 블록체인 프로토콜을 사용한다. 
    • 프로토콜은 모두가 따라야 할 규칙의 집합.
  4. 신뢰 확립자
    • 탈중앙화 참여자 시스템은 중개자가 없다.
    • 그러므로 중개자 없이도 Governance 검사, 준수 등에 대한 규칙을 구현하여 거의 자동으로 처리하는 인프라가 필요하다.
    • 블록체인 소프트웨어는 신뢰 확립자의 역할을 맡는다.

탈중앙화 시스템이란?

 

탈중앙화 시스템이란 분산 시스템의 일종이다.

이 안에서 각 참여자들은 P2P로 소통하고, 참여자들은 디지털이든 아니든 자신의 자산을 통제한다. 

참여자들은 자신의 의사에 따라 참여하거나 떠날 수 있다.

참여자들은 통상의 신뢰 경계를 넘어서서 행위를 한다.

결정은 중앙화 기관이 아니라 분산된 참여자들이 내린다.

블록체인과 같은 자동화된 소프트웨어가 상호간 중개를 담당한다.


블록체인 노드, 네트워크, 그리고 애플리케이션

각 블록체인의 노드들은 트랜잭션의 엔드포인트로서 작동에 필요한 컴퓨팅 환경을 호스팅하고, 트랜잭션을 릴레이하며, 브로드캐스팅하는 기능을 수행한다. 

Blockchain-In-Action 그림 1.5

 

하나의 노드는 탈중앙화 네트워크에서 피어 참여자들의 아이덴티티를 나타내는 다수의 어카운트를 지원할 수 있다.
256비트 주소가 각 어카운트를 나타낸다.

블록체인 노드는 그림 1.5의 스택이 나타내고 있는 요소들을 호스팅한다.


아래 두 개의 레벨은 대부분의 컴퓨팅 시스템이 가진 표준적인 하드웨어와 소프트웨어이다.


그 위 레벨은 블록체인 프로토콜 레벨에 해당하며, 블록체인 컴포넌트들을 포함한다. 트랜잭션과 블록 합의 같은 블록체인의 규칙 및 기능을 구현하는 레벨이다.


그 위의 '가상머신 샌드박스 상의 애플리케이션 로직' 이 데이터 액세스 컨트롤, 확인, 검증, 그리고 저장을 위한 함수 코딩과 같은 로직 및 환경을 구현하는 레벨이다.


가장 상위 레벨은 사용자를 마주하는 인터페이스이다. 이 곳에서 HTML, Javascript, 관련된 프레임워크와 웹(엔터프라이즈) 프로그래밍이 이루어진다. 

이러한 요소들은 Dapp과 유저 인터페이스 레이어를 구성한다. 하나의 노드는 다수의 Dapp같은 것들을 동시에 호스팅 할 수 있다. 

이러한 개념들을 그림으로 펼치면 다음 그림 1.6과 같다.

위에서 설명한 5가지의 레벨로 이루어진 노드, 그러한 노드 3개가 네트워크를 통해 연결되어 있는 모습이다. 

네트워크 식별자를 가지고 블록체인 노드 네트워크를 식별하는데, 스마트 컨트랙트를 네트워크에 배포할 때, 네트워크의 식별자를 이용해서 어느 네트워크를 사용하는 것인지를 표시해 주어야만 한다. 주어진 단일한 네트워크를 공유하는 참여자들은 트랜잭션의 내용을 저장하기 위해 단일한 분산 장부를 공유한다. 

스마트 컨트랙트는 블록체인 노드가 호스팅하는 가상 머신과 같은 샌드박스 환경에서 실행된다. 스마트 컨트랙트의 구문은 객체 지향언어의 클래스와 유사하다. 이것은 데이터, 함수, 각 함수를 실행하기 위한 규칙들을 담고 있다. 

스마트 컨트랙트를 함수를 호출하거나 실행하면 블록체인에 기록할 트랜잭션을 생성한다. 만일 확인 검증 규칙에 위배되면, 이 함수 호출은 취소된다. 그러나 성공적일 경우에는 트랜잭션을 저장하기 위해 네트워크에 브로드캐스팅된다.

즉, 애플리케이션 메세지에서 블록체인의 Tx가 된다. 

책에 나와있는 그림 1.7에 이러한 과정을 이해하기 쉽게 표현되어 있다.

Blockchain-In-Action 그림 1.7


트랜잭션, 블록, 그리고 블록의 체인

애플리케이션(아마도 Dapp?)은 트랜잭션과 스마트 컨트랙트 코드 실행을 시작한다. 코드를 실행하면 트랜잭션을 생성하고, 성공했을 시에 블록체인 네트워크를 통해 이 트랜잭션을 브로드캐스팅하고 변조 불가능한 코드 장부에 기록한다.

수집한 네트워크의 트랜잭션들은 검증 단계를 거쳐서 풀로 모인다. 노드는 블록을 만들기 위해 풀에서 트랜잭션들을 골라서 세트를 만든다. 트랜잭션들을 고르는 기준은 일반적으로 트랜잭션에 책정된 수수료이다. 수수료가 비싼 트랜잭션부터 선택된다.

참여 노드들은 합의 알고리즘을 이용해 기존 체인에 추가될 트랜잭션들을 포함하는 하나의 블록에 대해 집합적으로 동의, 합의를 한다.

그리고 나면 체인의 현재 리드 블록을 나타내는 값, 즉 해시를 새롭게 추가될 블록에 더해서 체인 링크를 만든다.

책의 그림 1.8이 보여주는 것처럼, 블록체인은 추가만 허용하는 변조 불가능한 분산 장부다. 첫 번째 블록은 제네시스 블록이라고 부른다.

제네시스 블록에서 블록체인을 생성하고, 블록체인에 참여하는 모든 노드는 제네시스 노드로부터 시작해서 모두 동일한 블록체인 복사본을 가진다. 

Blockchain-In-Action 그림 1.8

그림 1.9는 각 노드가 동일한 복사본을 가지고 있다는 사실을 표현해주는 그림.

Blockchain-In-Action 그림 1.9