용어집 / 채굴과 합의
고아 블록
- 고아 블록이란 무엇입니까?
- 고아 블록은 자신의 부모 블록을 노드가 아직 보지 못한 블록으로, 그래서 검증하거나 연결할 수 없습니다. 이는 대부분의 사람이 그 단어로 말할 때 뜻하는 바와 다릅니다.
이 단어에는 두 가지 삶이 있습니다. 프로토콜에서 이 단어는 알려진 조상이 없어 붙일 수 없는 채로 순서를 벗어나 도착한 블록을 가리킵니다. 일상적인 용법과 대부분의 블록 탐색기에서는 경쟁에서 그저 진 유효한 블록에 붙는 이름이며, 이를 정확히는 고아 블록이 아니라 스테일 블록이라고 부릅니다. Bitcoin Core는 2015년 2월에 출시된 0.10 버전에서 고아 블록을 아예 보관하지 않기 시작했습니다.
작동 방식
고아 블록은 블록을 받은 시점과 그것이 어디에 속하는지 알게 된 시점 사이의 간격에만 존재합니다.
검증은 순차적으로 이루어집니다. 블록을 검사하려면 바로 그 직전 시점의 미사용 출력 집합이 필요하고, 이 집합은 그 이전의 모든 블록을 순서대로 적용하여 만듭니다. 부모가 없는 블록을 노드에 건네면 노드는 헤더의 작업 증명은 검증할 수 있지만 그 밖의 것은 아무것도 검증할 수 없습니다. 수수료도, 보조금도, 어떤 입력이 이미 사용되었는지도 마찬가지입니다. 그 블록은 무효가 아니라 검증이 불가능한 상태입니다.
이전 버전의 Bitcoin Core는 이런 블록을 메모리에 보관하고 빠진 부모가 나타나기를 기다렸습니다. 블록은 공지에 따라 요청되었기 때문에 피어가 쉽게 순서를 벗어나 전달할 수 있었고, 그래서 이 보관이 필요했습니다. 헤더 우선 동기화가 그 필요를 없앴습니다. 이제 노드는 블록 본문을 하나라도 요청하기 전에 80바이트 헤더의 체인을 내려받아 검사하므로, 도착한 블록이 어디에 속하는지 항상 알고 여러 피어에 동시에 본문을 요청해도 혼동이 없습니다. 고아 블록 풀은 같은 버전에서 삭제되었고, 현대적인 노드에서는 진정한 고아 블록을 만드는 것이 사실상 불가능합니다.
한 가지만은 이름을 유지했습니다. Bitcoin Core는 입력을 아직 보지 못한 트랜잭션을 위한 고아 트랜잭션 풀을 여전히 유지하며, 기본값으로 최대 100개를 보관합니다. 빠진 부모 트랜잭션이 몇 초 뒤에 도착할 것이라는 합리적인 판단에 근거한 것입니다. 따라서 이 단어가 Core 자체의 로그나 설정에 나타날 때는 트랜잭션을 말하는 것이지 블록을 말하는 것이 아닙니다.
어디에서 보이는가
고아라는 단어는 주로 다른 무언가를 설명하는 곳에 살아남았습니다.
블록 탐색기가 가장 큰 혼란의 원천입니다. 여러 탐색기가 경쟁 블록이 이겼을 때 버려진 유효한 블록을 나열하는 고아 블록 페이지를 공개하고, 언론 보도가 그 표기를 그대로 옮깁니다. 채굴 풀 대시보드도 마찬가지로, 실제로는 스테일 비율인 것을 고아 비율로 보고합니다. 상당 부분 비트코인의 초기 위키에서 복사된 알트코인 문서들은 이 용어를 두 의미에 구분 없이 사용합니다.
Bitcoin Core는 그렇지 않습니다. 알고 있는 경쟁 분기들을 요청하면 각 분기의 끝을 active, valid fork, valid headers, headers only 또는 invalid 상태로 보고합니다. 고아 상태는 없습니다. 그 단어가 한때 묘사하던 상황이 더는 발생하지 않기 때문입니다.
읽는 사람에게 유용한 판별 기준은 해당 블록이 검사된 적이 있는지 여부입니다. 누군가 그 블록의 높이, 트랜잭션 수, 채굴한 풀을 말해 줄 수 있다면 그 블록은 완전히 검증되었고 경쟁에서 진 것이므로, 찾는 단어는 스테일입니다.
고아 블록 vs 스테일 블록
고아 블록은 부모를 알 수 없어 검증할 수 없습니다. 스테일 블록은 검증되었고 완전히 유효했으며, 같은 높이의 다른 블록이 먼저 그 위에 쌓였다는 이유만으로 버려졌습니다. 고아라고 말하는 거의 모든 사람과 여러 탐색기는 스테일을 뜻하므로, 어떤 출처가 어느 쪽을 뜻하는지 먼저 물어본 뒤 결론을 내리는 것이 좋습니다. 어느 쪽도 사용자로서 비용을 발생시키지 않습니다. 버려진 블록의 결제는 멤풀로 돌아가며 보통 한두 블록 안에 다시 채굴됩니다.