署名前のトランザクションシミュレーション:損失を防ぐために見ておきたい機能
暗号資産の世界では、「確認済み」は基本的に取り消せないことを意味します。Ethereum 上で承認したトランザクションは、誤操作であっても、悪意ある誘導によるものであっても、ブロックチェーン上に永続的に記録され、多くの場合、後から元に戻す手段はありません。
トランザクションシミュレーション(Transaction Simulation)は、近年の暗号資産ウォレットにおける重要なセキュリティ機能の一つです。仕組みはシンプルで、実際に署名してトランザクションをブロードキャストする前に、仮想環境でその処理を事前実行し、「いま承認したらオンチェーンで何が起きるのか」を表示します。たとえば、資産残高の変化、コントラクト呼び出しの流れ、承認権限の変更などです。
この機能は、文字どおり大きな損失を避ける助けになります。
なぜトランザクションシミュレーションが必要なのか
ブロックチェーン取引の技術的な中身は、多くのユーザーにとって分かりにくいものです。ウォレットに署名リクエストが表示されたとき、通常見えるのは次のような情報です。
- 16進数の calldata
- 送信先のコントラクトアドレス
- おおよその Gas 見積もり
トランザクションシミュレーションがなければ、その取引を実行した後に何が変わるのかを直感的に判断しにくくなります。これは単なるトークンの承認なのか、流動性追加なのか。ポジションをクローズしているのか、それとも見知らぬアドレスへ資産を送っているのか。署名前の画面だけでは、判断が難しい場合があります。
この不透明さこそが、Drainer 攻撃やフィッシング署名が成功する大きな理由の一つです。Chainalysis の調査でも、多くの被害者は事後に初めて騙されたと気づいており、署名した瞬間には自分が何を承認しているのか分かっていなかったケースが少なくありません。
トランザクションシミュレーションの技術的な仕組み
トランザクションシミュレーションは、「フォークされた状態(Forked State)」上で EVM 実行を行い、取引結果を予測します。
- 現在のオンチェーン状態を読み取る(アカウント残高、コントラクトストレージ、承認記録など)
- その状態のローカルコピー上でトランザクションをシミュレーション実行する
- 状態変化の差分を返す(どの残高が増え、どの残高が減り、どの承認が追加・変更されるか)
この処理はクライアント側または RPC レイヤーで完結し、ネットワークに実際のトランザクションを送信しません。そのため、本物のオンチェーン状態には影響しません。技術的には、Ethereum JSON-RPC の eth_call や、Tenderly、Alchemy などが提供するシミュレーション API に依存します。
また、EIP-712 の構造化署名や EIP-2612 Permit 署名については、質の高いシミュレーションツールであれば、署名内容を解析し、「コントラクトアドレス Y に対して X 枚の USDC 使用を許可します」といった人間が理解しやすい形式で表示します。生の16進数データだけを見せられるより、はるかに安全に判断できます。
トランザクションシミュレーションで見つけられる典型的な問題
悪意ある Approve リクエスト
Hyperliquid などの DEX を装ったフィッシングサイトでは、攻撃者が一見普通の USDC 承認リクエストを送ってくることがあります。しかし、spender アドレスが悪意あるコントラクトになっている場合があります。
トランザクションシミュレーションは、「50,000 USDC を 0x1234...abcd(未知のコントラクト)に承認します」のように表示できます。これは、ユーザーが期待していた操作と明らかに異なる可能性があります。
大きな残高の異常な流出
一部の Drainer トランザクションは、transferFrom を直接呼び出し、ウォレット内のトークンを攻撃者のアドレスへ移動させます。シミュレーション結果に「ETH -5.2」「USDC -25,000」のような明確な残高変化が表示されれば、通常の操作ではないとすぐに気づけます。
バッチ操作に隠された追加ステップ
EIP-4337 のアカウント抽象化では、1つの UserOperation に複数の操作をまとめることができます。悪意ある DApp は、ユーザーが期待する操作、たとえばポジションのクローズの後に、追加の送金処理を紛れ込ませることがあります。
トランザクションシミュレーションは、操作全体の流れを表示できるため、こうした隠れた追加処理を発見しやすくなります。
想定を超えるスリッページ
通常の DEX 取引でも、トランザクションシミュレーションは署名前に実際の約定価格やスリッページを予測する助けになります。現在の市場状況でその取引を実行すべきかを判断しやすくなり、流動性不足による大きな損失を避ける一助になります。
永続先物 DEX での具体的な価値
dYdX、GMX などの永続先物プラットフォームでは、ユーザーは次のような操作を頻繁に行います。
- ポジションの新規建て・追加(大きな USDC 入金を伴う場合がある)
- 損切り・利確設定の調整
- DEX コントラクトからの出金
これらの操作は、それぞれオンチェーンで署名が必要なトランザクションです。トランザクションシミュレーションにより、確認前に「入金後の口座残高の変化」「出金後に受け取る見込み額」などを確認できます。操作ミスを減らすだけでなく、途中に挿入された悪意あるリクエストを見分ける助けにもなります。
永続先物取引を行う場合は、署名内容を見やすく確認できるウォレット環境を使うことが重要です。実用的なワークフローとしては、OneKey ウォレットで署名内容とシミュレーション結果を確認しながら、OneKey Perps を利用して分散型の永続先物取引を行う方法が分かりやすい選択肢になります。
OneKey のトランザクションシミュレーション実装
OneKey ウォレットは、トランザクションシミュレーションを主要なセキュリティ機能としてユーザーフローに組み込んでいます。
- 自動実行:署名リクエストを受け取るたびに自動でシミュレーションを実行します。ユーザーが手動で有効化する必要はありません。
- 読みやすい表示:技術的な diff ではなく、「残高変化の概要」として表示するため、技術に詳しくないユーザーでも理解しやすくなっています。
- リスクレベル評価:シミュレーション結果をもとに、取引のリスクを高リスク・不審・通常などに分類し、高リスク操作では警告を表示します。
- EIP-712 解析:構造化署名リクエストについて、owner、spender、value などの重要フィールドを人間が読める形で表示します。
- オープンソース実装:OneKey GitHub リポジトリは公開されており、セキュリティ研究者がシミュレーションロジックの妥当性を検証できます。
OneKey ハードウェアウォレットと組み合わせると、シミュレーション結果をデバイス画面上でも確認できます。これにより、PC 側の表示が改ざんされていたとしても、物理デバイス上で確認する内容との整合性を取りやすくなります。
トランザクションシミュレーションの限界
トランザクションシミュレーションは強力ですが、万能ではありません。主な限界は次のとおりです。
- 状態依存性:シミュレーションは現在のオンチェーン状態に基づきます。実際に実行される時点で価格や残高などの状態が変わっていると、結果が完全には一致しない場合があります。
- 複雑なコントラクトロジック:動的パラメータやオフチェーンデータ、たとえばオラクル価格を使うコントラクトでは、シミュレーション結果が不正確になる可能性があります。
- 時間依存型の攻撃:高度な攻撃コントラクトの中には、シミュレーション呼び出しを検知して正常な結果を返し、実際にブロードキャストされたときだけ悪意ある処理を実行するものもあります。頻繁に見られるものではありませんが、知っておくべきリスクです。
つまり、トランザクションシミュレーションは非常に有用な補助ツールですが、絶対的な安全網ではありません。コントラクトアドレスの確認、承認管理(Revoke.cash などの利用)、操作元サイトの確認と組み合わせることで、より現実的な防御体制を作れます。
その他に確認したい取引安全ツール
トランザクションシミュレーションに加えて、定期的なトークン承認の見直し、公式ドメインの確認、ハードウェアウォレットでの署名確認、少額でのテスト取引なども重要です。特に新しい DApp や見慣れないサイトを利用する場合は、署名前の確認手順を省略しないことが大切です。
よくある質問
Q1:トランザクションシミュレーションに Gas はかかりますか?
いいえ。シミュレーションはローカル環境または RPC ノード上の仮想環境で実行され、オンチェーン取引は発生しません。そのため Gas は消費しません。Gas が発生するのは、最終的にトランザクションを確認し、ネットワークへブロードキャストした場合のみです。
Q2:すべてのウォレットがトランザクションシミュレーションに対応していますか?
いいえ。トランザクションシミュレーションはウォレット側の統合が必要な機能であり、対応状況や品質には差があります。OneKey ウォレットは標準のセキュリティ機能として組み込んでいますが、一部の古いウォレットでは、今でも生の16進数データだけが表示される場合があります。
Q3:シミュレーション結果が正常なら、その取引は必ず安全ですか?
必ずしもそうではありません。前述のとおり、時間依存型の攻撃では、シミュレーション時に正常な結果を返し、実行時に悪意あるロジックを発動する可能性があります。また、シミュレーション結果が正確であっても、ユーザー自身が意図を誤解したまま承認してしまうケースは防げません。自分が何をしているのか理解することが、セキュリティの中心です。
Q4:Hyperliquid で取引するとき、毎回ポジション作成前にシミュレーションを見るべきですか?
公式アプリからの通常操作であれば、シミュレーションは主に確認用の参考情報になります。ただし、新しいサイトや新しい DApp からの操作、または表示結果が想定と違う署名リクエストについては、必ずシミュレーション結果を確認すべきです。「新しい送信元では必ずシミュレーションを見る」という習慣は、合理的な安全対策です。
Q5:トランザクションシミュレーションで MEV ボットのフロントランニングを防げますか?
直接防ぐものではありません。トランザクションシミュレーションが主に解決するのは、署名内容の可読性と安全性の問題です。ただし、シミュレーションで予想されるスリッページを確認することで、より適切なスリッページ許容値を設定し、大きなスリッページによる不利な結果を間接的に減らすことはできます。
まとめ:署名前に、まずシミュレーションで確認する
取り消しが難しいブロックチェーンの世界では、「後悔」しても実際の救済につながらないことが多くあります。トランザクションシミュレーションは、署名操作に確認用のミラーを追加する機能です。ハードウェアウォレットの確認ボタンを押す前に、自分が何を承認しようとしているのかを見える形にしてくれます。
OneKey ウォレットをダウンロードすれば、内蔵のトランザクションシミュレーションと署名解析機能を追加設定なしで利用できます。さらに OneKey Perps を使えば、分散型の永続先物取引でも、署名内容を確認しながら取引フローを進められます。
リスクを理解したうえで、まずは OneKey を試し、OneKey Perps での取引時にも署名前の確認を習慣にしてください。
リスクに関する注意:本記事は教育目的の情報であり、投資助言、法律・税務助言、または安全性の保証ではありません。トランザクションシミュレーションには技術的な限界があり、すべての悪意ある取引を完全に防げるものではありません。暗号資産取引には高い市場リスクがあり、オンチェーン資産の損失は通常不可逆です。関連するリスクを十分に理解したうえで、ご自身の判断と責任で慎重に操作してください。



