XGR Chain — Staking PoS Endpoint Reference
Document ID: XGRCHAIN-STAKING-POS-RPC
Last updated: 2026-05-03
Audience: Dashboard developers, explorer developers, validator operators, backend integrators, auditors
Implementation status: Development / preview; not part of the public xgr-network/xgr-node v1.1.1 baseline
Source of truth: Staking-enabled XGR node release artifacts, published staking configuration, and official XGR Network operator announcements
1. Scope
This document describes XGR Chain staking / PoS related JSON-RPC endpoints.
The endpoints described here are XGR-specific extensions exposed through the eth_* namespace for dashboard, explorer and validator-operator compatibility.
They are not standard Ethereum JSON-RPC methods.
This document covers:
eth_getPosValidatorsOvervieweth_getPosValidatorDelegatorseth_getBeaconTimeStatus
The current public xgr-network/xgr-node v1.1.1 baseline does not include these staking/PoS endpoints.
Until an official staking-enabled release activates them, these endpoints must be treated as development / preview interfaces.
2. Endpoint summary
| Method | Purpose | Status |
|---|---|---|
eth_getPosValidatorsOverview |
Returns deterministic validator and staking overview data | Development / preview |
eth_getPosValidatorDelegators |
Returns delegation details for one validator | Development / preview |
eth_getBeaconTimeStatus |
Deprecated compatibility status endpoint | Deprecated compatibility endpoint |
These methods are intended for:
- staking dashboards
- explorer validator pages
- validator monitoring
- delegation views
- backend indexers
- operational diagnostics
They should not be treated as generic Ethereum RPC.
3. Release status and compatibility
The staking endpoints are release-dependent.
| Release state | Meaning |
|---|---|
| Public baseline without staking endpoints | Methods are unavailable |
| Staking-enabled development/preview build | Methods may be available for testing and integration |
| Official staking-enabled release | Methods become available according to the published release notes |
| Staking not active at current block | Methods may return an activation error |
| Staking active | Methods return live staking and validator state |
Clients should not assume these methods exist on all XGR Chain RPC endpoints.
Recommended client behavior:
- Probe endpoint availability.
- Handle
method not found. - Handle staking-not-active errors.
- Treat all returned quantities as Ethereum JSON-RPC quantities.
- Do not infer production activation from documentation alone.
4. Naming and namespace
The endpoints are exposed through the eth_* namespace:
eth_getPosValidatorsOverview
eth_getPosValidatorDelegators
eth_getBeaconTimeStatus
Reason:
- dashboard compatibility
- explorer compatibility
- existing Ethereum-style RPC routing
- lower integration overhead for EVM infrastructure
Despite the eth_* namespace, these methods are XGR-specific staking extensions.
They are not part of the Ethereum JSON-RPC standard.
5. Quantity encoding
Numeric values are returned as Ethereum-style JSON-RPC quantities unless otherwise specified.
Example:
"blockNumber": "0x1234"
Rules:
- quantities are hexadecimal strings
- quantities are prefixed with
0x - quantities do not use decimal formatting
- token and stake values are returned in wei
- basis-point fields are integer quantities
- percent helper fields are integer percentages
Stake and reward values use 18-decimal native units.
1 XGR = 10^18 wei
6. eth_getPosValidatorsOverview
Returns a deterministic overview of PoS validator state.
6.1 Request: default mode
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getPosValidatorsOverview",
"params": []
}
With no parameter, the endpoint reports the current epoch.
6.2 Request: current epoch
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getPosValidatorsOverview",
"params": ["current"]
}
6.3 Request: last finalized epoch
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getPosValidatorsOverview",
"params": ["lastFinalized"]
}
6.4 reportEpoch parameter
| Value | Meaning |
|---|---|
current |
Report the current epoch |
lastFinalized |
Report the last finalized epoch |
Invalid values return an error.
Example error condition:
invalid reportEpoch "<value>" (expected "current" or "lastFinalized")
7. PoS activation behavior
If the active chain configuration defines a PoS activation block and the current head is before that block, the endpoint returns an error.
Error shape at message level:
PoS is not active yet (activates at block <N>)
When PoS activation metadata is available and the current head is at or after the activation block, the response includes:
"posActive": true,
"posFromBlock": "0x..."
Field name:
posFromBlock
Do not use:
poSFromBlock
The JSON field is posFromBlock.
8. eth_getPosValidatorsOverview response
8.1 Top-level fields
| Field | Type | Meaning |
|---|---|---|
blockNumber |
quantity | Current head block number |
epochSize |
quantity | IBFT / staking epoch size in blocks |
microEpochSize |
quantity | Current micro-epoch size in blocks |
currentMicroEpoch |
quantity | Current micro-epoch index |
currentMicroEpochStartBlock |
quantity | Start block of the current micro-epoch |
currentMicroEpochEndBlock |
quantity | End block of the current micro-epoch |
currentEpoch |
quantity | Current staking/IBFT epoch |
lastFinalizedEpoch |
quantity | Last finalized epoch |
reportedEpoch |
quantity | Epoch used for reported reward/slash fields |
reportedEpochStartBlock |
quantity | Start block of the reported epoch |
reportedEpochEndBlock |
quantity | End block of the reported epoch |
currentEpochPendingRewards |
quantity | Live FeePool balance pending next epoch finalization |
stakingContractBalance |
quantity | Live staking contract balance |
minimumNumValidators |
quantity | Minimum validator count from staking contract |
maximumNumValidators |
quantity | Maximum validator count from staking contract |
validatorThreshold |
quantity | Validator eligibility threshold from staking contract |
totalCurrentStake |
quantity | Sum of current stake over returned validators |
rewardIneligibleCount |
quantity | Number of reward-ineligible validators in reported epoch |
slashedCount |
quantity | Number of slashed validators in reported epoch |
rewardIneligibleStatusExact |
boolean | Whether reward-ineligible status was computed exactly |
slashStatusExact |
boolean | Whether slash status was computed exactly |
lastRoundStakeExact |
boolean | Whether last-round stake distribution was computed exactly |
lastRoundDistributedStake |
quantity | Recorded total reward for the last finalized epoch |
monitoringNotes |
string array | Endpoint semantics and caveats |
validators |
array | Validator entries |
posActive |
boolean | Whether PoS is active at current head |
posFromBlock |
quantity, optional | PoS activation block if configured |
8.2 Example response shape
{
"blockNumber": "0x1234",
"epochSize": "0x1f4",
"microEpochSize": "0x32",
"currentMicroEpoch": "0x24",
"currentMicroEpochStartBlock": "0x1201",
"currentMicroEpochEndBlock": "0x1232",
"currentEpoch": "0xa",
"lastFinalizedEpoch": "0x9",
"reportedEpoch": "0x9",
"reportedEpochStartBlock": "0xfa1",
"reportedEpochEndBlock": "0x1194",
"currentEpochPendingRewards": "0x0",
"stakingContractBalance": "0x0",
"minimumNumValidators": "0x4",
"maximumNumValidators": "0x64",
"validatorThreshold": "0x0",
"totalCurrentStake": "0x0",
"rewardIneligibleCount": "0x0",
"slashedCount": "0x0",
"rewardIneligibleStatusExact": true,
"slashStatusExact": true,
"lastRoundStakeExact": true,
"lastRoundDistributedStake": "0x0",
"validators": [],
"posActive": true,
"posFromBlock": "0x0",
"monitoringNotes": []
}
9. Validator entry fields
Each item in validators contains validator-specific staking, consensus and monitoring data.
| Field | Type | Meaning |
|---|---|---|
address |
address | Validator address |
joinedAtBlock |
quantity, optional | Block where the validator joined |
joinEffectiveAtBlock |
quantity, optional | Epoch-boundary block where join becomes effective |
currentStake |
quantity | Current stake from staking contract state |
currentlyValidating |
boolean | Whether the validator is in the current consensus header validator set |
stakingActive |
boolean | Active flag from staking contract validator info |
deactivatedAtBlock |
quantity, optional | Block where validator deactivation was recorded |
deactivateEffectiveAtBlock |
quantity, optional | Epoch-boundary block where deactivation becomes effective |
unstakeAvailableAtBlock |
quantity, optional | Block after which unstake / withdraw can become available |
canUnstakeNow |
boolean | Whether current epoch permits unstake after deactivation |
wasValidatorLastEpoch |
boolean | Whether validator was in the last finalized epoch set |
reportedEpochReward |
quantity, optional | Validator total reward for reported epoch |
reportedEpochRewardValidatorNet |
quantity, optional | Validator net reward |
reportedEpochRewardCommission |
quantity, optional | Validator commission reward |
reportedEpochRewardDelegatorsNet |
quantity, optional | Delegator net reward total for this validator |
rewardIneligible |
boolean, optional | Reward-ineligible status for reported epoch |
slashed |
boolean, optional | Slashed status for reported epoch |
microNominalWeight |
quantity, optional | Current nominal micro-epoch weight |
microEffectiveWeight |
quantity, optional | Current effective micro-epoch weight |
microInactivity |
quantity, optional | Current inactivity counter |
proposalUptimeLast3EpochsBps |
quantity, optional | Rolling proposer-duty uptime over last 3 epochs, in basis points |
proposalUptimeLast10EpochsBps |
quantity, optional | Rolling proposer-duty uptime over last 10 epochs, in basis points |
proposalUptimeLast3EpochsPercent |
quantity, optional | Rolling proposer-duty uptime over last 3 epochs, integer percent |
proposalUptimeLast10EpochsPercent |
quantity, optional | Rolling proposer-duty uptime over last 10 epochs, integer percent |
proposalUptimeLast3EpochsObserved |
quantity | Observed proposer duties in 3-epoch window |
proposalUptimeLast10EpochsObserved |
quantity | Observed proposer duties in 10-epoch window |
10. Validator status semantics
10.1 currentlyValidating
currentlyValidating is derived from the current consensus header validator set.
It is a consensus visibility field.
It is not derived only from staking contract active status.
A validator can be active in staking state but not currently validating if the validator-set transition has not yet become effective or if the validator is outside the current consensus snapshot.
10.2 stakingActive
stakingActive is read from staking contract validator information.
It reflects staking contract state.
It is not a direct replacement for currentlyValidating.
10.3 wasValidatorLastEpoch
wasValidatorLastEpoch indicates whether the validator was visible in the last finalized epoch validator set.
The endpoint prefers epoch-keyed PoS state.
If epoch-keyed PoS state is missing, it may use the last-finalized epoch-end consensus header snapshot for RPC visibility.
This is a monitoring and display field.
It is not a consensus fallback.
10.4 Join and deactivation effective blocks
Join and deactivation timing use deterministic epoch-boundary markers.
Fields:
joinedAtBlock
joinEffectiveAtBlock
deactivatedAtBlock
deactivateEffectiveAtBlock
unstakeAvailableAtBlock
canUnstakeNow
These fields are intended for dashboard timing, validator status pages and operator UX.
11. Reward and slash semantics
Reward and slash fields are reported for reportedEpoch.
Relevant fields:
| Field | Meaning |
|---|---|
reportedEpochReward |
Total validator reward for selected reported epoch |
reportedEpochRewardValidatorNet |
Validator net reward |
reportedEpochRewardCommission |
Validator commission |
reportedEpochRewardDelegatorsNet |
Total delegator net reward |
rewardIneligible |
Whether validator is reward-ineligible for reported epoch |
slashed |
Whether validator is slashed for reported epoch |
rewardIneligibleCount |
Count of reward-ineligible validators |
slashedCount |
Count of slashed validators |
lastRoundDistributedStake |
Total reward recorded for last finalized epoch |
rewardIneligible is computed only for validators present in the reported epoch set.
slashed is derived from epoch-keyed PoS state for the reported epoch.
Reward values are returned in wei.
12. Proposer uptime semantics
The endpoint exposes rolling proposer-duty reliability metrics.
Fields:
proposalUptimeLast3EpochsBps
proposalUptimeLast10EpochsBps
proposalUptimeLast3EpochsPercent
proposalUptimeLast10EpochsPercent
proposalUptimeLast3EpochsObserved
proposalUptimeLast10EpochsObserved
Meaning:
| Field group | Meaning |
|---|---|
...Observed |
Number of observed proposer duties in the window |
...Bps |
Uptime in basis points |
...Percent |
Integer percentage derived from basis points |
Important behavior:
- the metric is proposer-duty uptime, not lifetime validator uptime
- epochs before join-effective block are excluded
- epochs after deactivation-effective block are excluded
- if observed duties are zero, uptime fields are omitted
- zero observed duties must not be displayed as 100% uptime
Dashboard rule:
If proposalUptime...Observed is 0 and uptime fields are omitted, show "no observed proposer duties" instead of 100%.
13. Micro-epoch fields
The endpoint exposes micro-epoch accounting fields where available.
Top-level fields:
| Field | Meaning |
|---|---|
microEpochSize |
Current micro-epoch size in blocks |
currentMicroEpoch |
Current micro-epoch index |
currentMicroEpochStartBlock |
Start block of the current micro-epoch |
currentMicroEpochEndBlock |
End block of the current micro-epoch |
Validator-level fields:
| Field | Meaning |
|---|---|
microNominalWeight |
Nominal weight for current micro-epoch accounting |
microEffectiveWeight |
Effective weight after uptime/inactivity effects |
microInactivity |
Current inactivity counter |
If micro-epoch configuration is invalid or unavailable, the endpoint can return zero-valued top-level micro-epoch fields and omit validator-level micro fields.
Micro-epoch fields are part of the staking/PoS development track until activated by official release.
14. monitoringNotes
The response includes monitoringNotes.
These notes describe important semantics that clients should respect.
Current note themes include:
currentlyValidatingcomes from the current consensus header validator setwasValidatorLastEpochis a monitoring/display field- join/deactivation effective blocks are deterministic epoch-boundary markers
- reward-ineligible status is computed for validators present in the reported epoch set
- proposer uptime fields are rolling proposer-duty reliability metrics
- zero observed proposer duties do not produce fake 100% uptime
- slashed status is derived from epoch-keyed PoS state
- current epoch pending rewards are read from the live FeePool balance
- staking contract balance is read from the live staking contract account
- unstake timing is derived from deactivation block and epoch size
- numeric stake metrics are deterministic and derived from contract state plus consensus/state data
- micro fields expose current micro-epoch uptime accounting weights
Integrators should not ignore monitoringNotes.
They are part of the endpoint contract for display correctness.
15. eth_getPosValidatorDelegators
Returns delegator details for one validator.
15.1 Request: current epoch
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getPosValidatorDelegators",
"params": [
"0xValidatorAddress"
]
}
15.2 Request: explicit current epoch
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getPosValidatorDelegators",
"params": [
"0xValidatorAddress",
"current"
]
}
15.3 Request: last finalized epoch
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getPosValidatorDelegators",
"params": [
"0xValidatorAddress",
"lastFinalized"
]
}
15.4 Parameters
| Parameter | Type | Required | Meaning |
|---|---|---|---|
validator |
address | yes | Validator address |
reportEpoch |
string | no | current or lastFinalized |
Invalid reportEpoch values return an error.
16. eth_getPosValidatorDelegators response
16.1 Top-level fields
| Field | Type | Meaning |
|---|---|---|
validator |
address | Validator address |
selfStake |
quantity | Validator self-stake |
delegatedRaw |
quantity | Raw delegated amount |
delegatedActive |
quantity | Active delegated amount |
delegatedActiveCurrent |
quantity | Current active delegated amount |
totalActiveCurrentStake |
quantity | Self stake plus current active delegated stake |
selfStakeLive |
quantity, optional | Live validator self-stake |
delegatedLiveRaw |
quantity, optional | Live raw delegated stake |
delegatedLiveActive |
quantity, optional | Live active delegated stake |
totalLiveStake |
quantity, optional | Live total stake |
selfStakeEpochEffective |
quantity, optional | Self stake effective at reported point |
delegatedEpochEffective |
quantity, optional | Delegated stake effective at reported point |
totalEpochEffectiveStake |
quantity, optional | Total effective stake at reported point |
delegationEnabled |
boolean | Whether delegation is enabled for this validator |
maxDelegatedStake |
quantity | Maximum delegated stake allowed |
commissionBps |
quantity | Validator commission in basis points |
delegators |
array | Delegator entries |
16.2 Example response shape
{
"validator": "0x0000000000000000000000000000000000000000",
"selfStake": "0x0",
"delegatedRaw": "0x0",
"delegatedActive": "0x0",
"delegatedActiveCurrent": "0x0",
"totalActiveCurrentStake": "0x0",
"selfStakeLive": "0x0",
"delegatedLiveRaw": "0x0",
"delegatedLiveActive": "0x0",
"totalLiveStake": "0x0",
"selfStakeEpochEffective": "0x0",
"delegatedEpochEffective": "0x0",
"totalEpochEffectiveStake": "0x0",
"delegationEnabled": false,
"maxDelegatedStake": "0x0",
"commissionBps": "0x0",
"delegators": []
}
17. Delegator entry fields
Each item in delegators contains:
| Field | Type | Meaning |
|---|---|---|
delegator |
address | Delegator address |
amount |
quantity | Delegated amount |
reportedEpochReward |
quantity, optional | Delegator reward for reported epoch |
active |
boolean | Active flag from staking state |
joinedAtBlock |
quantity, optional | Block where delegator joined |
deactivatedAtBlock |
quantity, optional | Block where delegator deactivated |
effectiveAtPoint |
boolean | Whether delegator stake is effective at the selected report point |
Delegator entries are sorted by delegator address.
The validator's own self-stake is not returned as a delegator entry.
18. Live stake vs epoch-effective stake
The delegators endpoint separates live stake from epoch-effective stake.
18.1 Live stake
Live fields describe current contract state at the current head.
Relevant fields:
selfStakeLive
delegatedLiveRaw
delegatedLiveActive
totalLiveStake
These fields are useful for current dashboard display.
18.2 Epoch-effective stake
Epoch-effective fields describe stake effective at the selected report point.
Relevant fields:
selfStakeEpochEffective
delegatedEpochEffective
totalEpochEffectiveStake
These fields are useful for reward attribution, historical epoch views and validator accounting.
A delegator can exist in live state but not be effective at the selected report point.
19. Commission and delegation pool fields
The endpoint returns validator pool information.
| Field | Meaning |
|---|---|
delegationEnabled |
Whether the validator accepts delegation |
maxDelegatedStake |
Maximum delegated stake allowed |
commissionBps |
Commission in basis points |
Commission basis points:
10000 bps = 100%
100 bps = 1%
Example:
commissionBps = 500
means:
5%
20. eth_getBeaconTimeStatus
Deprecated compatibility endpoint.
20.1 Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "eth_getBeaconTimeStatus",
"params": []
}
20.2 Response
{
"enabled": false,
"active": false,
"healthy": false,
"deprecated": true,
"reason": "deprecated"
}
This endpoint is intentionally not a staking health endpoint.
Do not use it for validator, staking, delegation or micro-epoch monitoring.
Use the PoS overview endpoint instead when staking endpoints are available.
21. Error behavior
Known error conditions include:
| Condition | Behavior |
|---|---|
| Missing head/header | Returns error |
Invalid reportEpoch |
Returns error |
| PoS configured but not active yet | Returns error |
| Staking contract query fails | Returns error |
| Staking state unavailable | Returns error |
| Invalid validator address encoding | Returns JSON-RPC parameter error |
| Unsupported method on current release | Returns method-not-found error |
| Endpoint unavailable on public baseline | Returns method-not-found error |
Clients must handle errors gracefully.
A dashboard must not assume that a missing endpoint means the network is unhealthy.
It may simply mean the connected RPC node is not running a staking-enabled release.
22. Client integration guidance
Dashboards and explorers should:
- Use
eth_getPosValidatorsOverviewfor validator overview pages. - Use
eth_getPosValidatorDelegatorsonly when delegation detail is needed. - Treat
eth_getBeaconTimeStatusas deprecated. - Do not infer active validators from staking contract state alone.
- Use
currentlyValidatingfor current consensus participation display. - Use
stakingActivefor staking contract active/inactive display. - Show
joinEffectiveAtBlock,deactivateEffectiveAtBlockandunstakeAvailableAtBlockfor timing. - Show
proposalUptime...Observedalongside uptime values. - Do not display 100% uptime when observed duties are zero.
- Distinguish current stake from reported epoch reward.
- Distinguish live stake from epoch-effective stake.
- Treat all quantities as hex quantities.
- Treat these endpoints as XGR-specific extensions, not Ethereum-standard RPC.
- Probe availability before relying on them.
- Handle method-not-found on non-staking public baseline nodes.
23. Dashboard display recommendations
23.1 Validator state
Recommended validator status display:
| Display field | Source field |
|---|---|
| Currently validating | currentlyValidating |
| Staking active | stakingActive |
| Current stake | currentStake |
| Joined at | joinedAtBlock |
| Effective join | joinEffectiveAtBlock |
| Deactivated at | deactivatedAtBlock |
| Effective deactivation | deactivateEffectiveAtBlock |
| Can unstake | canUnstakeNow |
| Unstake available from | unstakeAvailableAtBlock |
Do not collapse currentlyValidating and stakingActive into one status.
They answer different questions.
23.2 Rewards and slashing
Recommended reward/slash display:
| Display field | Source field |
|---|---|
| Reported epoch | reportedEpoch |
| Validator reward | reportedEpochReward |
| Validator net reward | reportedEpochRewardValidatorNet |
| Commission | reportedEpochRewardCommission |
| Delegators net reward | reportedEpochRewardDelegatorsNet |
| Reward ineligible | rewardIneligible |
| Slashed | slashed |
23.3 Uptime
Recommended uptime display:
| Display field | Source field |
|---|---|
| Last 3 epochs uptime | proposalUptimeLast3EpochsBps or proposalUptimeLast3EpochsPercent |
| Last 10 epochs uptime | proposalUptimeLast10EpochsBps or proposalUptimeLast10EpochsPercent |
| Observed duties, 3 epochs | proposalUptimeLast3EpochsObserved |
| Observed duties, 10 epochs | proposalUptimeLast10EpochsObserved |
If observed duties are zero:
Display: no observed proposer duties
Do not display: 100%
23.4 Delegation
Recommended delegation display:
| Display field | Source field |
|---|---|
| Delegation enabled | delegationEnabled |
| Validator commission | commissionBps |
| Max delegated stake | maxDelegatedStake |
| Raw delegated stake | delegatedRaw |
| Active delegated stake | delegatedActive |
| Live total stake | totalLiveStake |
| Epoch-effective total stake | totalEpochEffectiveStake |
24. Security and exposure
These endpoints expose operational staking and validator-state information.
Recommended exposure policy:
| Endpoint | Public exposure |
|---|---|
eth_getPosValidatorsOverview |
Can be public once staking is officially active, subject to rate limits |
eth_getPosValidatorDelegators |
Can be public once staking is officially active, subject to rate limits and response-size monitoring |
eth_getBeaconTimeStatus |
No operational need; deprecated |
Operational controls:
- apply rate limits
- monitor response size
- monitor RPC latency
- avoid enabling expensive staking views on overloaded validator nodes
- prefer dedicated RPC/indexer nodes for dashboards
- handle unavailable staking state gracefully
- do not expose unrelated debug/operator namespaces just because staking endpoints are public
25. Endpoint availability checklist
Before integrating these endpoints, verify:
- the connected node runs a staking-enabled release
- the method exists
- PoS is active or expected to become active at
posFromBlock - the staking contract is deployed and queryable
- the node is synced
- the node can read current headers
- the node can read consensus validator snapshots
- the node can query staking contract state
- FeePool and staking contract balances are readable
- response quantities are decoded as hex quantities
- dashboard handles missing optional fields
26. Summary
| Endpoint | Status | Primary use |
|---|---|---|
eth_getPosValidatorsOverview |
Development / preview until official staking activation | Validator overview, staking dashboard, explorer validator page |
eth_getPosValidatorDelegators |
Development / preview until official staking activation | Delegator table, validator pool page, reward attribution |
eth_getBeaconTimeStatus |
Deprecated compatibility endpoint | Do not use for current staking monitoring |
Key field corrections:
| Field | Correct name |
|---|---|
| PoS activation block | posFromBlock |
| Current consensus validator flag | currentlyValidating |
| Staking contract active flag | stakingActive |
| Last finalized epoch validator flag | wasValidatorLastEpoch |
| Live validator/delegator total stake | totalLiveStake |
| Epoch-effective stake | totalEpochEffectiveStake |