Web3.py使っていて出たエラー

スポンサーリンク

PythonでDifiのBotを作ったときにWeb3関連で出たエラーと自分用メモ。

 

スポンサーリンク

エラーと対応

USDCの残高表示をしようとした場合に出力。

ABIファイルの内容に該当の関数がない。ABIファイルが間違っている。

↓の「Read as Proxy」から書かれているアドレスへ移動。

USD Coin (PoS) (USDC) Token Tracker | PolygonScan
USD Coin (PoS) (USDC) Token Tracker on PolygonScan shows the price of the Token .00, total supply 714,278,865.647878, number of holders 389,477 and updated in...

↓これ

Contract Address 0xdd9185db084f5c4fff3b4f70e7ba62123b812226 | PolygonScan
The Contract Address 0xdd9185db084f5c4fff3b4f70e7ba62123b812226 page allows users to view the source code, transactions, balances, and analytics for the contrac...

 

通貨の残高を紹介しようとした際に発生。

通貨のコントラクトアドレスを指定できていなかった。

 

購入、売却処理で発生。原因は様々だと思われる。トランザクションが規定時間内に通らなかった。

私の場合、

①売却しようとしている通貨がウォレットに残高が不足している

②対象通貨をApproveできていない。

③Approve済みの通貨に対して再度Approveしようとしたとき。

などだったと思う。処理の内容を改善するしか無い。

③ではApprove済みかどうかを事前確認できればいいが、方法がわからない…。

 

 

以下を参照した。
https://github.com/ethereum/web3.py/issues/740
https://stackoverflow.com/questions/57335994/trying-to-call-balanceof-function-in-ethereum-using-web3-py-library-but-getting

次のように、いつもtoChecksumAddress関数を利用して格納したほうが良さそう。
「dbAddress = web3.toChecksumAddress(‘アドレス’)」

21/10/17追記 toChecksumAddress関数を使っていても以下のLPアドレスを取得するところでエラーとなることがあった。

lpAddr = QuickSwapFactoryContract.functions.getPair( USDC, JPYC ).call()

仕方が無いのでちょくにアドレスを入力することでエラーを回避。

lpAddr=web3.toChecksumAddress(“0x205995421C72Dc223F36BbFad78B66EEa72d2677”)

アプローブ時や売買時の関数でガス代を安く指定しすぎ?

error: replacement transaction underpriced
Im trying to send a raw transaction using web3 to ropsten testnet and Im getting this error: replacement transaction underpriced where sometimes my tx works...

ガス代を増やしたところ、うまくいくようになった。

適切なガス代を調べる方法は、わからない…。

 

トランザクションが失敗し、トランザクションを確認すると、「Status:」が

「Fail with error ‘TransferHelper: TRANSFER_FROM_FAILED’」になっている。

 

スクリプト上は異常終了せず、トランザクションの結果として異常終了のステータスが返される。

Polygon (MATIC) Blockchain Explorer
PolygonScan allows you to explore and search the Polygon blockchain for transactions, addresses, tokens, prices and other activities taking place on Polygon (MA...

でトランザクションを確認したところ、上図のような状態。正直何もわからない。

今回の場合、

①Matic(ガス代)がウオレットにない

②スワップしようとしている通貨残高がウォレットに無い。

③スワップする通貨の数量指定が間違っている

④指定の通貨がアプローブできていない

があったのではと思われる。

今回原因はわかったものの、明示的にどこかに書いてほしい。

トランザクションのステータスコードから判別ができるかもしれないが、

今のところはわからない…。

③について補足すると、

取引所のルーターコントラクトアドレスの「swapExactTokensForTokens」ファンクションに指定する「amountIn」引数に指定する数量については、通貨により桁数が決められている。

すべて「Wei」の数で指定するものと思っていたので、小数点以下の非常に小さな数を指定してしまっていた。

Ethereumについての記事だが、以下が参考になった。残高取得の項にて小数点以下の桁数を取得して計算している。

[ERC20トークン]web3の使い方とサンプルコード - Qiita
はじめに ethereumやそのトークンにアクセスするためのWebAPIライブラリといえばweb3ですよね。 最近だいぶこいつと仲良くなったので、備忘録として使い方をメモしておきます。 イーサリアムネットワークにアクセスする部...

④について補足すると、

以下のURLに記載があった。

Fail with error 'TransferHelper: TRANSFER_FROM_FAILED' · Issue #46 · Nafidinara/bot-pancakeswap
Hi there. getting "Fail with error 'TransferHelper: TRANSFER_FROM_FAILED'" error while sending transactions along with message " Warning!...

別のtokenではありますが、

Check if you have been approve your wbnb

wbnbを承認したかどうかを確認します

僕の事例にも合致していました。

 

7

アプローブ処理時に発生。原因不明。

すでにアプローブされていたから?かもしれない。

GUIから対象通貨をスワップしてみたが、アプローブするかきかれなかった。

ネットで検索すると、nonce値をひとつづつ上げていくとあったが、

試してみても状況変わらず。

→よくよく確認したところ、指定した秘密鍵が間違っていた。馬鹿なのか?馬鹿なんですね。

8

インターネットにつながっていなくて、RPCサーバに接続できなかったときに発生。当然接続して再実施。

 

スポンサーリンク
Python 仮想通貨 技術的なこと 雑記帳
Heywaをフォローする
Awesomeのある日々を求めて

コメント

タイトルとURLをコピーしました