BIP0009(BIP9)는 비트코인에서 소프트포크를 안전하게 활성화하기 위해 만든 "버전 비트(version bits)" 기반 신호·타임아웃 방식의 표준입니다.
BIP9의 목적
여러 소프트포크를 동시에 병렬로 배포할 수 있게 합니다. 채굴자들이 블록 헤더의 version 비트로 "업그레이드 지원 여부"를 신호하도록 표준화합니다. 일정 기간 안에 충분한 신호(해시 파워)가 모이지 않으면 자동으로 "실패"로 처리하여, 같은 비트를 나중에 재사용할 수 있게 합니다.
어떻게 동작하나요?
버전 비트 선택: 블록 헤더의 version 필드는 32비트이고, 이 중 특정 1비트를 해당 소프트포크의 신호용 비트로 정합니다. 파라미터 설정: 각 소프트포크마다 name(제안 이름), bit(0–28 중 하나, 동시 소프트포크끼리는 서로 다른 비트), starttime(신호 시작 시점, 보통 릴리스 후 약 한 달 뒤), timeout(이때까지 lock-in에 실패하면 실패로 보는 시점, 보통 starttime 후 1년)을 정합니다. 채굴자 신호: 채굴자는 자신이 지지하는 소프트포크에 해당하는 비트를 1로 설정한 version 값을 블록 헤더에 넣어 채굴합니다. 윈도우와 임계치(95%): 비트코인은 2016블록 단위로 난이도 조정(약 2주)을 하는데, BIP9도 같은 2016블록을 하나의 "측정 구간"으로 사용합니다. 한 구간 안에서 약 95%에 해당하는 블록(2016 중 1916개)이 해당 비트를 세트하면 "lock-in" 조건을 만족합니다.
상태(state) 머신
DEFINED: 제안이 정의만 되어 있고, starttime 전이라 아직 신호를 안 보는 상태. STARTED: starttime 이후, 각 2016블록마다 비트가 얼마나 세트됐는지 집계하는 상태. LOCKED_IN: 어떤 2016블록 구간에서 95% 이상 신호를 달성해, 다음 구간부터 새 규칙이 "활성 예정"인 상태. ACTIVE: 그 다음 구간부터 새 규칙이 실제로 적용·강제되는 상태. FAILED: timeout까지도 95%에 도달하지 못해, 이 제안은 더 이상 진행되지 않는 상태(비트를 나중에 다른 제안에 재사용 가능).
왜 중요한가?
안전성: 충분한 해시 파워가 동의했을 때만 소프트포크 규칙을 적용하므로, 체인 분열 위험을 줄입니다. 유연성: 여러 소프트포크를 서로 다른 비트에 매핑해 병렬로 추진할 수 있어, 프로토콜 진화를 더 유연하게 합니다. 거버넌스 모델: "채굴자 신호를 통해 소프트포크를 활성화한다"는 명확한 거버넌스 절차를 제공하여 이후 BIP8 등 다른 활성화 방식 논의의 기준이 되었습니다.