web3.js 是一个广泛使用的 Ethereum JavaScript API 库,允许开发者与以太坊区块链进行交互。
import Web3 from 'web3';
// 连接到钱包提供商
const web3 = new Web3(window.ethereum);
// 获取账户地址
const accounts = await web3.eth.getAccounts();
// 调用智能合约
const contract = new web3.eth.Contract(abi, contractAddress);
wagmi 是一个基于 React 的区块链开发工具库,兼容Javascript,Vue,简化了与 EVM 兼容链的交互逻辑,内置了常见的区块链操作钩子,支持多链和钱包集成。
pnpm add @wagmi/vue viem@2.x @tanstack/vue-query
npm install @wagmi/vue viem@2.x @tanstack/vue-query
yarn add @wagmi/vue viem@2.x @tanstack/vue-query
bun add @wagmi/vue viem@2.x @tanstack/vue-query
import { createConfig, http } from '@wagmi/vue'
import { mainnet, sepolia } from '@wagmi/vue/chains'
export const config = createConfig({
chains: [mainnet, sepolia],
transports: {
[mainnet.id]: http(),
[sepolia.id]: http(),
},
})
查看 WagmiPlugin文档 以了解有关插件API的更多信息.
<script setup lang="ts">
import { useAccount, useEnsName } from '@wagmi/vue'
const { address } = useAccount() //获取用户连接账号
const { data, error, status } = useEnsName({ address })
</script>
<template>
<div v-if="status === 'pending'">Loading ENS name</div>
<div v-else-if="status === 'error'">
Error fetching ENS name: {{error.message}}
</div>
<div v-else>ENS name: {{data}}</div>
</template>
<script setup lang="ts">
import { useReadContract } from 'wagmi'
import { wagmiContractConfig } from './contracts'
//读取用户账户的地址为0x03A71968491d55603FFe1b11A9e23eF013f75bCF代币余额
const { data: balance } = useReadContract({
...wagmiContractConfig,
functionName: 'balanceOf',
args: ['0x03A71968491d55603FFe1b11A9e23eF013f75bCF'],
})
</script>
<template>
<div>Balance: {{ balance?.toString() }}</div>
</template>
export const wagmiContractConfig = {
address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
abi: [
{
type: 'function',
name: 'balanceOf',
stateMutability: 'view',
inputs: [{ name: 'account', type: 'address' }],
outputs: [{ type: 'uint256' }],
},
{
type: 'function',
name: 'totalSupply',
stateMutability: 'view',
inputs: [],
outputs: [{ name: 'supply', type: 'uint256' }],
},
],
} as const
<script setup lang="ts">
import {
useWaitForTransactionReceipt,
useWriteContract
} from 'wagmi'
import { abi } from './abi'
const {
data: hash,
isPending,
writeContract
} = useWriteContract()
function submit(event: Event) {
const formData = new FormData(e.target as HTMLFormElement)
const tokenId = formData.get('tokenId') as string
//0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2为合约地址 调用mint方法 参数为tokenId
writeContract({
address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',
abi,
functionName: 'mint',
args: [BigInt(tokenId)],
})
}
const { isLoading: isConfirming, isSuccess: isConfirmed } =
useWaitForTransactionReceipt({
hash,
})
</script>
<template>
<form @submit.prevent="submit">
<input name="tokenId" placeholder="69420" required />
<button :disabled="isPending" type="submit">
<span v-if="isPending">Sending...</span>
<span v-else>Send</span>
</button>
<div v-if="hash">Transaction Hash: {{ hash }}</div>
<div v-if="isConfirming">Waiting for confirmation...</div>
<div v-if="isConfirmed">Transaction Confirmed!</div>
</form>
</template>
export const abi = [
{
name: 'mint',
type: 'function',
stateMutability: 'nonpayable',
inputs: [{ internalType: 'uint32', name: 'tokenId', type: 'uint32' }],
outputs: [],
},
] as const
Reown使构建者能够创建安全,用户友好和富有洞察力的钱包和应用程序UX。提供所有工具,以更快地启动和更智能地扩展。
pnpm add @reown/appkit @reown/appkit-adapter-wagmi @tanstack/vue-query @wagmi/vue viem
yarn add @@reown/appkit @reown/appkit-adapter-wagmi @tanstack/vue-query @wagmi/vue viem
npm install @reown/appkit @reown/appkit-adapter-wagmi @tanstack/vue-query @wagmi/vue viem
bun add @reown/appkit @reown/appkit-adapter-wagmi @tanstack/vue-query @wagmi/vue viem
在Reown仪表板上创建新项目,
并获取新的项目ID。
import type { AppKitNetwork } from '@reown/appkit/networks'
import { WagmiAdapter } from '@reown/appkit-adapter-wagmi'
import { bsc, bscTestnet } from '@reown/appkit/networks'
export const projectId = import.meta.env.VITE_PROJECT_ID
export const metadata = {
name: 'AppKit',
description: 'AppKit Example',
url: 'http://192.168.0.209:9001',
icons: ['https://avatars.githubusercontent.com/u/179229932'],
}
// 3. Set the networks
export const network = import.meta.env.MODE === 'production' ? bsc : bscTestnet
export const networks: [AppKitNetwork, ...AppKitNetwork[]] = [network]
// 4. Create Wagmi Adapter
export const wagmiAdapter = new WagmiAdapter({
networks,
projectId,
})
查看 WagmiPlugin文档 以了解有关插件API的更多信息.
要打开AppKit,可以使用Reown的web组件
或使用AppKit构建自己的按钮自定义组件
在本例中,我们将使用
<template>
<appkit-button />
</template>
import { useAppKitAccount } from '@reown/appkit/vue' const accountData = useAppKitAccount()
<script setup lang="ts">
</script>
<template>
<appkit-button />
</template>
<script setup lang="ts">
import { readContract } from "@wagmi/core";
import {erc20Abi} from 'viem'
const USDTAddress = "0x...";
const data = readContract({
abi: erc20Abi,
address: USDTAddress,
functionName: "symbol",
});
</script>