트랜잭션 해시(TXID, 트랜잭션 ID, tx hash라고도 부릅니다)는 블록체인 트랜잭션 하나의 고유 식별자입니다. 트랜잭션 자체의 데이터를 해시해 만들어지므로 트랜잭션에 서명하는 순간 고정되며, 누구든 블록 익스플로러에 붙여 넣으면 보낸 사람, 받는 사람, 금액, 수수료, 확인 상태를 볼 수 있습니다.
비트코인과 이더리움에서는 64자의 16진수 문자열입니다. 이더리움과 다른 EVM 체인은 앞에 0x를 붙여 66자가 됩니다. 솔라나는 대신 트랜잭션의 서명을 쓰는데 이쪽은 더 긴 base58 문자열이고, XRP 레저는 해시를 대문자로 씁니다.
지갑, 거래소, 고객센터는 언젠가 결국 트랜잭션 해시를 요구하는데, 대부분의 설명은 "고유 식별자"에서 멈춥니다. 이 가이드는 더 나아갑니다. 그 문자열이 무엇으로 만들어지는지, 체인마다 왜 다르게 생겼는지, 내 것은 어디서 복사하는지, 그것으로 열리는 익스플로러 페이지는 어떻게 읽는지, 그리고 받은 해시가 더는 조회되지 않는 몇 가지 경우까지 다룹니다.
요약
- 트랜잭션 해시와 트랜잭션 ID는 같은 것입니다. 지갑, 거래소, 익스플로러는 이 이름들을 TXID, tx hash, hash ID와 함께 섞어 씁니다.
- 길이를 보면 체인 계열을 알 수 있습니다: 16진수 64자(비트코인), 0x + 64자(이더리움과 EVM 체인). 솔라나는 대신 트랜잭션 서명을 쓰며, base58 약 88자입니다.
- 내 해시는 지갑의 트랜잭션 상세 화면이나 거래소의 출금 내역에서 찾고, 트랜잭션을 보낸 네트워크의 익스플로러에서 확인합니다.
- 트랜잭션이 대체되었거나(가속, 취소, replace-by-fee) 송금이 거래소 내부 장부를 벗어난 적이 없다면 해시는 조회되지 않습니다.
1. 트랜잭션 해시란?
블록체인 트랜잭션은 작은 데이터 덩어리입니다. 누가 지불하는지, 누가 받는지, 얼마인지, 수수료는 얼마인지, 그리고 서명. 이 데이터를 네트워크의 해시 함수에 통과시키면 고정 길이의 숫자가 나옵니다. 그 숫자가 트랜잭션 해시입니다. 데이터가 조금이라도 바뀌면 다른 숫자가 나오므로 해시는 지문처럼 작동합니다. 정확히 하나의 트랜잭션만 가리키고 다른 어떤 것도 가리키지 않습니다.
노드, 지갑, 익스플로러는 해시를 조회 키로 씁니다. 트랜잭션을 전파하면 이를 받아들인 노드가 해시를 돌려줍니다. 지갑이 "대기 중"을 표시할 때는 네트워크에 그 해시를 반복해서 조회하고 있는 것입니다. 거래소가 입금 증빙을 요구할 때 확인하는 것도 해시입니다. 전파부터 확인까지 결제를 추적하는 데 필요한 참조는 이것 하나뿐입니다.
해시 자체는 아무것도 증명하지 않습니다. 해시는 조회 키이고, 열었을 때 익스플로러가 보여 주는 내용이 증거입니다.
2. 트랜잭션 해시와 트랜잭션 ID는 같은 것일까?
같습니다. 트랜잭션 해시, 트랜잭션 ID, TXID, tx hash, txn hash, hash ID는 모두 같은 문자열을 가리킵니다. 어떤 용어를 쓰는지는 장소에 따라 다릅니다. 비트코인 소프트웨어는 txid라 하고, 이더리움 도구는 transaction hash 또는 txn hash라 하며, 거래소는 출금 화면에서 TXID나 hash ID라고 쓰는 경우가 많습니다. 용어가 실질적으로 다른 곳은 솔라나뿐입니다. 솔라나의 트랜잭션 ID는 트랜잭션 전체의 해시가 아니라 트랜잭션의 첫 번째 서명이므로, 문서에서는 "signature"라고 부릅니다.
흔히 혼동되지만 다른 것이 둘 있습니다. 지갑 주소는 결제가 아니라 계정을 식별합니다(비트코인에서는 1, 3 또는 bc1로 시작). 블록 해시는 많은 트랜잭션을 담은 블록 전체를 식별합니다. 거래소가 붙여 넣은 문자열을 거부한다면 이 둘 중 하나를 복사한 것은 아닌지 확인하세요.
3. 트랜잭션 해시는 어떻게 생겼을까?
형식은 체인에 따라 다르고, 보통 형식만 봐도 해시가 어느 네트워크 것인지 알 수 있습니다:
| 네트워크 | 형식 | 길이 | 예시 |
|---|---|---|---|
| 비트코인, 라이트코인, 도지코인, 비트코인 캐시 | 소문자 16진수 | 64자 | 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b |
| 이더리움, 폴리곤, BNB 스마트 체인, 아비트럼, 베이스, 아발란체 C-Chain 및 그 밖의 모든 EVM 체인 | 0x 뒤에 소문자 16진수 64자 | 66자 | 0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017 |
| 솔라나 | Base58 서명: 숫자와 문자, 0x 접두사 없음 | 약 87~88자 | 16진수 해시보다 길고 대문자와 소문자가 섞임 |
| XRP 레저 | 대문자 16진수 | 64자 | 숫자와 A부터 F까지의 문자, 모두 대문자 |
비트코인 예시는 역사상 처음 기록된 트랜잭션으로, 2009년 1월 3일에 채굴된 제네시스 블록의 coinbase입니다. mempool.space에서 열어 볼 수 있습니다. 이더리움 예시는 ethereum.org 개발자 문서에 쓰인 것입니다. 둘 다 32바이트를 16진수로 적은 것이라 길이가 64자이고, 0x 접두사는 "이것은 16진수"라는 뜻의 이더리움 관례입니다. 라이트코인, 도지코인, 비트코인 캐시는 비트코인의 형식을 물려받았고 모든 EVM 네트워크는 이더리움의 형식을 물려받았으므로, 폴리곤이나 베이스의 트랜잭션은 이더리움 메인넷의 것과 똑같이 생겼습니다.
솔라나 트랜잭션 ID는 트랜잭션의 서명입니다. 64바이트의 Ed25519 서명을 16진수가 아닌 base58로 인코딩한 것이라 더 길고 대문자와 소문자가 모두 들어갑니다. XRP 레저의 해시는 비트코인과 같은 256비트이며, 관례상 대문자로 씁니다.
4. 트랜잭션 해시는 어떻게 생성될까?
체인마다 서명된 트랜잭션을 각자의 방식으로 직렬화해 해시하며, 그 차이가 실제로 마주치게 될 몇 가지 현상을 설명해 줍니다.
- 비트코인, 라이트코인, 도지코인, 비트코인 캐시
- txid는 전통적 직렬화 형태의 트랜잭션에 SHA-256을 두 번 적용한 값으로, 이 직렬화에는 SegWit 입력의 witness(서명) 데이터가 빠져 있습니다. witness는 두 번째 식별자인 wtxid가 담당합니다. BIP 141이 이렇게 정의하며, SegWit 출력만 쓰는 트랜잭션의 txid를 확인 전에 제3자가 바꿀 수 없는 이유도 여기에 있습니다.
- 이더리움과 EVM 체인
- 해시는 서명되고 직렬화된 트랜잭션의 Keccak-256이므로, 트랜잭션에 서명한 뒤에야 존재합니다. ethers 같은 라이브러리는 서명되지 않은 트랜잭션의 해시로 null을 반환합니다. 노드는 eth_sendRawTransaction의 결과로 32바이트 해시를 돌려주고, 같은 값을 eth_getTransactionByHash와 eth_getTransactionReceipt에 넘깁니다.
- 솔라나
- 별도의 해시가 없습니다. 트랜잭션의 첫 번째 Ed25519 서명 64바이트를 base58 문자열로 표시한 것이 ID로 쓰입니다.
- XRP 레저
- 서명된 트랜잭션의 바이너리 형태 앞에 TXN 바이트를 붙인 뒤 SHA-512Half(SHA-512의 앞 256비트)로 해시한 값으로, 대문자 16진수 64자로 씁니다.
정의는 BIP 141, 이더리움 JSON-RPC 명세, 솔라나 용어 페이지, 그리고 XRP 레저 데이터 타입 레퍼런스에 있습니다.
모두의 공통점은 이것입니다. 해시는 트랜잭션에 서명하는 쪽이 네트워크에 도달하기 전에 계산합니다. 지갑은 보내기를 누르는 순간 해시를 알고 있으며, 트랜잭션이 아직 확인되지 않았는데도 해시를 보여 줄 수 있는 이유가 그것입니다.
5. 내 트랜잭션 해시는 어디서 찾을까?
누가 트랜잭션을 보냈는지에 따라 다릅니다.
- 셀프 커스터디 지갑(MetaMask, Ledger, Trust Wallet, Phantom, Electrum)
- 지갑의 활동 또는 내역 목록에서 트랜잭션을 엽니다. 상세 화면에 해시가 표시되며, 보통 복사 버튼과 함께 익스플로러에서 바로 열어 주는 "익스플로러에서 보기" 링크가 있습니다.
- 거래소 출금
- 출금 내역으로 갑니다. 거래소가 트랜잭션을 전파하고 나면 해당 행에 TXID가 표시되고, 링크인 경우가 많습니다. 행에 아직 처리 중이라고 표시되어 있다면 아무것도 서명되지 않았으므로 해시도 아직 존재하지 않습니다.
- 누군가 나에게 보낸 경우
- 보낸 사람에게 해시를 물어보거나, 블록 익스플로러에서 내 수신 주소를 열어 보세요. 그 주소를 거친 모든 트랜잭션이 해시와 함께 나열됩니다.
- 직접 작성한 코드
- 전파 호출이 해시를 반환합니다. ChainGate SDK에서는 signAndBroadcast() 결과의 transactionId 필드이며, 비트코인과 이더리움에서 똑같습니다(10절 참고).
문자열 전체를 복사하세요. 글자가 하나 빠지거나 공백이 하나 더 들어간 해시는 거래소가 거부하고, 비트코인 txid를 이더리움 익스플로러에 붙여 넣으면 그냥 찾을 수 없다고 나옵니다.
6. 해시로 트랜잭션을 확인하는 방법은?
트랜잭션을 보낸 네트워크의 블록 익스플로러에 붙여 넣으세요. 익스플로러는 트랜잭션이 대기 중인지 확인되었는지, 확인 수는 몇인지, 어느 블록에 포함되었는지, 보낸 사람과 받는 사람, 금액, 지불한 수수료를 보여 주고, 이더리움에서는 실행이 성공했는지 실패했는지도 보여 줍니다.
| 네트워크 | 익스플로러 | 확인할 것 |
|---|---|---|
| 비트코인 | mempool.space, blockchain.com | 확인 수(보통 6이면 "최종"으로 봄), sat/vB 단위 수수료 요율, 미확인 상태일 때 멤풀에서의 위치 |
| 이더리움 | Etherscan | 상태(Success, Fail, Pending), 블록 번호, 사용된 가스와 트랜잭션 수수료, 토큰 전송 |
| 폴리곤, BNB 스마트 체인, 아비트럼, 베이스, 아발란체 | Polygonscan, BscScan, Arbiscan, Basescan, Snowtrace | Etherscan과 같은 구성이지만 각 익스플로러는 자기 체인만 압니다 |
| 라이트코인, 도지코인, 비트코인 캐시 | Blockchair 또는 각 코인의 자체 익스플로러 | 비트코인과 마찬가지로 확인 수와 수수료 |
| 솔라나 | Solscan, Solana Explorer | 커밋먼트 수준(processed, confirmed, finalized), SOL 단위 수수료, 실행된 명령(instruction) |
| XRP 레저 | XRPScan, xrpl.org 익스플로러 | 결과 코드(tesSUCCESS면 성공), 레저 인덱스, 데스티네이션 태그 |
상태를 먼저 읽으세요. "Pending" 또는 "unconfirmed"는 네트워크가 트랜잭션을 받았지만 아직 어떤 블록에도 포함되지 않았다는 뜻입니다. 확인 수가 1 이상인 "Success"는 돈이 이동했다는 뜻입니다. "Fail" 또는 "dropped"는 이동하지 않았다는 뜻이며, 이더리움에서는 그래도 수수료는 지불됩니다. 이더리움 트랜잭션 페이지의 각 항목이 무엇을 뜻하는지는 Etherscan 가이드에서 읽어 보세요.
7. 익스플로러에서 내 트랜잭션이 안 보이는 이유는?
"트랜잭션을 찾을 수 없음" 페이지는 거의 언제나 다음 중 하나입니다:
- 네트워크가 다름
- 해시가 익스플로러와 다른 체인의 것입니다. USDT 출금은 이더리움, 트론, BNB 스마트 체인, 폴리곤 중 어느 것으로도 갈 수 있고 각각 익스플로러가 따로 있습니다. 출금할 때 고른 네트워크에 맞는 익스플로러를 쓰세요.
- 너무 이름
- 트랜잭션이 퍼지는 데 몇 초가 걸리고, 거래소는 익스플로러가 색인하기 직전에 TXID를 보여 줄 수 있습니다. 1분쯤 기다렸다가 새로고침하세요.
- 온체인에 올라간 적이 없음
- 같은 거래소의 두 계정 사이 이체, 그리고 카드나 은행 결제는 블록체인이 아니라 회사의 데이터베이스에 기록되므로 찾을 해시가 없습니다. 온체인 송금에만 해시가 생깁니다.
- 대체됨
- 트랜잭션을 가속하거나 취소했거나 replace-by-fee로 수수료를 올렸다면, 대체 트랜잭션은 새 해시를 가지며 네트워크는 이전 것을 버립니다. 그 이유는 다음 절에서 설명합니다.
- 만료됨
- 수수료가 너무 낮은 비트코인 트랜잭션은 약 2주 뒤 노드의 멤풀에서 제거됩니다. 자금은 다시 쓸 수 있게 되고, 이전 txid는 아무것도 가리키지 않게 됩니다.
확인되는 수수료를 고르는 법과 트랜잭션이 멈췄을 때 할 일은 비트코인 수수료 가이드에서 설명합니다.
8. 트랜잭션 해시가 바뀔 수 있을까?
확인된 트랜잭션의 해시는 절대 바뀌지 않습니다. 블록의 일부이므로 해시를 바꾸면 블록이 바뀝니다. 확인 전에는 다른 트랜잭션이 그 해시를 대체할 수 있는데, 밖에서 보면 이것이 해시가 바뀐 것처럼 보입니다.
이더리움과 다른 EVM 체인에서 대기 중인 트랜잭션을 가속하거나 취소한다는 것은 같은 nonce에 더 높은 수수료를 붙인 새 트랜잭션에 서명하는 것이며, MetaMask 도움말 페이지에 그 과정이 설명되어 있습니다. 네트워크는 먼저 채굴되는 쪽을 남기고 다른 쪽을 버립니다. 새 트랜잭션은 새 해시를 가지므로 지갑이 처음 보여 준 해시는 끊어진 링크가 됩니다. 비트코인의 replace-by-fee(BIP 125)도 마찬가지입니다. 대체 트랜잭션은 다른 txid를 가진 다른 트랜잭션입니다.
오래된 비트코인 트랜잭션에는 또 하나의 문제인 트랜잭션 가변성(malleability)이 있었습니다. 제3자가 미확인 트랜잭션의 서명 인코딩을 살짝 바꿔, 돈이 가는 곳은 그대로 둔 채 txid만 다르게 만들 수 있었습니다. Segregated Witness(BIP 141, 2017년부터 활성화)는 서명을 txid가 포함하는 데이터 바깥으로 옮겼고, 이로써 SegWit 출력을 쓰는 트랜잭션에서는 이 문제가 사라졌습니다. 지갑이 bc1로 시작하는 주소를 쓴다면 이 문제는 해당되지 않습니다.
10. 코드로 해시 얻기
애플리케이션이 트랜잭션을 보낸다면 전파 호출이 반환하는 해시를 보관하세요. 상태 확인, 지원 티켓, 대사 작업의 키가 됩니다. ChainGate SDK에서는 같은 코드가 비트코인, 라이트코인, 도지코인, 비트코인 캐시, 그리고 모든 EVM 네트워크에서 동작합니다:
import { ChainGate, importWallet } from 'chaingate';
const cg = new ChainGate({ apiKey: process.env.CHAINGATE_API_KEY });
const wallet = importWallet({ phrase: process.env.MNEMONIC });
const eth = cg.connect(cg.networks.ethereum, wallet);
const tx = await eth.transfer(cg.networks.ethereum.amount('0.01'), '0x...');
tx.setFee(tx.recommendedFees().normal);
const sent = await tx.signAndBroadcast();
console.log(sent.transactionId); // 0x... on EVM chains, 64 hex chars on Bitcoin
sent.onConfirmed((details) => {
console.log('mined in block', details.blockHeight, details.transactionId);
});지갑, 수수료, 오류 처리는 JavaScript로 암호화폐를 보내는 튜토리얼에서 다루고, 송금 문서에는 위에서 쓴 onConfirmed() 콜백을 포함해 전파 결과의 모든 필드가 나와 있습니다.
11. 다음에 볼 것
이제 익스플로러가 하듯 해시를 읽을 수 있습니다. 어느 체인인지, 어느 트랜잭션인지, 최종 확정되었는지. 그 익스플로러 페이지의 수수료 항목을 이해하려면 이더리움의 가스비란 무엇인가와 비트코인 수수료는 어떻게 작동하는가를 읽고, 지금 각 네트워크에서 보내는 데 얼마가 드는지 보려면 가스 트래커를 여세요. 비트코인과 EVM 체인에 걸쳐 전파, 확인 콜백, 트랜잭션 ID를 하나의 TypeScript 라이브러리로 처리하고 싶다면, ChainGate가 그 일을 해 줍니다.
자주 묻는 질문
암호화폐에서 트랜잭션 해시란?
블록체인 트랜잭션의 고유 식별자로, 트랜잭션 데이터를 해시해 만듭니다. 비트코인에서는 16진수 64자이고, 이더리움과 다른 EVM 체인에서는 0x 뒤에 16진수 64자가 붙습니다. 블록 익스플로러에 붙여 넣으면 트랜잭션의 상태, 주소, 금액, 수수료를 볼 수 있습니다.
트랜잭션 해시와 트랜잭션 ID(TXID)는 같은 것일까?
같습니다. 트랜잭션 해시, 트랜잭션 ID, TXID, tx hash, hash ID는 같은 문자열의 다른 이름입니다. 실질적으로 다른 것은 솔라나뿐으로, 솔라나의 트랜잭션 ID는 해시가 아니라 트랜잭션의 첫 번째 서명입니다.
트랜잭션 해시는 어떻게 생겼을까?
비트코인, 라이트코인, 도지코인, 비트코인 캐시: 소문자 16진수 64자. 이더리움, 폴리곤, BNB 스마트 체인, 아비트럼, 베이스 및 다른 EVM 체인: 0x에 16진수 64자를 더해 총 66자. 솔라나: 약 88자의 base58 서명. XRP 레저: 대문자 16진수 64자.
출금의 트랜잭션 해시는 어떻게 찾을까?
거래소의 출금 내역을 여세요. 출금이 전파되고 나면 해당 행에 TXID가 표시되며, 블록 익스플로러 링크인 경우가 많습니다. 아직 처리 중이라고 표시된다면 트랜잭션에 아직 서명되지 않은 것이고 해시도 존재하지 않습니다.
트랜잭션 해시는 어떻게 확인할까?
트랜잭션을 보낸 네트워크의 블록 익스플로러에 붙여 넣으세요. 비트코인은 mempool.space나 blockchain.com, 이더리움은 Etherscan, 다른 EVM 체인은 Polygonscan, BscScan, Arbiscan 또는 Basescan, 솔라나는 Solscan입니다. 페이지에 상태, 확인 수, 보낸 사람, 받는 사람, 금액, 수수료가 표시됩니다.
익스플로러에서 트랜잭션을 찾을 수 없다고 나오는 이유는?
대개 해시가 익스플로러와 다른 네트워크의 것이거나, 트랜잭션이 생긴 지 몇 초밖에 안 되었거나, 블록체인을 거치지 않은 거래소 내부 이체였거나, 가속 또는 취소로 새 해시를 가진 트랜잭션으로 대체된 경우입니다.
트랜잭션 해시가 바뀔 수 있을까?
트랜잭션이 확인된 뒤에는 바뀌지 않습니다. 그 전에는 가속, 취소, replace-by-fee가 새 해시를 가진 새 트랜잭션을 만들고 원래 것은 버려집니다. 오래된 비트코인 트랜잭션은 제3자가 변조할 수도 있었는데(가변성), SegWit이 2017년에 이를 고쳤습니다.
내 트랜잭션 해시를 공유해도 안전할까?
안전합니다. 개인 키가 들어 있지 않고 자금을 옮기는 데 쓸 수 없습니다. 결제의 주소, 금액, 시각이 드러나지만 이것들은 어차피 블록체인에 공개되어 있습니다.
트랜잭션 해시는 몇 자일까?
비트코인 계열 체인과 XRP 레저는 64자, 이더리움과 EVM 체인은 0x 접두사 때문에 66자입니다. 둘 다 같은 32바이트를 나타냅니다. 솔라나 트랜잭션 ID는 base58 서명으로 보통 87자 또는 88자입니다.
ChainGate로 만들기
아이디어를 코드로 연결하세요 — ChainGate는 Ethereum과 20여 개 블록체인을 위한 지갑, 트랜잭션, 관리형 RPC를 하나의 라이브러리로 제공합니다.