확장성은 여전히 비트코인에 대한 우려 사항입니다 — 그러나 똑똑한 사람들은 병목 현상을 해결하기 위한 혁신적인 제안을 계속하고 있습니다.
특정 확장성 문제 중 하나는 비트코인 노드가 보유한 사용되지 않은 거래 출력(UTXO) 데이터 세트의 성장입니다. 이는 존재하는 모든 비트코인의 목록과 이를 어떻게 사용할 수 있는지에 대한 세부정보입니다. 불행히도, 이 목록은 시간이 지남에 따라 증가하는 경향이 있으며, 특히 새로운 사용자가 시스템에 들어오면 그들의 코인도 UTXO에 반영됩니다.
이 증가하는 문제를 해결하기 위해 MIT 미디어랩의 디지털 통화 이니셔티브의 Tadge Dryja(라이트닝 네트워크 백서의 공동 저자)는 “Utreexo” 솔루션이라고 부르는 해시 기반 집합체를 제안했습니다.
문제
사용자의 비트코인 잔액은 모든 UTXO의 합계입니다. 거래를 할 때, 지갑 애플리케이션은 거래를 처리하기 위해 충분한 자금을 찾기 위해 UTXO의 모음을 “뒤적입니다”. 거래가 블록체인에서 확인되면 사용된 UTXO는 본질적으로 “파괴”되고 새로운 UTXO가 “생성”됩니다: 이제 거래의 수신자가 제어하며 다음 거래에서 사용할 수 있습니다.
비트코인 노드는 또한 이전 결제에서 아직 사용되지 않은 출력이 무엇인지 알기 위해 전체 UTXO 데이터 세트를 저장하여 어떤 UTXO가 여전히 사용 가능한지를 결정합니다. 네트워크에서 새로운 거래를 받을 때마다, 그들은 거래가 실제로 존재하는지, 이미 사용되지 않았는지를 확인하기 위해 UTXO 목록과 거래를 대조합니다. 거래가 유효하면 UTXO 데이터 세트를 업데이트합니다.
따라서 비트코인 노드는 저장해야 할 두 개의 큰 데이터 세트를 가지고 있습니다: 블록체인과 UTXO 목록입니다. 블록체인은 작성 시점에 230기가바이트가 넘으며, 예측 가능한 속도로 증가하고 있습니다. 이 데이터를 저장하고 싶지 않은 사용자는 오래된 블록체인 데이터를 “가지치기”(삭제)할 수 있습니다: 그들은 여전히 UTXO 목록 덕분에 어떤 코인이 사용 가능한지 알 수 있습니다. 그러나 현재 거의 6000만 개의 UTXO가 있으며, 목록의 성장률을 멈출 진정한 인센티브는 없습니다. 그리고 이 데이터는 노드가 어떤 새로운 거래가 유효한지를 판단하는 데 필요하기 때문에 삭제할 수 없습니다.
비트코인 사용자가 증가하고 UTXO 데이터 세트가 성장함에 따라, 이는 전체 노드를 운영하는 데 필요한 증가하는 요구 사항의 중요한 요소가 되고 있습니다. 장기적으로 이 문제는 블록체인의 성장보다 더 큰 문제일 수 있습니다.
Utreexo
비트코인 개발자들은 수년 동안 UTXO 문제를 인식하고 여러 솔루션을 제안했습니다. 최근 연구에서는 머클 트리의 “사촌”인 암호화 집합체를 활용하는 것을 제안했습니다. 머클 트리가 데이터를 단일 해시로 해시하는 반면, 집합체는 데이터를 고정 크기의 단일 합계로 곱합니다: “루트”. 다른 데이터와 결합하여 — “증명” — 집합체는 사용자가 특정 데이터 조각이 루트 내에 “저장”되어 있는지 확인할 수 있게 합니다.
Dryja의 Utreexo 프로젝트의 아이디어는 UTXO 세트를 위한 또 다른 가지치기를 만드는 것입니다. Utreexo는 집합체를 사용하여 UTXO 세트의 루트를 생성합니다. 전체 UTXO 세트 대신 이 합계만 저장함으로써, 집합체는 RAM과 디스크 저장소를 1킬로바이트 미만의 데이터로 유지합니다. 이 Utreexo 집합체를 사용하는 노드는 “콤팩트 노드”라고 불립니다.
콤팩트 노드에서 새로운 거래가 생성되어 네트워크를 통해 전송될 때, 거래와 함께 포함 증명을 보냅니다. 그 이후로 각 콤팩트 노드는 거래와 증명을 다른 콤팩트 노드에 전달합니다. 모든 콤팩트 노드는 동일한 집합체 상태와 루트를 가지고 있기 때문에, 증명은 각 노드에 대해 동일합니다. 모든 콤팩트 노드는 정확히 동일한 메시지를 동료에게 전달하는 것뿐입니다.
거래가 블록에 포함되면, 모든 증명 데이터를 폐기합니다. 이는 콤팩트 노드가 거래와 포함 증명을 메모리 풀에 유지할 수 있지만, 실제로 하드 드라이브에 기록하지는 않음을 의미합니다.
브리지 노드
하지만 거래가 콤팩트 노드에 의해 생성되지 않으면 어떻게 될까요?
콤팩트 노드는 이러한 거래를 서로 쉽게 전달할 수 있지만, 모든 사용자가 콤팩트 노드를 유지할 수 있는 것은 아닙니다. 콤팩트 노드가 전체 노드와 통신할 수 있도록 하기 위해, Utreexo는 “브리지 노드”라는 개념도 도입합니다. 브리지 노드는 블록체인과 전체 UTXO 세트를 저장합니다.
이 브리지 노드는 기존 네트워크에 중요한 “부트스트랩”입니다. 콤팩트 노드는 표준 전체 노드로부터 직접 거래를 받을 수 없기 때문에, 표준 노드는 포함 증명을 보내지 않습니다. 전체 노드가 콤팩트 노드에 거래를 보낼 때, 먼저 브리지 노드를 통과합니다. 브리지 노드는 UTXO를 조회하고, 집합체에서 증명을 구축한 다음 거래와 증명을 콤팩트 노드에 전달합니다. 콤팩트 노드는 전달된 포함 증명을 자신의 증명 집합체와 대조하여 거래를 검증합니다.
중요한 점은 브리지 노드가 한 방향으로만 필요하다는 것입니다. 콤팩트 노드는 전체 노드에 직접 거래를 보낼 수 있습니다. 콤팩트 노드는 적은 데이터를 저장하지만, 콤팩트 노드 간의 메시지는 포함 증명 외에도 전체 노드 메시지와 동일한 모든 데이터를 포함합니다. 콤팩트 노드가 전체 노드에 거래를 보내고 싶다면, 포함 증명을 생략하기만 하면 되고, 표준 전체 노드는 거래를 수락합니다.
트레이드 오프
Utreexo는 트레이드 오프가 있습니다.
Utreexo가 널리 사용될 경우 노드의 잠재적 중앙집중화에 대한 우려가 있습니다. 브리지 노드는 실제로 전통적인 전체 노드보다 더 많은 저장소를 요구할 것입니다. 왜냐하면 그들은 일반 UTXO 세트뿐만 아니라 콤팩트 노드에 전달하는 포함 증명도 저장해야 하기 때문입니다. 이러한 브리지 노드를 운영할 “선한 사마리아인”이 충분할지 여부는 여전히 의문입니다.
Utreexo는 여전히 진행 중인 작업이라는 점도 주목해야 합니다. 현재 비트코인 코어에 포함될 구체적인 계획은 없지만, 합의 변경이 아니기 때문에 누구나 이를 진행할 수 있습니다.