1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Error: cannot estimate gas に遭遇したらここを見る

Last updated at Posted at 2023-12-01

はじめに

EVMチェーンにトランザクションを送ろうとした時、
謎の cannot estimate gas エラーに遭遇したこと
あなたもありませんか?

image.png

具体的なエラー理由も特に出てこないし、どう直していいかわからない。。
そんな経験でデスクを濡らしたことのある人も多いかと思います。

もうそんな思いをしなくてもいいために、解決法をまとめました。

チェック項目一覧

コントラクトアドレスとABIは正しいか

そもそも存在しないアドレスを指定してました、とかよくあります。
特にプロキシ利用時は下記注意です。

  • Implementationでは無く、Proxyコントラクトを指定しているか
  • ABIが最新のImplementationのものになっているか

関数セレクタは正しいか

hoge(uint256)hoge(uint256,uint256)は違う関数です。
同じ関数名でも、引数の型が完全に一致していないと呼び出せません。

特に引数に構造体を指定する時は完全一致しているか念入りに確認しましょう。

RPC Nodeサービスを利用しているか

ChainListとかにのってるパブリックRPC URLを使用すると繋がらないことがよくあります。これ知らなくてQA前に徹夜した

無料でも一定回数は使えるRPCノードサービスがあるので、基本はそれ使ってください。
個人的には ChainStack がコスパよくておすすめ。

あと、wss://ではじまるURLを使ってる場合はhttps://のものに直すと安定したりします。

チェーン指定は正しいか

メインネットとテストネットでIDが違います。
ChainListで確認してください。

RPC URLもチェーン毎に異なるので注意。

GasLimitを一旦30000000にしてみる

call時のgasLimitはデフォルトで 21000 が指定されていますが、
割と簡単にオーバーしがちです。

開発中であれば、{ GasLimit: 30000000 } に変更して通るか試し、
その後適切に調整していくと楽です。

Gasが十分にあるか

Gasを支払うための残高が不足している可能性もあります。

エラートランザクションのトレースを見てRevert理由を確認

トランザクションの途中でRevertしている可能性もあります。
Foundryを利用している場合は、
cast runコマンドを利用するとトランザクションのトレースが見れます。

トレースのエラー箇所に0xa1b2c3d4のようなエラーセレクタが出てくるので、
先頭の 0x を除いた英数字をABI内で検索すれば
エラー内容を特定することができます。

参考:

まとめ

Dapps開発はどんどん便利になっていっています。
これからも情報を出し合って、日本に風穴を開けるWeb3をどんどん盛り上げていけたら嬉しいです!

それでは良い開発ライフを⭐︎

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?