본문으로 건너뛰기
buybitcoinsmart

용어집 / 채굴과 합의

머클 루트

머클 루트란 무엇입니까?
머클 루트는 블록 헤더에 있는 32바이트 해시 하나로, 해당 블록의 모든 트랜잭션을 채굴업자가 배열한 정확한 순서 그대로 확정합니다.

결제 하나에서 사토시 하나를 바꾸거나, 트랜잭션 두 개의 순서를 바꾸거나, 트랜잭션 하나를 더 추가하면 루트는 완전히 달라집니다. 채굴업자는 이 점에 의존합니다. 32비트 논스가 제공하는 시도 횟수는 약 43억회뿐이므로, 채굴 소프트웨어는 코인베이스 트랜잭션을 수정해 새로운 루트를 만들어 계속 탐색합니다. 코인을 보유한 사람에게 이 필드 하나는 블록이 채굴된 후에 결제가 조용히 늘거나 줄 수 없는 이유입니다.

작동 방식

머클 루트는 선택되는 것이 아니라 계산되며, 바로 그 점이 머클 루트를 가치 있게 만듭니다.

머클 루트는 헤더의 80바이트 중 32바이트를 차지하며, 채굴업자는 트랜잭션이 산출하는 값을 그대로 기록합니다. 블록을 받은 모든 노드는 전달받은 트랜잭션 목록으로 트리를 다시 만들고 자신의 결과를 헤더와 비교합니다. 불일치는 곧바로, 이견 없이 거부를 뜻합니다. 헤더는 한 가지를 말하고 블록 본문은 다른 것을 말하는 프로토콜 버전은 존재하지 않습니다.

이 검사는 머클 루트를 채굴 루프의 축으로 만듭니다. 논스는 폭이 4바이트뿐이어서 가능한 값이 4,294,967,296가지이며, 초당 200조해시로 작동하는 장비는 이 값을 약 20마이크로초 만에 모두 소진합니다. 따라서 채굴업자는 새로운 후보를 생성할 방법이 필요하며, 가장 저렴한 방법은 코인베이스 트랜잭션을 변경하는 것입니다. 풀은 각 장비에 코인베이스 트랜잭션을 두 부분으로 나누고 그 사이에 빈자리를 둔 형태로 보내며, 장비는 빈자리에 자신의 바이트를 기록하고, 코인베이스 트랜잭션 ID가 바뀌고, 머클 루트가 바뀌고, 43억개의 새로운 논스가 사용 가능해집니다. 타임스탬프와 BIP320이 예약한 16비트 버전을 바꾸면 추가 공간이 생깁니다.

세그윗(Segregated witness)은 헤더를 건드리지 않고 두 번째 루트를 추가했습니다. 헤더를 건드렸다면 하드 포크가 되었을 것이기 때문입니다. BIP141은 위트니스 트랜잭션 ID에 대한 별도의 트리를 정의하며, 그 루트는 0xaa21a9ed라는 4바이트 접두사로 표시해 코인베이스 트랜잭션의 출력에 기록합니다. 코인베이스 자체가 일반 트리의 리프이므로, 그 위트니스 커밋은 결국 한 단계를 거쳐 헤더의 머클 루트에 접혀 들어갑니다.

확인하는 곳

머클 루트는 어떤 블록 탐색기든 보여주는 필드 중 하나이며, 손으로 직접 검증할 수 있는 몇 안 되는 필드 중 하나입니다.

Bitcoin Core는 getblockheader와 getblock의 출력에서 이를 merkleroot로 보고합니다. 4a5e1e4b로 시작하는 제네시스 블록의 값은 시작점으로 좋습니다. 그 블록은 트랜잭션 하나만 담고 있기 때문입니다. 리프가 하나인 트리는 자기 자신이 루트이므로 머클 루트와 트랜잭션 ID가 동일합니다. 코인베이스 트랜잭션만 담은 블록은 모두 같은 성질을 지닙니다.

머클 루트는 블록이 아니라 채굴 프로토콜에서도 볼 수 있습니다. Stratum 작업 알림은 채굴업자에게 트랜잭션을 전혀 보내지 않습니다. 코인베이스의 두 부분과 코인베이스에서 꼭대기까지 올라가는 데 필요한 짧은 해시 목록을 보내므로, 장비는 시도하는 모든 extranonce마다 스스로 루트를 계산할 수 있습니다. Stratum V2는 트랜잭션을 누가 선택하는지를 바꾸지만, 루트는 여전히 같은 방식으로 조립됩니다.

머클 루트 vs 이전 블록 헤더 해시

머클 루트와 이전 블록 헤더 해시는 둘 다 32바이트 해시로 같은 80바이트 헤더 안에 나란히 있으며, 서로 다른 방향을 확정합니다. 머클 루트는 안쪽, 즉 이 블록의 내용인 트랜잭션과 그 순서만을 가리킵니다. 이전 블록 헤더 해시는 뒤쪽, 즉 그 배후의 전체 역사를 가리킵니다. 결제 하나를 수정하면 머클 루트만 깨집니다. 작년 블록 하나를 수정하면 그 이후 모든 블록의 이전 블록 헤더 해시가 틀리게 되며, 이것이 블록 하나를 조작하는 것과 체인을 조작하는 것의 차이입니다.

혼동하기 쉬운 용어

자주 묻는 질문

머클 루트가 트랜잭션과 일치하지 않으면 어떻게 됩니까?

모든 노드가 그 블록을 거부합니다. 트랜잭션 목록으로 루트를 다시 만드는 것은 노드가 수행하는 가장 저렴한 검사 중 하나이므로, 내용이 헤더가 확정한 것과 다른 블록을 게시할 방법은 없습니다.

채굴업자는 채굴 중에 왜 머클 루트를 바꿉니까?

논스가 소진되기 때문입니다. 4바이트는 약 43억회의 시도를 제공하며, 현대의 하드웨어는 이를 거의 즉시 소진하므로, 채굴업자는 코인베이스 트랜잭션을 변경해 새로운 머클 루트와 새로운 후보 묶음을 만들어 냅니다.

다음에 읽을 글

관련 용어

채굴과 합의 분야의 다른 용어

이 페이지를 영어로 읽기