Bitcoin TXID
정의
- Transaction ID의 약자, 비트코인 트랜잭션의 고유 식별자로 트랜잭션 데이터에 double SHA-256 해시를 적용하여 생성되는 64자리 16진수 값
- 비트코인 네트워크의 투명성과 검증 가능성을 뒷받침하는 가장 기본적인 단위
- 네트워크 어디서든 이 값 하나로 특정 거래를 정확히 찾을 수 있음
잘 알려진 TXID 예시
- 사토시 → 할 피니 (첫 P2P 송금), 2009.1.12
f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16 - 비트코인 피자 (10,000 BTC), 2010.5.22
a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d
생성원리
- 트랜잭션 데이터(입력, 출력, 금액, 스크립트 등)를 직렬화(serialize)
- Double SHA-256 해시 적용
- 바이트 순서를 반전(reverse) → TXID 완성
Raw 트랜잭션 데이터
→ SHA-256 적용
→ SHA-256 다시 적용
→ 바이트 순서 반전
→ TXID (64자리 16진수)
- 바이트 순서를 반전시키는 이유: 비트코인이 내부적으로 리틀엔디언(little-endian) 형식을 사용하지만, 사람이 읽을 때는 빅엔디언(big-endian) 형식이 자연스럽기 때문
- 트랜잭션 데이터가 1비트라도 달라지면 TXID가 완전히 바뀜. 해시 함수의 눈사태 효과(avalanche effect) 덕분. 따라서 TXID는 트랜잭션 내용의 디지털 지문 역할을 함.
TXID vs 주소 vs 블록 해시

TXID 말리어빌리티(Transaction Malleability)
- 문제(SegWit 이전): 서명 데이터가 TXID 계산 범위에 포함 → 제3자가 서명을 살짝 바꿔도 유효하면서 TXID만 다른 거래를 만들 수 있었음 (Mt. Gox 사건 때 거론)
- ECDSA 서명의 특성상 동일한 개인키로 동일한 메시지에 대해 수학적으로 유효하면서도 바이트 표현이 다른 서명을 만들어낼 수 있다는 점이 약점
- SegWit(Segregated Witness) 해결 (2017): 서명 데이터를 메인 구조에서 분리(witness 영역으로)
- 서명 데이터를 트랜잭션의 메인 구조에서 분리(segregate)하여 별도의 영역(witness)에 배치함. TXID 계산 시 서명 데이터가 제외되므로, 서명을 변조해도 TXID가 바뀌지 않음
- TXID = 입력+출력만 해시 (서명 무관)
- WTXID = 서명 포함 전체 트랜잭션 해시
- 일반적인 사용에서는 여전히 TXID를 쓰지만, 노드 간 트랜잭션 전파 등 내부 처리에서는 WTXID가 활용됨.
- 서명 데이터를 트랜잭션의 메인 구조에서 분리(segregate)하여 별도의 영역(witness)에 배치함. TXID 계산 시 서명 데이터가 제외되므로, 서명을 변조해도 TXID가 바뀌지 않음
SegWit 이전:
TXID = hash(입력 + 출력 + 서명) ← 서명 변조 시 TXID 변경
SegWit 이후:
TXID = hash(입력 + 출력) ← 서명과 무관
WTXID = hash(입력 + 출력 + 서명) ← 서명 포함 버전
트랜잭션 생애 주기
생성 (TXID 확정) → 멤풀(미확인) → 1컨펌 → … → 6컨펌(관행적 최종 확정
- TXID는 트랜잭션이 생성되는 순간 결정됨. 그러나 TXID가 존재한다고 해서 거래가 완료된 것은 아니다.
- TXID는 트랜잭션 생성 즉시 존재하지만, 미확인 상태에서는 블록에 안 들어갈 수도 있고 RBF(Replace-By-Fee)로 대체될 수도 있음.
- 고액 거래는 최소 1컨펌, 보통 6컨펌을 기다리는 것이 안전.
댓글