eth_accounts - zkSync RPC Method
Returns a list of addresses owned by the client on zkSync Era. Typically returns an empty array on public RPC endpoints.
Returns a list of addresses owned by the client on zkSync Era.
Why zkSync? Build on Matter Labs' flagship zkEVM powering the Elastic Network of interoperable hyperchains with ZK Stack modular framework, hyperchain interoperability, native account abstraction, and $1.9B in tokenized real-world assets.
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 ZK developers, RWA tokenization teams, and builders launching custom L2/L3 chains 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
Request Parameters
This method accepts no parameters.
Response Body
List of 20-byte account addresses owned by the client
Code Examples
curl -X POST https://api-zksync-era-mainnet-full.n.dwellir.com/YOUR_API_KEY \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_accounts",
"params": [],
"id": 1
}'// Using fetch
const response = await fetch('https://api-zksync-era-mainnet-full.n.dwellir.com/YOUR_API_KEY', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
method: 'eth_accounts',
params: [],
id: 1
})
});
const { result } = await response.json();
console.log('Accounts:', result);
// Using ethers.js
import { JsonRpcProvider } from 'ethers';
const provider = new JsonRpcProvider('https://api-zksync-era-mainnet-full.n.dwellir.com/YOUR_API_KEY');
const accounts = await provider.listAccounts();
console.log('Accounts:', accounts);import requests
def get_accounts():
response = requests.post(
'https://api-zksync-era-mainnet-full.n.dwellir.com/YOUR_API_KEY',
json={
'jsonrpc': '2.0',
'method': 'eth_accounts',
'params': [],
'id': 1
}
)
return response.json()['result']
accounts = get_accounts()
print(f'Accounts: {accounts}')
# Using web3.py
from web3 import Web3
w3 = Web3(Web3.HTTPProvider('https://api-zksync-era-mainnet-full.n.dwellir.com/YOUR_API_KEY'))
print(f'Accounts: {w3.eth.accounts}')package main
import (
"context"
"fmt"
"log"
"github.com/ethereum/go-ethereum/rpc"
)
func main() {
client, err := rpc.Dial("https://api-zksync-era-mainnet-full.n.dwellir.com/YOUR_API_KEY")
if err != nil {
log.Fatal(err)
}
var accounts []string
err = client.CallContext(context.Background(), &accounts, "eth_accounts")
if err != nil {
log.Fatal(err)
}
fmt.Printf("Accounts: %v\n", accounts)
}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 Code | Description | Solution |
|---|---|---|
| -32601 | Method not found | Node may not support this method |
| -32603 | Internal error | Retry 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;
}
}Related Methods
eth_requestAccounts— Request wallet connection (browser wallets)eth_getBalance— Get account balanceeth_getTransactionCount— Get account nonce
eth_getTransactionCount
Get account nonce on zkSync Era. Essential for transaction ordering for RWA tokenization ($1.9B, 25% market share), hyperchain deployment via ZK Stack, and cross-chain DeFi.
eth_sendRawTransaction
Submit signed transactions to zkSync Era. Essential for broadcasting transactions for RWA tokenization ($1.9B, 25% market share), hyperchain deployment via ZK Stack, and cross-chain DeFi.