[블록체인] 블록체인 강의 요약

[블록체인 강의 요약]


블록체인의 특징


    - 분산형 원장 : 데이터의 분리 - 각 구성 노드에서 `동일한 데이터`를 갖고 있음 (for 무결성)

    - 불가역성 : 한번 생성하면 바꿀수 없음
    	(immutable -> private의 경우 custom 형식으로 추가적인 데이터를 쌓아서
        수정,삭제한 것처럼 보여줄순 있으나, 원론적으로는 수정,삭제가 불가능하다.)
    	(여담이지만 private, public의 구분을 두는건 무리가 있다.
        외부로 확장하면 public, 내부에서 자체적으로 혹은 조그마한 단체에서 쓰면
        private으로 보도록 하자 (유동적이다.))
    	(단, 특별한 경우 (가령, 해킹이라던가...) 합의를 통해
        전체가 데이터를 수정 및 삭제를 한다면 가능하다.)

    - 익명성 : KYC (know your custom)인증은 책임의 소재를 지니기 위해 하지만,
      원론적으로는 익명성이 있다.

    - Time Sequence : 시간과 상관없이 동시적인 거래를 트랜잭션에 기록
      (DB처럼 줄세워서 저장하는 방법과는 다름)

    - 신뢰가 불필요한 신뢰 네트워크 : 거래 상대방, 거래 노드등.. 모든 것을 맹신하지 않음,
      암호학적인 측면에서 서명, 검증을 통해 신뢰를 확보
      (사람은 은행이 돈을 입출금할수 있다는 것에 대한 신뢰가 있다.)

    - 분산환경에서의 신뢰성 : 블록체인, 이더리움등.. 해커의 공격을 오랜시간 받아왔지만
      잘 지켜냄으로써 분산환경에서 신뢰성을 보여준다.

    - 모두에게 공개된 데이터 : 글로벌 환경에서 거래(트랜잭션) 기록등... 다양한 정보를 제공한다.

    - P2P Protocol : 신규 데이터가 추가되는 동기화되는 P2P 구조



블록체인의 역사


    2008 : 사토시 나카모토가 백서발표,
    2009 : 백서기반으로 여러 프로그래머들이 관리
    2010 : 라지 피자 2판를 10000BTC 주고 먹음 (현 시가 15억...)
    2011 : 사카시 나카모토가 사라지면서 컨트리뷰터들이 코드와 네트워크를 개발
    2013 : 키프로스 사태를 기점으로 2014년 초까지 비트코인 버블 발생
    (키프로스 사태 : 서양판 IMF같은 건데.. 군사적 대립으로까지 이어졌던 심각한 일)
    (국가가 어려워지면 인플레이션이 오면서 화폐의 가치가 폭락할수 있기에 글로벌한 가상화폐는 각광받을수 밖에 없다.)
    (30달러에서 1200달러까지 급등후 400달러 폭락)
    (비트코인 버블 이후 블록체인의 기술적인 가치에 집중하는 비트코인 2.0 움직임 대두)
    (Smart Contract 등으로 재조명 받으며 가격 또한 다시 상승 곡선으로 접어듦)

    이후 많은 코인들이 비트코인, 이더리움등을 벤치마킹하여 개발되어지고, 쏟아지면서 춘추전국시대 개막...(코인판)
    미래에는 더 많은 산업에서 활용될 것이며, Smart Contract 개발자의 수요 증가가 기대됨



블록체인의 중앙집중화 (Centralized Trusted 3rd Party)


    Mission Critical Data = 접근 제한, 제 3자의 보증으로 해결

    - 많은 자원 필요
    - 특정 공격에 매우 취약
    - 데이터 무결성을 검증 / 검사하기 어려움 (BlackBox Paradox)
    - 공공 / 메타 데이터의 소유권 문제



블록체인 소개


    블록이 쌓일수록 신뢰성이 증가하며, 인터넷을 통해 동기화되는 키-밸류 형식의 데이터다.

    컴퓨터를 서로 연결하여 TCP/IP라는 통신 프로토콜을 이용해 정보를 주고 받는 컴퓨터 네트워크

    - 중앙통제 조직이 없는 개방형 통신망
    - 클라이언트/서버 시스템에 기반
    - 독립적이고 고유한 IP 주소 기반
    - 특정 주소로 손실 없는 정보 공유 보장
    - 소프트웨어로 정의된 네트워크 상의 분산 데이터 레이어
    - 암호화, 위/변조 및 부인 방지등을 위한 특성 추가


    풀 클라이언트 : 비트코인 거래 정보를 전부 저장하고, 비트코인 사용자들의 지갑을 관리,
    비트코인 네트워크상으로 직접 거래를 만들 수 있음 (단점: 시간이 오래걸림...)

    라이트웨이트 클라이언트 : 사용자의 지갑을 저장하긴 하지만, 거래나 네트워크에 접근하기 위해서는
    제 3자가 소유한 서버에 의존, 거래내용을 모두 복제해서 저장하지 않아서 시간을 단축할 수 있다.

    웹 클라이언트 : 웹 브라우저를 통해 접속하며 제3자가 소유한 서버 상에 사용자의 지갑을 저장함.
    (독립형 이메일 서버와 유사함)



블록체인 관련 지식

  1. Hash란?


    - data를 고정 길이의 고유 데이터로 변형하는 함수

    - 여러가지 방식 존재 (SHA 256, SHA 512, HASH160 등...)

    - Cryptographic Hash Function은 단방향으로 생성
      (단방향이란, data에서 hash Value를 생성할 수 있지만 hash value에서 data로 되돌아 갈 수 없음을 의미)

    - 값들에 대해서 항상 다른 hash value를 생성

    - 동일한 값에 대해서 항상 동일한 hash value 생성


  1. Merkle Root Hash


    블록의 구조는 크게 블록헤더와 블록바디 정보로 구성됨 (linkedList - 트랜잭션 집합과 블록헤더로 조합한게 블록)
    블록의 바디정보는 각 거래정보인 트랜잭션들의 정보로 구성됨 (트랜잭션 집합)
    '머클루트' : 블록의 바디정보에 저장된 트랜잭션의 정보들이 유효한지 빠르게 검사하기 위한 역할을 수행하는 것
    블록체인의 원소 역할을 수행하는 블록의 부분에 저장된 트랜잭션들의 해시트리

    머클트리의 목적은 빠른 검색이 아니라 데이터의 간편하고 확실한 인증(빠르고 확실한 검사)을 위해 사용


    최초 데이터를 SHA256 형태의 해시값으로 변환
    가장 가까운 노드 2개를 한쌍으로 묶어 합친 후 해시값으로 변환
    계속해서 해시값으로 변환하여 마지막 하나가 남을때까지 이 과정을 반복


  1. 주소 (Address)
    서명과 검증 관여
    비공개키(편의상 비밀번호)에서 단방향으로 생성
    주소를 기준으로 트랜잭션 집합 생성
    잔고 개념
    기존에 사용하던 등록의 개념인 별도 등록이라는 과정이 없음

암호화복호화
주소생성과정

결론 : 블록체인은 진짜 100% 무결한 건 아니지만 굉장히 안전하다.



트랜잭션과 스마트 컨트랙트


비공개키 소유자 (개인키로 암호화) -> 서명 문서 -> 문서 + 서명 결과 -> 공개키 소유자 (공개키로 복호화)


서명 & 검증

    문서
        - A의 권한이 있으니 A에 과거 권리 10BTC를 B로 이양하겠습니다.

    서명
        - function sing(문서, 비공개키) -> `서명`

    검증
        - function verification(문서, 서명, 공개키) -> `true / false`


트랜잭션 : 거래를 포함하고 있는 서명된 데이터

    트랜잭션에는 in&out이라는 개념이 있다.
    (입금 in, 출금 out)

    트랜잭션이 여러개 물려있을때, 이전의 트랜잭션의 out은 used out이 되므로 유효성을 잃는다.
    (출금을 할때 적용이 안됨, 내역정도의 의미만 가질수 있다.)

    잔고란? 아직 사용하지 않은 UnspentOutput의 집합이다.

    out에는 꼭 스트링,넘버만 들어가는 것이 아닌 사진등의 파일도 업로딩 가능하다.
    (비트코인의 경우 값비싼 저장소이기에 그런 목적으로 쓰지는 않는다.)

    거래수수료는 트랜잭션을 발생시키는 사람이 지불해야하며,
    금액또한 트랜잭션을 발생하는 사람이 결정한다.

    트랜잭션도 저장소 관점으로 보면 in&out을 여러개 가질수 있고,
    이에 따라 사이즈가 유동적인데, 사용하는 양에 따라 수수료가 달라진다.

    블록자체에는 잔고에 대한 정보는 없다. (추가적으로 구현해줘야 하는 부분)


스마트 컨트랙트

로직

// 선언

var sumVar = 0;

function sum(var1) {
  sumVar += var1;
  console.log(sumVar);
}

function getSumVar() {
  return sumVar;
}


// 실행

sum(21000); // 21000;
sum(20000); // 41000;
sum(30000); // 71000;
sum(30000); // 101000;

getSumVar(); // 71000;



합의 알고리즘


패러다임

    네트워크
        - 동기 (트랜잭션 정보를 정상적으로 수신했는지 알때까지 대기)
        - 비동기 (트랜잭션 정보를 정상적으로 수신했겠지 하고 다른 프로세스 처리)

    우선순위
        - Safety : 문제없는 노드 사이에서는 잘못된 합의가 이루어지지 않는다.
        - Liveness : 문제없는 노드들은 반드시 합의를 한다.


    합의 알고리즘

    - POW : 일종의 ‘수학 퍼즐’을 푸는 채굴이라는 과정을 통해 고성능의 장비를 많이 가진 사람이 많이 가져간다.
      (가져갈수록 반감기는 오고, 난이도는 상승, 왜냐면 블록이 너무 빨리 생성되면 안되기 때문...)
      (비트코인 살만한데...?!!)
    - POS : 지분증명 방식 스테이킹 -> 갖고있는 비율에 따라 채굴량이 다름, 많이가질수록 채굴이 용이함.
    - DPoS : 대리자(BP) 선출 -> 대리자들끼리 블록생성
      (블록 생산자가 제한되어있어, pow보다 큰 규모의 트랜잭션을 처리할 수 있다.)
    - 기타


채굴 (Mining)

    채굴이라는 것은 블록 ID를 만드는 것을 의미한다.
    작업증명을 통해 블록에 거래 내역을 정리해주고 그 보상으로 코인과 거래 수수료를 받는다.
    즉, 블록체인이 유지되기 위해 필요한 리소스를 제공해주면 이에 따른 보상을 받는 것이다.


포크 (fork)

    포크는 서로 추구하는 바가 다를때 일어나느 현상으로
    종류는 하드 포크와 소프트 포크가 있다.

    1. 하드 포크 : DAO 사태를 해결하기 위해 이더리움에서 제시한 방안법

        - 블록의 규칙을 근본적으로 바꾸는 업데이트, 그렇기에 이전의 노드와 호환이 안된다.
        - 사례 : 이더리움 (하드 포크된 신 이더리움) & 이더리움 클래식 (해킹된 원조 이더리움)
        - 사례 : 비트코인 & 비트코인캐시 (용량문제로 싸우다가 떨어져서 나옴 -> 블럭용량을 기존 1MB에서 8MB로 증가)
        - 하지만, 하드 포크의 경우 리플레이 어택을 조심해야한다.
        (리플레이 어택 : 하드 포크를 할때 코인을 송금하면 포킹된 새로운 코인도 송금된다.)
        (그렇기에 하드 포크시 코인을 가지고만 있어야 한다.)

    2. 소프트 포크

        - 기존의 규칙에서 큰 틀은 바꾸지 않고, 부분적인 업데이트만 일어나기에 포킹된 블록끼리 호환이 가능하다.
        - 기존의 규칙을 따르던 블록체인에서 노드들이 새로운 규칙을 따르기로 합의한다면 두 체인은 합쳐진다.
        - 비트코인 & 비트코인 골드(소프트 포크가 된 신 비트코인, 대규모 채굴기로 채굴이 불가능하고 일반 그래픽카드로만 채굴할 수 있도록 중앙집권화를 막은 버젼)


    3. Reorganization

        - 하드포크로 인해 블록체인 네트워크가 분리되어 새로운 블록체인을 형성
        - Long Chain Win
        - 더 긴 체인이 승리, 이미 생성된 체인을 취소 후 다른 선택된 체인으로 재구성함
        - Finality를 위해 비트코인은 6번 이더리움은 30번정도 컨펌이 필요
        - 체인을 생성하고 선택되어지는 채굴 알고리즘인 경우, 반드시 일어날수 있으며 private blockchain에서는 맞지 않음
        - private blockchain에서는 Re-Org가 없는 합의 알고리즘 필수



프라이빗 블록체인 & 퍼블릭 블록체인


모르는 단어 정리

Oracle : DB회사 이름 아니고 블록체인과 통신하면서 로직을 수행하는 프로그램

Consensus : blocko의 chain을 만드는 방식

StateDB: 스마트 컨트랙트에 의해 수정되는 블록체인 노드의 로컬 데이터베이스


퍼블릭 블록체인

    공개형 블록체인으로
    비트코인, 이더리움, 라이트 코인등.. 널리 알려진 암호화폐와 같이 별다른 제한없이 네트워크에 들어올 수 있는 블록체인
    대부분의 가상화폐 거래 시스템은 퍼블릭 블록체인으로 구성
    네트워크상에서 내부 거래(TX : Transaction)를 모두가 공유하고 검증


프라이빗 블록체인

    폐쇄형 블록체인으로
    대표적으로 하이퍼레저 패브릭, 넥스레저, 코인스택(Aergo)등이 있음
    하나의 기관에서 특수하게 사용하도록 구성된 블록체인
    Permissioned Blockchain으로 불리기도 함
    네트워크에 들어가기 위해서는 네트워크 상에서 만든 인증방식을 통해
    검증된 노드만 참여 가능


컨소시움 블록체인

    같은 이해관계의 다른 기관들이 같은 노드를 운영하면서
    만들어가는 블록체인을 의미한다.


이더리움

    비탈릭이 만든 이더리움은 최초의 2세대 블록체인,
    화폐코드는 ETH로, 채굴방식은 PoW 사용,
    최대 발행량은 정해지지 않음

    비트코인은 결제나 거래쪽에 특화되어있고 집중한다치면
    이더리움은 블록체인을 기반으로 거래나 결제 뿐만 아니라
    계약서, SNS, 이메일, 전자투표등.. 다양한 어플리케이션을 투명하게
    운영할수 있게 확장성을 제공해준다.

    블록체인 기반의 어플리케이션을 DApp(탈중항화 어플리케이션)이라 부른다.


이더리움 : 분산 State Machine

    이더리움은 EVM이라는 분산된 state Machine을 포함한다.
    전세계의 모든 사용자는 이더리움의 EVM 위에 특정 프로그램을 실행할 수 있으며 (단, Gas 필요)
    누구나 이 플랫폼을 이용하여 어플리케이션을 제작할 수 있다.
    EVM은 튜링 완전언어로 구동된다.
    (계산적인 문제를 그 프로그래밍 언어나 추상 기계로 풀 수 있다)

    일반화되고 소유자가 없는 분산된 가상 머신


이더리움 구조

    비트코인의 구조와 유사하게 블록넘버, 이전 블록의 정보, 해시트리, 트랜잭션의 정보,
    넌스(Nonce) 등을 포함하고 있으며, 엉클(Uncle) 블록과 연료(Gas)등의 개념이 추가됨

    계정 데이터 저장 방식 (State DB)
    계정의 밸런스 등의 정보 직접 변경
    Patricia Tree (key:value) 사용


스마트 컨트랙트 방식과 UTXO 방식의 비교

         
구분 Smart Contract UTXO 비고  
블록체인 플랫폼 이더리움, 하이퍼레저 패브릭 비트코인,라이트코인,코인스택 코인스택은 UTXO와 State를 모두 지원  
특징 처리에 대한 요청(프로그램 소스코드) 트랜잭션에 쓰고
실행결과 값(전액 및 자산)을 StateDB에 저장함
소비되지 않은 잔고를 Index화 하여 별도의 상태값 저장이 필요없음    
장점 분산된 프로그램 코드처리 기술로 다양한 종류의 트랜잭션을 처리하고 구동할 수 있음 비교적 간단한 로직을 수행하며 처리속도가 빠르고 신뢰도가 높음 처리속도에 대하여는 논의 필요  
단점 처리속도가 비교적 느리고 프로그램 코드의 취약점에 따라 보안 문제가 발생할 수 있음 디지털 화폐의 이전등 특정 유형에서만 사용가능    
스크립트 튜링 완전한 언어 사용,
추상적인 프로그램이 가능(Goto, Loop, If등 가능)
튜링 완전한 언어 사용 정해진 간단한 규칙만 처리 가능한 스크립트    


DAO 프로젝트

    DAO란 탈중앙화된 자율조직에서 따온 말로, 인공지능을 운영해 탈 중앙화된 네트워크를 뜻한다.
    이더리움으로 DAO 코인을 구매해서 DAO 펀드를 투자할 수 있었다.
    2016년 6월 17일날 해커에 의해 이더리움이 도난당하는 큰 이슈가 발생하였고,
    다행히 48일이 지나야 현금화할 수 있게 락이 걸려있어,
    개발진은 해커들이 가져간 이더리움을 휴지조각으로 만들기 위해 복구를 위한 합의(소프트 포크)를 하려고 했고,
    반대하는 단체(이더리움 피해자)에 의해 디도스를 두드려 맞으며 소프트 포크가 아닌 피해자들이
    이더리움을 받을 수 있는 하드 포크를 하였고, 하드포크 3일 뒤
    하드포크를 반대하던 진영이 폴로닉스에 이더리움 클래식을 기습 상장시키며,
    이더리움(신 이더리움)과 이더리움 클래식(구 이더리움)이 탄생하게 되었다.


ERC-20

    가상화폐 구현의 표준적인 프로토콜
    ICO를 하기 쉽게 도와주기도 한다.
    ERC-20계열 코인은 이더리움으로 환전할 수 있다.


하이퍼레저 패브릭

패브릭 구조


transaction flow