将 Web3Modal 整合到 dApp 中
导言
Web3Modal是一个简单易用的库,可帮助开发人员通过简单、可定制的配置在其 dApp 中添加对多个提供商的支持。 它让连接钱包、执行交易和管理账户变得简单。
在本指南中,您将使用 web3Modal 库将 Kaia Wallet、Klip、Metamask、Coinbase Wallet 等多个钱包集成到您在 Kaia 网络上构建的 dApp 中。
先决条件
- 一个正在运行的 react 项目(执行
npx create-react-app project-name
命令) - 安装必要的钱包(Kaia Wallet、Coinbase Wallet 和 Metamask)。
- RPC 端点:您可以从支持的端点提供者中获取。
- 从 水龙头测试 KAIA:为账户注入足够的 KAIA。
设置 Web3Modal 和钱包提供程序选项
步骤 1:安装 Web3Modal 和以太坊库
安装 web3Modal 和您喜欢的与区块链交互的库。 在本教程中,我们将安装 @klaytn/web3modal,它源自 Web3Modal,并经过修改添加了 Kaia 钱包和 Klip 钱包。 此外,本教程还将使用 ethers.js 与 Kaia 区块链进行交互。
npm install @klaytn/web3modalnpm install --save ethers
第 2 步:使用钱包提供商选项实例化 Web3Modal
安装您选择的钱包提供商。 这里我们安装 Kaia Wallet、Klip 和 Coinbase 钱包提供商。
npm install --save @coinbase/wallet-sdknpm install --save @klaytn/kaikas-web3-providernpm install --save @klaytn/klip-web3-provider
在您的 App.js
文件中,导入 CoinbaseWalletSDK、KaikasWeb3Provider 和 KlipWeb3Provider,并实例化各种提供程序选项,以便与您的 dapp 集 成。
import CoinbaseWalletSDK from '@coinbase/wallet-sdk';import { KaikasWeb3Provider } from "@klaytn/kaikas-web3-provider";import { KlipWeb3Provider } from "@klaytn/klip-web3-provider";export const providerOptions = { coinbasewallet: { package: CoinbaseWalletSDK, options: { appName: "Web 3 Modal Demo", infuraId: process.env.INFURA_KEY } }, walletconnect: { package: WalletConnect, options: { infuraId: process.env.INFURA_KEY } }};const providerOptions = { coinbasewallet: { package: CoinbaseWalletSDK, // required options: { appName: "Web3Modal Kaia dApp", // required infuraId: "NFURA_KEY", // required rpc: "https://public-en.node.kaia.io", // Optional if `infuraId` is provided; otherwise it's required chainId: 1001, // Optional. It defaults to 1 if not provided darkMode: false // Optional. Use dark theme, defaults to false } }, klip: { package: KlipWeb3Provider, //required options: { bappName: "Web3Modal Kaia dApp", //required rpcUrl: "https://public-en.node.kaia.io" //required }}, kaikas: { package: KaikasWeb3Provider // required }};
第 3 步:实例化 web3modal
然后,通过传递提供程序选项来实例化 Web3Modal。
import Web3Modal from "@klaytn/web3modal";const web3Modal = new Web3Modal( { cacheProvider: true, providerOptions, } )
建立钱包连接
要建立与用户钱包的连接,请调用 Web3Modal 实例上的 connect()
方法。 我们建议您将此操作封装在一个异步函数中,并将检索到的提供程序存储在您的状态中,以便在整个应用程序中重复使用。
import { ethers } from 'ethers';import { useState } from 'react';function App() { const [provider, setProvider] = useState(); const connectWallet = async () => { try { const web3ModalProvider = await web3Modal.connect(); // this guide uses ethers version 6.3.0. const ethersProvider = new ethers.BrowserProvider(web3ModalProvider); // for ethers version below 6.3.0. // const provider = new ethers.providers.Web3Provider(web3ModalProvider); setProvider(web3ModalProvider); } catch (error) { console.error(error); } }; return ( <div className="App"> <button onClick={connectWallet}>Connect Wallet</button> </div> );}
设置实用工具功能
在本指南中,我们将使用 truncateAddress()
和 toHex()
等实用工具函数。 truncateAddress() "函数接收有效地址,并返回所传递地址的更易读格式。 而 toHex()
函数则将数字转换为十六进制。 以下步骤展示了如何在项目中设置和使用 utils 函数。
步骤 1:在 src
根文件夹中创建一个 utils.js
文件。
在新创建的 utils.js 文件中粘贴以下代码。
export const truncateAddress = (address) => { if (!address) return "No Account"; const match = address.match( /^(0x[a-zA-Z0-9]{2})[a-zA-Z0-9]+([a-zA-Z0-9]{4})$/ ); if (!match) return address; return `${match[1]}…${match[2]}`; }; export const toHex = (num) => { const val = Number(num); return "0x" + val.toString(16); };
第 2步在您的 App.js
文件中导入函数。
import { truncateAddress, toHex } from "./utils";