본문 바로가기
🍊⚡️Bitcoin/technical-theory

비트코인 트랜잭션 읽는 방법, 수수료 계산 가이드

by devhertz 2026. 7. 28.

1. 트랜잭션 읽는 법

전체 구조

필드 설명
version 트랜잭션 형식 버전 (대부분 1 또는 2)
version 2는 BIP 68(상대적 시간 잠금)을 지원
inputs 소비할 이전 출력(UTXO)의 목록
outputs 새로 생성할 출력(금액 + 잠금 스크립트)의 목록
locktime 트랜잭션이 유효해지는 최소 블록 높이 또는 시간을 의미
값이 0이면 즉시 유효
  • 트랜잭션의 핵심은 inputsoutputs이며, 이 두 가지가 "누가 누구에게 얼마를 보냈는가"에 대한 정보를 담고 있음.

입력(Input) 읽기

  • 입력은 “어디서 비트코인을 가져오는가”를 명시
{
  "txid": "이전 트랜잭션 ID",
  "vout": 0,                    // 이전 트랜잭션의 몇 번째 출력인지 (0부터 시작)
  "scriptSig": "서명 데이터(레거시)",
  "witness": ["서명 데이터(SegWit)"],
  "sequence": 4294967295
}
필드 의미
txid 소비할 UTXO가 생성된 이전 트랜잭션의 해시
vout 이전 트랜잭션에서 몇 번째 출력인지
scriptSig / witness "이 출력을 소비할 권한이 있다"는 증명 (서명)
sequence 기본값 0xFFFFFFFF
0xFFFFFFFE 이하면 RBF(Replace-By-Fee) 가능

출력(Output) 읽기

  • 출력은 “비트코인을 어디로 보내는가”를 정의
{
  "value": 0.01500000,          // BTC 금액
  "scriptPubKey": {
    "type": "witness_v0_keyhash",
    "address": "bc1q..."
  }
}
주소 유형 접두사 스크립트 유형 특징
P2PKH 1.. pubkeyhash 레거시
P2SH 3.. scripthash 멀티시그 등에 사용
P2WPKH bc1q.. witness_v0_keyhash SegWit (크기 효율적)
P2TR bc1p.. witness_v1_taproot Taproot (프라이버시·효율 개선)
  • 일반적인 송금은 출력이 2개 이상 발생함.
    • 하나는 수신자 주소, 나머지는 잔돈(change) 주소
  • UTXO는 부분 소비가 불가능하므로, 남는 금액은 반드시 자신(발신자)에게 다시 돌려보내야 함.

수수료 계산법

  • 비트코인 트랜잭션에는 수수료를 명시하는 필드가 없음. 수수료는 암묵적으로 계산됨.
  • 수수료 = 입력 합계 − 출력 합계
    • 차이가 0이 아니면 전부 채굴자 수입이 됨
    • 잔돈 출력을 빼먹으면 차액 전부가 수수료로 날아감
    • 현대 지갑은 이런 실수를 막는 경고 기능을 갖추고 있음

컨펌(Confirmation)

컨펌 수 상태 평균 소요 시간
0 미확인 (mempool 대기) -
1 블록에 포함됨 약 10분
3 소액 거래에 충분 약 30분
6 관행적으로 “최종 확정” 약 1시간
  • 6컨펌 관행은 사토시 백서에서 유래.
  • 공격자가 블록을 되돌릴 확률이 기하급수적으로 0에 수렴함 (대부분의 거래소가 입금 시 6컨펌을 요구, 고액 거래에서는 더 많은 컨펌을 기다리기도 함.)

특수한 트랜잭션들

유형 특징
코인베이스 각 블록의 첫 번째 트랜잭션. 이전 UTXO 참조 없음
블록 보상(신규 발행 + 수수료)을 채굴자에게 생성
입력 txid가 전부 0
생성된 코인은 100블록 후부터 소비 가능
scriptSig 영역에 채굴자가 임의의 데이터를 넣을 수 있음(사토시의 제네시스 블록 메시지가 여기 들어감)
멀티시그 여러 개인키 중 일정 수 이상의 서명이 필요 (예: 2-of-3)
기업 자금 관리나 공동 계좌에 사용됨
주로 P2SH(3으로 시작)로 구현
OP_RETURN 출력의 스크립트에 OP_RETURN이 포함되면, 해당 출력은 소비 불가능
대신 최대 80바이트의 임의 데이터를 블록체인에 영구히 기록 가능
출력의 value는 항상 0

2. 수수료 계산 가이드

  • 크기 비례 원칙
    • 송금 금액(BTC 단위)과 무관하게 트랜잭션의 데이터 크기(가상바이트, vbyte)에 비례하여 수수료가 책정됨
    • 채굴자는 블록 공간이 한정되어 있으므로, 바이트당 더 높은 수수료를 지불하는 트랜잭션을 먼저 포함시킴
  • 단위: 수수료율의 단위는 sat/vbyte(가상바이트당 사토시)를 사용
    • 가상바이트는 SegWit 도입 이후 서명 데이터에 할인을 적용해 계산된 크기 단위
    • 지갑 소프트웨어가 vbyte를 자동 계산하므로, 개념 정도만 이해하면 충분함
  • 계산 공식
    • 트랜잭션 크기 = 오버헤드 + (입력 수 × 입력 크기) + (출력 수 × 출력 크기)
    • 총 수수료 = 트랜잭션 크기(vbytes) × 수수료율(sat/vbyte)
  • 입력(UTXO) 개수의 영향: 입력(소비할 이전 출력) 개수가 많아질수록 트랜잭션 크기가 급증하여 수수료가 크게 높아짐. (예: UTXO 5개를 모아 송금하면 1개일 때보다 약 2.7배 수수료 증가)
  • 멤풀 혼잡도 확인: 적정 수수료율은 고정되어 있지 않음. 실시간 멤풀(미확인 트랜잭션 대기열)의 혼잡도에 따라 1 sat/vbyte에서 수백 sat/vbyte까지 변동함. 빠른 확정(약 10분)을 원할수록 높은 수수료를, 1시간 이상 기다릴 수 있다면 낮은 수수료를 설정함

수수료율 절감 전략

  1. SegWit/Taproot 주소 사용: 레거시(P2PKH) 대비 최대 60%가량 크기(vbyte)를 줄일 수 있어 수수료가 절감됨
  2. 잔돈 출력 최소화 및 배치 처리: 불필요한 출력을 줄이고 여러 지불 건을 하나로 묶어 송금함
  3. 한산한 시간대 활용: 네트워크 혼잡이 덜한 주말이나 한국시간 기준 새벽에 낮은 수수료로 트랜잭션을 제출함
  4. RBF(Replace-By-Fee) 활용: 낮은 수수료로 먼저 제출한 후, 처리가 지연되면 수수료를 높여 교체하는 방법

 

 

 

 참고 

 

 

출처: https://learn.txid.uk/ko/

댓글