Web3-Onboard
Blocknative’s multi-wallet connection library. Framework-agnostic with support for React, Vue, and vanilla JavaScript.
OneKey is automatically detected via the injected wallets module. No additional configuration required.
Installation
npm install @web3-onboard/core @web3-onboard/injected-walletsBasic Setup
import Onboard from '@web3-onboard/core'
import injectedModule from '@web3-onboard/injected-wallets'
const injected = injectedModule()
const onboard = Onboard({
wallets: [injected],
chains: [
{
id: '0x1',
token: 'ETH',
label: 'Ethereum Mainnet',
rpcUrl: 'https://mainnet.infura.io/v3/YOUR_INFURA_KEY',
},
{
id: '0x89',
token: 'MATIC',
label: 'Polygon',
rpcUrl: 'https://polygon-rpc.com',
},
],
appMetadata: {
name: 'My dApp',
icon: '<svg>...</svg>',
description: 'My dApp description',
},
})
// Connect wallet
async function connect() {
const wallets = await onboard.connectWallet()
console.log('Connected wallets:', wallets)
}React Integration
App.tsx
import { init, useConnectWallet, useWallets } from '@web3-onboard/react'
import injectedModule from '@web3-onboard/injected-wallets'
const injected = injectedModule()
init({
wallets: [injected],
chains: [
{
id: '0x1',
token: 'ETH',
label: 'Ethereum',
rpcUrl: 'https://mainnet.infura.io/v3/YOUR_KEY',
},
],
})
function App() {
const [{ wallet, connecting }, connect, disconnect] = useConnectWallet()
const connectedWallets = useWallets()
if (wallet) {
return (
<div>
<p>Connected: {wallet.accounts[0].address}</p>
<button onClick={() => disconnect({ label: wallet.label })}>
Disconnect
</button>
</div>
)
}
return (
<button disabled={connecting} onClick={() => connect()}>
{connecting ? 'Connecting...' : 'Connect Wallet'}
</button>
)
}Additional Wallet Modules
For WalletConnect support (mobile wallets):
npm install @web3-onboard/walletconnectimport walletConnectModule from '@web3-onboard/walletconnect'
const walletConnect = walletConnectModule({
projectId: 'YOUR_WALLETCONNECT_PROJECT_ID',
})
const onboard = Onboard({
wallets: [injected, walletConnect],
// ...
})Get Provider
After connecting, get the provider for transactions:
import { ethers } from 'ethers'
const wallets = await onboard.connectWallet()
if (wallets[0]) {
const provider = new ethers.BrowserProvider(wallets[0].provider)
const signer = await provider.getSigner()
// Send transaction
const tx = await signer.sendTransaction({
to: '0x...',
value: ethers.parseEther('0.1'),
})
}Customization
Theme
const onboard = Onboard({
// ...
theme: 'dark', // or 'light', 'system'
// Or custom theme
theme: {
'--w3o-background-color': '#1a1a1a',
'--w3o-foreground-color': '#ffffff',
'--w3o-text-color': '#ffffff',
'--w3o-border-color': '#333333',
'--w3o-action-color': '#00B812',
},
})Account Center
const onboard = Onboard({
// ...
accountCenter: {
desktop: {
enabled: true,
position: 'topRight',
},
mobile: {
enabled: true,
position: 'topRight',
},
},
})Resources
Last updated on