ユーザーガイド:トランザクションと失敗したトランザクション
暗号通貨やweb3は初めてですか?
MetaMask Learnで、web3を初めて使う人のために特別に設計された分かりやすい学習体験を提供しています。完全に無料で、複数の言語で利用することができ、MetaMaskに慣れるためのシミュレーションなどの 便利なツールも含まれています。
この記事は、トランザクションとその失敗の原因に関する説明および資料へのリンク、さらには、よくあるトランザクションの失敗のシナリオとその対処方法についてのリンクで構成されています。
ブロックチェーントランザクションを解剖する
パブリックブロックチェーンネットワークで「トランザクション」について言及する場合、通常は、2つのアドレス間のやり取りについて話しています。言い換えれば、ファンジブルトークンであろうとなかろうとトークンを、あるいは他の暗号資産をあるアドレスから別のアドレスに「送信」することを言います。また、「内部トランザクション」と言及されるトランザクションもあります。これは、スマートコントラクト間で行われるやり取りで、この記事の対象外となっています。
詳細については、こちらをご覧ください。
ブロックチェーンネットワークやその一般的な機能のしくみについての詳細は、こちらの紹介記事をご覧ください。見慣れない言葉にお困りの場合は、用語集も用意しています。
正確に言うと、実際には何もどこにも送信されません。Ethereumのようなスマートコントラクト対応のブロックチェーンネットワークには、さまざまなコンポーネントや機能があります。その1つは、「コンピュータ」と呼ばれるものです。つまりEthereum Virtual Machine(EVM)で、プログラム(「スマートコントラクト」)を実行できます。しかし、システムの「バックボーン」となる部分は、分散型台帳です。片方にすべての個別のEthereumウォレットアドレスが記載され、それぞれのアドレスにアドレスが持つ暗号資産の種類用の列があるスプレッドシートを想像してください。
例を用いて説明しましょう。GuillaumeがDoloresにトランザクションを送信したいとします。Guillaumeは、自分のアカウントに1.36ETH持っており、Doloresに、0.5ETH送信する予定です。弱気相場でも、Doloresにとって素敵な日になりそうですね。
Guillaumeは、自分のMetaMaskウォレットを開き、Doloresのアドレスを入力し、支払うのに問題のないガスパラメータを設定し、「send」(送信)を押します。
この時点で、トランザクションは、ローカルメモリプール、あるいはローカルメムプールとして知られているローカルの一時的な保持状態に入ります。このトランザクションは、その後ネットワーク上の最も近いノードによって「ピックアップ」されます。Guillaumeのガス設定に応じて、トランザクションが優先されることになり(Guillaumeのガスユニットあたりの支払額が多いほど、トランザクションはより速く処理されます)、そして、ネットワーク上の他のノードに伝播されます。ノードは、Guillaumeが支払うETHを持っていることを確認する作業を行い、実際に「トランザクション」を実行します。そして台帳が変更されます。Guillaumeの残高から0.5が引き落とされ、Doloresの残高に0.5が入金されます。
「動く手は、書き込んだ後、移動していく」。ETHはネットワークを通じて瞬時に移動したわけではありません。GuillaumeのコンピュータからDoloresのMetaMaskの受信トレイあるいは同様のものに送られたメールとは異なります。Guillaumeがリクエストを送信しました。これはMetaMaskを通じて秘密鍵によって認証され、**ネットワークに送信され、彼のアカウントから差し引かれ、Doloresのアカウントに追加されます。ネットワークプロトコルにプログラムされた認証プロセスを経たのちに、実行されます。
トランザクションとはそれだけのことです。あ るアドレスから別のアドレスに何かを再割り当てするための、台帳へのリクエストのことです。
うまくいかなかった場合
さまざまな理由で、うまくいかないことがあります。しばしば、それらが「ソフトウェアの本質」というものです。MetaMaskにはバグがありますし、使用しようとしているネットワークでもなにか間違って設定されていることがあります。また、接続エラーもあります。
**共通する問題には、トランザクションで支払いを少なくしようとして、ユーザーがガスリミットを大変低く設定するというものがあります。**そしてネットワークが大変混雑して、そのような「安い」トランザクションを引き受けるスペースが、時には長時間どのブロックにもない状態が続きます。その結果、トランザクションは「古く」なってしまい、ユーザーはキャンセルせざるを得なくなりま す。
トランザクションを送信したにもかかわらずファイナライズされない場合は、MetaMask上で状態が「pending」(保留)と表示されます。
トランザクションに失敗した場合、最も多い原因は、ガスの不足です。言い換えれば「ガス欠」です。そのトランザクションにかかるガスのコストがガス価格を乗じると、ネットワークのネイティブ通貨の総額がウォレットに入っている額より大きくなってしまったのが原因です。
インフォメーション
ガスの計算についての詳細は、こちらのガスガイドをご覧ください。
これが起こる理由は多くありますが、一つ考慮しておくべきことは、実行しようとしているトランザクションは何かということです。ネットワークトラフィックのピーク時にNFTをミントするには、大量にガスを消費します。もし、新しいあるいは実験的なトランザクションを試そうとしているのであれば、実際のライブネットワーク代を支払う前に、テストネットワークで試す価値があるかもしれません。