비트코인 트랜잭션 ID(TXID)의 정의, 생성 원리, 실제 예시, 말리어빌리티 문제와 SegWit의 해결책까지. TXID를 이해하면 비트코인 거래 추적의 핵심을 파악할 수 있다.
비트코인을 보내거나 받으면 64자리 문자열 하나가 생성된다. 이것이 TXID(Transaction ID, 트랜잭션 식별자)다. 거래소 출금 확인 화면의 긴 해시값, 지갑 앱 거래 내역의 링크, 모두 TXID를 가리킨다. TXID는 비트코인 네트워크에서 발생하는 모든 거래를 고유하게 식별하는 핵심 도구다.
TXID는 비트코인 트랜잭션에 부여되는 64자리 16진수 해시값이다. 모든 트랜잭션은 고유한 TXID를 가진다. 동일한 TXID를 가진 두 개의 서로 다른 트랜잭션은 존재하지 않는다.
예시 TXID:
a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d
이 64자리 문자열은 0~9 숫자와 a~f 알파벳으로만 구성된다. 이는 256비트 해시값을 16진수로 표현한 것이다. 비트코인 블록체인 어디에서든 이 값 하나로 특정 거래를 정확히 찾아낼 수 있다.
TXID는 임의로 부여되는 것이 아니다. 트랜잭션 데이터 자체에서 수학적으로 도출된다.
Raw 트랜잭션 데이터
→ SHA-256 적용
→ SHA-256 다시 적용
→ 바이트 순서 반전
→ TXID (64자리 16진수)
바이트 순서를 반전시키는 이유는 비트코인이 내부적으로 리틀엔디언(little-endian) 형식을 사용하지만, 사람이 읽을 때는 빅엔디언(big-endian) 형식이 자연스럽기 때문이다.
이 과정이 의미하는 중요한 성질이 있다. 트랜잭션 데이터가 1비트라도 달라지면 TXID가 완전히 바뀐다. 해시 함수의 눈사태 효과(avalanche effect) 덕분이다. 따라서 TXID는 트랜잭션 내용의 디지털 지문 역할을 한다.
비트코인 역사에서 유명한 트랜잭션들을 TXID로 찾아볼 수 있다.
사토시 나카모토가 할 피니(Hal Finney)에게 10 BTC를 보낸 최초의 비트코인 P2P 거래다.
f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16
라스즐로 핸예츠(Laszlo Hanyecz)가 피자 두 판에 10,000 BTC를 지불한 거래다. 비트코인으로 실물 상품을 구매한 최초의 사례로, 이 날은 "비트코인 피자 데이"로 기념된다.
a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d
이 TXID들을 txid.uk의 검색창에 입력하면 트랜잭션의 상세 내역을 직접 확인할 수 있다.
비트코인에는 비슷하게 생긴 긴 문자열이 여러 종류 있다. 혼동하기 쉬우므로 차이를 정리한다.
| 항목 | TXID | 주소 (Address) | 블록 해시 (Block Hash) |
|---|---|---|---|
| 식별 대상 | 개별 트랜잭션 | 비트코인 수신 위치 | 개별 블록 |
| 길이 | 64자리 (16진수) | 25~62자리 (인코딩에 따라 상이) | 64자리 (16진수) |
| 시작 문자 | 불규칙 | 1, 3, bc1q, bc1p | 앞쪽에 0이 연속 |
| 고유성 | 트랜잭션당 1개 | 재사용 가능하나 비권장 | 블록당 1개 |
| 생성 시점 | 트랜잭션 생성 시 | 지갑에서 사전 생성 | 블록 채굴 시 |
| 예시 | a1075db5...5d48d | 1A1zP1eP...ivfNa | 00000000...a3b1e |
TXID와 블록 해시는 모두 64자리 16진수라 외형이 비슷하다. 블록 해시는 앞쪽에 0이 여러 개 연속되는 특징이 있다. 이는 작업증명(Proof of Work)에서 요구하는 난이도 조건 때문이다.
TXID가 트랜잭션 데이터의 해시라는 점은 한 가지 문제를 야기했다. 트랜잭션 말리어빌리티(malleability, 가변성) 문제다.
SegWit 이전의 비트코인에서는 서명(signature) 데이터가 TXID 계산 범위에 포함되었다. 문제는 ECDSA 서명의 특성상 동일한 개인키로 동일한 메시지에 대해 수학적으로 유효하면서도 바이트 표현이 다른 서명을 만들어낼 수 있다는 점이다.
예를 들어 Alice가 Bob에게 1 BTC를 보내는 트랜잭션(TXID: abc123)을 생성하면, 제3자가 서명 부분을 변조하여 효력은 동일하지만 TXID가 다른 트랜잭션(TXID: def456)을 만들 수 있었다. 변조된 버전이 먼저 블록에 포함되면, Alice의 소프트웨어는 원래 TXID를 찾지 못해 전송 실패로 오인할 수 있다.
2014년 Mt. Gox 거래소 사건에서 이 문제가 거론되었다. 말리어빌리티가 자금 유출의 직접 원인이었는지에 대해서는 논란이 있지만, 프로토콜 수준의 약점이라는 인식은 널리 공유되었다.
2017년 활성화된 SegWit(Segregated Witness) 업그레이드는 서명 데이터를 트랜잭션의 메인 구조에서 분리(segregate)하여 별도의 영역(witness)에 배치했다. TXID 계산 시 서명 데이터가 제외되므로, 서명을 변조해도 TXID가 바뀌지 않는다.
SegWit 이전:
TXID = hash(입력 + 출력 + 서명) ← 서명 변조 시 TXID 변경
SegWit 이후:
TXID = hash(입력 + 출력) ← 서명과 무관
WTXID = hash(입력 + 출력 + 서명) ← 서명 포함 버전
SegWit 이후에는 WTXID(Witness TXID)라는 개념이 추가되었다. WTXID는 서명 데이터를 포함한 전체 트랜잭션의 해시다. 일반적인 사용에서는 여전히 TXID를 쓰지만, 노드 간 트랜잭션 전파 등 내부 처리에서는 WTXID가 활용된다.
TXID를 알고 있다면 블록 탐색기에서 해당 트랜잭션의 모든 정보를 확인할 수 있다.
조회 방법:
TXID는 트랜잭션이 생성되는 순간 결정된다. 그러나 TXID가 존재한다고 해서 거래가 완료된 것은 아니다.
트랜잭션 생성 (TXID 확정)
→ 멤풀(Mempool)에 전파 (미확인 상태)
→ 채굴자가 블록에 포함 (1 컨펌)
→ 후속 블록 추가 (2, 3, ... 컨펌)
| 상태 | 의미 | TXID 존재 여부 |
|---|---|---|
| 미확인(Unconfirmed) | 멤풀에 대기 중. 아직 블록에 포함되지 않음 | 있음 |
| 1 컨펌 | 블록에 포함됨 | 있음 |
| 6 컨펌 | 관행적으로 "최종 확정"으로 간주 | 있음 |
미확인 상태의 의미: 미확인 트랜잭션은 아직 블록체인에 기록되지 않았다. 이론적으로 채굴자가 해당 트랜잭션을 블록에 포함시키지 않을 수 있고, RBF(Replace-By-Fee)로 대체될 수도 있다. 따라서 높은 금액의 거래에서는 최소 1 컨펌, 일반적으로는 6 컨펌을 기다리는 것이 안전하다.
txid.uk에서 TXID를 검색하면 현재 컨펌 수를 실시간으로 확인할 수 있다. 미확인 상태라면 "Unconfirmed"로 표시된다.
입력 예시:
이전 TXID: a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d
출력 인덱스(vout): 0
TXID는 비트코인 트랜잭션의 고유 식별자로, 트랜잭션 데이터에 double SHA-256 해시를 적용하여 생성되는 64자리 16진수 값이다. 모든 비트코인 거래는 TXID로 추적할 수 있으며, 블록 탐색기에서 입출력 구조, 수수료, 컨펌 상태를 확인하는 데 사용된다. SegWit 이전에는 말리어빌리티 문제가 존재했으나, SegWit이 서명 데이터를 분리함으로써 해결되었다. TXID는 비트코인 네트워크의 투명성과 검증 가능성을 뒷받침하는 가장 기본적인 단위다.
관련 글: