
비탈릭: 하드 포크, 소프트 포크, 기본값과 강제
저자: Vitalik Buterin
게시일: 2017년 3월 14일
블록체인 관련 토론에서 중요한 주제 중 하나는 프로토콜 업그레이드 메커니즘으로서 소프트포크와 하드포크 중 어느 쪽이 더 바람직한지에 대한 논의이다. 소프트포크와 하드포크의 기본적인 차이는 다음과 같다. 소프트포크는 유효한 트랜잭션의 수를 엄격히 줄임으로써 프로토콜 규칙을 변경하므로, 이전 규칙을 따르는 노드들도 여전히 새로운 체인에 머무를 수 있다(대부분의 마이너/검증인이 포크를 구현한다고 가정할 때). 반면 하드포크는 이전에는 무효였던 트랜잭션과 블록을 유효하게 만들기 때문에 사용자들이 클라이언트를 업그레이드해야만 하드포크 이후의 새로운 체인에 남을 수 있다.
하드포크에는 두 가지 하위 유형이 존재한다:
1. 완전 확장형 하드포크(strictly expanding hard forks)는 유효한 트랜잭션 집합을 전적으로 확장함으로써, 기존 규칙이 새로운 규칙과 효과적으로 호환될 수 있도록 한다.
2. 양방향 하드포크(bilateral hard forks)는 두 규칙 집합 모두 서로 호환되지 않는다.
다음은 포크 유형을 설명하는 벤 다이어그램이다:

일반적으로 언급되는 장점들은 다음과 같다:
- 개발자들은 새로운 규칙이 이전 규칙과 호환될 필요가 없기 때문에 하드포크를 통해 프로토콜 업그레이드 시 더 큰 유연성을 갖는다.
- 사용자 입장에서는 소프트포크가 더 편리하다. 별도의 업그레이드 없이도 새로운 체인에 계속 머물 수 있기 때문이다.
- 소프트포크는 체인 분열 가능성이 낮다.
- 소프트포크는 실제로 마이너/검증인의 동의만 있으면 된다(사용자가 오래된 규칙을 사용하더라도, 노드가 새로운 규칙을 적용하면 새 규칙에서만 유효한 트랜잭션만 체인에 포함된다). 반면 하드포크는 사용자의 선택적 동의가 필요하다.
또한 하드포크에 대한 주요 비판 중 하나는 그것이 '강제적'이라는 점이다. 여기서 말하는 강제성은 물리적 힘을 의미하는 것이 아니라 네트워크 효과의 일종의 강제성을 의미한다. 즉, 네트워크가 규칙 A에서 B로 변경되면, 개인적으로 A를 선호하더라도 대부분의 사용자들이 B를 좋아하고 B로 전환한다면, 당신이 B를 원하지 않거나 전환에 동의하지 않더라도 다른 사람들과 같은 네트워크에 머물기 위해 B로 전환해야만 한다는 것이다.
하드포크 지지자들은 종종 네트워크에 '악의적인 인수'를 시도하며 사용자를 자신들과 함께 강제로 전환시키려 한다고 조롱받는다. 또한 체인 분열 위험은 하드포크가 안전하지 않다는 것을 의미한다고 여겨진다.
내 개인적인 견해로는 이러한 비판은 잘못된 것이다. 그리고 많은 상황에서 오히려 정반대의 결과를 초래한다. 이 관점은 이더리움이나 비트코인 또는 다른 특정 블록체인에 국한된 것이 아니다. 그것은 이러한 시스템들의 일반적인 특성에서 비롯되며 어떤 블록체인에도 적용될 수 있다. 또한 아래의 논의는 변화에 대해 상당한 반대 의견이 있는, 즉 최소한 한쪽 집단(마이너/검증인 또는 사용자)의 다수가 반대하는 경우에만 해당된다. 만약 변화가 그렇게 논란이 되지 않는다면 어떤 형태의 포크라도 안전하게 수행될 수 있다.
먼저 강제성 문제를 살펴보자. 소프트포크든 하드포크든 간에, 프로토콜을 일부 사용자가 선호하지 않는 방식으로 변경한다는 점에서 어느 정도 강제성을 띤다. 특히 프로토콜 변경이 100% 지지를 받지 못할 경우, 일부 사용자는 그 변경을 좋아하지 않을 것이다. 게다가 거의 피할 수 없는 사실은, 어떤 상황에서도 소수 의견을 가진 사람들이 자신의 프로토콜 선호보다 다수와의 동기화에서 오는 네트워크 효과를 더 중요하게 여긴다는 점이다. 따라서 네트워크 효과라는 관점에서 보면 두 가지 유형의 포크 모두 강제적이다.
그러나 소프트포크와 하드포크 사이에는 본질적인 차이가 있다. 하드포크는 선택적 참여(opt-in)이며, 소프트포크는 사용자에게 선택권을 주지 않는다. 사용자가 하드포크 체인에 참여하기 위해서는 직접 소프트웨어 패키지를 설치하여 포크 규칙을 구현해야 한다. 그리고 규칙 변경에 동의하지 않는 사용자 집단은 네트워크 효과보다 더 강력한 반응을 보일 수 있으며, 이론적으로는 기존 체인에 머물 수 있다—실제로 그런 일이 이미 발생했다.
이는 완전 확장형 하드포크와 양방향 하드포크 모두에 해당된다. 그러나 소프트포크의 경우 성공하면 분기되지 않은 체인은 존재하지 않게 된다. 따라서 제도적으로 볼 때 소프트포크는 분리를 허용하기보다 강제에 더 기울어 있으며, 하드포크는 반대 방향으로 기울어 있다. 나의 도덕적 가치관은 강제보다 분리를 선호하지만, 다른 사람들은 그렇지 않을 수도 있다(가장 흔한 주장은 네트워크 효과가 매우 중요해서 '단일 통화 규칙'이 필수적이라는 것이며, 좀 더 온건한 주장도 존재한다).
비록 내가 위에서 설명한 근거들을 들었음에도 불구하고 소프트포크가 하드포크보다 '덜 강제적'이라고 여겨지는 이유를 추측해야 한다면, 아마도 하드포크가 사용자들에게 느껴지기에 '강제적으로' 소프트웨어 업데이트를 설치하게 만든다고 생각하기 때문일 것이다. 반면 소프트포크의 경우 사용자들은 아무것도 할 필요가 없다. 그러나 나는 이런 직관이 잘못되었다고 말하고 싶다. 중요한 것은 개별 사용자가 '다운로드' 버튼을 누르는 간단한 행정적 절차를 수행해야 하는지 여부가 아니라, 사용자가 자신이 원하지 않는 프로토콜 변경을 강제로 받아들여야 하는지 여부이다. 이 기준으로 보면, 위에서 설명한 바와 같이 두 유형의 포크 모두 궁극적으로 강제적이며, 하드포크가 사용자에게 자유를 더 부여한다는 점에서 소프트포크보다 다소 낫다.
이제 마이너/검증인의 선호와 사용자의 선호가 충돌하는 고도로 논란이 되는 포크 상황을 살펴보자. 여기에는 세 가지 경우가 있다: (i) 양방향 하드포크, (ii) 완전 확장형 하드포크, (iii)所谓 '사용자 활성화 소프트포크(UASF)'이며, 네 번째 유형은 사용자의 동의 없이 마이너가 소프트포크를 활성화하는 것이다. 이것은 나중에 다시 언급하겠다.
먼저 양방향 하드포크에 대해 설명하겠다. 가장 이상적인 상황에서는 이 시나리오가 매우 간단하다. 두 코인이 시장에서 거래되며, 거래자들이 두 코인의 상대적 가치를 결정한다. ETH/ETC 사례에서 우리는 마이너들이 역사적 관점보다는 가격 비율에 따라 계산 능력을 배분함으로써 이익을 극대화하려는 경향이 있다는 강력한 증거를 갖고 있다.

일부 마이너들이 한쪽 또는 다른 쪽에 이념적으로 편향되어 있다고 해도, 가격 비율과 해시파워 사이의 불일치를 이용해 차익을 실현하려는 충분한 마이너들이 있을 가능성이 높으며, 이는 결국 가격 비율과 해시파워를 일치시킬 것이다. 일련의 마이너들이 특정 체인에서 채굴을 거부하려 한다면, 그 인센티브는 과도하게 결핍될 것이다.
여기에는 두 가지 예외적인 상황이 있다. 첫 번째 가능성은 비효율적인 난이도 조정 알고리즘으로 인해 코인 가치 하락에 따라 채굴 가치가 떨어지지만, 채굴 난이도는 그에 따라 감소하지 않아 채굴이 매우 수익성이 없고 비경제적이 되는 것이다. 어떤 마이너도 손해를 보면서 체인을 유지하지 않을 것이며, 난이도가 균형을 회복할 때까지 체인 진행이 멈출 것이다. 이것은 이더리움의 경우가 아니지만, 비트코인의 경우일 가능성이 매우 높다. 따라서 소수의 파워를 가진 체인은 결코 자리를 잡지 못하고 사라질 가능성이 있다. 이것이 좋은 일인지 아닌지는 강제와 분열에 대한 당신의 관점에 달려 있다. 내가 앞서 언급한 개인적 견해로는, 나는 소수의 파워 체인이 난이도 조정 알고리즘에 저항하는 것이 바람직하지 않다고 본다.
두 번째 예외 상황은 차이가 너무 커서 대규모 파워를 가진 체인이 소규모 파워 체인에 대해 51% 공격을 시도할 수 있다는 점이다. 그러나 ETH/ETC 분할 비율이 10:1일 때조차 그러한 공격은 발생하지 않았다. 따라서 이것은 확실한 답이 아니다. 그러나 지배적인 체인의 마이너들이 강제를 선호하고 분기를 허용한다면, 그들은 항상 이를 달성할 방법을 찾을 것이다.
다음으로 완전 확장형 하드포크(SEHF)를 살펴보자. SEHF에서는 포크되지 않은 체인이 포크 규칙 하에서도 유효한 특성을 가지므로, 포크된 체인의 가격이 포크되지 않은 체인보다 낮다면 포크된 체인의 채굴 가치는 더 낮아지고, 결과적으로 포크되지 않은 체인이 원래 클라이언트와 포크된 클라이언트 모두에서 가장 긴 체인으로 인정받게 된다. 결국 포크된 체인은 '침몰'하게 된다.
이러한 포크 성공에는 강력한 고유 편향이 있다는 주장이 있다. 포크된 체인이 가격에서 침몰되고 코인 가치가 낮아져, 포크된 체인이 침몰할 가능성이 더 커진다는 것이다. 이 주장은 나에게도 상당히 설득력 있게 들린다. 따라서 무작정 확장하기보다는 양방향 하드포크를 하는 것이 타당한 이유가 된다.
비트코인의 많은 개발자들은 하드포크 후 수동으로 양방향 하드포크를 수행해 이 문제를 해결할 것을 제안한다. 그러나 더 나은 선택은 내장된 양방향 하드포크를 사용하는 것이다. 예를 들어 비트코인의 경우, 사용되지 않는 오퍼코드를 금지하는 규칙을 추가한 후, 포크되지 않은 체인에서 해당 오퍼코드를 포함한 거래를 처리함으로써, 포크된 규칙 하에서 포크되지 않은 체인이 영원히 무효가 되도록 할 수 있다. 이더리움의 경우 상태 계산 방식에 관한 다양한 세부사항 때문에 거의 모든 양방향 하드포크가 자동으로 이루어진다. 다른 블록체인은 아키텍처에 따라 각각 다른 특성을 가질 수 있다.
앞서 언급한 마지막 유형의 포크는 사용자 활성화 소프트포크(UASF)이다. UASF에서는 사용자가 마이너의 합의 없이 직접 소프트포크 규칙을 활성화할 수 있으며, 마이너들은 경제적 이익에서 배제될 수 있다. 만약 많은 사용자가 이 UASF를 따르지 않는다면 코인이 분할되어 완전 확장형 하드포크와 동일한 상황이 발생한다. UASF가 선택적이라 할지라도, 경제적 비대칭성을 활용하여 성공 가능성을 높이기 때문에(비록 이것이 절대적이진 않지만, UASF가 환영받지 못한다면 실패할 것이며, 이는 블록체인 분열만 초래할 뿐이다) 성공에 더 유리하게 작용한다.
그러나 사용자 활성화 소프트포크는 위험한 게임이다. 예를 들어, 프로젝트 개발자가 이전에는 모든 트랜잭션을 허용했던 미사용 오퍼코드를 새 기능 규칙에 부합하는 트랜잭션만 허용하도록 변경하는 UASF 패치를 만들고자 한다고 가정하자. 이는 정치적으로나 기술적으로나 논란이 많아 마이너들이 그 기능을 좋아하지 않을 가능성이 크다. 마이너들은 이를 막기 위한 교묘하고 영리한 방법을 가지고 있다: 바로 마이너 활성화 소프트포크(MASF)를 단독으로 시행하여, 소프트포크로 생성된 기능이 항상 실패하도록 만들 수 있는 것이다.
이제 우리는 세 가지 규칙을 갖게 된다:
- 오퍼코드 X가 항상 유효한 원래 규칙.
- 오퍼코드 X가 다른 트랜잭션이 새 규칙을 준수할 때만 유효한 규칙.
- 오퍼코드 X가 항상 무효인 규칙.
주의할 점은 두 번째 규칙이 첫 번째 규칙에 대한 소프트포크이며, 세 번째 규칙은 두 번째 규칙에 대한 소프트포크라는 점이다. 이제 세 번째 규칙에는 강한 경제적 압박이 작용하므로 소프트포크는 목표를 달성할 수 없다.
따라서 내 결론은 이렇다: 소프트포크는 특히 논란이 될 경우 위험한 게임이며, 마이너들이 반격을 시작하면 점점 더 위험해진다. 완전 확장형 하드포크 역시 위험한 게임이다. 마이너 활성화 소프트포크는 강제적이며, 사용자 활성화 소프트포크는 덜 강제적이지만 경제적 압박이 형성되므로 사용자가 스스로 소프트포크를 활성화하는 것도 어느 정도 강제성이 있으며 위험하다. 정말 논란이 되는 변경을 하고자 하며, 사회적 대가를 치르는 것이 가치 있다고 굳게 믿는다면, 깔끔하고 명확한 양방향 하드포크를 실행하라. 리플레이 공격 방지를 위해 시간을 들여 추가하고, 시장의 보이지 않는 손이 나머지를 정리하도록 하라.
TechFlow 공식 커뮤니티에 오신 것을 환영합니다
Telegram 구독 그룹:https://t.me/TechFlowDaily
트위터 공식 계정:https://x.com/TechFlowPost
트위터 영어 계정:https://x.com/BlockFlow_News














