137 / 736UTXØ

Utreexo

더 작은 데이터베이스로 검증하기

Bitcoin 노드는 어떤 출력이 아직 사용되지 않았는지 알아야 합니다. Utreexo는 모든 기록을 담은 큰 로컬 데이터베이스 없이 이를 검증하는 방법을 찾습니다. 작은 암호학적 상태를 보관하고 필요한 데이터는 증명과 함께 받습니다. 저장 공간과 디스크 작업은 줄지만, 부담의 일부는 데이터 전송과 가용성으로 옮겨갑니다.

Utreexo를 사용하면 Bitcoin 노드는 미사용 출력 전체 목록을 저장하지 않고도 쓰려는 금액이 이미 사용됐는지 확인할 수 있습니다. 노드는 거래와 블록을 검증하고 네트워크의 다른 참여자와 통신하는 소프트웨어입니다. 작은 검증용 지문을 보관하고 구체적인 기록은 검증 가능한 증명과 함께 받습니다. 지출 규칙이나 비트코인 공급량은 바뀌지 않으며 Bitcoin Core의 기본 방식은 아닙니다.

안나가 전에 받은 비트코인을 피터에게 보내려 한다고 해 봅시다. 새 거래는 그 이전 수령 내역을 참조합니다. 금액과 이를 쓸 수 있는 조건을 담은 개별 기록을 출력이라고 하며, 아직 쓰이지 않았다면 UTXO입니다. 새 거래의 입력에는 그 이전 출력을 가리키는 참조와 이를 쓰는 데 필요한 데이터가 담깁니다. 노드는 기록이 실제로 존재하고 안나가 아직 쓰지 않았는지 확인해야 합니다. 보통 현재의 모든 미사용 출력을 담은 데이터베이스인 UTXO set을 유지합니다. 개인 계좌와 잔액의 목록은 아닙니다. 데이터베이스가 커지면 디스크 작업도 늘어납니다. Thaddeus Dryja는 이런 로컬 부담을 줄이는 방법으로 2019년 Utreexo를 제시했습니다. [1] [6] [8]

먼저 각 기록에서 해시를 계산해 데이터의 짧은 검증용 지문을 만듭니다. 머클 트리에서는 지문을 둘씩 묶어 다시 해시를 계산하며, 꼭대기 지문인 루트에 이를 때까지 반복합니다. Utreexo는 여러 트리를 사용하고, 검증 노드는 전체 목록 대신 그 루트들을 저장할 수 있습니다. 안나의 출력에 대해서는 데이터와 필요한 이웃 지문을 담은 증명을 받습니다. 이를 이용해 루트로 이어지는 경로를 다시 계산하고 이미 추적하고 있는 상태와 비교합니다. 따라서 보내는 쪽의 주장만으로는 충분하지 않습니다. 이 구조를 암호학적 누산기라고 하며, 기록이 집합에 속함을 증명할 수 있습니다. 하지만 루트는 압축 백업이 아닙니다. 압축을 풀듯 원래 기록 전체를 복구할 수는 없습니다. [1] [2]

전달받은 데이터를 해시로 계산하고, 증명으로 그 데이터가 노드가 추적하는 상태와 연결되는지 확인합니다. 익숙한 서버에서 왔다는 이유만으로 잘못된 증명을 받아들여서는 안 됩니다. 디지털 서명은 비밀 숫자 값인 개인 키로 결제 승인을 증명하며, 키 자체는 공개하지 않습니다. 스크립트는 출력을 쓰기 위해 충족해야 하는 조건을 정합니다. 유효한 포함 증명도 서명, 스크립트, 금액, 나머지 거래 및 블록 규칙 검사를 대신하지는 않습니다. Utreexo는 상태 저장 방식을 바꾸며, 검증을 생략하도록 허용하지 않습니다. [2] [5] [8]

증명을 만들 수 있을 만큼의 데이터는 여전히 누군가 보관해야 합니다. 라이브러리 문서는 전체 트리 집합을 가진 prover와 루트만 있으면 되는 verifier를 구분합니다. 검증자는 일부 증명을 캐시에 보관할 수 있지만 루트만으로 임의의 증명을 만들 수는 없습니다. 데이터가 사라지는 것이 아니라 참여자 사이에 배치되는 방식이 바뀝니다. [2]

블록은 공동 기록에 추가하는 거래 묶음입니다. 사용된 출력은 추적 중인 집합에서 제거되고, 새 미사용 출력이 추가됩니다. 그에 따라 증명도 달라집니다. 과거 상태에 대해 저장한 증명은 이후 블록이 생기면 갱신해야 사용할 수 있습니다. 재구성은 네트워크가 다른 유효한 체인 분기를 채택해 기존 블록 기록의 일부를 바꾸는 일입니다. 구현은 증명 갱신, 동시 거래, 체인 재구성 시 되돌리기를 처리해야 합니다. 한 번 내려받으면 영원히 유효한 인증서가 아닙니다. [2] [3]

Pruned Node는 검증 후 오래된 블록 데이터를 버리지만, 전통적으로 현재 UTXO 데이터베이스는 유지합니다. Utreexo가 줄이려는 대상은 바로 이 데이터베이스입니다. 서로 다른 절약 방법이므로 함께 사용할 수도 있습니다. 하지만 가지치기나 작은 누산기 자체가 과거를 처리하지 않고도 검증했다는 뜻은 아닙니다. 블록 이력, 현재 상태, 최초 검증 방법은 서로 다른 문제입니다. [6] [5]

새 노드가 블록을 처음부터 검증하는 대신 다른 사람이 제공한 상태에서 시작한다고 생각해 보세요. 이때는 초기 상태가 맞다고 가정하는 것입니다. 작은 누산기라도 이 신뢰를 없애지는 못합니다. 이후 증명을 바로 그 받아들인 상태에 대조해 검증하기 때문입니다. AssumeUTXO에서는 특정 시점의 상태를 담은 snapshot의 수용과 이후 백그라운드에서 이루어지는 이력 검증을 구분해야 합니다. utreexod 문서는 프로그램에 고정된 상태에서 시작하는 기본 동작을 설명합니다. 그것만으로 이전의 모든 블록을 독립적으로 검증한 것은 아닙니다. 시작 방식은 별도 선택이며 Utreexo 자체의 고유한 성질이 아닙니다. [7] [3]

utreexod는 Utreexo로 Bitcoin 네트워크를 검증하는 구현입니다. 2026년 10월 17일 확인한 문서에서는 베타 상태로 설명하며, 메인넷에서 무시하기 어려운 금액을 다루는 데 사용하지 않도록 권고합니다. 가정된 상태에서 시작하는 기능을 끄는 --noassumeutreexo도 안내합니다. 설치를 권하는 내용은 아닙니다. 사용 전에 최신 버전, 동작 모드, 프로그램 출처, 복구 방법을 확인해야 합니다. [3]

기본 설계는 Bitcoin의 통화 규칙을 다시 쓰거나 기존 블록을 바꿀 필요가 없습니다. 다만 증명은 누군가 생성하고 전송하고 갱신해야 하므로 참여 노드에는 적절한 소프트웨어와 통신이 필요합니다. 작은 로컬 상태는 저렴한 장치에 도움이 될 수 있습니다. 블록당 거래 수가 자동으로 늘거나, 모두의 수수료가 낮아지거나, 모든 노드가 새 형식으로 바뀐다는 뜻은 아닙니다. [1] [4]

디스크 데이터가 줄어드는 대신 네트워크 전송량이 늘고, 필요한 때 데이터를 받을 수 있는지에 더 의존할 수 있습니다. 올바르게 검증하는 노드는 위조 증명을 거부합니다. 하지만 제공자가 필요한 데이터를 보내지 않아 검증을 늦출 수는 있습니다. 운영자는 저장, 전송, 캐시, 초기 상태 검증, 장애 시 동작을 함께 비교해야 합니다. Utreexo는 독립 검증의 비용을 낮출 수 있지만 데이터 부족을 사소한 문제로 만들지는 않습니다. [3] [4]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 UTXO, Full Node, Pruned Node, AssumeUTXO, Merkle Tree, Bitcoin Core.

DOC · 001Utreexo paper1차 출처 DOC · 002Utreexo accumulator library문서 DOC · 003utreexod implementation1차 출처 DOC · 004Bitcoin Optech — Utreexo문서 DOC · 005Bitcoin Core — validation.cpp문서 DOC · 006Bitcoin Developer Reference — Blockchain validation문서 DOC · 007Bitcoin Core — AssumeUTXO design문서 DOC · 008Bitcoin Developer Reference — Transactions문서
개정일: 1차 출처 우선 · 투자 조언이 아닙니다