용어집 / 채굴과 합의
합의 규칙
- 합의 규칙이란 무엇입니까?
- 합의 규칙은 모든 풀 노드가 블록에 적용하는 유효성 검사이며, 그중 하나만 위반해도 해당 블록이 얼마나 많은 작업을 담고 있든 무효가 됩니다.
규칙집은 세부 사항이 많습니다. 이중 지출은 없어야 하고, 입력보다 가치가 큰 출력도 없어야 하며, 스크립트는 유효해야 하고, 코인베이스는 보조금에 수수료를 더한 금액을 넘지 않아야 합니다. Bitcoin Core는 숫자를 코드에 고정해 두었습니다. 블록당 4,000,000 가중치 단위, 80,000 서명 연산, 그리고 채굴된 코인을 지출하기 전의 100 블록 대기입니다. 이러한 규칙 덕분에 어떤 거래소도 네트워크가 만든 적 없는 코인을 사용자에게 입금해 줄 수 없습니다.
작동 방식
합의 규칙은 네 가지 그룹으로 나뉘며, 거의 모든 규칙은 의도적으로 지루합니다.
첫 번째 그룹은 화폐를 규율합니다. 블록 보상은 210,000 블록마다 절반으로 줄어들며, 코인베이스 출력은 실제로 포함된 트랜잭션의 수수료에 해당 보조금을 더한 금액보다 1사토시도 더 청구할 수 없습니다. 블록이 생성한 코인은 그 후 100 블록 동안 지출할 수 없습니다. 그 밖의 모든 트랜잭션은 존재하고 아직 지출되지 않았으며 자신을 잠근 스크립트를 충족하는 출력을 지출해야 하며, 나가는 총액은 들어오는 총액을 절대 초과할 수 없습니다.
두 번째 그룹은 자원을 규율합니다. 검증은 일반적인 기계에도 충분히 저렴하게 유지되어야 하기 때문입니다. 블록은 4,000,000 가중치 단위 또는 80,000 서명 연산 단위를 초과할 수 없습니다. 세 번째 그룹은 구조를 규율합니다. 코인베이스 트랜잭션은 맨 처음에 단 한 번만 오며, 헤더의 머클 루트는 포함된 트랜잭션과 일치해야 하고, 헤더 해시는 난이도 규칙이 요구하는 목표값과 같거나 그보다 낮아야 합니다. 네 번째 그룹은 시간을 규율합니다. 블록의 타임스탬프는 이전 11개 블록 타임스탬프의 중앙값보다 늦어야 하고 노드 자체 시계보다 2시간 넘게 앞서서는 안 되며, BIP113 이후로는 같은 중앙값 시간이 잠금 시간(locktime)의 기준이 됩니다.
이 규칙들이 어디에 적혀 있는지가 까다로운 부분입니다. 독립적인 명세서는 없습니다. 규칙은 배포된 코드가 받아들이는 것이며, 네트워크의 압도적 다수에게 그것은 Bitcoin Core의 검증 논리이고, 그 특이한 점과 우연한 결함까지 포함합니다. 그래서 다른 언어로의 재작성은 개선이 아니라 위험으로 취급되며, 가장 잘 알려진 변형인 Bitcoin Knots가 Core의 합의 동작을 바이트 단위까지 그대로 유지하고 중계 및 채굴 정책에서만 다른 것도 같은 이유입니다.
목록을 바꾸는 방향은 두 가지입니다. 소프트 포크는 가능성을 제거하므로, 새 규칙 아래에서 만들어진 블록도 구형 소프트웨어에는 여전히 유효해 보입니다. 엄격한 DER 서명 인코딩은 블록 363,725에서, OP_CHECKLOCKTIMEVERIFY는 블록 388,381에서 의무화되었고, 둘 다 네트워크를 분리하지 않았습니다. 하드 포크는 가능성을 추가하므로, 업그레이드하지 않은 사람에게 새 블록은 무효로 보이며, 채택이 보편적이지 않으면 두 개의 체인을 만들어냅니다.
비트코인을 구매할 때 이것이 중요한 이유
합의 규칙은 비트코인을 보유하는 일에서 누구도 나중에 사용자와 재협상할 수 없는 유일한 부분입니다.
이 규칙은 소수의 위험 아래에 단단한 하한선을 둡니다. 누구도 발행 일정을 벗어나 코인을 찍어낼 수 없고, 키 없이 출력을 지출할 수 없으며, 실제 작업 위에 묻힌 결제를 삭제할 수 없습니다. 그 하한선은 좁으며, 그 바깥에 무엇이 있는지 정확히 짚어 볼 가치가 있습니다. 사람들이 실제로 돈을 잃는 곳이 바로 그곳이기 때문입니다. 거래소의 지급 불능, 시드 문구를 수집하는 피싱 사이트, 계좌를 동결하는 고객 지원 담당자, 예산에 없던 세금 고지서 등입니다. 어느 것도 규칙이 깨져서 생기는 일이 아닙니다. 모두 규칙이 애초에 다루지 않은 무언가를 신뢰하는 일입니다.
이 구분은 마케팅 문구를 시험하는 기준을 제공합니다. 어떤 서비스가 확인된 결제를 되돌릴 수 있다면, 그것은 비트코인 트랜잭션을 되돌린 것이 아닙니다. 자체 원장을 조정한 것이며, 사용자는 온체인에 있었던 적이 없습니다. 어떤 제품이 블록이 허용하는 것보다 빠른 결제 완결을 광고한다면, 그것은 사용자에게 신용을 제공하고 위험을 스스로 지는 것이며, 사용자가 그것이 자신이 구매한 것임을 안다면 충분히 좋은 서비스일 수 있습니다. 어떤 코인이 초당 수천 건의 트랜잭션으로 비트코인의 보안을 주장한다면, 위에 서술한 자원 한도가 비트코인이 그렇게 하지 않는 이유입니다.
합의 규칙이 결코 아닌 것은 법입니다. 네트워크는 지구상의 모든 사용자에게 같은 검사를 적용하지만, 법적 규칙집은 국경마다 바뀌며, 이 사이트의 국가별 가이드가 이 페이지의 어떤 내용과도 별도로 존재하는 이유가 그것입니다. 유효성은 노드가 결정합니다. 합법성, 신고 의무, 그리고 거래소가 사용자를 받아들일지 여부는 사용자의 관할권이 결정하며, 이 둘은 단 한 번도 서로 상의하기로 합의한 적이 없습니다.
다섯 시간 동안 지속된 1,840억 비트코인
2010년 8월 15일, 블록 74,638의 한 트랜잭션이 각각 920억 비트코인이 넘는 두 개의 출력을 만들었습니다.
버그는 산술에 있었습니다. 코드는 각 출력이 정상적인 금액인지 확인했지만 이를 합산해 하나의 값으로 만들었고 그 값이 넘쳐, 전체 발행 일정보다 큰 총액이 작은 양수로 읽혀 검사를 통과했습니다. 사토시 나카모토는 몇 시간 안에 수정본 버전 0.3.10을 공개했고, 노드들은 그것으로 전환했으며, 수정된 체인이 53 블록 뒤에 결함이 있는 체인을 앞질렀습니다. 이 사건은 CVE-2010-5139로 기록되었으며, 비트코인의 공급이 발행 일정을 초과한 유일한 사례로 남아 있습니다.
두 가지 교훈이 남습니다. 2,100만 한도는 물리 법칙이 아니라 코드 한 줄이며, 코드는 틀릴 수 있습니다. 그리고 그 수리는 누구도 책임지지 않았기 때문에 정확히 작동했습니다. 수천 명의 독립 운영자가 각자 수정된 소프트웨어를 실행하기로 선택했으며, 그것이 합의 규칙이 가진 유일한 작동 기제였습니다.
합의 규칙 vs 멤풀 정책
합의 규칙은 무엇이 유효한지 결정하고, 멤풀 정책은 노드가 무엇을 전달할지 결정합니다. 정책은 더 느슨하고, 지역적이며, 노드마다 조정할 수 있습니다. 기본 최소 중계 수수료 1 sat/vB, 레거시 출력의 더스트 임계값 546 사토시, 데이터를 담는 출력에 대한 한도, 표준으로 간주되는 스크립트 유형 목록 등입니다. 정책을 어기면 사용자의 트랜잭션은 단순히 전파되지 않을 수 있습니다. 합의 규칙을 어기면 그것을 담은 블록은 영원히 존재할 수 없습니다. 채굴업자는 일부 노드가 중계하지 않았을 트랜잭션을 정기적으로 포함하며, 그 결과 블록은 완전히 유효합니다. 그래서 “내 지갑이 비표준이라고 한다”는 우회 방법이 있는 경로 문제이고, “무효”는 최종입니다.