블록체인/레벨 IV · 프로토콜 심화/4.1 Script/수업 6
표준성과 정책
네트워크가 받아들이는 것과 내 노드가 중계하는 것의 차이
준비물비트코인 코어 소스 코드 (policy/policy.cpp)Bitcoin Optech의 ‘Waiting for confirmation’ 시리즈원본 스크립트를 보여주는 블록 탐색기
호기심
- 유효한 트랜잭션이 왜 때때로 채굴자에게 닿기도 전에 지갑에서 거부될까요?
- 상대방이 나와 다른 소프트웨어를 실행하지만 둘 다 ‘올바르다면’ 어떤 일이 벌어질까요?
- 사용되지 않는 옵코드를 릴레이 경로에서 배제하는 것이 어떻게 향후 업그레이드를 보호할 수 있을까요?
탐구
- 합의 규칙은 유효성을 정의합니다. 즉, 블록에 무엇이 들어갈 수 있고 모든 노드가 무엇을 받아들이는지를 결정합니다. 표준성은 이와 별개인 로컬 정책으로, 특정 노드가 어떤 트랜잭션을 피어에게 중계하고 자신의 메모리 풀에 보관할지를 정합니다. 어떤 트랜잭션은 합의상으로는 완전히 유효하지만 기본 릴레이 정책상으로는 비표준일 수 있습니다. 사용자가 이런 트랜잭션을 브로드캐스트하면, 채굴자가 기술적으로는 포함시킬 수 있는데도 사용자 자신의 노드가 즉시 버릴 수 있습니다.
- 표준 출력 유형은 서비스 거부 공격과 리소스 고갈로부터 노드를 보호하기 위해 엄격하게 제한됩니다. 여기에는 P2PKH, P2SH, P2WPKH, P2WSH, P2TR, 소규모 베어 멀티시그 스크립트(최대 3개 키), 그리고 특정 크기의 OP_RETURN 데이터 출력이 포함됩니다. 예약된 옵코드나 알 수 없는 옵코드를 사용하거나 크기 제한을 초과하는 스크립트는 기본적으로 중계되지 않습니다. 이러한 필터링 덕분에 멤풀은 관리 가능한 수준으로 유지되고, 악의적인 행위자가 복잡하고 연산 비용이 큰 쓰레기 데이터로 네트워크를 뒤덮는 것을 막을 수 있습니다.
- 정책은 고정되어 있지 않으며, 노드 구현마다 발전합니다. 2025년 비트코인 코어 개발자들은 OP_RETURN 데이터 출력의 기본 크기 제한을 완화하기로 결정했습니다. 이 변경은 노드 운영자들 사이에서 논쟁을 일으켰고, 일부는 확장에 반대해 더 엄격한 기존 제한을 유지하려고 비트코인 노츠(Bitcoin Knots) 같은 대체 소프트웨어로 전환했습니다. 이러한 분기는 표준성이 로컬 설정임을 보여줍니다. 서로 다른 버전이나 포크를 실행하는 두 노드는 합의를 위반하지 않고도 유효한 트랜잭션의 서로 다른 부분집합을 중계할 수 있습니다.
- 비표준이지만 유효한 트랜잭션도 기본 릴레이 네트워크를 완전히 우회하면 여전히 컨펌될 수 있습니다. 채굴자들은 노드 정책과 관계없이 사용자가 트랜잭션을 자신들의 블록에 곧바로 보낼 수 있는 직접 제출 서비스를 제공해 왔습니다. 지갑이 보안을 표준성에 따른 거부에 의존한다면, 즉 무효해 보이는 스크립트는 절대 전파되지 않으리라 가정한다면 위험이 생깁니다. 채굴자에게 직접 접근하는 상대방이 그 트랜잭션을 컨펌시킬 수 있기 때문입니다. 이는 진실이 아니라 행동의 분기를 만들며, 예상치 못한 자금 이동이나 손실로 이어질 수 있습니다.
- 표준성은 향후 소프트 포크 업그레이드를 위한 안전장치 역할을 합니다. 릴레이 과정에서 예약된 업그레이드 가능한 NOP 옵코드들을 비표준으로 간주하는 등 보다 엄격한 규칙을 지금부터 적용함으로써, 프로토콜은 합의 규칙이 강화될 때도 원활한 전환을 보장합니다. 예약된 옵코드를 사용하는 트랜잭션들은 기본적으로 릴레이되거나 채굴되지 않기 때문에, 소프트 포크가 해당 옵코드들에 의미를 부여하더라도 이러한 트랜잭션은 거의 존재하지 않습니다. 따라서 새로운 규칙들은 사람들이 의존하고 있던 것들을 무효화시키지 않으며, 업그레이드되지 않은 채굴자들도 새로운 규칙에서 거부되는 블록을 채굴할 가능성은 낮습니다.
- 정책 내용을 직접 확인해 보세요: Bitcoin Core의 소스 코드에서 policy/policy.cpp에는 허용되는 출력 유형과 크기 제한을 명시하는 IsStandard와 IsStandardTx 함수가 있습니다. Bitcoin Optech의 ‘Waiting for confirmation’ 시리즈에서는 이러한 규칙들이 만들어진 배경에 대해 설명하고 있습니다. 이를 검증 코드의 합의 규칙과 비교해 보면, 릴레이 규칙이 얼마나 더 엄격한지 알 수 있습니다.
핵심 사실
- 합의 규칙은 유효성을 정의하고, 표준성은 중계 동작을 정의합니다.
- 표준 출력 유형에는 P2PKH, P2SH, P2WPKH, P2WSH, P2TR 및 소규모 베어 멀티시그가 포함됩니다.
- 정책은 복잡하거나 큰 스크립트를 걸러냄으로써 서비스 거부 공격으로부터 노드를 보호합니다.
- 비표준 트랜잭션도 채굴자 직접 제출 서비스를 통해 컨펌될 수 있습니다.
- 비트코인 코어는 2025년에 OP_RETURN 크기 제한을 완화했으며, 이로 인해 일부 사용자들이 다른 소프트웨어로 전환하게 되었습니다.
- 표준성은 향후 소프트 포크 업그레이드를 용이하게 하기 위해 예약된 옵코드를 걸러냅니다.
연습 아홉, 여섯, 셋, 하나
9모으기비트코인 역사에서 사용된 서로 다른 출력 스크립트 유형 또는 형식 9가지를 나열하세요. 각각에 대해 현재 기본 노드 정책에서 표준으로 간주되는지 표시하세요.
6묶기9개를 구조적 복잡도에 따라 6개 범주로 묶으세요: 단순 키 해시, 래핑된 스크립트, 네이티브 위트니스, 복잡한 다자간 구조, 데이터 삽입, 레거시/실험적 유형.
3추리기6개 그룹을 노드가 이러한 특정 구조에 표준성 제한을 두는 3가지 핵심 이유로 줄이세요.
1결정화로컬 정책의 차이로 인해 합의상으로는 유효하지만 릴레이 정책상으로는 거부되는 트랜잭션이 어떻게 채굴자에게 직접 전파될 수 있는지 한 문장으로 설명하세요.
팩트 체크
날짜, 수치 및 주장은 아래에 명시된 출처들을 통해 확인되었습니다.