233 / 691ORPH

Orphan Block

부모를 모르는 블록 또는 곁가지 블록을 뜻하는 모호한 명칭

Orphan Block은 부모 문맥이 누락된 블록을 뜻하거나, 넓게는 활성 체인 밖의 경쟁 블록을 가리킵니다. 이 구분에 따라 노드가 실제 검증한 내용과 출력에서 내릴 수 있는 결론이 달라집니다.

좁은 의미의 Orphan Block은 관측 노드가 부모를 모르는 블록입니다. 넓은 용례에서는 비활성 가지의 stale 블록과 혼동되므로, 이름만으로 유효성이나 원인을 확정할 수 없습니다.

Bitcoin Developer Guide는 부모를 모르는 Orphan Block과 경쟁 가지의 Stale Block을 명시적으로 구분합니다. 후자는 부모가 알려져 있고 유효할 수 있습니다. 탐색기나 풀 보고서를 읽을 때는 작성자가 어느 의미를 사용하는지 먼저 확인해야 합니다. orphan이라는 단어 자체로는 구분되지 않습니다. [Bitcoin Developer Guide — Block height and forks]

Bitcoin Core 29는 AcceptBlockHeader에서 인덱스의 hashPrevBlock을 찾습니다. 항목이 없으면 prev-blk-not-found를 반환하고, 부모가 무효로 표시되어 있으면 bad-prevblk가 됩니다. 서로 다른 결과입니다. 부모를 확보하면 추가 문맥 검사를 할 수 있지만, 그것만으로 전체 블록의 수락이 보장되지는 않습니다. [Bitcoin Core 29 — Header acceptance]

Bitcoin Core 0.10.0은 headers-first 동기화를 도입했습니다. 먼저 헤더를 얻고 나서 블록을 병렬로 내려받습니다. 따라서 디스크에 전체 부모 블록이 없어도 인덱스는 부모 헤더를 알 수 있습니다. 블록 본문 누락을 부모 헤더 미확인과 혼동하지 말고, 실제 빠진 데이터가 무엇인지 확인해야 합니다. [Bitcoin Core 0.10.0 — Headers-first synchronization]

getchaintips에서 Bitcoin Core 29는 active, valid-fork, valid-headers, headers-only, invalid를 구분합니다. valid-fork는 완전히 검증된 비활성 가지입니다. valid-headers는 블록이 모두 있지만 완전히 검증되지 않았고 headers-only는 일부 블록이 없습니다. 도움말의 orphaned branches라는 표현도 이 상태들을 하나로 합칠 근거가 되지 않습니다. [Bitcoin Core 29 — getchaintips]

예시로 서로 다른 블록 A와 B가 모두 높이 900000일 수 있습니다. 이 숫자는 승자나 고유 식별자를 정하지 못하므로 hash와 previousblockhash를 저장합니다. 유효한 가지 사이의 선택은 RPC에서 chainwork로 설명하는 누적 작업량을 따르며, 높이만 비교하지 않습니다. 예시 숫자는 특정 역사적 분기를 주장하지 않습니다. [Bitcoin Developer Guide — Block height and forks] [Bitcoin Core 29 — getblock]

Bitcoin Core 29의 getblock은 주 체인 밖의 블록에 confirmations = -1을 반환합니다. 이는 음수 재구성 깊이도, 부모 누락의 증거도 아닙니다. 해시, 가지 정보, 로컬 노드 상태와 함께 읽어야 합니다. 한 노드의 출력은 다른 노드들이 수신한 모든 것을 나열하지 않습니다. [Bitcoin Core 29 — getblock]

Bitcoin Core 29의 COINBASE_MATURITY는 100입니다. 이는 coinbase 출력의 지출을 블록 깊이로 제한하며, 분 단위 대기 시간이 아닙니다. 시간이 지나거나 다른 곳에 블록이 추가되어도 활성 기록 밖의 stale 가지 보상이 복원되지는 않습니다. 성숙은 체인 편입을 대신하지 못합니다. [Bitcoin Core 29 — Coinbase maturity] [Bitcoin Developer Guide — Block height and forks]

기록할 때 getchaintips와 getblock을 블록 해시, 부모, 가지 상태, 노드 버전, 관측 시각과 결합합니다. 관측 시각은 헤더의 time 필드와 별도로 기록합니다. 단 한 번의 출력만으로 공격, 전 세계 고아 블록 비율, 특정 네트워크 장애를 입증할 수는 없으며 추가 관측이 필요합니다. [Bitcoin Core 29 — getchaintips] [Bitcoin Core 29 — getblock]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Stale Block, Reorg, Block propagation, Proof of Work. 다음 항목에서도 이 글을 참조합니다 Stale Block.

DOC · 001Bitcoin Developer Guide — Block height and forks문서 ↗DOC · 002Bitcoin Core 29 — Header acceptance1차 출처 ↗DOC · 003Bitcoin Core 0.10.0 — Headers-first synchronization1차 출처 ↗DOC · 004Bitcoin Core 29 — getchaintips문서 ↗DOC · 005Bitcoin Core 29 — getblock문서 ↗DOC · 006Bitcoin Core 29 — Coinbase maturity1차 출처 ↗
1차 출처 우선 · 투자 조언이 아닙니다