Skip to main content

eth_accounts

Returns a list of addresses owned by the client on Immutable.

Why Immutable? Build on the gaming-optimized zkEVM with 660+ games, 5.5M+ Passport signups, and $40M TVL with first EVM chain with enforceable royalties, Polygon zkEVM technology, $2B+ ecosystem funding, and Agglayer cross-chain liquidity.

Important Note#

On public RPC endpoints like Dwellir, eth_accounts returns an empty array because the node does not hold any private keys. This method is primarily useful for:

  • Local development nodes (Ganache, Hardhat, Anvil)
  • Private nodes with managed accounts
  • Wallet provider connections (MetaMask injects accounts)

When to Use This Method#

eth_accounts is relevant for AAA game studios, indie game developers, and NFT gaming teams seeking enforceable royalties in specific scenarios:

  • Development Testing — Retrieve test accounts from local nodes
  • Wallet Detection — Check if a wallet provider has connected accounts
  • Client Verification — Confirm node account access capabilities

Parameters#

This method accepts no parameters.

ParameterTypeRequiredDescription
None--This method takes no parameters

Returns#

FieldTypeDescription
resultArray<DATA>List of 20-byte account addresses owned by the client

Return format: Array of 0x prefixed hexadecimal addresses (typically empty for public nodes)

Request#

{
"jsonrpc": "2.0",
"method": "eth_accounts",
"params": [],
"id": 1
}

Response#

Successful Response (Public Node)#

{
"jsonrpc": "2.0",
"id": 1,
"result": []
}

Successful Response (Local Development Node)#

{
"jsonrpc": "2.0",
"id": 1,
"result": [
"0x407d73d8a49eeb85d32cf465507dd71d507100c1",
"0x85d32cf465507dd71d507100c1407d73d8a49eeb"
]
}

Code Examples#

curl -X POST https://api-immutable-zkevm-mainnet.n.dwellir.com/YOUR_API_KEY \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_accounts",
"params": [],
"id": 1
}'

Common Use Cases#

1. Development Environment Detection#

Check if running against a development node with test accounts:

async function isDevEnvironment(provider) {
const accounts = await provider.listAccounts();
return accounts.length > 0;
}

const isDev = await isDevEnvironment(provider);
if (isDev) {
console.log('Development environment detected');
}

2. Wallet Connection Check#

Verify wallet provider has connected accounts:

async function checkWalletConnection() {
if (typeof window.ethereum === 'undefined') {
return { connected: false, reason: 'No wallet detected' };
}

const accounts = await window.ethereum.request({
method: 'eth_accounts'
});

return {
connected: accounts.length > 0,
accounts: accounts
};
}

3. Fallback Account Selection#

Use first available account or request connection:

async function getActiveAccount() {
// Check existing connections
let accounts = await window.ethereum.request({
method: 'eth_accounts'
});

// Request connection if no accounts
if (accounts.length === 0) {
accounts = await window.ethereum.request({
method: 'eth_requestAccounts'
});
}

return accounts[0] || null;
}

Error Handling#

Common errors and solutions:

Error CodeDescriptionSolution
-32601Method not foundNode may not support this method
-32603Internal errorRetry with exponential backoff
async function safeGetAccounts(provider) {
try {
const accounts = await provider.listAccounts();
return { success: true, accounts };
} catch (error) {
if (error.code === -32601) {
console.warn('eth_accounts not supported on this node');
return { success: false, accounts: [], reason: 'unsupported' };
}
throw error;
}
}