トランザクションハッシュ(TXID、トランザクション ID、tx hash とも呼ばれます)は、ブロックチェーン上の 1 つの取引を示す一意の識別子です。取引自身のデータをハッシュ化して作られるため、取引が署名された瞬間に確定し、誰でもブロックエクスプローラーに貼り付ければ送信者、受取人、金額、手数料、承認状況を見ることができます。
ビットコインとイーサリアムでは 16 進数 64 文字の文字列です。イーサリアムとその他の EVM チェーンでは先頭に 0x が付くので 66 文字になります。Solana は代わりに取引の署名を使うためより長い base58 文字列で、XRP Ledger はハッシュを大文字で書きます。
ウォレット、取引所、サポート窓口は、いずれトランザクションハッシュを求めてきます。ところがほとんどの説明は「一意の識別子」で止まっています。このガイドはその先に進みます。文字列が何からできているか、チェーンごとに見た目が違うのはなぜか、自分のハッシュはどこからコピーするか、開いたエクスプローラーのページをどう読むか、そして渡されたハッシュが使えなくなる数少ないケースを説明します。
要約
- トランザクションハッシュとトランザクション ID は同じものです。ウォレット、取引所、エクスプローラーはこの 2 つの名前を、TXID、tx hash、hash ID とともに区別なく使っています。
- 長さを見ればチェーンの系統がわかります:16 進数 64 文字(Bitcoin)、0x + 64 文字(Ethereum と EVM チェーン)。Solana は代わりにトランザクション署名を使い、base58 で約 88 文字です。
- 自分のハッシュはウォレットの取引詳細か取引所の出金履歴にあり、送信したネットワークのエクスプローラーで確認します。
- 取引が置き換えられた(高速化、キャンセル、replace-by-fee)場合や、送金が取引所の内部台帳から出ていない場合、ハッシュは使えなくなります。
1. トランザクションハッシュとは?
ブロックチェーンの取引は小さなデータの塊です。誰が払うか、誰に払うか、いくらか、手数料はいくらか、そして署名。このデータをネットワークのハッシュ関数に通すと固定長の数値が得られます。その数値がトランザクションハッシュです。データをどこか変えれば別の数値になるので、ハッシュは指紋として機能します。ちょうど 1 つの取引を指し、他のどれも指しません。
ノード、ウォレット、エクスプローラーはハッシュを検索キーとして使います。取引をブロードキャストすると、受け付けたノードがハッシュを返します。ウォレットが「保留中」と表示しているときは、そのハッシュについてネットワークに問い合わせています。取引所が入金の証拠を求めるとき、確認するのはハッシュです。ブロードキャストから承認まで支払いを追跡するのに必要な参照はこれだけです。
ハッシュそのものは何も証明しません。あくまで検索キーであり、それを開いたときにエクスプローラーが表示する内容が証拠です。
2. トランザクションハッシュとトランザクション ID は同じ?
同じです。トランザクションハッシュ、トランザクション ID、TXID、tx hash、txn hash、hash ID はすべて同じ文字列を指します。使われる語は場所によって違います。ビットコインのソフトウェアは txid、イーサリアムのツールは transaction hash や txn hash と言い、取引所は出金画面で TXID や hash ID と書くことが多いです。実質的に用語が異なる唯一の場所が Solana です。Solana のトランザクション ID は取引全体のハッシュではなく取引の最初の署名なので、ドキュメントでは「signature」と呼ばれます。
よく混同されるものが 2 つありますが、これらは別物です。ウォレットアドレスは支払いではなくアカウントを識別します(ビットコインでは 1、3、bc1 で始まります)。ブロックハッシュは多数の取引を含むブロック全体を識別します。貼り付けた文字列を取引所に拒否されたら、これらのどちらかをコピーしていないか確認してください。
3. トランザクションハッシュはどんな形?
形式はチェーンによって異なり、たいていはそれだけでハッシュがどのネットワークのものかわかります:
| ネットワーク | 形式 | 長さ | 例 |
|---|---|---|---|
| Bitcoin、Litecoin、Dogecoin、Bitcoin Cash | 小文字の 16 進数 | 64 文字 | 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b |
| Ethereum、Polygon、BNB Smart Chain、Arbitrum、Base、Avalanche C-Chain とその他すべての EVM チェーン | 0x の後に小文字の 16 進数 64 文字 | 66 文字 | 0x97d99bc7729211111a21b12c933c949d4f31684f1d6954ff477d0477538ff017 |
| Solana | Base58 の署名:数字と英字、0x プレフィックスなし | 約 87 〜 88 文字 | 16 進数のハッシュより長く、大文字と小文字が混在 |
| XRP Ledger | 大文字の 16 進数 | 64 文字 | 数字と A から F の英字、すべて大文字 |
ビットコインの例は記録上最初の取引で、2009年1月3日にマイニングされたジェネシスブロックの coinbase 取引です。mempool.spaceで開くことができます。イーサリアムの例は ethereum.org の開発者ドキュメントで使われているものです。どちらも 32 バイトを 16 進数で書いたもので、だから 64 文字になります。0x プレフィックスは「これは 16 進数である」ことを示すイーサリアムの慣習です。Litecoin、Dogecoin、Bitcoin Cash はビットコインの形式を、すべての EVM ネットワークはイーサリアムの形式を受け継いでいるので、Polygon や Base の取引はイーサリアムメインネットの取引と見た目がまったく同じです。
Solana のトランザクション ID は取引の署名です。64 バイトの Ed25519 署名を 16 進数ではなく base58 でエンコードしたものなので、より長く、大文字と小文字の両方を含みます。XRP Ledger のハッシュはビットコインと同じ 256 ビットで、慣習として大文字で書かれます。
4. トランザクションハッシュはどう生成される?
各チェーンは署名済み取引を独自の形式でシリアライズしてハッシュ化しており、その違いが、実際に出くわすいくつかの現象を説明します。
- Bitcoin、Litecoin、Dogecoin、Bitcoin Cash
- txid は、従来のシリアライズ形式の取引に SHA-256 を 2 回かけたものです。この形式には SegWit インプットの witness(署名)データが含まれず、witness は wtxid という第 2 の識別子でカバーされます。BIP 141 はこう定義しており、SegWit アウトプットだけを使う取引の txid が承認前に第三者によって改変されえないのはこのためです。
- Ethereum と EVM チェーン
- ハッシュは署名済みのシリアライズされた取引の Keccak-256 なので、取引が署名されて初めて存在します。ethers などのライブラリは未署名取引のハッシュに null を返します。ノードは eth_sendRawTransaction の結果として 32 バイトのハッシュを返し、同じ値を eth_getTransactionByHash と eth_getTransactionReceipt に渡します。
- Solana
- 別個のハッシュはありません。取引の最初の Ed25519 署名(64 バイトを base58 文字列で表示)が ID として使われます。
- XRP Ledger
- 署名済み取引のバイナリ形式の先頭にバイト列 TXN を付けてから SHA-512Half(SHA-512 の先頭 256 ビット)でハッシュ化したもので、大文字の 16 進数 64 文字で書かれます。
定義はBIP 141、Ethereum JSON-RPC 仕様、Solana の用語ページ、そしてXRP Ledger のデータ型リファレンスにあります。
共通しているのは、ハッシュはネットワークに届く前に、取引に署名する側が計算するという点です。ウォレットは送信をタップした瞬間にハッシュを知っているので、取引がまだ未承認のうちから表示できるのです。
5. 自分のトランザクションハッシュはどこにある?
誰が取引を送ったかによります。
- セルフカストディウォレット(MetaMask、Ledger、Trust Wallet、Phantom、Electrum)
- ウォレットのアクティビティや履歴の一覧から取引を開きます。詳細画面にハッシュが表示され、たいていコピーボタンと、エクスプローラーで開くリンクが付いています。
- 取引所からの出金
- 出金履歴を開きます。取引所が取引をブロードキャストすると、その行に TXID が、多くの場合リンクとして表示されます。まだ処理中と表示されているなら、何も署名されていないのでハッシュはまだ存在しません。
- 誰かから支払いを受けた
- 相手にハッシュを聞くか、自分の受取アドレスをブロックエクスプローラーで開きます。そのアドレスに関わったすべての取引がハッシュ付きで一覧されます。
- 自分のコード
- ブロードキャストの呼び出しが返します。ChainGate SDK では signAndBroadcast() の結果の transactionId フィールドで、ビットコインでもイーサリアムでも同じです(セクション 10 を参照)。
文字列は丸ごとコピーしてください。1 文字欠けたり余分なスペースが入ったりしたハッシュは取引所に拒否されますし、ビットコインの txid をイーサリアムのエクスプローラーに貼り付けても、単に見つかりません。
6. ハッシュで取引を確認するには?
取引を送信したネットワークのブロックエクスプローラーに貼り付けます。エクスプローラーには、取引が保留中か承認済みか、承認数はいくつか、どのブロックに含まれたか、送信者と受取人、金額、支払った手数料、そしてイーサリアムでは実行が成功したか失敗したかが表示されます。
| ネットワーク | エクスプローラー | 見るべき項目 |
|---|---|---|
| Bitcoin | mempool.space、blockchain.com | 承認数(6 が通常の「確定」)、sat/vB の手数料レート、未承認の間はメモリプール内の位置 |
| Ethereum | Etherscan | ステータス(Success、Fail、Pending)、ブロック番号、使用ガスと取引手数料、トークン転送 |
| Polygon、BNB Smart Chain、Arbitrum、Base、Avalanche | Polygonscan、BscScan、Arbiscan、Basescan、Snowtrace | Etherscan と同じレイアウト。各エクスプローラーは自分のチェーンしか知らない |
| Litecoin、Dogecoin、Bitcoin Cash | Blockchair または各コイン独自のエクスプローラー | ビットコインと同様に承認数と手数料 |
| Solana | Solscan、Solana Explorer | コミットメントレベル(processed、confirmed、finalized)、SOL 建ての手数料、実行された命令 |
| XRP Ledger | XRPScan、xrpl.org のエクスプローラー | 結果コード(tesSUCCESS なら成功)、レジャーインデックス、宛先タグ |
まずステータスを読みます。「Pending」や「unconfirmed」は、ネットワークは取引を持っているがまだどのブロックにも含まれていないという意味です。「Success」で承認が 1 つ以上あれば、資金は移動しました。「Fail」や「dropped」なら移動しておらず、イーサリアムではそれでも手数料は支払われています。イーサリアムの取引ページの各項目の意味はEtherscan ガイドをお読みください。
7. エクスプローラーで取引が見つからないのはなぜ?
「transaction not found」のページが出る原因は、ほぼ必ず次のどれかです:
- ネットワークが違う
- ハッシュがエクスプローラーとは別のチェーンのものです。USDT の出金は Ethereum、Tron、BNB Smart Chain、Polygon のどれを通ることもあり、それぞれに専用のエクスプローラーがあります。出金時に選んだネットワークに合ったエクスプローラーを使ってください。
- 早すぎる
- 取引が伝播するには数秒かかり、取引所はエクスプローラーがインデックスする少し前に TXID を表示することがあります。1 分待って再読み込みしてください。
- オンチェーンに出ていない
- 同じ取引所の 2 つのアカウント間の送金や、カード・銀行での支払いは、ブロックチェーンではなくその会社のデータベースに記録されるので、見つけるべきハッシュがありません。ハッシュが付くのはオンチェーンの送金だけです。
- 置き換えられた
- 取引が高速化、キャンセル、あるいは replace-by-fee で手数料を引き上げられた場合、置き換え後の取引には新しいハッシュが付き、ネットワークは古い方を破棄します。理由は次のセクションで説明します。
- 期限切れ
- 手数料が低すぎるビットコインの取引は、約 2 週間後にノードのメモリプールから破棄されます。資金は再び使えるようになり、古い txid は何も指さなくなります。
承認される手数料の選び方と、詰まったときの対処はビットコイン手数料ガイドで説明しています。
8. トランザクションハッシュは変わる?
承認済み取引のハッシュは決して変わりません。ブロックの一部であり、それを変えればブロックも変わってしまうからです。承認前には、ハッシュが別の取引に取って代わられることがあり、外から見るとハッシュが変わったように見えます。
イーサリアムやその他の EVM チェーンでは、保留中の取引を高速化またはキャンセルするとは、同じ nonce でより高い手数料の新しい取引に署名することを意味します。これはMetaMask のヘルプページが説明しているとおりです。ネットワークは先にマイニングされた方を残し、もう一方を破棄します。新しい取引には新しいハッシュが付くので、ウォレットが最初に表示したものはリンク切れになります。ビットコインの replace-by-fee(BIP 125)も同じで、置き換え後の取引は別の txid を持つ別の取引です。
古いビットコインの取引にはもう 1 つ問題がありました。トランザクション展性(transaction malleability)です。第三者が未承認取引の署名のエンコーディングを少し変えると、資金の行き先を変えずに別の txid を付けることができました。Segregated Witness(BIP 141、2017 年から有効)は署名を txid が対象とするデータの外に移し、SegWit アウトプットを使う取引についてこの問題を解消しました。ウォレットが bc1 で始まるアドレスを使っているなら、影響はありません。
10. コードでハッシュを取得する
アプリケーションが取引を送信するなら、ブロードキャストの呼び出しが返すハッシュを保存しておいてください。ステータス確認、サポートチケット、照合のキーになります。ChainGate SDK では同じ行が Bitcoin、Litecoin、Dogecoin、Bitcoin Cash、そしてあらゆる 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. 次に読むもの
これでエクスプローラーと同じようにハッシュを読めるようになりました。どのチェーンか、どの取引か、確定しているか。エクスプローラーのページの手数料の行を理解するには、イーサリアムのガス代とは何かとビットコインの手数料の仕組みを読み、各ネットワークで今送金するといくらかかるかを見るにはガストラッカーを開いてください。ブロードキャスト、承認コールバック、トランザクション ID の扱いを Bitcoin と EVM チェーンにわたって 1 つの TypeScript ライブラリに任せたいなら、ChainGate がそれを行います。
よくある質問
暗号資産のトランザクションハッシュとは?
ブロックチェーン取引の一意の識別子で、取引のデータをハッシュ化して作られます。ビットコインでは 16 進数 64 文字、イーサリアムとその他の EVM チェーンでは 0x の後に 16 進数 64 文字が続きます。ブロックエクスプローラーに貼り付けると、取引のステータス、アドレス、金額、手数料が表示されます。
トランザクションハッシュとトランザクション ID(TXID)は同じ?
同じです。トランザクションハッシュ、トランザクション ID、TXID、tx hash、hash ID は同じ文字列の別名です。実質的に異なるのは Solana だけで、そのトランザクション ID はハッシュではなく取引の最初の署名です。
トランザクションハッシュはどんな形?
Bitcoin、Litecoin、Dogecoin、Bitcoin Cash:小文字の 16 進数 64 文字。Ethereum、Polygon、BNB Smart Chain、Arbitrum、Base とその他の EVM チェーン:0x に 16 進数 64 文字を加えた計 66 文字。Solana:約 88 文字の base58 署名。XRP Ledger:大文字の 16 進数 64 文字。
出金のトランザクションハッシュはどこで見つかる?
取引所の出金履歴を開きます。出金がブロードキャストされると、その行に TXID が、多くの場合ブロックエクスプローラーへのリンクとして表示されます。まだ処理中と表示されているなら、取引はまだ署名されておらず、ハッシュは存在しません。
トランザクションハッシュはどう確認する?
送信したネットワークのブロックエクスプローラーに貼り付けます。ビットコインなら mempool.space か blockchain.com、イーサリアムなら Etherscan、その他の EVM チェーンなら Polygonscan、BscScan、Arbiscan、Basescan、Solana なら Solscan です。ページにはステータス、承認数、送信者、受取人、金額、手数料が表示されます。
エクスプローラーに取引が見つからないと表示されるのはなぜ?
たいていは、ハッシュがエクスプローラーとは別のネットワークのものである、取引が送信されてまだ数秒しかたっていない、ブロックチェーンに触れない取引所内部の送金だった、あるいは高速化やキャンセルで新しいハッシュを持つ取引に置き換えられた、のいずれかです。
トランザクションハッシュは変わる?
取引が承認された後は変わりません。承認前は、高速化、キャンセル、replace-by-fee によって新しいハッシュを持つ新しい取引が作られ、元の取引は破棄されます。古いビットコインの取引は第三者によって改変されることもありましたが(トランザクション展性)、これは 2017 年に SegWit が解決しました。
自分のトランザクションハッシュを共有しても安全?
安全です。秘密鍵は含まれておらず、資金を動かすのに使うことはできません。支払いのアドレス、金額、時刻はわかりますが、これらはいずれにせよブロックチェーン上で公開されています。
トランザクションハッシュは何文字?
ビットコイン系のチェーンと XRP Ledger では 64 文字、イーサリアムと EVM チェーンでは 0x プレフィックスのぶん 66 文字です。どちらも同じ 32 バイトを表します。Solana のトランザクション ID は base58 の署名で、通常 87 または 88 文字です。
ChainGate で構築する
アイデアをコードに落とし込みましょう — ChainGate は Ethereum と 20 以上のブロックチェーン向けのウォレット、トランザクション、マネージド RPC を 1 つのライブラリで提供します。