Full EIP-1193 provider for six chains.
Fire Wallet works with ethers.js, wagmi, viem, web3.js, and any dApp that supports standard wallet detection.
Supported chains
| Chain | Chain ID | Hex |
|---|---|---|
| Ethereum | 1 |
0x1 |
| Polygon | 137 |
0x89 |
| Arbitrum One | 42161 |
0xa4b1 |
| Base | 8453 |
0x2105 |
| Optimism | 10 |
0xa |
| Sepolia (testnet) | 11155111 |
0xaa36a7 |
Wallet detection (EIP-6963)
The recommended way to discover Fire Wallet. No conflicts with other installed wallets.
window.addEventListener('eip6963:announceProvider', (event) => {
const { provider, info } = event.detail;
if (info.rdns === 'co.fire.wallet') {
const accounts = await provider.request({
method: 'eth_requestAccounts'
});
}
});
// Trigger discovery
window.dispatchEvent(new Event('eip6963:requestProvider'));
Provider info
{
uuid: 'b1e7c8a0-fire-wallet-eth-provider-v1',
name: 'Fire Wallet',
rdns: 'co.fire.wallet',
icon: '...' // SVG data URI
}
Legacy detection
Fire Wallet also injects window.ethereum if no other wallet has claimed it.
if (window.ethereum?.isFireWallet) {
const accounts = await window.ethereum.request({
method: 'eth_requestAccounts'
});
}
JSON-RPC methods
Connect
const accounts = await provider.request({ method: 'eth_requestAccounts' });
// → ['0x1234...']
Sign messages
// Personal sign
const signature = await provider.request({
method: 'personal_sign',
params: ['0x48656c6c6f', '0xYourAccount']
});
// EIP-712 typed data
const signature = await provider.request({
method: 'eth_signTypedData_v4',
params: ['0xYourAccount', JSON.stringify(typedData)]
});
eth_sign is blocked for security. Use personal_sign instead.
Send transactions
const txHash = await provider.request({
method: 'eth_sendTransaction',
params: [{
from: '0xYourAccount',
to: '0xRecipient',
value: '0xDE0B6B3A7640000', // 1 ETH in wei (hex)
data: '0x'
}]
});
Switch chains
await provider.request({
method: 'wallet_switchEthereumChain',
params: [{ chainId: '0x89' }] // Switch to Polygon
});
Read-only calls
These are proxied to a public RPC node. They do not wake the wallet or require approval.
const balance = await provider.request({
method: 'eth_getBalance',
params: ['0xAddress', 'latest']
});
const blockNumber = await provider.request({
method: 'eth_blockNumber'
});
const result = await provider.request({
method: 'eth_call',
params: [{ to: '0xContract', data: '0x...' }, 'latest']
});
Full list of proxied read methods: eth_getBalance, eth_getTransactionCount, eth_blockNumber, eth_getBlockByNumber, eth_getBlockByHash, eth_call, eth_estimateGas, eth_gasPrice, eth_maxPriorityFeePerGas, eth_feeHistory, eth_getTransactionReceipt, eth_getTransactionByHash, eth_getCode, eth_getStorageAt, eth_getLogs, eth_getFilterChanges, eth_newFilter, eth_newBlockFilter, eth_uninstallFilter.
Events
// Account changed
provider.on('accountsChanged', (accounts) => {
console.log('New account:', accounts[0]);
});
// Chain switched
provider.on('chainChanged', (chainId) => {
console.log('Now on chain:', chainId);
});
// Connected
provider.on('connect', ({ chainId }) => {
console.log('Connected to chain:', chainId);
});
// Disconnected
provider.on('disconnect', () => {
console.log('Wallet disconnected');
});
Provider properties
provider.isFireWallet // true
provider.chainId // '0x1' (hex string)
provider.selectedAddress // '0x...' or null
provider.networkVersion // '1' (decimal string)
provider.isConnected() // true when ready to serve requests
Framework integration
wagmi / viem
import { createConfig, http } from 'wagmi';
import { mainnet, polygon, arbitrum, base, optimism } from 'wagmi/chains';
// Fire Wallet is auto-detected via EIP-6963 — no custom connector needed
ethers.js
import { BrowserProvider } from 'ethers';
const provider = new BrowserProvider(window.ethereum);
const signer = await provider.getSigner();
web3.js
import Web3 from 'web3';
const web3 = new Web3(window.ethereum);