【区块链】走进web3的世界-常用工具方法封装(基于wagmi)

这篇具有很好参考价值的文章主要介绍了【区块链】走进web3的世界-常用工具方法封装(基于wagmi)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

@wagmi/core,区块链,web3

1、创建client

 


import { createClient, configureChains, mainnet, goerli } from 'wagmi'
import { bsc, bscTestnet } from 'wagmi/chains'

// 申请的aplKey
const AlchemyApiKey = '7EfveD9qe2JYumi9OIJJYzmDrELjvFRl'

// 网络配置
const { chains, provider, webSocketProvider } = configureChains(
    [goerli, mainnet, bscTestnet, bsc],
    [alchemyProvider({ apiKey: AlchemyApiKey }), publicProvider()]
)

// 创建连接
export const client = createClient({
    autoConnect: true,
    connectors: [new MetaMaskConnector({ chains })],
    provider,
    webSocketProvider
})

2、切换网络


import { switchNetwork, getNetwork } from '@wagmi/core'

/**
 *
 * @param chainId 需要切换的网络
 * goerli:5
 * mainnet:1
 * bscTestnet:97
 * bsc:56
 */
export const handleSwitchNetwork = async (chainId: number = 56) => {
    const {
        chain: { id }
    } = getNetwork()
    if (id == chainId) {
        return true
    }
    let isSwitch = true
    await switchNetwork({
        chainId
    }).catch(e => {
        isSwitch = false
    })
    return isSwitch
}

// 使用方式
export BNB_CHAIN_ID = 5
import { BNB_CHAIN_ID } from '@/constants'
handleSwitchNetwork(BNB_CHAIN_ID)

3、获取gas费用,并转换为eth


import { ethers } from 'ethers'
import { getProvider } from '@wagmi/core'

export const getGasPrice = async () => {
    const providers = getProvider()
    const result = await providers.getGasPrice()
    return ethers.utils.formatUnits(result.toString())
}

4、判断钱包是否登录


import { getAccount } from '@wagmi/core'

/**
 * 判断钱包有没有登录
 */
export const checkWalletConnect = () => {
    // 先判断一下钱包有没有登录,在详情页可以看到
    const { isConnected } = getAccount()
    if (!isConnected) {
        return false
    }
    return true
}

5、创建签名


import { signMessage } from '@wagmi/core'

/**
 * 给字符串签名
 * @param message 签名的字符串
 * @returns 签名后的字符串
 */
export const getSigMessage = async message => {
    const signature = await signMessage({
        message
    })
    return signature
}

6、获取gas费用文章来源地址https://www.toymoban.com/news/detail-853066.html

import { getProvider } from '@wagmi/core'

// 获取单价的gas费用
export const getGasPrice = async () => {
    const providers = getProvider()
    const result = await providers.getGasPrice()
    console.log('getGasPrice...', getGasPrice)
    return result.toString()
}

import { utils } from 'ethers'
const { formatEther } = utils
/**
 * 获取完整的gas费用
 * @param abiType 合约对应的abi文件
 * @param funcName 合约中具体的方法
 * @param address 合约地址
 * @returns 预估的gas费用 string类型
 */
export const estimateGasService = async (abiType, funcName: string, address: Address): Promise<string> => {
    const iface = new Interface(abiType)
    const sigHash = iface.getSighash(funcName)
    console.log('sigHash...', sigHash)
    const provider = getProvider()
    const gasPrice = await provider.getGasPrice()
    console.log('gasPrice....', formatEther(gasPrice))
    const gas = await provider.estimateGas({
        to: address,
        data: sigHash,
        value: parseEther('1')
    })
    console.log('gas...', gas)
    return formatEther(gasPrice.mul(gas))
}

// 使用方式
import { estimateGasService } from '@/web3/common'
import WethBalanceAbi from '@/web3/eth/WethBalanceAbi.json'
import { Address } from 'abitype'

const data = await estimateGasService(WethBalanceAbi, 'deposit', wethAddress as Address)

// WethBalanceAbi.json
[
    {
        "constant": true,
        "inputs": [],
        "name": "name",
        "outputs": [
            {
                "name": "",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "guy",
                "type": "address"
            },
            {
                "name": "wad",
                "type": "uint256"
            }
        ],
        "name": "approve",
        "outputs": [
            {
                "name": "",
                "type": "bool"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "totalSupply",
        "outputs": [
            {
                "name": "",
                "type": "uint256"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "src",
                "type": "address"
            },
            {
                "name": "dst",
                "type": "address"
            },
            {
                "name": "wad",
                "type": "uint256"
            }
        ],
        "name": "transferFrom",
        "outputs": [
            {
                "name": "",
                "type": "bool"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "wad",
                "type": "uint256"
            }
        ],
        "name": "withdraw",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "decimals",
        "outputs": [
            {
                "name": "",
                "type": "uint8"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "",
                "type": "address"
            }
        ],
        "name": "balanceOf",
        "outputs": [
            {
                "name": "",
                "type": "uint256"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [],
        "name": "symbol",
        "outputs": [
            {
                "name": "",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "dst",
                "type": "address"
            },
            {
                "name": "wad",
                "type": "uint256"
            }
        ],
        "name": "transfer",
        "outputs": [
            {
                "name": "",
                "type": "bool"
            }
        ],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [],
        "name": "deposit",
        "outputs": [],
        "payable": true,
        "stateMutability": "payable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "",
                "type": "address"
            },
            {
                "name": "",
                "type": "address"
            }
        ],
        "name": "allowance",
        "outputs": [
            {
                "name": "",
                "type": "uint256"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "payable": true,
        "stateMutability": "payable",
        "type": "fallback"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "src",
                "type": "address"
            },
            {
                "indexed": true,
                "name": "guy",
                "type": "address"
            },
            {
                "indexed": false,
                "name": "wad",
                "type": "uint256"
            }
        ],
        "name": "Approval",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "src",
                "type": "address"
            },
            {
                "indexed": true,
                "name": "dst",
                "type": "address"
            },
            {
                "indexed": false,
                "name": "wad",
                "type": "uint256"
            }
        ],
        "name": "Transfer",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "dst",
                "type": "address"
            },
            {
                "indexed": false,
                "name": "wad",
                "type": "uint256"
            }
        ],
        "name": "Deposit",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "src",
                "type": "address"
            },
            {
                "indexed": false,
                "name": "wad",
                "type": "uint256"
            }
        ],
        "name": "Withdrawal",
        "type": "event"
    }
]

到了这里,关于【区块链】走进web3的世界-常用工具方法封装(基于wagmi)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Web3区块链游戏:创造虚拟世界的全新体验

    Web3区块链游戏:创造虚拟世界的全新体验

    随着区块链技术的不断发展,Web3区块链游戏正逐渐崭露头角,为玩家带来了全新的虚拟世界体验。传统游戏中的中心化结构和封闭经济体系已经被打破,取而代之的是去中心化的游戏环境和真实所有权的数字资产。本文将深入探讨Web3区块链游戏的特点、优势以及对玩家和游

    2024年02月21日
    浏览(15)
  • 常用Web安全工具

    Nessus   号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库。Kali Linux预装了许多渗透测试软件,包括nmap 、Wireshark 、John the Ripper,以及Aircrack-ng.[2] 用户可通过硬盘、live CD或live USB运行Kali

    2024年02月14日
    浏览(11)
  • 深入了解Web3:区块链技术如何改变我们的数字世界

    深入了解Web3:区块链技术如何改变我们的数字世界

    在过去的几年中,Web3和区块链技术逐渐成为了技术界和社会大众关注的焦点。从初始的加密货币到现在的去中心化应用(DApps)和智能合约,区块链技术已经开始改变我们的数字世界的面貌。在本文中,我们将深入探讨Web3和区块链技术,以及它们如何改变我们的生活和工作方

    2024年04月22日
    浏览(19)
  • WEB各类常用测试工具

    WEB各类常用测试工具

    1、Jest 知名的 Java 单元测试工具,由 Facebook 开源,开箱即用。它在最基础层面被设计用于快速、简单地编写地道的 Java 测试,能自动模拟 require() 返回的 CommonJS 模块,并提供了包括内置的测试环境 Dom API 支持、合理的默认值、预处理代码和默认执行并行测试在内的特性。通过

    2024年02月02日
    浏览(10)
  • 常用Web安全扫描工具合集

    常用Web安全扫描工具合集

      漏洞扫描是一种安全检测行为,更是一类重要的网络安全技术,它能够有效提高网络的安全性,而且漏洞扫描属于主动的防范措施,可以很好地避免黑客攻击行为,做到防患于未然。那么好用的漏洞扫描工具有哪些? 答案就在本文! 1、AWVS Acunetix Web Vulnerability Scanner(简称

    2024年04月13日
    浏览(11)
  • Python速查表;腾讯大佬的AIGC设计应用汇总;这个世界需要10亿开发者;67个最常用AI工具清单 | ShowMeAI日报

    Python速查表;腾讯大佬的AIGC设计应用汇总;这个世界需要10亿开发者;67个最常用AI工具清单 | ShowMeAI日报

    👀 日报周刊合集 | 🎡 生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 随着AIGC浪潮的兴起,越来越多小伙伴尝试着使用 GPT 类工具开发小程序、网页、小游戏等应用,也意识到 Python 编程是绕不过去知识门槛。 推荐一份 ShowMeAI 制作的 Pyhton 速查表,涵盖了 Python 3 编

    2024年02月06日
    浏览(13)
  • 5种常用Web安全扫描工具,快来查漏补缺吧!

    漏洞扫描是一种安全检测行为,更是一类重要的网络安全技术,它能够有效提高网络的安全性,而且漏洞扫描属于主动的防范措施,可以很好地避免黑客攻击行为,做到防患于未然。那么好用的漏洞扫描工具有哪些? 答案就在本文! 1、AWVS Acunetix Web Vulnerability Scanner(简称

    2024年02月08日
    浏览(9)
  • 解读元宇宙:映射现实的虚拟平行世界 关注VR AR 区块链Web3.0机会

    解读元宇宙:映射现实的虚拟平行世界 关注VR AR 区块链Web3.0机会

    元宇宙——理想状态是自发无边际的社会体验 。 公众号:领航员kol 阅读我的原创文章: 微博:牛熊领航员kol 阅读我的原创文章: 元宇宙的英文叫做MetaverseMetaverse,是一个映射现实世界的虚拟平行世界,​通过具象化的3D表现方式,给人们提供一种沉浸式、真实感的数字虚

    2024年02月02日
    浏览(17)
  • HuTool工具类常用方法汇总

    文档地址 引入需要依赖 1、DateUtil: 日期时间工具类 1.1、Date、long、calendar之间的相互转换 1.2、字符串转日期 1.3、格式化日期输出 1.4、获取Date对象的某个部分 1.5、开始时间和结束时间(可以按日、按周、按月) 1.6、日期时间偏移 针对当前时间、提供了简化的偏移方法(例如,

    2024年02月01日
    浏览(26)
  • java项目常用工具jar包方法整理

    一、commons-lang3 1、 字符串,数字,日期,数组等工具类 StringUtils 字符串工具类 StringEscapeUtils NumberUtils 数字工具类 ArrayUtils 数组工具类 RandomUtils 随机数工具类 RandomStringUtils 随机字符串工具类 DateUtils 日期工具类 DateFormatUtils时间格式化 DurationFormatUtils时间段格式化 StopWatch 秒表

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包