ユーザーガイド: トランザクションと失敗したトランザクション
Does this article need to be translated?
Submit translations, corrections, and suggestions on GitHub, or reach out on our Community forums.
仮想通貨やweb3は初めてですか?
MetaMask Learnで、web3を初めて使う人のために特別に設計された分かりやすい学習体験を提供しています。 完全無料で多言語対応しており、シミュレーション機能など、MetaMaskに慣れるための便利なツールが用意されています。
この記事は、トランザクションと、トランザクションが失敗する原因に関する説明およびリソースへのリンク、さらには、よくあるトランザクションの失敗シナリオとその対処方法についてのリンクで構成されています:
ブロックチェーントランザクションの仕組み
パブリックブロックチェーンネットワークでの「トランザクション」と言うと、通常2つのアドレス間のやり取りを意味します。言い換えれば、代替性または非代替性トークン、あるいは他の暗号資産をあるアドレスから別のアドレスに「送る」ことを言います。 また、「内部トランザクション」と呼ばれるトランザクションもあります。これは、スマートコントラクト間で行われるやり取りで、この記事では大方対象外となっています。
詳細をご希望ですか?
ブロックチェーンネットワークやその一般的な仕組みについての詳細は、こちらの紹介記事をご覧ください。見慣れない言葉にお困りの場合は、用語集も用意しています。
正確には、実際に何かがどこかに_送られる_わけではありません。 イーサリアムのようなスマートコントラクト対応のブロックチェーンネットワークには、さまざまなコンポーネントや機能があります。 その1つは、「コンピューター」と呼ばれるものです。つまり、Ethereum仮想マシン (EVM) で、プログラム (「スマートコントラクト」) を実行できます。 しかし、システムの屋台骨となるのは、_分散型台帳_です。片方にすべての個別のイーサリアムウォレットアドレスが記載され、それぞれのアドレスにそのアドレスが持つ暗号資産の種類用の列があるスプレッドシートを想像してください。
例を用いて説明しましょう。 GuillaumeがDoloresにトランザクションを送りたいとします。 Guillaumeは自分のアカウントに1.36ETH持っており、Doloresに0.5ETH送金する予定です。 弱気相場でも、Doloresにとっては素敵な日になりそうですね。
Guillaumeは自分のMetaMaskウォレットを開き、Doloresのアドレスを入力し、支払うのに問題のないガスパラメーターを設定し、「送金」を押します。
この時点で、トランザクションは、ローカルメモリプール、あるいは_ローカルメムプール_というローカルの一時的な保留ステータスに入ります。 その後トランザクションはネットワークの最寄りのノードに「拾われ」、Guillaumeのガス設定によってトランザクションの優先順位が決まり(Guillaumeがガス1単位ごとに支払う手数料が高ければ高いほど、トランザクションが迅速に処理されます)、ネットワークの他のノードに伝えられます。 ノードは、Guillaumeが支払いに十分なETHを持っていることを確認する作業を行い、実際に「トランザクション」を実行します。これにより台帳が変更され、Guillaumeの残高から0.5が引き落とされ、Doloresの残高に0.5が入金されます。
「動く手は、書き込んだ後、移動していく」。ETHは実際にネットワークを通じて瞬時に移動したわけではありません。GuillaumeのコンピューターからDoloresのMetaMaskの受信トレイにメールが送られたりしたわけでもありません。 Guillaumeはネットワークに、自分のアカウントから引き落としてDoloresに入金するための要求を送信しました。この要求は、MetaMaskを通じて秘密鍵で認証されており、ネットワークのプロトコルに組み込まれた確認プロセスの後で、この要求が実行されました。
トランザクションとはそれだけのことです。あるアドレスから別のアドレスに何かを再割り当てするための、台帳へのリクエストに過ぎません。
うまくいかなかった場合
さまざまな理由で、うまくいかないことがあります。 それが「ソフトウェアの本質」というものです。MetaMaskにはバグがありますし、使用しようとしているネットワークで何か間違って設定されていることもあります。また、接続エラーも考えられます。
**よくある問題には、トランザクションのコストを少なくしようとして、ユーザーがガスリミットを非常に低く設定しているというものがあります。**そしてネットワークが非常に混雑していて、どのブロックにもそのような「安い」トランザクションを引き受けるスペースが、時には長時間ない状態が続きます。その結果、このトランザクションは「古く」なってしまい、ユーザーはキャンセルせざるを得なくなります。
トランザクションを送信したのに完了していない場合は、MetaMaskにステータスが「保留中」と表示されます。
送信したトランザクションが失敗した場合、最も多い原因は、ガス不足です。つまり「ガス欠」です。そのトランザクションにかかるガスのコストが、ガス価格を乗じると、ネットワークのネイティブ通貨の総額がウォレットに入っている額より大きくなってしまったのが原因です。
情報
ガスの計算についての詳細は、こちらのガスガイドをご覧ください。
これが起こる理由は多くありますが、1つ考慮しておくべきことは、実行しようとしているトランザクションは何かということです。 ネットワークトラフィックのピーク時にNFTをミントするには、大量にガスを消費します。新しい、あるいは実験的なトランザクションを試そうとしているのであれば、実際のライブネットワーク手数料を支払う前に、テストネットワークで試す価値があるかもしれません。
問題の解決
重要な要因その1: ローカルまたはネットワークへのブロードキャスト
トランザクションの問題を診断する際は、特にトランザクションが保留になってしまった場合、トランザクションがまだローカルのメムプールにあるのか、それともすでにネットワークにあるが何らかの理由で止まっているのかを確認する必要があります。 ローカルメムプールにある場合、解決するのは簡単で、自分のMetaMaskウォレットをロックし、ロックを解除するだけです(これを行う前に、パスワードを知っていて、シークレットリカバリーフレーズがバックアップされていることを必ず確認してください)。 ネットワークで止まっている場合、解決がより複雑になる可能性があります。
これらの問題を解決するための詳細については、以下のリンクをご覧ください。
重要な要因その2: ナンス
この言葉は、いくつか異なることを意味する可能性があります。 これは「number only used once (1回のみ使用される番号)」の短縮形であり、このコンテキストでは、送信元アドレスが行った最初のトランザクションから始まる、「トランザクション番号」のようなものです。 例えば、同じウォレットアドレスで、MetaMaskの異なるインスタンスから異なる2つのトランザクションを同時に開始しようとする場合、非常に大きな問題となります。 **アドレスのトランザクションは、ナンスに応じて昇順でなければなりません。**ただし、ナンスはトランザクションをスタックさせてしまう可能性がある一方で、トランザクションをスタックした状態から解放するための鍵にもなります。
このテクニックの詳細は、こちらをご覧ください。
次のステップ
失敗した、または保留中のトランザクションがある場合は、次のリソースをご利用ください。
保留中トランザクションをスピードアップまたはキャンセルする方法
トランザクションが「ガス欠」エラーで失敗したのはなぜですか? 修正方法
FAQ
質問: ウォレットのあるアカウントに、保留中あるいは順番待ちのトランザクションがあります。 同じウォレットの別のアカウントから別のトランザクションを開始することはできますか?
回答: はい、できます。 ナンスはウォレットごとではなく、アカウントごとにカウントされています。