저자: Chakra; 번역자: 0xjs@GoldenFinance
비트코인은 세계에서 가장 초기에 만들어졌고 가장 안전하며 탈중앙화된 블록체인으로 시가총액이 가장 높습니다. 그러나 낮은 초당 트랜잭션 수(TPS)와 제한된 프로그래밍 성능으로 인해 대규모 애플리케이션을 지원하는 데 어려움을 겪으며 비트코인 생태계의 성장을 심각하게 저해한다는 비판을 받기도 합니다. 이 글에서는 비트코인 생태계의 구축자로서 비트코인 확장 솔루션의 과거, 현재, 미래를 살펴봅니다.
이 글은 비트코인 확장성에 관한 일련의 글 중 첫 번째 글이며, 지금까지 비트코인 메인넷에서 구현된 네이티브 확장성 솔루션에 초점을 맞추고 있습니다. 다음 글에서는 더 높은 확장성을 갖춘 오프체인 확장성 솔루션에 대해 다룰 예정입니다. 기대해 주세요.
블록 크기 제한 증가
2010년, 사토시 나카모토는 비트코인 코어에 1MB 블록 크기 제한을 도입했습니다. 이 명시적인 제한은 10년이 넘도록 변함없이 유지되고 있습니다.
이미지 src="https://img.jinse.cn/7233863_watermarknone.png" title="7233863" alt="AOW81qHtssYfXezDWjgW3qfiDcqpz5N4FewbVIjx.png">< /p>
흥미롭게도 사토시 나카모토는 블록 크기 제한을 제안한 이유를 공개적으로 설명하지 않았으며, 이는 코드 병합의 PR에 자세한 설명 없이 "숨겨져 있었다"고 합니다. 사토시 나카모토가 떠난 지 몇 년 후, 커뮤니티는 블록 크기 제한에 대해 크게 분열되었고 더 큰 블록의 필요성에 대해 널리 논의되었습니다.
블록이 클수록 더 많은 트랜잭션을 담을 수 있습니다. 블록이 클수록 합의 시간이 일정하다고 가정할 때 TPS가 높아집니다.
TPS가 중요한 이유는 무엇인가요? 블록 크기가 1MB인 경우 초당 완료할 수 있는 트랜잭션 수가 초당 3~7건으로 제한되어 대규모 애플리케이션에서 비트코인의 비전인 'P2P 전자 현금 시스템'을 실현하기에는 충분하지 않기 때문입니다.
그러나 더 큰 블록은 다른 문제들을 수반합니다.
첫째, 블록이 커지면 스토리지, 컴퓨팅, 대역폭 등 더 많은 하드웨어가 필요하므로 모든 노드의 운영 비용이 높아집니다. 비트코인의 과거 거래 데이터는 빠르게 확장되기 때문에 새로운 풀 노드가 네트워크와 동기화하는 데 더 많은 시간을 소비해야 합니다. 이러한 요구 사항은 풀 노드를 운영하려는 사용자의 의지를 감소시켜 탈중앙화를 감소시킵니다.
두 번째로, 블록이 클수록 노드 간 동기화 시간이 길어지고 고아 블록이 발생할 가능성이 높아져 블록 재편이 더 빈번해지고 포크 위험이 증가하여 보안이 크게 저하됩니다.
이 문제를 비탈릭은 블록체인이 탈중앙화, 확장성, 보안을 동시에 달성할 수 없다는 의미에서 '블록체인의 불가능한 삼각형'이라고 불렀습니다. 블록이 클수록 확장성은 커지지만 탈중앙화와 보안성이 약해지는 대가를 치러야 합니다.
이미지 src="https://img.jinse.cn/7233864_watermarknone.png" title="7233864" alt="J7tNbiQno0UtnP07V4VaiUcACckq7DUVAM4nQVyY.png">< /p>
가장 중요한 것은 블록 크기 제한을 수정하려면 네트워크의 모든 노드를 동시에 업그레이드해야 하는 하드포크가 필요하며, 그렇지 않으면 네트워크가 분리된다는 점입니다. 이는 탈중앙화된 합의에 의존하는 비트코인에는 좋은 선택이 아닙니다. 사토시 나카모토의 영향으로 하드포크를 피하는 것이 비트코인의 사실상 원칙이 된 것 같습니다.
그러나 안타깝게도 분할은 일어납니다. 커뮤니티 내 합의가 이루어지지 않았음에도 불구하고 일부 채굴자와 개발자가 클라이언트의 블록 크기 제한을 변경하여 결국 네트워크의 포크로 이어졌습니다.2016년 비트코인 클래식은 BIP 109를 채택하여 블록 크기 제한을 2MB로, 2016년 비트코인 XT 클라이언트는 BIP 101을 채택하여 블록 크기를 8MB로 늘렸습니다.그러나 대다수의 채굴자와 사용자는 현재 우리가 알고 있는 메인 비트코인 네트워크에 남아 있습니다.
하드포크를 통해 블록 크기를 명시적으로 늘리려는 시도는 실패했습니다.
분리된 증인
하드포크가 허용되지 않는다면 소프트포크가 해결책이 될 수 있을까요? 세그윗은 이를 위한 한 가지 방법입니다.
증인은 UTXO의 잠금을 해제하는 자격 증명으로, 트랜잭션을 완료하기 위해 오랫동안 UTXO 입력 스크립트 필드에 배치되어 왔습니다. 그러나 이 접근 방식은 순환 종속성, 타사 트랜잭션 확장성 및 타사 트랜잭션 확장성에서 잠재적인 문제가 있습니다.
이미지 src="https://img.jinse.cn/7233865_watermarknone.png" title="7233865" alt="PD8VE0hbEChYKaGZOSTvpACmjsEb2puqF7PF47HC.png">< /p>
2011년에 개발자들은 이 문제를 발견하고 증인을 다른 트랜잭션 데이터와 분리하는 분리된 증인(SegWit)이라는 해결책을 제안했습니다. 하지만 당시 하드포크 제안은 큰 호응을 얻지 못했고, 2015년에 세그윗 소프트포크가 제안된 후에야 마침내 합병이 실현되었습니다.
소프트 포크를 통해 세그윗은 어떻게 이전 버전과의 호환성을 확보할 수 있었나요? 이는 크게 두 가지 측면으로 구성됩니다.
새 버전의 노드는 이전 버전의 노드에서 생성된 블록과 트랜잭션을 인식하고 수락합니다.
구 버전 노드는 새 버전에서 도입된 새로운 규칙과 기능을 인식할 수 없지만, 새 버전에서 생성된 블록은 유효한 것으로 취급합니다.
세그윗 소프트 포크는 새로운 트랜잭션이 빈 입력 스크립트를 사용하고 블록 구조에 증인 필드를 추가하여 증인을 저장할 수 있도록 허용합니다. 업그레이드 전 비트코인 코어는 널 입력 스크립트를 지원하므로, 이전 버전 노드는 새 버전에서 생성된 블록을 거부하지 않습니다. 또한, 버전 필드를 사용하면 이전 트랜잭션 유형을 계속 사용할 수 있으며 노드는 버전에 따라 다르게 처리합니다.
이미지 src="https://img.jinse.cn/7233866_watermarknone.png" title="7233866" alt="mRDs0MVoESkKNdixph1ryobtfN58tgrMGpMvDG0J.png">< /p>
세그윗의 확장은 가중치 형태로 구현되며, 증인 바이트는 1, 기타 데이터 바이트는 4의 가중치를 가지므로 블록당 최대 가중치는 4백만 개로 제한됩니다. 데이터 유형에 따라 서로 다른 가중치를 할당하는 이유는 무엇인가요? 상식적으로 생각해보면 증인 데이터는 사용될 때만 유효성 검사 역할을 하며 장기간 저장소에 보관할 필요가 없기 때문에 상대적으로 비용이 저렴하고 가중치가 낮습니다.
이미지 src="https://img.jinse.cn/7233867_watermarknone.png" title="7233867" alt="nNfGJqOw75v73g93EKrmSMyOLjZXkBjWJbz045rW.png">< /p>
이것은 실제로는 블록 크기 제한의 위장된 증가이며, 이론적 상한은 (전적으로 증인 데이터 덕분에) 4MB로 증가하여 블록당 평균 약 2MB에 달할 수 있습니다. 이전 블록 구조를 살펴보면, 이는 여전히 사토시 나카모토의 원래 제한인 블록당 1MB를 준수하고 있습니다.
Taproot
OP_IF와 같은 비트코인 옵코드를 사용하면 시간 잠금, 다중 서명 등과 같은 복잡한 비트코인 지출 스크립트 조건을 설정할 수 있습니다. 그러나 복잡한 지출 조건은 검증을 위해 여러 입력과 서명이 필요한 경우가 많아 블록 부하를 증가시키고 트랜잭션 속도를 늦추는 동시에 모든 결제 조건이 노출되어 개인 정보 침해로 이어질 수 있습니다.
이미지 src="https://img.jinse.cn/7233868_watermarknone.png" title="7233868" alt="JJvWPHLGHrGZkfIOugdVSthoGw2IJoLdrWviBh8g.png">< /p>
/p>
탭루트는 MAST를 사용하여 비트코인을 보강하고, 사용자는 머클 트라이를 사용하여 지출 조건을 나타냅니다. 각 리프 노드는 지출 스크립트를 나타내며, 지출 과정에서 다른 조건은 드러내지 않고 실제 실행된 스크립트와 해당 머클 경로만 제공하면 됩니다. 이를 통해 블록 공간 소비를 줄이고 프라이버시를 개선할 수 있습니다.
또한 탭루트 업그레이드에는 부가적 동형이고 서명 집계 및 일괄 검증을 통해 전체 초당 트랜잭션 수(TPS)를 개선하는 슈노르 서명이 도입되며, 슈노르 서명의 집계된 서명 장점은 다중 서명 거래의 검증 로직을 크게 간소화합니다. 이전에는 스크립트와 일치하기 위해 여러 서명을 체인 위로 전송해야 했지만, 슈노르 서명은 하나의 오프체인 통합 서명만 체인 위로 전송하면 되므로 다중 서명 결제를 위한 온체인 공간의 사용을 줄일 수 있습니다.
슈노르 서명을 MAST와 결합하고 P2C(Pay to Contract) 개념을 사용하면 복잡한 계약 코드가 MAST 루트를 통해 제출되어 단일 슈노르 서명 결제를 지원하는 표준 비트코인 공개 키를 조정하고 생성합니다.
흥미롭게도 슈노르 서명의 단일 서명과 다중 서명은 체인에서 동일하게 보이기 때문에 복잡한 스크립트, 다중 서명, 단일 서명의 로직이 체인에서 구별되지 않아 프라이버시가 더욱 강화됩니다.
결론
비트코인의 확장성 솔루션은 탈중앙화를 유지하면서 성능을 개선하기 위한 진화하는 접근 방식을 반영합니다. 보안을 유지하면서 성능을 개선하기 위해 진화하는 접근 방식을 반영합니다.
초기에는 블록 크기를 늘리는 것이 낮은 거래 속도 문제에 대한 직접적인 해결책으로 고려되었지만, 노드 비용 및 네트워크 포크와 관련된 문제가 제기되어 커뮤니티 합의에 어려움을 겪었습니다.
소프트 포크를 통해 블록 용량을 최적화하고 이전 버전과의 호환성을 보장하며 분열적인 하드 포크를 방지하는 세그윗의 도입으로 상당한 진전을 이루었습니다.
이후 탭루트는 MAST와 슈노르 서명을 통해 확장성과 프라이버시를 더욱 개선하여 트랜잭션 공간을 줄이고 검증 효율성을 향상시켰습니다. 또한 탭루트는 비트코인에서 복잡한 스크립트 프로그래밍을 가능하게 하여 향후 확장을 위한 시도를 위한 기반을 마련했습니다.
이러한 발전은 글로벌 결제 시스템으로서 비트코인의 미래에 중요한 확장성과 견고한 네트워크를 향한 비트코인의 신중하고 혁신적인 움직임을 강조합니다.
그러나 이러한 확장 프로그램의 영향력은 "P2P 전자 현금 시스템"이라는 비전을 실현하기에 충분하지 않았습니다.