当前位置: 首页 > news >正文

前端调用合约如何避免出现transaction fail

前言: 作为开发,你一定经历过调用合约的时候发现 gas fee 超出限制,但是不知道报了什么错。这个时候一般都是触发了require错误合约校验。对于用户来说他不理解为什么一笔交易会花费如此大的gas,那我们作为开发如何尽量避免这种情况的产生呢?

 

一、static call

        ethersJS V5 文档的解释比 V6更清晰。 我们直接来看官方文档解释:

Rather than executing the state-change of a transaction, it is possible to ask a node to pretend that a call is not state-changing and return the result.

This does not actually change any state, but is free. This in some cases can be used to determine if a transaction will fail or succeed.

         我们可以看到,这是一种不执行交易的状态更改,而是要求节点假装调用没有状态更改并返回结果的调用。这实际上并不改变任何状态,而且是免费的。在某些情况下,这可用于确定交易是失败还是成功。简单举个例子:

// 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库 

        如果你使用的是wagmi库,它已经替我们封装好了调用方法。举个栗子

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

总结

        通过上面的方法,可以大大避免用户触发 transcatin expected to fail 的报错。可以算作一个优化前端交互体验的加分点。

http://www.lryc.cn/news/102120.html

相关文章:

  • 选择器的使用
  • 软考A计划-系统集成项目管理工程师-项目干系人管理-上
  • F5 LTM 知识点和实验 2-负载均衡基础概念
  • 安全学习DAY08_算法加密
  • OpenCloudOS 与PolarDB全面适配
  • 如何在Linux系统中使用yum命令安装MySQL
  • 在Ail Linux中手动配置IPv6
  • TCP如何保证服务的可靠性
  • 【云原生系列】openstack搭建过程及使用
  • 无涯教程-jQuery - Menu组件函数
  • Django用户登录验证和自定义验证类
  • json-server详解
  • MacOS Monterey VM Install ESXi to 7 U2
  • 哈工大计算机网络课程网络安全基本原理详解之:消息完整性与数字签名
  • K8s:K8s 20个常用命令汇总
  • DHCP防护原理
  • leetcode2434. 使用机器人打印字典序最小的字符串 出栈顺序 贪心+栈
  • 【程序设计】一文讲解程序设计目标:高内聚,低耦合
  • nginx mirror代码分析
  • Python代理模式介绍、使用
  • 《MySQL45讲》笔记—索引
  • Android usb host模式通信示例
  • 开源Blazor UI组件库精选:让你的Blazor项目焕然一新!
  • MATLAB RANSAC圆柱体点云拟合 (28)
  • 【AI】《动手学-深度学习-PyTorch版》笔记(七):自动微分
  • vuejs源码阅读之代码生成器
  • 【MySQL】视图(十)
  • 面试手写实现Promise.all
  • TCP网络通信编程之字符流
  • 佰维存储面向旗舰智能手机推出UFS3.1高速闪存