フロントエンドがコントラクトを呼び出すときにトランザクションが失敗するのを回避する方法

はじめに: 開発者であれば、契約を呼び出すときにガス料金が制限を超えたという経験があるはずですが、どのようなエラーが報告されたかはわかりません。このとき、通常、エラー契約検証がトリガーされます。ユーザーにとって、彼はトランザクションになぜこれほど大量のガスがかかるのか理解できません。では、開発者としてこの状況を回避するにはどうすればよいでしょうか?

 

一、静的呼び出し

        ethersJS V5 のドキュメントは V6 よりも明確です。公式ドキュメントに直接アクセスして説明しましょう。

トランザクションの状態変更を実行するのではなく、  呼び出しが状態変更ではないふりをして結果を返すようにノードに依頼することができます。

これは実際には状態を変更しませんが、無料です。場合によっては、これを使用して、トランザクションが失敗するか成功するかを判断できます。

         これはトランザクションを実行しない状態変更であり、代わりにノードが状態変更なしで呼び出したふりをして結果を返す必要があることがわかります。これは実際には状態を変更せず、無料です。場合によっては、これを使用して、トランザクションが失敗したか成功したかを判断できます。簡単に例を挙げます。

// call method in v5 docs
// contract.callStatic.METHOD_NAME( ...args [ , overrides ] ) ⇒ Promise< any >

 const preTransaction = async () => { 
   try {
    const preCall = await contract.callStatic.transferFrom(from, to)   
   } catch(e) {
    console.log('err =', e)
  }        
 }

        ehtersV5 ドキュメントのアドレス

        ethers V6 ドキュメント アドレス

二、ワグミ図書館 

        wagmi ライブラリを使用している場合は、呼び出しメソッドがすでにカプセル化されています。栗をあげる

import { prepareWriteContract } from '@wagmi/core'


const simulate = await prepareWriteContract({
      address: contractAddress,
      abi: contractAbi,
      functionName: 'transfer',
      args: [],
})
console.debug('market order simulate =', simulate)

要約する

        上記の方法により、ユーザーは失敗が予想されるトランスカチンのトリガーエラーを大幅に回避できます。これは、フロントエンドのインタラクティブ エクスペリエンスを最適化するためのボーナス ポイントとして数えられます。

おすすめ

転載: blog.csdn.net/qq_31915745/article/details/131997405