블록체인 5강, 6강

비트코인

Posted by 동식이 블로그 on June 5, 2019

5강 비트코인 블록체인 개요 | 6강 비트코인 스마트거래의 구조

제5강 비트코인 블록체인 개요

  • 개념은 같지만 각각 코인별로 다름

  • 비트코인 블록체인의 역할
    • 비트코인 발행을 포함한 모든 비트코인 지불 거래 정보를 기록한 장부(ledger)
    • 네트워크상의 비트코인 발행 내역과 이동 내역을 보여주는 장부
    • 비트코인의 P2P 거래를 가능하게 하는 원천(누구나 정상 지불 확인 가능)
  • 비트코인 블록체인의 목표
    • 완전성(complete blockchain)
      • 모든 거래 내역을 일관성 있게 기록
      • 발행되어 현재 사용되고 있는 모든 비트코인 현황을 일관성 있게 확인
    • 안전성(secure blockchain)
      • 비정상 거래 기록(승인) 불가
      • 승인된 거래 변경/교체 불가
      • 장부(블록체인) 파괴 불가
    • 분산성(distributed blockchain) / 비집중성(decentrailized blockchain)-탈중앙화
      • 누구나 블록체인 생성에 참여가능
      • 특정 참여자에 의존되지 않는 블록체인 유지
      • 그렇지만 누가 만들었던, 가지고 있던 일관성이 보장되는 블록체인
    • 투명성(transparent blockchain)
      • 누구나 블록체인 접근, 검증 및 사용가능
      • 블록체인을 유지하고 있지 않은 참여자도 블록체인 접근 보장(SPV 노드)
  • 비트코인 네트워크 참여자
    • 풀 노드(full node) 참여자
    • 채굴 노드(mining node) 참여자
    • SPV 노드 (simple payment verification node) - 대부분 스마트폰
  • 비트코인 블록
    • 블록(block)
      • 채굴자가 일정 시간 동안 비트코인 네트워크를 통해 교환되는 모든 거래를 검증한 후 모아서 만든 자료구조(장부)
      • 생성 후 모든 네트워크 참여자에게 전달(broadcasting-방송)
      • 블록체인을 유지하는 참여자는 자신의 블록체인에 수신된 블록을 연결
    • 블록 생성 간격
      • 시간 : 약 10분
      • 10분이 되도록 채굴 난이도 자동 조정
      • 10분 동안 발행된 전세계 비트코인 거래를 블록에 기록
    • 블록 크기
      • 1 Mbyte로 제한
      • 채굴자간에 블록 전달 지연시간(delay)이 커지는 문제를 방지하기 위함 -> 블록체인 분기(blockchain forking)에 따른 부실 블록 발생 방지
      • 10분당 승인할 수 있는 거래 수에 제약(초당7개)
      • 거래 정보의 크기는 250byte정도, 한 개의 블록에 40개정도
      • 블록크기가 저길수록 전달 지연시간이 커짐 : 하드포크의 주된 이유?
    • 블록 채굴자(생성자) 결정
      • 작업증명(Proof of Work)에 가장 먼저 성공한 채굴자
      • 작업 문제(예) : 블록의 특정 숫자값(넌스-Nonce)를 변경하면서 성공 확률이 2^-60인 난이도의 목표값 보다 작은 해시값을 생성하는 넌스를 찾아라
        • 2의 60승 확률만큼 난이도
        • 이 때 넌스는 작업에 성공했다는 증명(Header에 기록)
      • 작업증명 : 난이도 목표값 보다 작은 해시값을 생성하는 넌스
      • 생성한 블록 배포시에 포함시켜 채굴자의 작업 증명 성공 사실을 누구나 확인 가능하게 함
    • 채굴자의 작업 증명 성공 확률
      • 채굴자의 해시 파워(해시율) / 전체 채굴자의 해시 파워의 총합
      • 해시파워 : 초당 해시값을 얼마나 계산할 수 있는지
  • 비트코인 블록체인
    • 블록 변경
      • 블록 변경은 해당 블록의 해시값 변경
      • 다음 블록의 해시포인터 변경 - > 다음 블록 변경으로 연결
      • 거의 불가능
    • 블록 조작 불가
      • 이후의 모든 블록 변경 필요 -> 작업 증명의 어려움으로 현실적으로 불가능
      • 뒤에 연결된 블록이 수가 많을 수록 블록 변경이 어려워짐
      • 6회 승인된 블록 변경은 불가능한 것으로 간주되고 있음
  • SPV 노드의 거래 승인 확인
    • SPV 노드
      • SPV 노드 : 블록 헤더 정보만 유지
      • 블록 헤더 : 해시 포인터, 난이도 목표, 넌스 , 머클 루트(머클 트리)
        • 머클 트리(Merkle tree) 거래 저장
          • 블록의 모든 거래에 대한 지문 정보 요약
        • 머클 경로(Merkle path)
          • 특정 거래의 존재 증명에 필요한 일련의 해시코드
          • 머클 경로의 크기 : log2 N, N은 전체 거래의 수
    • SPV 노드의 거래 승인 확인
      • 풀 노드로부터 블록 전체 다운로드 후 모든 거래 확인 경우 -> 네트워크와 처리노드에 부담

제6강 비트코인 스마트거래의 구조

  • 비트코인 거래가 어떻게 작성되는지에 대해 스마트 거래 관점에서 설명

  • 비트코인 거래의 개념
    • 비트코인 거래(transaction)
      • 참여자들이 비트코인 통화 등 가치를 주고받고 상호 인정하는 행위를 규정하는 데이터 구조
      • 블록체인에 공개적으로 투명하게 저장되는 항목
      • 중요 데이터(문서) 저장 거래도 가능
    • 비트코인 지불 거래(payment transaction)
      • 블록체인상에서 입력값으로 표현되는 자금원으로부터 출력값으로 표현되는 목적지까지 자금을 전달하는 행위를 규정
    • 일반적인 지불 거래
      • 입력값은 자신이 소유권을 가지고 있는 이전 거래의 출력값중에 아직 소비되지않은 출력값(UTXO)을 해시 포인터로 참조함으로써 설정
      • UTXO의 소유권은 해당 주소에 대응되는 개인키로 작성된 서명을 거래의 입력값에 포함시킴으로써 증명
      • 특정 거래에서 한번 설정된 입력값은 반드시 해당 거래에서 전부 소비 - 지금 정보가 노출되는 프라이버시 문제 방지
      • 거래 검증을 수행하는 참여자들은 UTXO의 신속한 검색을 위해 블록체인 상의 전체 UTXO들을 하드 디스크가 아닌 RAM 메모리 풀로 유지
    • 거래 수수료
      • 거래가 처리하는 자금의 크기가 아니라 거래의 데이터 크기에 다라 계산
      • 킬로 바이트에 대한 단위 거래 수수료가 먼저 설정되고, 여기에 킬로바이트 단위의 거래 크기가 곱해져 거래 수수료로 계산
      • 단위 수수료 설정 : 시장에서 설정
      • 거래 수수료 표시 = 입력값 총합 - 출력값 총합
      • 자금 합산 거래
      • 지급 분산 거래
  • 거래 자료 구조
크기(바이트) 필드 설명
4 버전 거래가 프로토콜 버전
1~9 입력값 개수 거래에 포함된 입력값의 개수
가변 입력값 거래가 소비할 입력값(개수만큼 반복)
1~9 출력값 개수 거래에 포함된 출력값의 개수
가변 출력값 거래가 생성할 출력값(개수만큼 반복)
4 잠금시간 정해진 시점까지 거래 채굴을 연기하도록 명시
  • 거래 자료 구조
    • 코인 베이스 거래
      • 채굴자에게 네트워크가 자동으로 신규 비트코인을 지불하는 거래
    • 잠금 스크립트(locking script)
      • 해당 출력값을 소비하기 위해 충족시켜야 하는 조건을 기술한 간단한 실행 프로그램
      • ex) scriptPubKey = DUP HAS160 EQUALVERIFY CHECKSIG
    • 해제 스크립트
      • 서명과 공개키를 데이터로 제공
      • scriptSig =
  • 거래 스크립트 언어

    • 스택
      • 입력되는 데이터의 순서와 반대의 순서로 서로 입력된 데이터가 출력되는 자료 구조
      • 푸시 : 스택 자료 구조에 데이터를 입력
      • 팝 : 입력된 데이터를 출력하는 동작
    • 비트코인 스택 언어
      • 스택 자료 구조에 데이터를 입출력하면서 프로그램에 기술된 각 명령을 순서대로 한번씩만 수행하는 제한적인 기능의 단순한 언어
      • 일련의 명령들을 반복해서 수행하는 루프명령 미지원
      • 튜링 불완전(Turing-incomplete) 언어 루프기능을 제외한 프로그래밍 언어로써 불완전한 언어
      • 풀 노드들이 거래를 검증할 때 지나치게 많은 시간이 소요되어 비트코인 네트워크의 성능이 낮아지는 것을 방지 -> DoS 공격 방어
    • 비트코인 스크립트 언어의 주요 명령어
    1
    2
    3
    4
    5
    6
    
    <data>
    OP_DUP
    OP_HASH160
    OP_EQUALVERIFY
    OP_CHECKSIG
    OP_CHECKMULTISIG
    
  • 비트코인 거래
    • 거래 조건을 프로그램으로 결정

    • 프로그램 실행을 통해 거래 정지 여부 결정

    • 다양한 유형의 스마트 거래 개발 가능

    • 그러나
    • 튜링 불완전(Turing-incomplete) 언어인 비트코인 스크립트 언어의 프로그래밍 능력에 한계

    • 복잡한 스마트 거래 유형 개발에 어려움