將 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";