본문 바로가기
블록체인/블록체인 기본 A to Z

[경남] 블록체인 기본과정 - 5차시 - 2

by 신재은👩🏼‍💻 2024. 5. 17.

오늘까지 나간 원 교재 진도 48/362

+ 추가 교재 진도

추가 교재부터 정리한다.

 

https://www.geeksforgeeks.org/blockchain-structure/

 

Blockchain Structure - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

블록체인 구조는 이러하다(위 링크에 다 나와 있음.).

나는 내가 모르는 것만 기록하기 때문에 앞 포스팅에서도 내 정리가 남들한테 도움 안 될 거라 미리 얘기한 바 있다.

블록 헤더
Header: 블록에 대한 정보가 들어 있는 상자.

이전 블록 주소
Previous Block Address: 이전 블록의 위치를 가리키는 손가락.

타임스탬프
Timestamp: 블록이 만들어진 시간을 기록한 시계.

논스
Nonce: 블록을 만들 때 사용하는 특별한 숫자.

머클 루트
Merkle Root: 블록 안에 있는 모든 거래를 대표하는 나무의 꼭대기.

===

논스랑 머클 루트를 좀 더 자세히 알아 보자.

논스 (Nonce)
Nonce는 블록체인에서 주로 작업 증명(Proof of Work, PoW) 알고리즘에서 사용되는 값입니다.

역할:
퍼즐 해결: 블록 헤더의 해시 값을 특정 조건에 맞추기 위해 사용하는 임의의 숫자입니다. 
조건은 보통 해시 값이 특정 개수의 선행 0을 가지는 것입니다.
블록 생성: 마이너(miner)는 다양한 논스 값을 시도하여 올바른 해시 값을 찾습니다. 
이 값을 찾으면 블록이 유효하게 인정되어 블록체인에 추가됩니다.

과정:
블록 헤더: 블록 헤더의 일부 데이터를 포함하며, 여기에는 이전 블록의 해시, 타임스탬프, 논스, 머클루트 등이 포함됩니다.
해시 계산: 마이너는 논스 값을 바꿔가며 블록 헤더의 해시를 계산합니다.
목표 충족: 올바른 해시 값을 찾으면(예: 해시 값이 '0000'으로 시작) 블록이 네트워크에 전파되고 블록체인에 추가됩니다.

머클루트 (Merkle Root)
Merkle Root는 블록 내의 모든 트랜잭션을 요약한 해시 값입니다. 이는 머클 트리(Merkle Tree)라는 데이터 구조를 통해 생성됩니다.

역할:
거래 검증: 블록에 포함된 거래의 무결성을 검증할 수 있습니다.
효율성: 특정 거래가 블록에 포함되어 있는지 효율적으로 검증할 수 있습니다.

과정:
트랜잭션 해시: 블록 내 모든 트랜잭션의 해시를 계산합니다.
쌍으로 묶기: 인접한 두 트랜잭션 해시를 쌍으로 묶어 다시 해시를 계산합니다.
반복: 해시 쌍을 반복적으로 묶고 해시를 계산하여 최종적으로 하나의 해시 값, 즉 머클루트가 생성됩니다.

예시:
블록에 4개의 거래(T1, T2, T3, T4)가 있다고 가정합니다.
T1과 T2의 해시를 합쳐 새로운 해시 H12를 만듭니다.
T3과 T4의 해시를 합쳐 새로운 해시 H34를 만듭니다.
H12와 H34의 해시를 합쳐 최종 해시 값인 머클루트를 생성합니다.

요약
Nonce: 작업 증명에서 특정 조건을 만족하는 해시 값을 찾기 위해 임의로 변경되는 값. 마이너는 다양한 논스 값을 시도하여 올바른 해시 값을 찾아 블록을 생성합니다.
Merkle Root: 블록 내 모든 트랜잭션을 요약한 해시 값. 머클 트리를 통해 생성되며, 트랜잭션의 무결성을 검증하는 데 사용됩니다.

 

채굴자가 코인을 얻기 위해 마이닝을 할 때 POW 아래 정답을 얻기 위해 논스를 계속 바꿔 가면서 해시 값을 찾는다?

이런 건가?

논스 (Nonce)와 작업 증명 (Proof of Work, PoW)

작업 증명 (PoW)
작업 증명은 블록체인 네트워크에서 새로운 블록을 생성하기 위한 합의 알고리즘 중 하나입니다. 
이를 통해 네트워크의 무결성을 유지하고, 악의적인 활동을 방지할 수 있습니다.

논스의 역할
목적: PoW의 목표는 특정 조건을 만족하는 해시 값을 찾는 것입니다. 
이 조건은 보통 해시 값이 특정 개수의 선행 0을 포함하는 것입니다.

과정: 이 조건을 만족하는 해시 값을 찾기 위해 마이너(miner)는 블록 헤더의 일부인 논스 값을 반복적으로 변경합니다.

논스의 사용 방법
블록 헤더 구성
블록 헤더에는 이전 블록의 해시, 타임스탬프, 머클루트, 논스 등이 포함됩니다.
해시 계산
마이너는 논스 값을 변경하며 블록 헤더 전체의 해시 값을 계산합니다.
조건 충족
올바른 해시 값을 찾기 위해, 마이너는 수백만 번의 해시 계산을 반복합니다. 이 과정에서 논스 값을 계속 바꿔가며 시도합니다.
블록 생성
특정 조건(예: 해시 값이 '0000'으로 시작하는 것)을 만족하는 해시 값을 찾으면, 해당 블록이 유효하게 인정되어 블록체인에 추가됩니다.
이 과정에서 블록을 성공적으로 채굴한 마이너는 보상으로 새로운 코인(예: 비트코인)을 받게 됩니다.

요약
논스 (Nonce): 임의의 숫자로, 마이너가 올바른 해시 값을 찾기 위해 계속해서 변경하는 값입니다.
작업 증명 (PoW): 특정 조건을 만족하는 해시 값을 찾기 위해 많은 계산 작업을 필요로 하는 합의 알고리즘입니다.
마이닝: 마이너가 논스 값을 변경하면서 조건에 맞는 해시 값을 찾으면 블록이 생성되고, 보상으로 코인을 받습니다.

예시

블록 헤더:
이전 블록의 해시: abc123...
타임스탬프: 2024-05-17 12:00:00
머클루트: def456...
논스: 00000001부터 시작

해시 조건:
해시 값이 0000으로 시작해야 함.

과정:
마이너는 논스를 00000001, 00000002, 00000003... 순서대로 변경하면서 해시 값을 계산합니다.
올바른 해시 값이 나올 때까지 이 과정을 반복합니다.

결과:
논스 00001000에서 조건을 만족하는 해시 값 0000abcd...를 찾았다고 가정.
이 해시 값을 가진 블록이 블록체인에 추가됩니다.

 

내가 가진 블록 안의 논스 값을 바꿔 가면서 블록체인이 제시한 해시 정답 값을 가장 먼저 찾는 사람이

자신의 블록을 체인에 올리고 보상을 받게 되는 그런 거.

작업 증명(Proof of Work) 과정 요약

블록 생성 준비:
마이너는 블록 헤더를 준비합니다. 여기에는 이전 블록의 해시, 타임스탬프, 머클 루트, 논스 등이 포함됩니다.

해시 값 계산:
마이너는 논스 값을 바꿔가면서 블록 헤더의 해시 값을 계산합니다. 이 해시 값은 특정 조건(예: 해시 값이 0000으로 시작)을 만족해야 합니다.

조건 충족:
올바른 해시 값을 찾기 위해 마이너는 수백만 번의 해시 계산을 수행합니다. 논스 값을 계속 바꿔가며 시도합니다.

블록 전파:
조건에 맞는 해시 값을 가장 먼저 찾은 마이너는 새로운 블록을 블록체인 네트워크에 전파합니다.
다른 노드들은 이 블록을 검증하고, 유효하다고 판단되면 블록체인에 추가합니다.

보상:
블록을 성공적으로 채굴한 마이너는 보상으로 새로운 코인(예: 비트코인)을 받습니다. 또한, 해당 블록에 포함된 거래 수수료도 받을 수 있습니다.

중요한 개념
논스 (Nonce): 해시 값을 찾기 위해 변경되는 임의의 숫자.
블록 헤더 (Block Header): 블록의 메타데이터를 포함한 부분으로, 해시 계산에 사용됩니다.
해시 값 (Hash Value): 블록 헤더의 데이터를 입력으로 하여 생성된 고유한 식별자.
조건 (Difficulty Target): 해시 값이 만족해야 하는 특정 패턴(예: 선행 0의 개수).

 

이제 머클 루트도 확인하자.

머클 루트 (Merkle Root)
머클 루트는 블록체인에서 모든 트랜잭션의 해시 값을 요약한 값으로, 블록 헤더의 중요한 구성 요소입니다. 
머클 트리(Merkle Tree)라는 구조를 통해 생성됩니다.

머클 트리 (Merkle Tree)
머클 트리는 트랜잭션 데이터를 해시하고, 이 해시 값들을 다시 해시하여 최종적으로 하나의 해시 값(머클 루트)을 만드는 트리 구조입니다.

머클 루트의 생성 과정

트랜잭션 해시: 블록 내 모든 트랜잭션의 해시를 계산합니다.
예: T1, T2, T3, T4라는 4개의 트랜잭션이 있다고 가정합니다.
각 트랜잭션의 해시를 H(T1), H(T2), H(T3), H(T4)로 표기합니다.
해시 쌍 묶기: 인접한 두 트랜잭션 해시를 쌍으로 묶어 다시 해시를 계산합니다.
H(T1)와 H(T2)를 해시하여 H(H(T1), H(T2))를 만듭니다.
H(T3)와 H(T4)를 해시하여 H(H(T3), H(T4))를 만듭니다.
반복: 해시 쌍을 계속 묶어가며 해시를 계산합니다.
위 단계에서 생성된 두 해시 값 H(H(T1), H(T2))와 H(H(T3), H(T4))를 다시 해시하여 최종 머클 루트를 만듭니다.

머클 트리 예시
           머클 루트
              /\
      H(H(T1), H(T2))    H(H(T3), H(T4))
         / \                    / \
  H(T1)  H(T2)          H(T3)  H(T4)

머클 루트의 역할
거래 검증: 특정 트랜잭션이 블록에 포함되어 있는지 빠르게 확인할 수 있습니다. 이는 블록체인의 효율성을 높이고, 데이터 무결성을 보장합니다.
무결성 유지: 블록 내 트랜잭션이 변경되면 머클 루트도 변경되므로, 데이터의 무결성을 쉽게 검증할 수 있습니다.
효율적인 데이터 저장: 모든 트랜잭션을 개별적으로 확인하지 않고도 머클 루트를 통해 전체 데이터의 무결성을 확인할 수 있습니다.

실제 예시
블록 생성:
블록에는 여러 트랜잭션이 포함됩니다. 각 트랜잭션의 해시 값이 계산됩니다.
이 해시 값들을 머클 트리 구조로 묶어 최종적으로 머클 루트가 생성됩니다.
검증:
특정 트랜잭션이 블록에 포함되어 있는지 확인하려면, 해당 트랜잭션의 해시 값과 머클 루트를 비교합니다.
이는 블록체인 네트워크의 노드들이 블록의 유효성을 빠르게 검증하는 데 도움이 됩니다.

요약
머클 루트는 블록 내 모든 트랜잭션의 해시 값을 요약한 값입니다.
머클 트리 구조를 통해 생성되며, 트랜잭션의 무결성을 검증하고 블록체인의 효율성을 높이는 데 사용됩니다.
역할: 거래 검증, 데이터 무결성 유지, 효율적인 데이터 저장.

 

자료 보다가 궁금한 점...

 

이게 지금 뭐 하는 걸까?

두 사람이 같은 사람에게 비트를 전송하고 있는데?

두 사람이 같은 사람에게 이체하고 있는데 이게 왜 하나의 블록에 남나?

여러 거래가 하나의 블록에 포함되는 이유

블록의 역할:
블록은 단일 거래를 기록하는 것이 아니라, 여러 거래를 한 번에 묶어서 기록하는 단위입니다.
여러 거래를 하나의 블록에 포함함으로써 블록체인 네트워크의 효율성을 높일 수 있습니다.

블록 구성:
각 블록은 여러 개의 거래를 포함할 수 있으며, 이 거래들은 블록 안에 트랜잭션 리스트로 저장됩니다.
예를 들어, 블록에는 수백에서 수천 개의 거래가 포함될 수 있습니다.

머클 트리:
블록 안에 있는 모든 거래는 머클 트리라는 데이터 구조로 조직됩니다.
머클 트리는 거래의 해시 값을 효율적으로 관리하고, 거래의 무결성을 검증하는 데 사용됩니다.

이미지 설명의 맥락
이미지에서 두 사람(이명방과 방근해)이 각각 오명운에게 BTC를 전송하는 두 개의 거래가 하나의 블록에 포함되어 있는 이유는 다음과 같습니다:

거래 묶기:
블록은 단일 거래만 포함하는 것이 아니라, 여러 거래를 하나로 묶어서 블록으로 만듭니다.
이는 블록 생성의 효율성을 높이고, 네트워크의 처리 용량을 증가시킵니다.
블록 생성:
블록을 생성할 때, 마이너는 일정 시간 동안 발생한 여러 거래를 수집하여 하나의 블록으로 만듭니다.
이 과정에서 수집된 거래들은 머클 트리 구조로 정리되고, 머클 루트가 계산됩니다.
블록 검증:
블록 내 모든 거래는 머클 트리를 통해 검증됩니다.
이를 통해 블록 전체의 무결성을 확인할 수 있습니다.

요약
블록체인에서 하나의 블록에 여러 거래가 포함되는 것은 일반적인 일입니다. 
이는 블록체인의 효율성을 높이고, 네트워크의 처리 용량을 증가시키기 위해서입니다. 
따라서 이명방과 방근해가 각각 오명운에게 BTC를 전송하는 두 거래가 하나의 블록에 포함되는 것은 이상한 일이 아닙니다. 
블록은 여러 거래를 포함하여 블록체인에 기록됩니다.

이해를 돕기 위해 다음과 같이 정리할 수 있습니다:

블록은 여러 거래를 포함합니다.
거래들은 머클 트리 구조로 정리되어 머클 루트를 만듭니다.
마이너는 여러 거래를 포함한 블록을 생성하고 검증합니다.
이 과정에서 블록의 무결성과 거래의 유효성이 보장됩니다.

 

비트를 기준으로 데이터 흐름을 생각해 보자.

두 사람이 한 사람에게 비트를 전송한다.

이건 채굴이 아니니까 두 사람의 거래 내역이 한 블록에 남는 게 정상이다.

비트는 약 10분마다 블록을 하나 생성하니까

그 시간에 맞춰서 거래 내역이 해당 블록에 새겨진다.

 

신생 블록에는 신규 거래의 해시값이 새겨져야 하니까

두 거래의 해시값이 뽑힌다.

그 둘을 계산해서 머클트리 루트 해시값 하나로 정리한다.

그걸 신규 블록 머클트리 해시 트리에 넣는다.

그렇게 신규 블록이 생성되면 블록 만의 해시값이 나온다.

Right?

네, 말씀하신 내용이 정확합니다. 
비트코인을 기준으로 블록 생성 과정과 거래의 기록 과정을 잘 설명하셨습니다. 다시 한 번 정리해볼게요.

블록 생성 과정

거래 수집:
비트코인 네트워크에서 거래가 발생하면, 이 거래는 네트워크에 브로드캐스트됩니다.
마이너는 일정 시간 동안(약 10분) 발생한 여러 거래를 수집합니다.

거래의 해시 값 계산:
각 거래는 해시 함수를 통해 고유한 해시 값으로 변환됩니다.

머클 트리 생성:
거래 해시 값들은 머클 트리 구조로 조직됩니다.
인접한 두 거래의 해시 값을 결합하여 새로운 해시 값을 생성하고, 이를 반복하여 최종적으로 하나의 해시 값(머클 루트)을 만듭니다.

블록 헤더 구성:
블록 헤더에는 다음 정보가 포함됩니다:
이전 블록의 해시 값
블록 생성 시각
채굴 난이도
머클 루트 해시
논스(Nonce)
새로운 블록을 생성하기 위해 이 블록 헤더를 해시 함수에 입력합니다.

해시 퍼즐 해결:
마이너는 논스 값을 변경하면서 블록 헤더의 해시 값을 계산하여 목표 해시 값을 찾습니다. 
목표 해시 값은 특정 개수의 선행 0을 포함해야 합니다.
목표 해시 값을 찾으면 해당 블록이 유효한 블록으로 인정됩니다.

블록 체인에 추가:
유효한 해시 값을 찾은 블록은 네트워크에 브로드캐스트되고, 다른 노드들에 의해 검증됩니다.
검증이 완료되면 블록체인에 추가됩니다.

예시 설명

두 사람이 한 사람에게 비트를 전송:
이명방이 오명운에게 2,000,000 BTC를 전송.
방근해가 오명운에게 2,000,000 BTC를 전송.

거래의 해시 값 계산:
거래 1의 해시 값: a7bfd281e...
거래 2의 해시 값: 32ca8daab...

머클 트리 생성:
두 거래의 해시 값을 결합하여 머클 루트를 생성.
머클 루트 해시 값: 947c3dafe...

블록 헤더 구성:
블록 헤더에 머클 루트 해시, 이전 블록 해시, 블록 생성 시각, 채굴 난이도, 논스 등을 포함.

예시:
블록 헤더:
- 이전 블록 해시: `previous_block_hash`
- 블록 생성 시각: `2024-05-17 12:00:00`
- 머클 루트 해시: `947c3dafe...`
- 논스: `00000001`부터 시작

해시 퍼즐 해결:
마이너는 논스를 변경하며 목표 해시 값을 찾기 위해 해시 값을 계산.
목표 해시 값을 찾으면 블록이 유효하게 됨.

블록 체인에 추가:
유효한 해시 값을 찾은 블록은 네트워크에 브로드캐스트되고, 검증 후 블록체인에 추가됨.

요약
거래가 발생하면 마이너가 이를 수집하여 블록을 구성합니다.
각 거래의 해시 값을 계산하고, 이를 머클 트리로 결합하여 머클 루트를 생성합니다.
블록 헤더에 머클 루트 해시와 기타 정보를 포함하여 해시 퍼즐을 해결합니다.
목표 해시 값을 찾으면 블록이 블록체인에 추가됩니다.
따라서 말씀하신 내용이 정확하며, 블록체인에서 거래가 블록에 기록되고 블록이 생성되는 과정을 잘 이해하고 계십니다.

 

그리고 교재에는 없는데 마이너에 대한 내용이 중요하다고 생각해 추가한다.

마이너(Miner)의 역할
마이너는 블록체인 네트워크에서 중요한 역할을 담당합니다. 
마이너가 왜 필요한지, 어떤 일을 하는지 구체적으로 설명드릴게요.

마이너(Miner)란?
마이너는 블록체인 네트워크에서 새로운 블록을 생성하고 거래를 검증하는 사람이나 컴퓨터를 의미합니다.
역할: 새로운 블록을 생성하고, 거래의 무결성을 검증하며, 블록체인에 추가하는 역할을 합니다.

마이너가 필요한 이유
거래 검증:
블록체인 네트워크에서 발생하는 모든 거래는 검증되어야 합니다. 마이너는 거래가 올바른지 확인하고, 이 거래를 블록에 포함시킵니다.
블록 생성:
새로운 거래가 발생하면, 마이너는 이를 모아 블록을 생성합니다. 블록은 일정 시간(비트코인의 경우 약 10분)마다 생성됩니다.
합의 유지:
마이너는 작업 증명(Proof of Work, PoW) 알고리즘을 통해 블록체인의 합의를 유지합니다. 이는 블록체인이 탈중앙화된 상태에서도 무결성과 신뢰성을 유지하게 합니다.
보상:
마이너는 블록을 성공적으로 생성하면, 블록 보상과 거래 수수료를 받습니다. 이는 마이너가 네트워크에 참여하도록 유도하는 인센티브입니다.

마이너의 작업 과정
거래 수집:
네트워크에서 발생하는 모든 거래는 마이너에게 전송됩니다. 마이너는 이 거래들을 수집하여 블록을 구성합니다.
거래 검증:
마이너는 수집된 거래가 유효한지 검증합니다. 거래의 서명이 올바른지, 더블스펜딩이 발생하지 않았는지 확인합니다.
블록 헤더 생성:
마이너는 거래를 머클 트리 구조로 조직하고, 머클 루트를 계산합니다.
블록 헤더에는 머클 루트, 이전 블록의 해시, 블록 생성 시각, 논스 등이 포함됩니다.
작업 증명(Proof of Work) 수행:
마이너는 블록 헤더의 해시 값을 계산하여 특정 조건(예: 해시 값이 '0000'으로 시작하는지)을 만족하는 값을 찾기 위해 논스를 변경하며 반복 작업을 수행합니다.
이 작업은 많은 계산 능력을 요구하며, 이를 통해 블록을 생성합니다.
블록 전파:
목표 해시 값을 찾은 마이너는 새로운 블록을 네트워크에 전파합니다.
다른 노드들이 이 블록을 검증하고, 유효한 블록으로 인정되면 블록체인에 추가합니다.
보상 수령:
블록을 성공적으로 생성한 마이너는 블록 보상(새로운 코인)과 거래 수수료를 받습니다.

요약
마이너는 블록체인 네트워크에서 거래를 검증하고 새로운 블록을 생성하는 역할을 합니다.
거래 기록을 블록에 추가하고, **작업 증명(Proof of Work)**을 통해 블록체인의 합의를 유지합니다.
마이너는 보상으로 새로운 코인과 거래 수수료를 받아 네트워크 참여를 유도합니다.
마이너는 블록체인 네트워크의 보안과 무결성을 유지하는 데 필수적인 역할을 합니다. 거래 기록에도 마이너가 필요하며, 이들이 블록을 생성하고 검증하는 과정을 통해 블록체인이 안전하게 운영될 수 있습니다.

 

오늘 처음 배운 고아 블록

고아 블록(Orphan Block)이란?
고아 블록은 블록체인 네트워크에서 일시적으로 생성되었지만, 최종적으로 블록체인에 포함되지 못한 블록입니다. 이러한 블록은 일반적으로 두 명 이상의 마이너가 거의 동시에 유효한 블록을 발견할 때 발생합니다.

고아 블록이 발생하는 이유
동시 채굴:
여러 마이너가 거의 동시에 유효한 블록을 발견할 수 있습니다. 이 경우, 블록체인의 다른 부분에 각각의 블록이 추가되며, 일시적으로 두 개 이상의 체인이 존재하게 됩니다.
네트워크 지연:
블록이 네트워크를 통해 전파되는 동안 약간의 지연이 발생할 수 있습니다. 이로 인해 두 개 이상의 블록이 동시에 유효하다고 인식될 수 있습니다.
합의 알고리즘:
블록체인의 합의 알고리즘은 가장 긴 체인을 유효한 체인으로 간주합니다. 따라서 시간이 지나면서 한 체인이 더 긴 체인이 되고, 나머지 체인은 버려지게 됩니다.

고아 블록의 처리
버림:
블록체인의 프로토콜에 의해 가장 긴 체인이 유효한 체인으로 선택됩니다. 따라서 고아 블록은 최종적으로 버려집니다.
보상 없음:
고아 블록을 채굴한 마이너는 블록 보상을 받지 못합니다. 보상은 유효한 체인에 포함된 블록을 채굴한 마이너에게만 주어집니다.

현재 상황
고아 블록은 여전히 발생할 수 있지만, 네트워크의 개선과 해시레이트의 분포가 더욱 고르게 분포되면서 그 발생 빈도는 줄어들었습니다. 다음 이유들 때문에 고아 블록은 덜 빈번하게 발생하고 있습니다:
네트워크 개선:
네트워크의 전파 속도와 효율성이 향상되면서, 블록이 네트워크 전체에 빠르게 전파됩니다. 이는 고아 블록의 발생을 줄여줍니다.
분산 채굴:
해시레이트가 특정 몇몇 마이너에게 집중되지 않고 분산됨에 따라, 동시에 블록을 발견할 확률이 줄어들게 됩니다.

고아 블록의 영향
안전성:
고아 블록은 블록체인의 안전성에 큰 영향을 미치지 않습니다. 이는 정상적인 합의 과정의 일부로 간주됩니다.
보상:
고아 블록을 채굴한 마이너는 보상을 받지 못하므로, 이는 채굴자에게는 손실이지만, 전체 블록체인의 무결성에는 영향을 주지 않습니다.

요약
고아 블록은 거의 동시에 두 명 이상의 마이너가 유효한 블록을 발견할 때 발생하며, 네트워크 지연 등으로 인해 일시적으로 블록체인에 포함되지 못한 블록입니다.
발생 원인: 동시 채굴, 네트워크 지연, 합의 알고리즘.
처리: 블록체인은 가장 긴 체인을 선택하며, 고아 블록은 버려집니다.
현재 상황: 네트워크 개선과 분산 채굴로 인해 고아 블록의 발생 빈도는 줄어들고 있습니다.
따라서, 고아 블록은 블록체인의 정상적인 운영 과정에서 발생할 수 있지만, 현재는 덜 빈번하게 발생하고 있으며, 블록체인의 안정성과 무결성에 큰 영향을 미치지 않습니다.

 

그리고 짚고 넘어가야 할 이중 지불 문제.

이중 지불(Double Spending) 문제
이중 지불 문제는 디지털 화폐 시스템에서 동일한 단위의 화폐를 두 번 이상 사용하는 행위를 의미합니다. 
이는 실제 지폐를 동시에 두 곳에서 사용할 수 없는 물리적 화폐와 달리, 디지털 화폐의 특성상 복사와 재사용이 가능하기 때문에 발생할 수 있습니다.

이중 지불 문제의 발생 방식
동시 사용:
동일한 디지털 화폐를 두 개 이상의 서로 다른 거래에서 동시에 사용하려는 시도입니다. 
예를 들어, Alice가 동일한 비트코인을 Bob과 Charlie에게 동시에 보내려는 경우입니다.
블록체인 포크:
블록체인 네트워크에서 두 개 이상의 블록이 동시에 채굴될 때, 일시적으로 두 개의 체인이 존재하게 됩니다. 
이로 인해 동일한 코인이 두 체인에서 각각 사용될 수 있습니다.

이중 지불 문제의 해결 방법
작업 증명 (Proof of Work, PoW):
비트코인과 같은 블록체인 시스템에서는 작업 증명을 통해 이중 지불 문제를 해결합니다. 
마이너는 새로운 블록을 생성할 때 각 거래를 검증하고, 가장 긴 체인이 유효한 체인으로 간주됩니다.
지분 증명 (Proof of Stake, PoS):
PoS 시스템에서는 블록 생성자가 보유한 코인의 양에 비례하여 블록 생성 권한을 부여합니다. 
이중 지불 시도를 방지하기 위해, 악의적인 행위를 한 경우 보유한 지분을 잃는 페널티를 부과합니다.
비잔틴 장애 허용 (Byzantine Fault Tolerance, BFT):
BFT 알고리즘은 네트워크 내 일부 노드가 악의적으로 행동해도 시스템이 정상 작동할 수 있도록 설계되었습니다.
이중 지불을 방지하기 위해, 네트워크의 과반수 노드가 거래의 유효성에 동의해야 합니다.

이중 지불 문제와 PoS, BFT에 대한 영향

지분 증명 (PoS):
PoS 시스템에서도 이중 지불 문제가 발생할 수 있습니다. 
이를 방지하기 위해, PoS 시스템은 다음과 같은 메커니즘을 사용합니다:

페널티: 이중 지불을 시도하는 노드는 보유한 지분을 잃게 됩니다.
체인 선택 규칙: PoS 시스템은 가장 많은 지분이 지지하는 체인을 유효한 체인으로 선택합니다.

비잔틴 장애 허용 (BFT):
BFT 알고리즘은 네트워크 내 일부 노드가 악의적으로 행동해도 시스템이 정상 작동하도록 설계되었습니다. 

이중 지불을 방지하기 위해, BFT 시스템은 다음과 같은 메커니즘을 사용합니다:
과반수 동의: 네트워크의 과반수 노드가 거래의 유효성에 동의해야 합니다. 이는 이중 지불 시도를 어렵게 만듭니다.
네트워크 합의: 모든 정직한 노드가 동일한 거래 내역을 가지게 되어, 이중 지불 시도가 무효화됩니다.

예시
비트코인 (PoW):
Alice가 동일한 비트코인을 Bob과 Charlie에게 동시에 보내려는 시도.
마이너는 두 거래를 검증하고, 하나의 거래만 유효하다고 판단하여 블록에 포함.
가장 긴 체인이 유효한 체인으로 간주되어, 나머지 거래는 무효화.
이더리움 2.0 (PoS):
Alice가 동일한 이더를 두 번 사용하려는 시도.
네트워크의 과반수 지분을 가진 노드가 거래의 유효성에 동의.
악의적인 시도를 한 노드는 지분을 잃게 되고, 거래는 무효화.

요약
이중 지불 문제는 동일한 디지털 화폐를 두 번 이상 사용하려는 행위입니다.
PoW 시스템에서는 작업 증명을 통해 이중 지불 문제를 해결합니다.
PoS 시스템에서는 지분과 페널티 메커니즘을 사용하여 이중 지불을 방지합니다.
BFT 알고리즘에서는 과반수 동의와 네트워크 합의를 통해 이중 지불을 방지합니다.
이중 지불 문제는 블록체인 시스템의 무결성을 유지하기 위해 반드시 해결해야 하는 중요한 문제이며, 각 합의 알고리즘은 이를 해결하기 위한 고유한 메커니즘을 가지고 있습니다.

 

주요 PoS(DPoS) 블록체인 비교

비교 기준 - EOS - 이더리움 - 카르다노 - 텐더민트

합의 방식 DPoS 체인 기반 PoS (슬래싱) 우로보로스 PoS BFT 기반 PoS
탈중앙화 21명의 검증인 무제한 검증인 참여 가능 무제한의 지분 참여자 4명 이상의 검증인
보안 BFT BFT BFT BFT
성능 초당 수백만 건의 거래 가능 정보 없음 평균 초당 257.6건, 40개 노드 실험에서, 잠재력은 그 이상 250 바이트 거래 기준 초당 최대 10,000건
로드맵 2018년 2분기 메인넷 출시 정보 없음 중앙 집중형 메인넷 2017년 9월 29일 출시, 탈중앙화 메인넷 2018년 3분기 이전 출시 텐더민트 코어 0.20.0 버전 2018년 7월 6일 출시, 1.0.0 버전 출시일 미정
보상 블록 생성자 및 대기 노드 보상 검증인 보상 검증인 보상 검증인 보상

설명

  • 합의 방식:
    • EOS: 위임 지분 증명(DPoS).
    • 이더리움: 슬래싱을 포함한 체인 기반 PoS.
    • 카르다노: 우로보로스 PoS.
    • 텐더민트: BFT 기반 PoS.
  • 탈중앙화:
    • EOS: 21명의 검증인이 존재.
    • 이더리움: 블록 생성에 참여할 수 있는 검증인의 수에 제한이 없음.
    • 카르다노: 블록 생성에 참여할 수 있는 지분 참여자의 수에 제한이 없음.
    • 텐더민트: 4명 이상의 검증인이 존재.
  • 보안:
    • 모든 플랫폼이 비잔틴 장애 허용(BFT) 보안을 사용.
  • 성능:
    • EOS: 초당 수백만 건의 거래를 처리할 수 있는 잠재력.
    • 이더리움: 성능 정보 없음.
    • 카르다노: 40개 노드 실험에서 평균 초당 257.6건의 거래 처리, 그 이상의 잠재력.
    • 텐더민트: 250 바이트 거래 기준 초당 최대 10,000건의 거래 처리 가능.
  • 로드맵:
    • EOS: 2018년 2분기 메인넷 출시.
    • 이더리움: 로드맵 정보 없음.
    • 카르다노: 중앙 집중형 메인넷은 2017년 9월 29일 출시, 탈중앙화 메인넷은 2018년 3분기 이전 출시 예정.
    • 텐더민트: 텐더민트 코어 0.20.0 버전은 2018년 7월 6일 출시, 1.0.0 버전 출시일은 미정.
  • 보상:
    • EOS: 블록 생성자 및 대기 노드에게 보상 지급.
    • 이더리움: 검증인에게 보상 지급.
    • 카르다노: 검증인에게 보상 지급.
    • 텐더민트: 검증인에게 보상 지급.

이 데이터, 언제적 데이터인지 모르겠네.;

근데 뭐 난 이거 보고 단순 기록만 해 놓은 거니까.

 

그리고 갑자기 생각난 블록체인, 코인, 토큰의 차이.

블록체인
정의: 블록체인은 데이터를 저장하는 분산된 디지털 장부입니다. 
거래 기록을 블록에 저장하고, 이 블록들이 연속적으로 연결되어 체인을 이루는 구조입니다.
예시: 비트코인 블록체인, 이더리움 블록체인.
역할: 데이터를 안전하게 기록하고, 검증하며, 변경할 수 없도록 합니다.

코인 (Coin)
정의: 코인은 독립적인 블록체인에서 사용되는 디지털 화폐입니다. 
자체 블록체인을 가지고 있으며, 네트워크 내에서 거래 수단으로 사용됩니다.
예시: 비트코인(BTC), 이더리움(ETH).
역할: 네트워크의 기본 단위로, 거래를 위해 사용되거나 블록체인 네트워크의 운영을 지원합니다.

토큰 (Token)
정의: 토큰은 기존의 블록체인(주로 스마트 계약 플랫폼) 위에서 생성되는 디지털 자산입니다. 
자체 블록체인이 없으며, 호스팅하는 블록체인에서 작동합니다.
예시: 이더리움 블록체인 위의 ERC-20 토큰, 테더(USDT).
역할: 특정 프로젝트나 애플리케이션 내에서 다양한 용도로 사용됩니다. 
예를 들어, 액세스 권한 부여, 보상, 투표 등에 사용될 수 있습니다.

요약
블록체인: 데이터를 저장하는 분산된 디지털 장부.
코인 (Coin): 자체 블록체인을 가진 디지털 화폐.
토큰 (Token): 기존 블록체인 위에서 생성되는 디지털 자산.

 

그리고 마지막으로 샤딩.

이거는 그냥 정리해 보자.

샤딩(Sharding)이란?

샤딩은 데이터베이스에서 성능과 확장성을 높이기 위해 데이터를 여러 조각으로 나누는 기술입니다. 각 조각(샤드)은 독립적으로 저장되고 관리되며, 이를 통해 데이터 처리 속도를 높이고 병목 현상을 줄일 수 있습니다.

일반적인 샤딩

  1. 데이터베이스 샤딩:
    • 데이터를 여러 샤드로 나누어 저장.
    • 각 샤드는 독립적인 데이터베이스 인스턴스로 운영됨.
    • 예를 들어, 사용자 데이터를 이름에 따라 여러 샤드로 나눌 수 있음. "A-M"은 샤드 1, "N-Z"는 샤드 2에 저장.

블록체인에서의 샤딩

블록체인에서의 샤딩은 네트워크의 확장성을 높이기 위해 블록체인을 여러 샤드로 나누는 기술입니다. 각 샤드는 독립적으로 트랜잭션을 처리하고 저장합니다.

  1. 목적:
    • 네트워크의 성능 향상: 트랜잭션 처리 속도 증가.
    • 병목 현상 완화: 각 샤드가 독립적으로 작동하여 병목 현상 제거.
  2. 작동 방식:
    • 블록체인을 여러 샤드로 나눔.
    • 각 샤드는 독립적으로 트랜잭션을 처리하고 블록을 생성.
    • 샤드 간의 데이터 일관성을 유지하기 위해 교차 샤드 통신을 사용.

샤딩의 주요 개념

  1. 샤드:
    • 데이터나 트랜잭션을 분할한 조각.
    • 각 샤드는 독립적으로 운영되며, 독립적인 블록체인처럼 작동.
  2. 크로스 샤드 트랜잭션:
    • 샤드 간의 트랜잭션을 처리하는 방법.
    • 한 샤드에서 다른 샤드로 데이터를 전송할 때 발생.

샤딩 시 테이블 이름이 같은 이유

  1. 테이블 이름:
    • 샤딩에서는 동일한 테이블 구조를 각 샤드에 동일하게 유지합니다. 이는 데이터를 분산 저장하면서도 일관성을 유지하기 위해 필요합니다.
    • 예를 들어, 사용자 테이블이 모든 샤드에 존재하지만, 각 샤드에는 서로 다른 사용자 데이터가 저장됩니다.
  2. 데이터 분할:
    • 데이터를 특정 기준에 따라 분할하여 각 샤드에 저장.
    • 샤드 1에는 "A-M" 사용자 데이터, 샤드 2에는 "N-Z" 사용자 데이터가 저장되는 식입니다.

블록체인 샤딩의 예시

  1. 이더리움 2.0:
    • 이더리움 2.0에서는 네트워크의 확장성을 위해 샤딩을 도입.
    • 네트워크를 여러 샤드 체인으로 분할하고, 각 샤드 체인이 독립적으로 트랜잭션을 처리.
    • 크로스 샤드 통신을 통해 샤드 간 데이터 일관성을 유지.

요약

  • 샤딩: 데이터를 여러 조각으로 나누어 성능과 확장성을 높이는 기술.
  • 블록체인에서의 샤딩: 블록체인 네트워크를 여러 샤드로 나누어 독립적으로 트랜잭션을 처리하고 성능을 향상시키는 방법.
  • 테이블 이름이 같은 이유: 일관성을 유지하기 위해 동일한 테이블 구조를 각 샤드에 유지하지만, 각 샤드에 저장되는 데이터는 다릅니다.

오늘 진도만 정리했고 본 교재는 거의 손도 못 댔네.

생각 이상으로 블록체인 수업이 빡세다.

일단 매일 수업만 4시간을 들어야 하고, 예복습을 하지 않으면 바로 다음 강의를 이해 못 하기 때문에 공부해야 하는 양이 많다.

나중에 실제 개발 들어가면 어떨지 하...;

이거 개발 안 해 본 사람은 듣는 게 거의 의미 없는 강의 아닌가 싶다.

뭐 그건 그렇다 치고

진짜로 가기 전에 중요한 개념 두 가지를 안 다뤄서.. 그거 하고 가야겠다...

아니다. 비잔틴 문제는 다음 글에서 별도로 정리하겠다.