분류 전체보기

012. 블록체인 공부

2022. 2. 28. 17:36
반응형
  • 탈중앙화 시스템은, 분산 시스템의 극단적인 한 형태임. 분산 시스템에서는 작업을 나눠서하는 것과는 다르게, 탈중앙화 시스템에서는 작업을 모두 중복해서 동일하게 처리함. 따라서 효율성은 낮아지지만 신뢰도는 높아짐. => 탈중앙화 시스템은 중앙화 시스템보다 효율적일 수 없다.
  • 블록체인 : 중복에 기반을 둔 비효율적인 시스템. 작업의 효율성을 희생하는 대신, 작업 결과에 대한 신뢰도를 높인 시스템. 효율성을 포기하고 무결성을 향상시키는 시스템이며, 모든 정보가 노출되므로 비밀 관리가 불가함.
  • 탈중앙화에서는, 네트워크 내의 모든 노드가 동등하다. 따라서, 네트워크를 사유화하려는 시도로부터 상대적으로 자유로우며, 해커의 공격을 원천적으로 무력화시키는 효과가 있음.
  • 물론, 비트코인 블록체인의 노드도, 완전 노드와 단순 지급 검증 노드로 구분되지만, 둘 중 어떤것을 할 것인지는 자신의 선택이며 언제든 바꿀 수 있음. 반면에 분산 시스템에서는, 틀정 서버의 역할이 사전에 주어지고 고정된다.
    • 완전 노드 : 모든 데이터를 저장. 완전 노드가 되려면 bitcoin.org 또는 bitcoincore.org 사이트에 있는 비트코인 코어 클라이언트 스프트웨어를 설치해야함. 비트코인 검증 역할은, 완전 노드만 수행할 수 있음.
    • 단순 지급 검증 노드 (Simplified Payment Verification, SPV) : 필요 데이터만 저장. 전체 블록체인 데이터를 다운로드받지 않고, 블록 헤더 정보만 다운로드하여 갖고 있음. 단순히 지갑만을 설치한 노드임. 단순 지급 검증 노드에서 개별 트랜잭션에 대한 데이터가 필요할 경우, 완전 노드에 자료를 요청해 개별적으로 데이터를 받아온다.
  • 블록체인을 적용한다는 것은, 일의 반복을 통해 효율성을 포기하는 대신, 신뢰가 존재하지 않는 네트워크에서도 신뢰할 수 있는 기록을 작성할 수 있게끔 하는 것이다.
  • 트랜잭션 : 정의된 이벤트가 발생하는 것
    • 비트코인의 이벤트 : 비트코인을 주고받는 거래 (거래내역 = 트랜잭션).
    • 이더리움의 이벤트 : 이더리움을 주고받거나 스마트 컨트랙트로 정의한 것을 수행하는 것 (거래내역뿐 아니라 그 이상을 의미함)
  • 비트코인 첫번째 블록 = 제네시스 블록 (보조금은 50 BTC 였다)
  • 블록이 새로 생성되는 순간, 비트코인이 블록 생성자에게 보조금 형태로 지급되는데, 21만개 블록이 생성될 때마다, 보조금으로 지급되는 비트코인 수량이 반씩 줄어들도록 코딩되어 있음.
  • 비트코인 시스템은, 블록이 평균 10분에 1개씩 생성되도록 난이도를 조절함.
  • 2033년쯤, 비트코인 전체 발행량의 99%가 생산된다고 볼 수 있음. (실제로는 2140년이지만, 첫 24년간 전체 발행량의 99%가 생산되고 그 뒤로는 보조금이 아주 줄어들기 때문임)
  • 비트코인 블록에는, 거래 내역에 관한 데이터가 담기는데, 그 최대 크기는 1MB이다. (이더리움은 이론적으로는 블록 크기에 제한이 없다.) 거래 내역 하나를 담으려면 보통 0.3KB 용량이 필요하기 때문에, 한 블록에 최대 2,000 ~ 3,000개의 거래 내역만 담을 수 있음. 비트코인 블록 헤더 크기는 80바이트임.
  • 2009년 제네시스 블록이 탄생한 이후에 생성된 모든 블록들이 각 노드들에 별도로 저장되어 있음.

  • 블록체인에서 새로운 노드가 만들어지는 방법 (비동기화 시스템에서 이루어진다)
    • 전제) 블록체인에서는, 모든 거래 내역서를 전체 노드에게 무조건 알린다.(브로드캐스팅 or 가십 프로토콜) 누가 거래를 처리할지 정해져 있지 않으며 매번 바뀐다.
      • 블록체인에서는, 네트워크 사정에 따라 트랜적션 전파 순서가 다르기 때문에, 트랜잭션이 제출된 순서나 시각 정보는 의미가 없어서 기록하지 않는다. 보통 트랜잭션 도착 순서와 무관하게, 수수료율이 더 높은 트랜잭션을 먼저 처리한다.
      • 트랜잭션들은 블록이라는 논리적 단위로 묶인 후 동시에 처리된다.
    • 1) "리더 선출"
      • 어떤 노드가 블록에 기록할지는, 해시 퍼즐이라는 문제를 이용해서 정함. 가장 먼저 해시 퍼즐을 푼 노드가, 블록의 리더로 선출됨. 선출된 리더는, 자신의 대기열에 있던 거래 거래 내역을 블록에 기록하게 된다. 블록에 거래 내역이 기록되는 순간, 거래가 완료될 준비를 마침. 실제로는, 거래 내역들을 블록 틀에 미리 기록하고 해시 퍼즐 정답을 찾음.
      • 해시 퍼즐을 푼다 = 채굴한다
      • 해시 퍼즐 문제는, 작업증명 리더 선출 방식이다. 이와는 다르게, 보유하고 있는 암호화폐 양에 따라 리더를 선출하는 방식은, 지분 증명(proof-of-stake) 방식이라고 한다.
    • 2) "검증"
      • 리더로 선출된 노드가, 제대로 기록했는지 어떻게 신뢰할 수 있을까? -> 모두가 검증한다. 새로운 블록이 만들어지고 그것이 브로드캐스팅되면, 정상인지 다른 모든 노드에 의해 확인 과정을 거치게 된다.
        • a. 해시 퍼즐 정답이 맞는지 확인
        • b. 블록에 기록된 트랜잭션들이 조작되지 않았는지 확인
      • 전달 받은 블록이 문제가 없다는게 확인되면(검증에 통과되면), 각 노드는 기존의 블록체인 데이터에 새로운 이 블록을 추가한다. 검증에 통과되지 못하면, 해당 블록은 폐기된다.
  • 서로 다른 블록체인 데이터가 충돌하면 어떻게 될까?
    • 둘 중 더 긴 블록체인을 선택한다. (탈중앙화 합의 규칙)
    • 더 긴 블록체인이, 만드는데 더 많은 노력이 들어갔다고 생각한다.
    • 폐기된 블록에 있던 트랜잭션들은, 다시 대기열로 들어가서 재처리를 기다린다.

  • 블록 높이 : 제네시스 블록이, 높이가 0인 블록이다. 블록이 언제 생성되었는지 알 수 있으며, 변하지 않는 값이다.
  • 블록 해시 : 해당 블록만의 고유한 주소이며, 32바이트로 된 해시값이다. 블록을 특정할 수 있는 고유한 값이 됨.
  • 블록 깊이
    • 가장 최근에 만들어진 블록이, 깊이가 1인 블록이다. 블록이 새로 만들어질 때마다, 각 블록들의 깊이가 변한다. 블록의 깊이가 커질수록, 해당 블록이 퇴출될 가능성이 낮아지며 안정적이게 된다.
    • 블록의 깊이는 confirm이라는 용어로도 사용됨.
    • 어떤 블록의 confirm이 3이다 = 그 블록이 생성되어 추가된 이후, 2개의 블록이 더 추가됐다는 의미임.
  • 블록의 구조 : 블록 하나는 최대 1MB를 넘을 수 없음.
    • 블록의 전체 크기 (4 바이트)
    • 블록 헤더 (80 바이트)
      • 버전 (4 바이트)
      • 이전 블록 해시 (32 바이트)
      • 머클트리 루트 해시 (32 바이트)
      • 타임 스탬프 (4 바이트)
      • 타깃 난이도 비트 (4 바이트)
      • nonce (4 바이트)
    • 블록 내 전체 거래 내역 갯수 : 가변 공간임
    • 블록 내 모든 거래 내역 : 보통 2000~3000개 정도가 담긴다. 앞의 '거래 내역 갯수' 필드에서, 공간 사용을 조금이라도 줄여주면, 거래 내역 하나라도 더 넣을 수 있음.
  • 비트코인의 트랜잭션
    • 트랜잭션 자체가 비트코인임. 비트코인의 통제권을 타인에게 이전한다는 의미를 내포함.
    • 트랜잭션에 담기는 정보
      • 송신인의 공개키 값
      • 수신인의 비트코인 주소
      • 전송하려는 비트코인 금액
      • 송신인의 전자 서명 : 송신자가 자신의 암호화키로 문서 전체를 서명. 위조를 방지한다.
      • 송신인이 지출하려는 비트코인의 출처
    • 모든 블록의 첫번째 트랜잭션 = 해당 블록을 채굴한 사람에게 보상금을 지급해주는 트랜잭션. 최초의 비트코인 생성이므로 그 이전 출력이 존재하지 않는다. '코인 베이스 트랜잭션' 이라고 함.
      • 블록을 생성할 때, 먼저 자신에게 지급할 보상금에 해당하는 코인베이스 트랜잭션을 가장 먼저 기술하고, 대기열에 있는 나머지 트랜잭션을 블록에 기록한다.
      • 다수의 블록이 동시에 만들어질 경우, 코인베이스 트랜잭션도 동시에 여러개 만들어진다. 이 경우, 블록이 폐기되면 코인베이스 트랜잭션도 폐기될텐데, 그전에 이미 비트코인이 사용되었다면 혼란스러워진다. 그래서 코인베이스 트랜잭션으로 생긴 보상금은, 99개의 후속 블록이 추가로 만들어질때까지 상요하지 못하도록 하고 있다.
  • UTXO (Unspent Transaction Output)
    • 여러 거래 중, 누군가에게 비트코인을 수령한 후 아직 사용하지 않은 상태로 블록에 남아잇는 항목
    • 비트코인 지갑 소프트웨어는, 여러 블록에 흩어져있는 UTXO들을 모아서 전체 잔고를 보여준다.
    • UTXO를 사용하려면 암호키를 제시해야함.
  • 이중 사용 문제
    • 하나의 비트코인을 여러 번 사용하려는 악의적인 시도
    • 같은 비트코인을 두 번 사용하려는 트랜잭션들이 제출되었다면...
      • 해당 트랜잭션 2개가 모두 같은 노드에 전달될 경우, 해당 노드가 알아채고 트랜잭션 2개 모두 폐기해버린다.
      • 현재 블록을 완성하고 있는 노드에, 아직 하나의 트랜잭션만 전달될 경우, 먼저 도착한 트랜잭션은 정상 기록되고, 그 다음 트랜잭션이 기록되지 않는다.
    • 이렇게 이중 사용 문제는 해결되지만, 상거래할 때 지불 문제를 해결하지 못함.
      • 거래 내역을 제출한 순서대로 처리되지 못하기 때문에, 비트코인은 사용하고나서 한동안 지켜봐야함.
  • 스마트 컨트랙트
    • 제3자의 개입 없이 계약이 코드에 의해 집행될 수 있음.
  • 비트코인 지갑의 주요 역할
    • 계정 관리를 위한 개인키/공개키 생성 및 관리
    • 비트코인 거래를 시스템에 제출
    • 비트코인 주소 생성 및 비트코인 잔액 관리
      • 비트코인 주소는 은행 계좌번호 같은 역할을 한다. 항상 1로 시작한다(3으로 시작하는 것들은, 세그윗을 사용하는 예외적인 경우임). 길이는 가변적.
      • 비트코인 주소에는, 계정의 소유자를 증명해줄 수 있는 공개키의 해시 정보가 들어있다.
      • 산재되어 있는 UTXO들을 모두 확인하여, 전체 잔액을 편리하게 보여준다.

 

반응형

+ Recent posts