ユーザーガイド: トランザクションと失敗したトランザクション
仮想通貨やweb3は初めてですか?
MetaMask Learnで、web3を初めて使う人のために特別に設計された分かりやすい学習体験を提供しています。 完全無料で多言語対応しており、シミュレーション機能など、MetaMaskに慣れるための便利なツールが用意されています。
この記事は、トランザクションと、トランザクションが失敗する原因に関する説明およびリソースへのリンク、さらには、よくあるトランザクションの失敗シナリオとその対処方法についてのリンクで構成されています:
Anatomy of a blockchain transaction
パブリックブロックチェーンネットワークでの「トランザクション」と言うと、通常2つのアドレス間のやり取りを意味します。言い換えれば、代替性または非代替性トークン、あるいは他の暗号資産をあるアドレスから別のアドレスに「送る」ことを言います。 また、「内部トランザクション」と呼ばれるトランザクションもあります。これは、スマートコントラクト間で行われるやり取りで、この記事では大方対象外となっています。
詳細をご希望ですか?
ブロックチェーンネットワークやその一般的な仕組みについての詳細は、こちらの紹介記事をご覧ください。見慣れない言葉にお困りの場合は、用語集も用意しています。
正確には、実際に何かがどこかに_送られる_わけではありません。 イーサリアムのようなスマートコントラクト対応のブロックチェーンネットワークには、さまざまなコンポーネントや機能があります。 その1つは、「コンピューター」と呼ばれるものです。つまり、Ethereum仮想マシン (EVM) で、プログラム (「スマートコントラクト」) を実行できます。 The backbone of the system, however, is a distributed ledger: imagine a spreadsheet that contains, on one side, every single Ethereum account address, and each address has a column for each type of crypto-asset that it holds.
例を用いて説明しましょう。 GuillaumeがDoloresにトランザクションを送りたいとします。 Guillaumeは自分のアカウントに1.36ETH持っており、Doloresに0.5ETH送金する予定です。 弱気相場でも、Doloresにとっては素敵な日になりそうですね。
Guillaume opens up his MetaMask, enters Dolores' address, configures the gas parameters that he's comfortable with paying, and hits'send'.
この時点で、トランザクションは、ローカルメモリプール、あるいは_ローカルメムプール_というローカルの一時的な保留ステータスに入ります。 その後トランザクションはネットワークの最寄りのノードに「拾われ」、Guillaumeのガス設定によってトランザクションの優先順位が決まり(Guillaumeがガス1単位ごとに支払う手数料が高ければ高いほど、トランザクションが迅速に処理されます)、ネットワークの他のノードに伝えられます。 ノードは、Guillaumeが支払いに十分なETHを持っていることを確認する作業を行い、実際に「トランザクション」を実行します。これにより台帳が変更され、Guillaumeの残高から0.5が引き落とされ、Doloresの残高に0.5が入金されます。
「動く手は、書き込んだ後、移動していく」。ETHは実際にネットワークを通じて瞬時に移動したわけではありません。GuillaumeのコンピューターからDoloresのMetaMaskの受信トレイにメールが送られたりしたわけでもありません。 Guillaumeはネットワークに、自分のアカウントから引き落としてDoloresに入金するための要求を送信しました。この要求は、MetaMaskを通じて秘密鍵で認証されており、ネットワークのプロトコルに組み込まれた確認プロセスの後で、この要求が実行されました。
トランザクションとはそれだけのことです。あるアドレスから別のアドレスに何かを再割り当てするための、台帳へのリクエストに過ぎません。
When things go wrong
さまざまな理由で、うまくいかないことがあります。 それが「ソフトウェアの本質」というものです。MetaMaskにはバグがありますし、使用しようとしているネットワークで何か間違って設定されていることもあります。また、接続エラーも考えられます。
**よくある問題には、トランザクションのコストを少なくしようとして、ユーザーがガスリミットを非常に低く設定しているというものがあります。**そしてネットワークが非常に混雑していて、どのブロックにもそのような「安い」トランザクションを引き受けるスペースが、時には長時間ない状態が続きます。その結果、このトランザクションは「古く」なってしまい、ユーザーはキャンセルせざるを得なくなります。
トランザクションを送信したのに完了していない場合は、MetaMaskにステータスが「保留中」と表示されます。
If you sent a transaction, and it failed, the most likely cause is a lack of gas: you "ran out of gas", in other words, the transaction had a cost in gas that, when multiplied by the gas price, resulted in a total amount of the network's native currency that was greater than what you had in your account.
Info
ガスの計算についての詳細は、こちらのガスガイドをご覧ください。
これが起こる理由は多くありますが、1つ考慮しておくべきことは、実行しようとしているトランザクションは何かということです。 ネットワークトラフィックのピーク時にNFTをミントするには、大量にガスを消費します。新しい、あるいは実験的なトランザクションを試そうとしているのであれば、実際のライブネットワーク手数料を支払う前に、テストネットワークで試す価値があるかもしれません。
Fixing the problem
Key Factor #1: local or broadcast to network
トランザクションの問題を診断する際は、特にトランザクションが保留になってしまった場合、トランザクションがまだローカルのメムプールにあるのか、それともすでにネットワークにあるが何らかの理由で止まっているのかを確認する必要があります。 If it is just in your local mempool, the solution could be as simple as locking, and unlocking, your MetaMask (make sure you know your password and have your Secret Recovery Phrase backed up before you do). ネットワークで止まっている場合、解決がより複雑になる可能性があります。
これらの問題を解決するための詳細については、以下のリンクをご覧ください。
Key Factor #2: Nonce
この言葉は、いくつか異なることを意味する可能性があります。 これは「number only used once (1回のみ使用される番号)」の短縮形であり、このコンテキストでは、送信元アドレスが行った最初のトランザクションから始まる、「トランザクション番号」のようなものです。 You can get yourself into real trouble if, for example, you're firing two different transactions from different instances of MetaMask with the same account address at the same time. **アドレスのトランザクションは、ナンスに応じて昇順でなければなりません。**ただし、ナンスはトランザクションをスタックさせてしまう可能性がある一方で、トランザクションをスタックした状態から解放するための鍵にもなります。
このテクニックの詳細は、こちらをご覧ください。
Next steps
失敗した、または保留中のトランザクションがある場合は、次のリソースをご利用ください。
How to send tokens from your MetaMask account
保留中トランザクションをスピードアップまたはキャンセルする方法
トランザクションが「ガス欠」エラーで失敗したのはなぜですか? 修正方法
FAQs
質問: ウォレットのあるアカウントに、保留中あるいは順番待ちのトランザクションがあります。 同じウォレットの別のアカウントから別のトランザクションを開始することはできますか?
回答: はい、できます。 ナンスはウォレットごとではなく、アカウントごとにカウントされています。