lighthouse/beacon_node/http_api/src
Mac L 3642efe76a Cache validator balances and allow them to be served over the HTTP API (#3863)
## Issue Addressed

#3804

## Proposed Changes

- Add `total_balance` to the validator monitor and adjust the number of historical epochs which are cached. 
- Allow certain values in the cache to be served out via the HTTP API without requiring a state read.

## Usage
```
curl -X POST "http://localhost:5052/lighthouse/ui/validator_info" -d '{"indices": [0]}' -H "Content-Type: application/json" | jq
```

```
{
  "data": {
    "validators": {
      "0": {
        "info": [
          {
            "epoch": 172981,
            "total_balance": 36566388519
          },
         ...
          {
            "epoch": 172990,
            "total_balance": 36566496513
          }
        ]
      },
      "1": {
        "info": [
          {
            "epoch": 172981,
            "total_balance": 36355797968
          },
          ...
          {
            "epoch": 172990,
            "total_balance": 36355905962
          }
        ]
      }
    }
  }
}
```

## Additional Info

This requires no historical states to operate which mean it will still function on the freshly checkpoint synced node, however because of this, the values will populate each epoch (up to a maximum of 10 entries).

Another benefit of this method, is that we can easily cache any other values which would normally require a state read and serve them via the same endpoint. However, we would need be cautious about not overly increasing block processing time by caching values from complex computations.

This also caches some of the validator metrics directly, rather than pulling them from the Prometheus metrics when the API is called. This means when the validator count exceeds the individual monitor threshold, the cached values will still be available.

Co-authored-by: Paul Hauner <paul@paulhauner.com>
2023-02-21 20:54:55 +00:00
..
attestation_performance.rs Fix attestation performance API InvalidValidatorIndex error (#3503) 2022-09-05 04:50:45 +00:00
attester_duties.rs Indicate that invalid blocks are optimistic (#3383) 2022-07-30 05:08:57 +00:00
block_id.rs Fix lints for Rust 1.63 (#3459) 2022-08-12 00:56:39 +00:00
block_packing_efficiency.rs Separate execution payloads in the DB (#3157) 2022-05-12 00:42:17 +00:00
block_rewards.rs Implement skip_randao_verification and blinded block rewards API (#3540) 2022-09-19 07:58:48 +00:00
database.rs Use async code when interacting with EL (#3244) 2022-07-03 05:36:50 +00:00
lib.rs Cache validator balances and allow them to be served over the HTTP API (#3863) 2023-02-21 20:54:55 +00:00
metrics.rs Metrics and DEBG log for late gossip blocks (#2533) 2021-08-23 00:59:14 +00:00
proposer_duties.rs Indicate that invalid blocks are optimistic (#3383) 2022-07-30 05:08:57 +00:00
publish_blocks.rs Reduce log severity for late and unrevealed blocks (#3775) 2022-12-10 00:45:18 +00:00
standard_block_rewards.rs Implement block_rewards API (per-validator reward) (#3907) 2023-02-07 08:33:23 +00:00
state_id.rs Optimise HTTP validator lookups (#3559) 2022-10-15 22:25:51 +00:00
sync_committee_rewards.rs Implement block_rewards API (per-validator reward) (#3907) 2023-02-07 08:33:23 +00:00
sync_committees.rs Don't return errors on HTTP API for already-known messages (#3341) 2022-08-10 07:52:57 +00:00
ui.rs Cache validator balances and allow them to be served over the HTTP API (#3863) 2023-02-21 20:54:55 +00:00
validator_inclusion.rs Add execution_optimistic flag to HTTP responses (#3070) 2022-07-25 08:23:00 +00:00
version.rs Add execution_optimistic flag to HTTP responses (#3070) 2022-07-25 08:23:00 +00:00