비트코인기술 입문

TXID란 무엇인가

비트코인 트랜잭션 ID(TXID)의 정의, 생성 원리, 실제 예시, 말리어빌리티 문제와 SegWit의 해결책까지. TXID를 이해하면 비트코인 거래 추적의 핵심을 파악할 수 있다.

· 5분

비트코인을 보내거나 받으면 64자리 문자열 하나가 생성된다. 이것이 **TXID(Transaction ID, 트랜잭션 식별자)**다. 거래소 출금 확인 화면의 긴 해시값, 지갑 앱 거래 내역의 링크, 모두 TXID를 가리킨다. TXID는 비트코인 네트워크에서 발생하는 모든 거래를 고유하게 식별하는 핵심 도구다.

TXID의 정의

TXID는 비트코인 트랜잭션에 부여되는 64자리 16진수 해시값이다. 모든 트랜잭션은 고유한 TXID를 가진다. 동일한 TXID를 가진 두 개의 서로 다른 트랜잭션은 존재하지 않는다.

예시 TXID:
a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d

이 64자리 문자열은 09 숫자와 af 알파벳으로만 구성된다. 이는 256비트 해시값을 16진수로 표현한 것이다. 비트코인 블록체인 어디에서든 이 값 하나로 특정 거래를 정확히 찾아낼 수 있다.

TXID는 어떻게 생성되는가

TXID는 임의로 부여되는 것이 아니다. 트랜잭션 데이터 자체에서 수학적으로 도출된다.

생성 과정

  1. 트랜잭션의 모든 데이터(입력, 출력, 금액, 잠금 스크립트 등)를 직렬화(serialize)하여 바이트 배열로 만든다.
  2. 이 바이트 배열에 SHA-256 해시 함수를 두 번 적용한다 (double SHA-256).
  3. 결과 해시값의 **바이트 순서를 반전(reverse)**시킨다.
Raw 트랜잭션 데이터
  → SHA-256 적용
  → SHA-256 다시 적용
  → 바이트 순서 반전
  → TXID (64자리 16진수)

바이트 순서를 반전시키는 이유는 비트코인이 내부적으로 리틀엔디언(little-endian) 형식을 사용하지만, 사람이 읽을 때는 빅엔디언(big-endian) 형식이 자연스럽기 때문이다.

이 과정이 의미하는 중요한 성질이 있다. 트랜잭션 데이터가 1비트라도 달라지면 TXID가 완전히 바뀐다. 해시 함수의 눈사태 효과(avalanche effect) 덕분이다. 따라서 TXID는 트랜잭션 내용의 디지털 지문 역할을 한다.

유명 트랜잭션의 TXID

비트코인 역사에서 유명한 트랜잭션들을 TXID로 찾아볼 수 있다.

사토시 나카모토의 첫 송금 (2009년 1월 12일)

사토시 나카모토가 할 피니(Hal Finney)에게 10 BTC를 보낸 최초의 비트코인 P2P 거래다.

f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16

비트코인 피자 거래 (2010년 5월 22일)

라스즐로 핸예츠(Laszlo Hanyecz)가 피자 두 판에 10,000 BTC를 지불한 거래다. 비트코인으로 실물 상품을 구매한 최초의 사례로, 이 날은 “비트코인 피자 데이”로 기념된다.

a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d

이 TXID들을 txid.uk의 검색창에 입력하면 트랜잭션의 상세 내역을 직접 확인할 수 있다.

TXID vs 주소 vs 블록 해시

비트코인에는 비슷하게 생긴 긴 문자열이 여러 종류 있다. 혼동하기 쉬우므로 차이를 정리한다.

항목TXID주소 (Address)블록 해시 (Block Hash)
식별 대상개별 트랜잭션비트코인 수신 위치개별 블록
길이64자리 (16진수)25~62자리 (인코딩에 따라 상이)64자리 (16진수)
시작 문자불규칙1, 3, bc1q, bc1p앞쪽에 0이 연속
고유성트랜잭션당 1개재사용 가능하나 비권장블록당 1개
생성 시점트랜잭션 생성 시지갑에서 사전 생성블록 채굴 시
예시a1075db5...5d48d1A1zP1eP...ivfNa00000000...a3b1e

TXID와 블록 해시는 모두 64자리 16진수라 외형이 비슷하다. 블록 해시는 앞쪽에 0이 여러 개 연속되는 특징이 있다. 이는 작업증명(Proof of Work)에서 요구하는 난이도 조건 때문이다.

TXID 말리어빌리티 (Transaction Malleability)

TXID가 트랜잭션 데이터의 해시라는 점은 한 가지 문제를 야기했다. 트랜잭션 말리어빌리티(malleability, 가변성) 문제다.

문제의 원인

SegWit 이전의 비트코인에서는 서명(signature) 데이터가 TXID 계산 범위에 포함되었다. 문제는 ECDSA 서명의 특성상 동일한 개인키로 동일한 메시지에 대해 수학적으로 유효하면서도 바이트 표현이 다른 서명을 만들어낼 수 있다는 점이다.

예를 들어 Alice가 Bob에게 1 BTC를 보내는 트랜잭션(TXID: abc123)을 생성하면, 제3자가 서명 부분을 변조하여 효력은 동일하지만 TXID가 다른 트랜잭션(TXID: def456)을 만들 수 있었다. 변조된 버전이 먼저 블록에 포함되면, Alice의 소프트웨어는 원래 TXID를 찾지 못해 전송 실패로 오인할 수 있다.

2014년 Mt. Gox 거래소 사건에서 이 문제가 거론되었다. 말리어빌리티가 자금 유출의 직접 원인이었는지에 대해서는 논란이 있지만, 프로토콜 수준의 약점이라는 인식은 널리 공유되었다.

SegWit의 해결

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.uk에서 TXID 조회하기

TXID를 알고 있다면 블록 탐색기에서 해당 트랜잭션의 모든 정보를 확인할 수 있다.

조회 방법:

  1. txid.uk 접속 후 검색창에 TXID 64자리를 붙여넣기
  2. 트랜잭션 상세 페이지에서 입력/출력 구조, 수수료, 컨펌 수, 포함 블록 높이 확인
  3. viz.txid.uk에서 트랜잭션의 입출력 관계를 네트워크 그래프로 시각화 — 비트코인 피자 거래 TXID를 입력해서 10,000 BTC의 흐름을 직접 추적해보자
  4. tx.txid.uk에서 Raw 트랜잭션 16진수를 디코딩하면 TXID가 어떤 구조에서 도출되었는지 확인할 수 있다

TXID와 컨펌

TXID는 트랜잭션이 생성되는 순간 결정된다. 그러나 TXID가 존재한다고 해서 거래가 완료된 것은 아니다.

트랜잭션의 생애 주기

트랜잭션 생성 (TXID 확정)
  → 멤풀(Mempool)에 전파 (미확인 상태)
  → 채굴자가 블록에 포함 (1 컨펌)
  → 후속 블록 추가 (2, 3, ... 컨펌)
상태의미TXID 존재 여부
미확인(Unconfirmed)멤풀에 대기 중. 아직 블록에 포함되지 않음있음
1 컨펌블록에 포함됨있음
6 컨펌관행적으로 “최종 확정”으로 간주있음

미확인 상태의 의미: 미확인 트랜잭션은 아직 블록체인에 기록되지 않았다. 이론적으로 채굴자가 해당 트랜잭션을 블록에 포함시키지 않을 수 있고, RBF(Replace-By-Fee)로 대체될 수도 있다. 따라서 높은 금액의 거래에서는 최소 1 컨펌, 일반적으로는 6 컨펌을 기다리는 것이 안전하다.

txid.uk에서 TXID를 검색하면 현재 컨펌 수를 실시간으로 확인할 수 있다. 미확인 상태라면 “Unconfirmed”로 표시된다.

TXID의 실용적 활용

  • 거래 확인: 비트코인을 보낸 뒤 상대방에게 TXID를 전달하면, 블록 탐색기에서 거래 상태를 직접 확인할 수 있다.
  • 거래소 입출금 추적: 거래소 출금 시 발급되는 TXID로 입금 지연 원인을 조회한다.
  • 분쟁 해결: 블록체인에 기록된 TXID는 위조할 수 없는 객관적 증거가 된다.
  • UTXO 참조: 트랜잭션의 입력(Input)은 이전 TXID와 출력 인덱스(vout)를 조합하여 소비할 UTXO를 지정한다.
입력 예시:
  이전 TXID: a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d
  출력 인덱스(vout): 0

정리

TXID는 비트코인 트랜잭션의 고유 식별자로, 트랜잭션 데이터에 double SHA-256 해시를 적용하여 생성되는 64자리 16진수 값이다. 모든 비트코인 거래는 TXID로 추적할 수 있으며, 블록 탐색기에서 입출력 구조, 수수료, 컨펌 상태를 확인하는 데 사용된다. SegWit 이전에는 말리어빌리티 문제가 존재했으나, SegWit이 서명 데이터를 분리함으로써 해결되었다. TXID는 비트코인 네트워크의 투명성과 검증 가능성을 뒷받침하는 가장 기본적인 단위다.

관련 글:

관련 글