용어집 / 채굴과 합의
체인 재구성
별칭은 재구성, Reorg, Chain reorganization입니다.
- 체인 재구성이란 무엇입니까?
- 체인 재구성은 노드가 누적 작업량이 더 많은 분기를 발견했을 때 일어나는 일로, 노드는 이미 수용한 블록의 연결을 끊고 새로운 분기를 따라 체인의 끝부분을 다시 구성합니다.
노드는 처음 본 체인을 따르지 않습니다. 가장 많은 작업 증명을 담은 체인을 따르며, 더 나은 분기가 나타나면 분기점까지 되돌아가 그 지점부터 다시 실행합니다. 비트코인 메인 체인에서 일어나는 거의 모든 재구성은 깊이가 1블록이고 몇 초 안에 끝납니다. 기록상 가장 깊었던 2013년 3월의 24블록 재구성은 공격자가 아니라 소프트웨어 버그 때문에 발생했습니다.
작동 방식
체인 재구성은 세 단계로 이루어지며, 노드는 누구에게도 묻지 않고 이 세 단계를 모두 스스로 수행합니다.
먼저 현재 체인의 끝에서 두 분기가 공유하는 마지막 블록까지 거슬러 올라가면서 지나는 각 블록을 되돌립니다. 그 블록이 만든 출력은 미사용 출력 집합에서 제거되고, 그 블록이 소비한 출력은 복원되며, 그 블록의 트랜잭션은 멤풀로 돌아갑니다. 그다음 경쟁 분기의 블록을 순서대로 연결하며, 각 블록을 마치 방금 도착한 것처럼 똑같이 검증합니다. 마지막으로 멤풀을 다시 계산하여 이미 확인된 것은 버리고 확인되지 않은 것은 남깁니다.
안전은 두 번째 단계에 있습니다. 더 많은 작업은 필요하지만 충분하지는 않습니다. 도전하는 분기의 블록 하나라도 합의 검사 단 한 항목에서 실패하면, 노드는 멈추고 그 분기를 무효로 표시한 뒤 이미 가지고 있던 체인을 유지합니다. 해시 파워가 무한한 채굴업자라도 노드가 자신에게 너무 많이 지급하는 블록이나 출력을 두 번 쓰는 블록을 받아들이게 만들 수는 없습니다.
규칙은 누적 작업량이 가장 많은 체인이지 가장 긴 체인이 아닙니다. 작업량은 각 블록이 채굴된 난이도에 따라 합산되므로, 더 높은 난이도에서 채굴된 블록 수가 더 적은 분기가 더 긴 분기를 앞설 수 있습니다. 비트코인에서는 난이도가 2,016블록마다 한 번씩만 바뀌기 때문에 두 측정치는 거의 항상 일치합니다.
깊이가 일상적인 일과 경각심을 불러일으키는 일을 가르는 기준입니다. 깊이 1블록은 정상적인 정리 작업입니다. Bitcoin Core는 규모가 있는 모든 것을 보도 가치가 있는 일로 취급하며, 경쟁 분기가 활성 체인에서 6블록 넘게 벗어나는 것을 보면 운영자에게 대규모 작업 포크 경고를 띄웁니다.
비트코인을 구매할 때 이것이 중요한 이유
확인 횟수는 재구성 깊이에 대한 하나의 베팅이며, 여러분이 사용하는 모든 플랫폼은 여러분을 대신해 조용히 그 베팅을 해 두었습니다.
입금을 3블록 후에 반영하는 거래소는 3블록 되돌림에 대비해 보험을 드는 것은 가치가 없다고 판단한 것입니다. 6블록을 기다리는 거래소는 그 위험에 더 높은 값을 매긴 것입니다. 두 수치 모두 프로토콜에서 나온 것이 아니며 둘 다 정책입니다. 그래서 같은 입금이 어떤 플랫폼에서는 20분 만에 처리되고 다른 플랫폼에서는 한 시간 넘게 걸립니다. 이 사이트가 리뷰한 거래소 사이에서 코인을 옮길 때는, 무언가 잘못됐다고 단정하기 전에 그 차이를 확인해 볼 가치가 있습니다.
여러분의 키는 이 모든 일의 영향을 받지 않습니다. 재구성은 어떤 트랜잭션이 어떤 순서로 체인에 들어가는지를 바꿀 수 있지만 서명을 만들어 낼 수는 없으므로, 여러분이 관리하는 지갑에 있는 코인은 노출 범위에 들지 않습니다. 영향 범위에 드는 것은 움직이는 가치입니다. 즉 입금 처리는 되었지만 아직 깊이 묻히지 않은 입금, 상품 대금으로 받은 결제, 확인 1회를 근거로 현금을 보내준 개인 간 거래(P2P) 등입니다.
역사는 한 가지 교훈적인 경고를 남겼습니다. 2015년 7월 4일에 여러 대형 풀이 자신이 검증하지 않은 블록 위에서 블록을 쌓는, 이른바 SPV 채굴을 하여 6블록짜리 체인을 만들어 냈는데, 그 체인은 무효로 판명되었습니다. Bitcoin.org는 상황이 해결될 때까지 30회의 확인을 기다리라고 사용자에게 권고하는 경보를 게시했습니다. 교훈은 비트코인이 취약하다는 것이 아니라, 필요한 깊이는 무엇이 잘못되고 있는지에 달려 있고 확인 1회는 결코 많은 것이 아니라는 점이었습니다.
규모가 더 작은 작업 증명 코인을 함께 보유하고 있다면, 그 코인의 재구성 이력은 완전히 별개의 문제로 다루십시오. 거래소는 실제로 재구성이 일어난 체인에는 훨씬 많은 확인을 요구하며, 그 요구 사항은 체인이 실제로 얼마나 안전한지에 대한 유용한 공개 신호입니다.
2013년 3월의 24블록 재구성
비트코인 메인 체인이 겪은 가장 깊은 재구성은 두 버전의 소프트웨어가 둘 다 받아들여야 했던 한 블록에 대해 의견이 갈린 탓에 일어났습니다.
2013년 2월에 공개된 Bitcoin 0.8은 Berkeley DB 저장 엔진을 LevelDB로 교체했습니다. 3월 11일에 블록 225,430이 평소보다 훨씬 많은 입력을 담고 도착했습니다. Bitcoin 0.8을 실행하는 노드는 이를 받아들였습니다. Bitcoin 0.7을 실행하는 노드는 설정상 한 번도 넘어본 적 없는 Berkeley DB 잠금 한도에 부딪혀 이를 거부했습니다. 네트워크는 둘로 갈라졌고, 양쪽 모두 상대가 틀렸다고 확신했습니다.
개발자들은 한 시간 안에 IRC에서 협의하여 불편한 결정을 내렸습니다. 즉 풀에 Bitcoin 0.7로 다운그레이드하라고 요청하여 더 많은 작업을 가진 분기를 의도적으로 포기하는 것이었습니다. 그 분기야말로 실행 중인 노드 대다수가 따라갈 수 없는 분기였기 때문입니다. 분열은 약 6시간 지속되었습니다. Bitcoin 0.7 체인이 앞서자 버려진 분기는 24블록까지 이어졌습니다. 결제 처리업체 한 곳인 OKPay는 그 사이에 이중 지불을 당했다고 보고했습니다.
수정은 며칠 뒤 0.8.1로 배포되었으며, 이 버전은 협의된 전환일까지 새 노드가 예전 한도를 모방하게 했습니다. BIP50은 이 사건 전체를 상세히 기록하며, 비트코인이 실제 비상 상황을 어떻게 처리하는지에 관해 읽을 수 있는 가장 좋은 단일 자료입니다. 이는 또한 비트코인 역사상 가장 깊은 재구성이 채굴 능력이 아니라 데이터베이스 설정에 관한 이야기인 이유이기도 합니다.
체인 재구성 vs 하드 포크
체인 재구성은 하나의 규칙 집합 안에서 일어나며 결국 모두가 같은 체인으로 돌아옵니다. 하드 포크는 규칙을 바꾸어 두 분기가 결코 화해할 수 없게 하고, 양쪽 모두 별개의 자산으로 계속 성장합니다. 이는 2017년 8월 1일에 Bitcoin Cash에서 일어난 일입니다. 하나는 어떤 유효한 체인이 최선의 체인인가에 대한 일시적 이견이고, 다른 하나는 유효하다는 것의 의미에 대한 영구적 이견입니다.
체인 재구성 vs 이중 지불
재구성은 하나의 메커니즘이고, 이중 지불은 그것으로 할 수 있는 일 중 하나이며, 실제로 일어나는 일은 드뭅니다. 재구성의 압도적 다수는 같은 트랜잭션을 다른 블록에서 다시 채굴할 뿐이므로 누구의 결제도 바뀌지 않습니다. 되돌림이 일어나려면 승리한 분기에 공격자가 의도적으로 넣은 충돌하는 트랜잭션이 있어야 하며, 이는 엄청난 해시 파워나 특출난 행운을 뜻합니다. 더 저렴한 이중 지불 시도는 애초에 확인된 적이 없는 결제를 노리기 때문에 재구성을 전혀 수반하지 않습니다.