142 / 691SELECT

Coin Selection

거래에 사용할 UTXO 선택

Coin Selection은 지갑이 어떤 UTXO를 지출할지 결정합니다. 현재 수수료, 거스름돈, 미래 비용, 결제 이력의 연결에 영향을 줍니다.

Coin Selection은 거래 출력과 수수료를 충당할 UTXO를 지갑이 고르는 절차입니다. 지갑의 자체 판단이며, 모든 지갑에 동일한 알고리즘을 강제하는 합의 규칙이 아닙니다.

각 입력은 특정 UTXO 전체를 지출합니다. 입력 합계와 출력 합계의 차이가 수수료이며, 송금자에게 돌려줄 금액은 별도 출력이 필요합니다. 예시에서 입력 100000 sat, 결제 60000 sat, 수수료 1000 sat이면 거스름돈은 39000 sat입니다. [Bitcoin Developer Guide — Transactions]

명목 금액만으로는 부족합니다. 입력을 추가하면 거래 크기가 커집니다. 실효 가치는 선택한 수수료율로 해당 UTXO를 지출하는 비용을 뺀 값입니다. 10000 sat 입력이 68 vB이고 수수료율이 10 sat/vB라고 가정하면 기여액은 9320 sat입니다. 거래의 나머지 부분에도 별도 수수료가 필요하며, 실제 크기는 스크립트와 서명에 따라 달라집니다. [Bitcoin Core — Coin selection implementation] [Bitcoin Core 29.0 — Transaction creation]

Branch-and-bound(BnB)는 거스름돈 없는 결제를 위한 입력 조합을 탐색합니다. 목표 범위는 거스름돈 생성 및 향후 지출 비용까지의 초과액을 허용하며, 그 초과액은 수수료가 됩니다. 정확히 일치해야만 하는 것은 아닙니다. 제한된 탐색은 해나 전역 최적해를 찾지 못할 수 있습니다. [Bitcoin Core — Coin selection implementation]

Bitcoin Core 29.0은 BnB, Knapsack, Single Random Draw(SRD)를 고려합니다. 실효 수수료율이 장기 수수료율의 세 배를 초과하면 CoinGrinder도 참여합니다. 후보는 waste metric으로 비교합니다. 출력에서 수수료를 차감할 때는 BnB를 생략합니다. 이는 특정 버전의 설명이며 모든 지갑의 보편적인 알고리즘 순서가 아닙니다. [Bitcoin Core 29.0 — Transaction creation]

Waste metric은 현재와 장기 수수료율에서의 입력 비용에 거스름돈 비용 또는 수수료로 넘기는 초과액을 함께 비교합니다. 장기 수수료율은 가정이지 예측이 아닙니다. 통합은 미래 입력 수를 줄일 수 있지만 현재 수수료가 들고 사용한 출력들을 연결합니다. 따라서 즉시 내는 최소 수수료만이 유일한 목표는 아닙니다. [Bitcoin Core — Coin selection implementation] [Bitcoin Design — Coin selection and privacy]

서로 다른 수입을 함께 지출하면 분석가에게 이를 연결할 단서를 주지만, 한 사람의 소유라는 증거는 아닙니다. Coin Control과 라벨은 결제 맥락을 구분하는 데 도움이 됩니다. BIP 329는 라벨과 지출 가능 여부 메타데이터의 이전을 설명하며 직접 코인을 선택하지 않습니다. 내보낸 자료는 민감한 연결을 드러낼 수 있습니다. 거스름돈이 없어도 익명성이 보장되지는 않습니다. [BIP 329 — Wallet Labels Export Format] [Bitcoin Design — Coin selection and privacy]

선택은 지출 가능 여부, 확인, 잠긴 출력, 거래 한도를 따라야 합니다. Core 29.0의 walletcreatefundedpsbt RPC에서 include_unsafe는 위험한 미확인 입력도 허용합니다. 해당 거래가 사라지면 구성한 결제가 무효가 될 수 있습니다. 미확인 선행 거래에는 추가 수수료가 필요할 수도 있습니다. 잔액이 크다고 적절한 입력 조합이 보장되지는 않습니다. [Bitcoin Core 29.0 — Transaction creation] [Bitcoin Core 29.0 — walletcreatefundedpsbt RPC]

Core 29.0의 walletcreatefundedpsbt에서는 txid와 vout으로 입력을 지정하고 add_inputs로 추가 입력을 제어할 수 있습니다. fee_rate는 sat/vB를, feeRate는 BTC/kvB를 사용합니다. 생성된 PSBT는 후속 처리를 위한 준비물이지 확인된 결제가 아닙니다. 서명 전에 수신자, 총수수료, 자신의 거스름돈을 검토해야 하며 수동 선택도 이 책임을 없애지 않습니다. [Bitcoin Core 29.0 — walletcreatefundedpsbt RPC]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 UTXO, Coin Control, 거스름돈 출력, Fee Rate, PSBT, Bitcoin 프라이버시. 다음 항목에서도 이 글을 참조합니다 Watch-only Wallet, 거스름돈 출력, Inventing Bitcoin.

DOC · 001Bitcoin Developer Guide — Transactions문서 ↗DOC · 002Bitcoin Core — Coin selection implementation1차 출처 ↗DOC · 003Bitcoin Core 29.0 — Transaction creation1차 출처 ↗DOC · 004BIP 329 — Wallet Labels Export Format명세 ↗DOC · 005Bitcoin Core 29.0 — walletcreatefundedpsbt RPC문서 ↗DOC · 006Bitcoin Design — Coin selection and privacy문서 ↗
1차 출처 우선 · 투자 조언이 아닙니다