Ethereum & EVM
Ethereum & EVM

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.

JavaScript
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

JavaScript
{
  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.

JavaScript
if (window.ethereum?.isFireWallet) {
  const accounts = await window.ethereum.request({
    method: 'eth_requestAccounts'
  });
}

JSON-RPC methods

Connect

JavaScript
const accounts = await provider.request({ method: 'eth_requestAccounts' });
// → ['0x1234...']

Sign messages

JavaScript
// 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

JavaScript
const txHash = await provider.request({
  method: 'eth_sendTransaction',
  params: [{
    from: '0xYourAccount',
    to: '0xRecipient',
    value: '0xDE0B6B3A7640000', // 1 ETH in wei (hex)
    data: '0x'
  }]
});

Switch chains

JavaScript
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.

JavaScript
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

JavaScript
// 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

JavaScript
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

JavaScript
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

JavaScript
import { BrowserProvider } from 'ethers';
const provider = new BrowserProvider(window.ethereum);
const signer = await provider.getSigner();

web3.js

JavaScript
import Web3 from 'web3';
const web3 = new Web3(window.ethereum);