Block
**블록(Block)**은 블록체인에서 트랜잭션 목록과 생성 시간을 나타내는 타임스탬프 등의 정보를 포함하는 데이터 단위입니다. 이러한 트랜잭션은 암호화되며, 블록이 블록체인에 추가되기 전에 흔히 채굴자라고 불리는 네트워크 참여자들에 의해 검증되어야 합니다. 블록이 블록체인에 추가되면 암호화 보안 조치로 인해 사실상 수정이 불가능한 영구적인 기록이 됩니다. 이후의 트랜잭션은 새로운 블록에 기록되며 이 주기가 새로 시작됩니다.[4][9]
개요
모든 암호화폐에서는 매일 엄청난 수의 트랜잭션이 발생합니다. 이러한 트랜잭션은 "블록"이라는 단위로 기록됩니다. 블록은 최근 데이터를 포함하며, 블록이 완성될 때마다 블록체인에 새로운 블록을 위한 공간이 생깁니다. 완성된 블록은 이전 트랜잭션의 영구적인 기록이며, 새로운 트랜잭션은 현재 블록에 기록됩니다. 결과적으로 전체 시스템은 모든 데이터를 영구적으로 저장하는 루프에 진입하게 됩니다.
트랜잭션 내역을 보존하기 위해 블록은 엄격하게 순서가 지정되며, 생성된 모든 새 블록은 부모 블록에 대한 참조를 포함하고 블록 내의 트랜잭션 또한 엄격하게 순서가 지정됩니다. [7]
드문 상황을 제외하고, 네트워크 참여자들 사이에는 블록의 정확한 개수와 이력에 대한 합의가 존재합니다. 참여자들은 실시간 트랜잭션 요청을 다음 블록으로 그룹화하기 위해 공동으로 작업합니다. 이러한 협력적 접근 방식은 각 블록의 헤더에 이전 블록의 해시를 담아 블록들을 서로 "체인"으로 연결하는 메커니즘을 통해 촉진됩니다. 이 방법은 블록 순서를 보존하고 그 안에 포함된 데이터의 불변성을 보장합니다.[2]
구성 요소
블록은 채굴자나 블록 검증인(validators)이 블록 헤더의 암호화된 정보를 성공적으로 검증했을 때 생성되며, 이는 새 블록의 생성을 유도합니다[5]. 블록은 크게 헤더(header)와 바디(body)의 두 부분으로 구성됩니다.
헤더 (Header)
블록 헤더에는 블록과 채굴자에 대한 정보가 포함되어 있습니다. 이는 다음과 같이 더 세분화됩니다.
이전 블록 해시 (Previous Block's Hash)
이것은 이전 블록의 해시값입니다. 블록들을 서로 연결하고 이전 블록의 데이터를 변경 불가능하게 만듭니다. 이전 블록의 데이터가 변경되면 해당 블록의 해시가 변경되어 블록체인의 연결이 끊어지게 됩니다.
기타 블록 헤더 필드
이 필드들은 각 블록체인의 요구 사항에 따라 다를 수 있습니다. 일반적인 필드는 다음과 같습니다.
- 논스(Nonce): 채굴자가 네트워크의 난이도를 달성하기 위해 블록 해시를 변경하려고 조정하는 정수입니다. 무작위 문자열입니다.
- 타임스탬프(Timestamp): 블록이 채굴된 시간입니다. 보통 유닉스 시간(Unix time)으로 표시됩니다.
- 난이도(Difficulty): 네트워크의 현재 난이도 수준입니다. 블록체인마다 다른 형식으로 저장됩니다.
- 머클 루트 해시(Merkle root hash): 트랜잭션들을 쌍으로 해시하여 하나의 해시만 남을 때까지 반복한 값으로, 루트 해시 또는 머클 루트 해시라고 불립니다.
- 블록 높이(Block height): 제네시스 블록과 현재 블록 사이에 채굴된 블록의 수입니다.
- 블록 크기(Block Size): 블록의 크기를 포함하는 4바이트 또는 32비트 필드입니다. 바이트 단위로 크기를 추가합니다. 예: 블록 크기: 216 바이트.
- 블록 보상(Block Reward): 트랜잭션 블록을 추가한 채굴자에게 지급되는 보상 금액이 포함된 필드입니다.
- 트랜잭션 카운트(Tx Count): 블록에 포함된 트랜잭션의 수를 나타내는 카운터입니다. 이 필드의 최대 크기는 9바이트입니다. [6]
- 블록 타임(Block Time): 네트워크 내의 채굴자나 검증인이 한 블록 내의 트랜잭션을 확인하고 해당 블록체인에서 새 블록을 생성하는 데 걸리는 시간을 측정한 것입니다. 암호화폐는 서로 다른 합의 알고리즘을 사용할 수 있으며, 이는 트랜잭션 확인 및 새 블록 생성 시간에 영향을 미칩니다. 각 암호화폐마다 블록 타임이 다릅니다. 예를 들어, 비트코인은 약 10분, 이더리움은 약 14초가 소요됩니다.[10]
바디 (Body)
블록 바디의 대부분은 특정 시간 프레임 내에 발생한 개별 트랜잭션 목록으로 구성됩니다.[3] 각 트랜잭션은 가치의 이전(예: 암호화폐 전송, 스마트 컨트랙트 실행)을 기록하며 다음을 포함한 다양한 세부 정보를 담고 있습니다.
- 트랜잭션 ID: 각 트랜잭션의 고유 식별자.
- 입력(Inputs): 이전 트랜잭션의 세부 정보를 포함한 트랜잭션 입력값.
- 출력(Outputs): 일반적으로 수신자 주소와 트랜잭션 금액을 포함하는 트랜잭션 출력값.[3]
유형
제네시스 블록 (Genesis Block)
제네시스 블록은 블록체인의 첫 번째 블록입니다. 최초의 제네시스 블록은 사토시 나카모토가 비트코인을 만들면서 채굴했으며, 2009년에 이 개념을 대중에 공개했습니다.
이 근본적인 블록은 새로 형성된 블록이 이전 상태와 연결될 수 있도록 합니다. 블록체인은 이 연결을 통해 불변성을 보장할 수 있습니다. 이는 머클 트리를 사용하기 때문입니다. 이를 통해 블록 이력을 해당 블록들과 연관된 고유한 해시와 연결할 수 있습니다. 아주 작은 변화라도 머클 루트의 정확성 검증을 방해하여, 시나리오에 따라 블록체인 이력의 일부 또는 전체를 무효화합니다. 제네시스 블록은 항상 기초가 되는 블록이므로 '블록 0'이라고도 불립니다.
제네시스 블록은 네트워크 노드들이 동기화될 수 있도록 합니다. 동기화는 두 노드의 데이터베이스가 동일한 제네시스 블록을 가질 때만 가능합니다. 이는 블록체인상의 분산 원장(DLT)이 모든 사람에게 동일함을 보장하여 보안을 유지합니다.
유효 블록 (Valid Blocks)
유효 블록은 채굴되어 블록체인에 추가된 모든 블록을 말합니다. 유효 블록이 되려면 채굴된 각 블록이 네트워크 권한을 얻어야 하며, 주어진 암호화 퍼즐을 해결한 블록으로 보고되어야 합니다. 네트워크가 합의에 도달하면 블록은 블록체인에 추가되고 모든 노드에 배포됩니다. 결과적으로 네트워크의 모든 노드는 새 블록을 가지게 되며 해당 블록의 검증 포인트 역할을 합니다. 암호화폐에서 일어나는 모든 작업과 트랜잭션은 이러한 블록들에 의해 허용됩니다.
각 유효 블록에는 블록과 함께 검증된 일련의 트랜잭션이 포함되어 있습니다. 예를 들어 비트코인의 경우, 각 정당한 블록에는 평균 2100개의 트랜잭션이 포함됩니다. 결과적으로 유효 블록 내의 각 트랜잭션은 확정된 트랜잭션이 됩니다. 그 이후 블록체인에 추가되는 모든 유효 블록은 이전 트랜잭션들을 계속해서 확인(confirm)해 줍니다. 이는 네트워크상의 모든 트랜잭션과 블록이 완전히 안전함을 보장합니다.
각 유효 블록에는 이 사실을 확인할 수 있는 데이터 구조가 함께 제공됩니다. 블록의 해시, 머클 루트, 타임스탬프, 논스, 블록 트랜잭션 데이터, 코인베이스(Coinbase)가 모두 구조에 포함됩니다. 이 모든 것은 각 정보 조각이 공개적으로 확인될 수 있도록 설정되어 있습니다.
고립된 블록 (Orphan Blocks)
고립된 블록은 블록체인 네트워크의 일부가 아닌 블록들입니다. 이들은 일반적으로 두 채굴자가 거의 동시에 블록을 생성할 때 발생하지만, 트랜잭션을 되돌리려는 의도를 가진 충분한 연산 능력을 갖춘 공격자에 의해 발생할 수도 있습니다. 이렇게 생성된 별개의 블록들은 일시적인 포크(fork)를 만듭니다. 이 시점에서 네트워크 합의 절차가 호출되어 어떤 블록이 검증되고 어떤 블록이 고립될지 결정합니다. 보통 가장 많은 트랜잭션과 정보를 포함하는 가장 긴 블록체인이 선택되도록 결정되어 보안 프로세스를 매우 단순하게 만듭니다.
스캔 시 블록체인 네트워크는 원본과 복제본 중 어떤 블록이 더 많은 정보를 가지고 있는지 감지하여 원본을 선택함으로써 해커의 시도를 무산시킵니다. 따라서 선택되지 않은 블록이 고립된 블록(Orphan block)이 됩니다. 네트워크의 합의 알고리즘은 이러한 해킹으로부터 시스템 네트워크를 안전하게 지킵니다. 블록 탐색기(Block explorers)를 통해 고립된 블록을 추적할 수 있습니다. [8][11]
