Skip to main content
POST
eth_call
getActiveValidators
curl --request POST \
  --url https://api.example.com/eth_call
{
  "result": "<string>"
}

Overview

Queries the FenineSystem contract to get the list of currently active validators. These are validators with VALIDATED status who are participating in the network and earning rewards.

Contract Call Details

to
address
required
0x0000000000000000000000000000000000001000 (FenineSystem)
data
bytes
required
Function selector: 0x9de70258 (no parameters)

Response

result
bytes
ABI-encoded array of validator addresses. Decode as address[].

Examples

curl -X POST https://rpc.fene.app \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_call",
    "params": [{
      "to": "0x0000000000000000000000000000000000001000",
      "data": "0x9de70258"
    }, "latest"],
    "id": 1
  }'

Response Format

The raw response is ABI-encoded. After decoding:
[
  "0x1111111111111111111111111111111111111111",
  "0x2222222222222222222222222222222222222222",
  "0x3333333333333333333333333333333333333333"
]

Use Cases

const constants = await web3.getContractConstants();
const validators = await contract.methods.getActiveValidators().call();

console.log(`Active: ${validators.length} / ${constants.maxValidators}`);

if (validators.length < 3) {
  console.warn('⚠️  Low validator count - network at risk');
}
const validators = await contract.methods.getActiveValidators().call();

// Get info for each
const directory = await Promise.all(
  validators.map(async (address) => {
    const info = await contract.methods.getValidatorInfo(address).call();
    return {
      address,
      selfStake: web3.utils.fromWei(info.selfStake, 'ether'),
      totalStake: web3.utils.fromWei(info.totalStake, 'ether'),
      commission: info.commissionRate / 100 + '%',
      delegators: info.stakerCount
    };
  })
);

console.table(directory);
const myAddress = '0x1234...';
const validators = await contract.methods.getActiveValidators().call();

const isValidator = validators.some(
  v => v.toLowerCase() === myAddress.toLowerCase()
);

console.log('Is active validator:', isValidator);

Pagination

This method returns ALL active validators in one call. With a max of 101 validators, this is manageable. No pagination needed.

getValidatorInfo

Get details for specific validator

totalNetworkStake

Get total staked amount

getCurrentEpoch

Get current epoch number