本节作者:@愚指导 这一讲我们将支持通过钱包链接区块链,你也可以参考之前基础课程中的连接钱包学习。 初始化 Provider 我们基于 Ant Design Web3 的以太坊适配,来给整个 DApp 的组件提供连接链的支持,我们需要在 DApp 的最外层包裹 ,这样就可以在 DApp 的组件中获取链上数据或者调用合约了。 在基础课程部分我们已经安装了相关依赖,如果你是基于新创建的项目学习,你也可以参考 Ant Design Web3 的快速开始文档安装相关依赖: 接下来我们在参考 Ant Design Web3 的推荐配置 中做如下修改: 在这个配置中我们支持了 WalletConnect,支持了基于 EIP6963 自动检测钱包,支持了显示 ENS,以及默认添加了一些钱包。
本节作者:@愚指导
这一讲我们将支持通过钱包链接区块链,你也可以参考之前基础课程中的连接钱包学习。
我们基于 Ant Design Web3 的以太坊适配,来给整个 DApp 的组件提供连接链的支持,我们需要在 DApp 的最外层包裹 WagmiWeb3ConfigProvider,这样就可以在 DApp 的组件中获取链上数据或者调用合约了。
在基础课程部分我们已经安装了相关依赖,如果你是基于新创建的项目学习,你也可以参考 Ant Design Web3 的快速开始文档安装相关依赖:
npm install antd @ant-design/web3 @ant-design/web3-wagmi wagmi viem @tanstack/react-query --save
接下来我们在参考 Ant Design Web3 的推荐配置 components/WtfLayout/index.tsx 中做如下修改:
import React from "react"; import Header from "./Header"; import styles from "./styles.module.css"; + import { + MetaMask, + OkxWallet, + TokenPocket, + WagmiWeb3ConfigProvider, + WalletConnect, + Hardhat, + Mainnet, + } from "@ant-design/web3-wagmi"; + import { QueryClient } from "@tanstack/react-query"; + import { createConfig, http } from "wagmi"; + import { mainnet, hardhat } from "wagmi/chains"; + import { walletConnect } from "wagmi/connectors"; + const queryClient = new QueryClient(); + const config = createConfig({ + chains: [mainnet, hardhat], + transports: { + [mainnet.id]: http(), + [hardhat.id]: http("http://127.0.0.1:8545/"), + }, + connectors: [ + walletConnect({ + showQrModal: false, + projectId: "c07c0051c2055890eade3556618e38a6", + }), + ], + }); interface WtfLayoutProps { children: React.ReactNode; } const WtfLayout: React.FC<WtfLayoutProps> = ({ children }) => { return ( + <WagmiWeb3ConfigProvider + eip6963={{ + autoAddInjectedWallets: true, + }} + ens + chains={[Mainnet, Hardhat]} + wallets={[ + MetaMask(), + WalletConnect(), + TokenPocket({ + group: "Popular", + }), + OkxWallet(), + ]} + config={config} + queryClient={queryClient} + > <div className={styles.layout}> <Header /> {children} </div> + </WagmiWeb3ConfigProvider> ); }; export default WtfLayout;
在这个配置中我们支持了 WalletConnect,支持了基于 EIP6963 自动检测钱包,支持了显示 ENS,以及默认添加了一些钱包。具体的配置说明不在这里具体展开,你可以在前面的基础课程或者 Ant Design Web3 以及 wagmi 的文档中学习。
另外我们还添加了 Hardhat 本地测试链,便于后续和本地的测试链中部署的合约联调。
配置好 Provider 之后我们还需要配置 ConnectButton,接下来请修改我们在上一讲课程中已经完成了样式的 components/WtfLayout/Header.tsx 文件:
import Link from "next/link"; import { usePathname } from "next/navigation"; - import { ConnectButton } from "@ant-design/web3"; + import { ConnectButton, Connector } from "@ant-design/web3"; import styles from "./styles.module.css"; export default function WtfHeader() { const pathname = usePathname(); const isSwapPage = pathname === "/wtfswap"; return ( <div className={styles.header}> <div className={styles.title}>WTFSwap</div> <div className={styles.nav}> <Link href="/wtfswap" className={isSwapPage ? styles.active : undefined} > Swap </Link> <Link href="/wtfswap/pool" className={!isSwapPage ? styles.active : undefined} > Pool </Link> </div> <div> + <Connector + modalProps={{ + mode: "simple", + }} + > <ConnectButton type="text" /> + <Connector> </div> </div> ); }
我们引入了 Connector 组件,它会读取 WagmiWeb3ConfigProvider 提供的相关信息,传递给 ConnectButton,让连接按钮不再仅仅是 UI 组件,从而具备了连接链的能力。另外 Connector 组件集成了 ConnectModal 组件,如上面代码示例,你可以通过 modalProps 来修改相关配置,我们修改了 mode 为 simple 让弹窗更简洁,你也可以尝试自己做修改调整样式。