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.