비트코인에서 지난 5년 동안 가장 논란이 된 질문 중 하나는 소프트 포크를 어떻게 활성화할 것인가 하는 것이었습니다. 비트코인의 역사에서 네트워크의 새로운 기능을 활성화하기 위해 사용된 다양한 메커니즘이 있었으며, 이러한 메커니즘은 기능 배포를 가능한 한 안전하고 비파괴적으로 만들기 위한 목표로 발전해 왔습니다. 2017년까지는 활성화 메커니즘이 변경되면서 일반적인 합의가 있었고 큰 이견이 없었지만, 분리된 증인(SegWit)의 배포 중에 상황이 바뀌었습니다.
SegWit는 비트코인에서 기능이 어떻게 활성화되어야 하는지에 대한 논쟁과 갈등을 처음으로 촉발한 문제였습니다. 초기 BIP9 배포 이후, 채굴자 신호에 따라 집행 규칙을 잠그는 데 의존했지만, 대다수의 채굴자와 채굴 풀은 블록으로 활성화를 위한 신호를 보내기를 거부했습니다. 당시 많은 사용자들은 채굴자들이 새로운 기능의 활성화를 지연시키고 블록 크기를 늘리기 위한 하드 포크를 요구하며 그것을 인질로 잡고 있다는 사실에 분노했습니다(참고로 SegWit는 소프트 포크를 통해 블록 크기 증가를 달성했습니다). 그리고 전체 생태계는 SegWit에 대한 완전히 부정확한 정보로 가득 차 있었으며, 이는 기능 자체에 대한 반대를 촉발하기 위한 명백한 거짓말에 기반한 것이었습니다.
BIP148과 사용자 활성화 소프트 포크(UASF)는 채굴자들이 SegWit를 활성화하도록 압박을 가했으며, 대형 블록 추진 중 하나는 취소되었고, 다른 하나는 포크되어 결국 무의미해졌습니다. 그러나 그 이후로 비트코인 사용자들은 새로운 기능이 어떻게 배포되고 활성화되어야 하는지에 대한 대화를 일반적으로 피해왔습니다. 이 주제는 거의 금기시될 정도로 논란이 되었습니다.
나는 새로운 기능이 어떻게 처리되어야 하는지에 대한 나의 개인적인 생각을 이야기하기 전에 과거에 제안되고 사용된 몇 가지 활성화 메커니즘에 대한 고수준의 개요를 살펴보는 것이 가치가 있다고 생각합니다. 이러한 메커니즘은 하드 포크와 소프트 포크 모두에 사용될 수 있으며, 유일한 차이는 하드 포크에서는 체인 분할이 보장되지만 소프트 포크에서는 문제가 발생할 경우에만 가능하다는 것입니다.
플래그 데이 활성화
“단계적으로 도입될 수 있습니다. 예를 들어: if (blocknumber > 115000) maxblocksize = largerlimit. 그것은 훨씬 앞서 버전에서 시작될 수 있으며, 그 블록 번호에 도달하고 효력이 발생할 때, 그것을 포함하지 않은 이전 버전은 이미 구식이 됩니다.”
–BitcoinTalk, 2010년 10월 4일
이것은 사토시 나카모토가 원래 블록 크기 제한을 구현한 후 한 악명 높은 인용문으로, 사용자가 필요하다고 판단할 경우 미래에 어떻게 증가할 수 있을지를 설명하고 있습니다. (사람들이 초기 단계에서 이를 요구했을 때, 나카모토는 이 아이디어에 반대했으며, 필요할 때까지 이를 실행하지 말아야 한다는 이유로 위의 인용문으로 구체적으로 응답했습니다. 나카모토가 블록 크기 문제에 대해 마지막으로 한 댓글은 여기에서 찾을 수 있으며, 궁극적으로 그렇게 할지는 사용자에게 달려 있음을 명시적으로 인정했습니다.)
이것은 “플래그 데이 활성화”로, 블록 높이나 타임스탬프가 선택되고, 업그레이드된 노드가 그 시점에서 새로운 규칙을 시행하기 시작합니다. 공개적인 신호나 가시적인 조정이 없으며, 사람들은 단순히 새로운 클라이언트를 다운로드하고 업그레이드한 모든 사람이 선택된 시간에 시행을 시작하고, 업그레이드하지 않은 사람들은 시행하지 않습니다.
이것이 P2SH(스크립트 해시 지불)가 활성화된 방식입니다. 기술적으로 말하자면, 플래그 데이 활성화는 네트워크의 노드가 새로운 기능의 활성화에 전념하고 그 규칙을 시행하는 사용자 활성화 소프트 포크의 한 형태입니다. 플래그 데이의 문제는 새로운 규칙을 시행한다고 주장하는 채굴자의 비율을 나타내는 공개 신호가 없기 때문에, 모든 사람이 체인 분할이 발생할 가능성과 위험을 평가할 수 없다는 것입니다. 플래그 데이는 한동안 사용되지 않았습니다.
BIP9
BIP9는 소프트 포크 배포에서 체인 분할의 위험을 더욱 줄이기 위해 개발되었습니다. 그 아이디어는 채굴자들이 채굴하는 블록에 신호를 포함하도록 하여, 새로운 노드 소프트웨어가 특정 기준(95%)의 채굴자가 기능 활성화를 위해 신호를 보낼 때만 새로운 기능을 활성화하도록 하는 것이었습니다. 이는 노드가 새로운 규칙을 시행하기 전에 얼마나 많은 채굴자가 새로운 기능을 시행하고 있는지를 공개적으로 나타내는 것입니다. 분명히 채굴자들이 거짓 신호를 보낼 수 있지만, 그렇게 할 경제적 합리성이 없다는 것이 아이디어였습니다. CheckLockTimeVerify와 CheckSequenceVerify는 모두 BIP9를 사용하여 배포되었으며, 원래의 Segregated Witness 구현도 함께 배포되었습니다.
BIP9 배포의 큰 단점은 SegWit에서 입증된 바와 같이, 소수의 채굴자가 신호를 보내기를 거부함으로써 기능의 활성화를 지연시킬 수 있다는 것입니다. 다른 활성화 메커니즘을 사용하여 두 번째로 배포하지 않으면, BIP9는 채굴자들에게 새로운 기능이 네트워크에서 활성화되는 것을 방해할 수 있는 사실상의 거부권을 부여합니다. 따라서 이 활성화 메커니즘은 채굴자들에게 비트코인에 추가되는 것에 대해 불균형한 통제를 부여합니다. 채굴자는 사용자와 HODLers에게 서비스 제공자이므로, 기능 활성화에서 그러한 과도한 영향력을 가져서는 안 됩니다.
BIP148 및 UASF
BIP148은 큰 선례를 설정했으며, 이전에 본 적이 없는 새로운 활성화 메커니즘을 구현했습니다. 이는 단순히 자신의 배포에서 기능을 활성화하기 위해 설계된 것이 아니라, SegWit의 이전 BIP9 배포를 위한 활성화가 발생하도록 보장하기 위한 것이었습니다. 이것이 8월 1일 마감일의 이유였습니다. 8월 1일부터 SegWit 활성화 창이 끝나기 전에 채굴자 신호를 위한 마지막 2주간의 난이도 조정 기간 동안, BIP 148 클라이언트는 합의에 따라 마지막 창의 모든 블록이 SegWit 활성화를 위해 신호를 보낼 것을 요구했습니다.
이 메커니즘은 이전에 필요하거나 사용되지 않았던 새로운 활성화 설계였으며, 채굴자들이 합의가 있는 기능의 활성화를 지연시킬 수 있는 주요 단점을 수정하기 위해 상황적으로 수행되었습니다.
BIP91
BIP91은 2017년에 SegWit와 관련하여 배포된 또 다른 독특한 활성화 계획입니다. 당시 채굴자들은 BIP148의 최후통첩에 양보하기를 원하지 않았지만, 동시에 BIP148이 활성화되면 비트코인에 미칠 결과에 대해 걱정하고 있었습니다. BIP91은 모든 사람이 동일한 블록체인에서 동기화된 상태를 유지할 수 있는 타협점을 찾기 위해 만들어졌습니다.
이것은 80%의 기준을 설정했으며, 만약 그 수의 채굴자가 난이도 기간 동안 SegWit 활성화를 위해 신호를 보낸다면, 신호를 보내지 않는 모든 블록을 고아 블록으로 만들기 시작합니다(BIP148과 유사). 목표는 BIP91이 활성화되면 BIP148과 동기화되고 호환되도록 보장하는 것이었으며, 이는 원래의 BIP9 배포인 SegWit을 촉발하여 모든 사람이 동일한 체인에 남도록 하는 것이었습니다. 전체 목적은 채굴자들에게 “활성화를 촉발하는 사람”이 되도록 하는 변명을 제공하는 것이었습니다.
BIP8
BIP8은 SegWit 활성화 중 발생한 상황으로 인해 BIP9를 대체하기 위해 제안된 메커니즘이었습니다. 설계 목표는 채굴자가 신호를 보내는 기준(90%)에 도달하면 활성화 창의 어느 시점에서든 제안을 활성화할 수 있는 배포 메커니즘을 갖추는 것이었지만, 충분한 채굴자가 신호를 거부할 경우 포크가 활성화되도록 보장할 수 있는 메커니즘을 만드는 것이었습니다.
그것이 “lockinontimeout” 변수입니다. 이것이 true로 설정되면, 마지막 신호 기간 동안 합의 규칙이 그 기간의 모든 블록이 활성화를 위해 신호를 보내야 한다고 시행하게 되어, 새로운 기능이 활성화되도록 보장합니다.
신속한 시험
신속한 시험은 Taproot가 성공적으로 활성화된 방식이었습니다. 말할 것도 없이, 이는 매우 논란이 많은 활성화 메커니즘의 선택이었습니다. 결국 신속한 시험은 BIP9 활성화 배포처럼 작동하지만, 활성화 창이 훨씬 짧고 신호 기준은 BIP8과 동일합니다(90%). 신속한 시험을 사용하는 이유 중 일부는 합의가 있는 것이 활성화되지 않을 경우, 이후에 BIP8 LOT=True 배포를 출시할 수 있다는 것이었습니다.
많은 사람들, 저를 포함하여, 신속한 시험을 기능 활성화 메커니즘을 정제하는 데 있어 후퇴로 보았습니다.
이제 어떻게 할까요?
2017년 SegWit 활성화의 혼란은 소수의 채굴자가 네트워크 합의와 기능 배포에 간섭할 수 있는 능력을 보여주었으며, 이는 여러 다른 활성화 메커니즘을 동시에 복잡하게 배포하여 수정해야 했습니다. 이는 모든 메커니즘 간의 복잡한 인센티브 상호작용을 포함한 매우 위험한 상황이었으며, 다행히도 결국 잘 해결되었지만, 재앙적으로 진행될 수도 있었습니다.
제 생각에는 BIP9를 넘어서려는 전체 목적이 이러한 상황이 다시 발생할 가능성을 피하는 것이었습니다. 어떤 사람들은 신속한 시험이 활성화 창이 닫히기 전에 훨씬 짧은 시간 프레임 때문에 그렇게 한다고 주장할 수 있지만, 저는 그렇게 생각하지 않습니다. 여전히 소수의 채굴자들의 악의적 행동이나 반응 부족으로 인해 활성화가 실패할 위험이 존재하며, 중요하게도, 채굴자들이 다른 네트워크 참여자들 사이에서 합의를 “거부”할 수 있다는 사회적 인상을 제공합니다.
이것이 제가 생각하는 활성화 메커니즘의 장기적인 본질입니다. 비트코인이 계속 성장함에 따라, 점점 더 많은 교육받지 않은 사용자들이 생태계에 들어오게 될 것입니다. 그 학습 과정에서 그들은 일어나는 모든 일을 관찰하게 될 것이며, 가장 중요하게는 활성화 메커니즘을 “여기서 무슨 일이 일어나고 있으며, 누가 활성화 여부를 결정하고 있는가?”라는 관점에서 바라보게 될 것입니다. 개발자들? 채굴자들? 기업들? 이것이 질문이며, 이러한 질문에 대한 답변이 새로운 사용자들이 네트워크에서 새로운 기능과 업그레이드를 배포할 때 머릿속에 떠오를 것이라고 생각합니다.
사람들이 도달할 답변은 궁극적으로 이와 관련하여 자기 충족적인 예언이 될 것이며, 사용자가 채굴자를 의사 결정자로 보게 된다면, 대부분의 사용자는 채굴자를 바라보게 될 것입니다. 사용자가 개발자를 의사 결정자로 보게 된다면, 그들은 개발자를 바라보게 될 것입니다. 비트코인 사용자들이 지금 이 질문에 접근하는 방식이 미래 사용자들이 사안을 처리하는 방식에 대한 선례를 설정할 것입니다. 활성화가 어떻게 처리되어야 하는지에 대한 다양한 의견이 있지만, 다른 사람의 말을 대신하지 않기 위해, 저는 제 의견만 설명하겠습니다.
저는 비트코인 코어 또는 채굴자가 새로운 활성화 릴리스를 배포하거나 활성화를 거부하거나 지연시킬 수 있는 위치에서 활성화 과정에 참여해서는 안 된다고 생각합니다. 앞으로는 모든 새로운 기능이 BIP 8 LOT=True를 사용하여 UASF를 통해 배포되기를 바랍니다. 우리가 미래로 나아가면서 설정하는 선례는 비트코인 프로토콜에서 어떤 기능이 활성화되는지에 대한 중재자로 보이는 식별 가능한 그룹에서 지속적으로 나오지 않는 풀뿌리 조직의 것이어야 한다고 생각합니다.
앞으로 코어 외부의 사람들이 활성화를 제안하는 선례를 설정하면, 일반적으로 변화에 대한 높은 수준의 회의론이 설정됩니다. 우리는 새로운 사용자들에게 개발자가 무엇이 발생하는지 결정한다고 사회적 인식을 만드는 것을 피합니다. 이는 새로운 변화를 시행하는 데 매우 높은 기준을 설정하고, 그 기준이 낮아지지 않도록 보장하여 사용자가 무엇이 발생하는지를 결정하기 위해 전문가에게 의존하는 역동성으로 전락하는 것을 방지합니다. 활성화는 외부 클라이언트를 통해 발생할 수 있으며, 다음 코어 릴리스가 패치된 클라이언트를 통해 성공적으로 활성화된 경우 새로운 기능을 활성화합니다.
이것은 각 “활성화 클라이언트”가 기능 배포 중에 일시적으로 사용될 수 있도록 하여, 모든 사람이 성공적인 활성화 후 코어로 다시 전환하게 하여, 코어 외부에서 장기간 유지되는 클라이언트를 유지할 필요성을 없애면서도 활성화 과정을 코어 개발자들로부터 제거할 수 있습니다.
일부 사람들은 이것이 소프트 포크 중 체인 분할의 위험을 초래한다고 주장할 수 있지만, 실제로 소프트 포크 중에는 항상 체인 분할이 발생할 수 있습니다. LOT=True가 설정되면, 포크가 발생할 경우 그 시점을 미리 알 수 있습니다. 체인이 분할될 경우, 활성화에 대한 신호를 보내지 않는 첫 번째 블록이 채굴되는 활성화의 마지막 신호 기간 동안 발생할 것입니다. 이는 발생할 경우 일관되고 예측 가능한 시간 기간을 정의하며, 활성화 후 임의의 시점에 새로운 규칙을 시행하지 않는 채굴자가 블록을 채굴하는 것과는 다릅니다.
새로운 기능에 대한 합의가 진정으로 있다면, 경제의 대다수는 이를 활성화하기 위해 클라이언트를 실행할 것이며, 그러한 체인 분할은 사소한 방해와 불편함에 불과할 것입니다. 새로운 기능에 대한 합의가 없다면, 다시 말해 그러한 체인 분할은 네트워크에서 스스로 포크하는 소수에 의해 발생하는 사소한 방해와 불편함에 불과해야 합니다. 그들은 소수의 포크 체인을 계속 사용할 것인지 아니면 양보하고 비트코인 네트워크로 돌아갈 것인지 결정해야 할 것입니다.
비트코인은 궁극적으로 시장 주도 시스템으로, 합의는 자발적으로 도출됩니다. 저는 그 과정이 혼란스러워지는 것을 방지하려는 시도가 잘못된 것이며, 시스템의 근본적인 본질을 놓치고 있으며, 사람들이 합의에 도달하는 과정에서 혼란을 제거하려고 할 경우 더 중앙집중적인 사회적 통제와 상향식 의사 결정의 인식으로 이어질 것이라고 믿습니다. 우리는 그 과정을 수용하고, 그것을 통제하려고 하는 것을 멈춰야 합니다.
결국, 이것은 제가 생각하는 방식에 대한 개인적인 의견일 뿐이며, 더 다양한 의견이 존재합니다. 사람들은 이 문제에 대해 자신의 의견을 주저하지 말고 표현해야 합니다. 우리는 이 대화를 시작할 때가 되었으며, 사회적 역학의 관성을 통해 결정을 내리는 것을 계속 미루지 말아야 합니다.
이 글은 신오비의 게스트 포스트입니다. 표현된 의견은 전적으로 그들의 것이며, BTC Inc 또는 Bitcoin Magazine의 의견을 반드시 반영하지는 않습니다.