---
# System prepended metadata

title: Altair changes in Prysm

---

# Altair changes in Prysm

## Motivation
Add commentary to Altair code changes to improve on review expereince and note importance for anyone to audit and add some updates of current status of Altair branch (`hf1`) merging in to Develop branch (`develop`)

**Update (10/4): Everything is be under `develop` branch**

## Review by Altair branch 
The Altair branch is `hf1` and the corresponding PR which targets the branch to `develop` is:
https://github.com/prysmaticlabs/prysm/pull/9123

Note: we have been incrementally been merging `hf1` to `develop` by using smaller PRs. These merges were under more rigorously review by Preston, but they are still worth looking at for anyone that is interested. The following are already merged into `develop` so it won't show up in `9123`:

**Update (10/4): The above work is done, everything is under `develop`. Skip to `Review by Altair packages` section**


* **Core consensus related**
    * Validate sync message time: https://github.com/prysmaticlabs/prysm/pull/9325
    * Epoch pre compute: https://github.com/prysmaticlabs/prysm/pull/9309
    * Block can process sync aggregate: https://github.com/prysmaticlabs/prysm/pull/9308
    * Calculate base reward: https://github.com/prysmaticlabs/prysm/pull/9307
    * Sync committee helpers: https://github.com/prysmaticlabs/prysm/pull/9269
    * Sync commiteee period helpers: https://github.com/prysmaticlabs/prysm/pull/9248
    * Sync committee pool: https://github.com/prysmaticlabs/prysm/pull/9203
    * Altair deposits: https://github.com/prysmaticlabs/prysm/pull/9227
* **Beacon state pkg related**
    * https://github.com/prysmaticlabs/prysm/pull/9283
    * https://github.com/prysmaticlabs/prysm/pull/9279
    * https://github.com/prysmaticlabs/prysm/pull/9228


## Review by Altair packages
Another way to review at all the Altair changes is to group them by package. The relevant packages are
* Core consensus
    * General: https://github.com/prysmaticlabs/prysm/tree/develop/beacon-chain/core/altair
    * Some sync committee related helpers that utilize caching are here: https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/core/helpers/committee.go

* State transition
    * The post state transition for is part of: https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/core/state/transition_no_verify_sig.go
    * Process slots where the upgrade ot fork happens:
https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/core/state/transition.go


* Beacon node (server) <-> validator (client) RPC interaction
    * Beacon node RPC end points
        * Updated duties end point so Altair validator can get sync committee duty https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/rpc/prysm/v1alpha1/validator/assignments.go
        * Updated block streaming to support Altair https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/rpc/prysm/v1alpha1/validator/blocks.go
        * Updated get and submit Altair beacon block end points https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/rpc/prysm/v1alpha1/validator/proposer.go
        * Optimization to filter out most profitable sync aggregate https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/rpc/prysm/v1alpha1/validator/proposer_sync_aggregate.go
        * Added new get and submit sync committee message and contribution end points https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/rpc/prysm/v1alpha1/validator/sync_committee.go
    * Validator client using the new end points
        * Can sign Altair block https://github.com/prysmaticlabs/prysm/blob/develop/validator/client/propose.go
        * Can sign sync committee message and contribution https://github.com/prysmaticlabs/prysm/blob/develop/validator/client/sync_committee.go
        * Can cache sync committee related role for current epoch https://github.com/prysmaticlabs/prysm/blob/develop/validator/client/validator.go


* Networking
    * Can broadcast sync committee message https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/p2p/broadcaster.go
    * Can discover sync committee subnet https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/p2p/discovery.go
    * Can subscribe to new subnet https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/p2p/subnets.go https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/sync/subscriber.go
    * Can watch for fork https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/p2p/fork_watcher.go
    * New gossip scoring changes https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/p2p/gossip_scoring_params.go
    * New metadata handler https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/sync/rpc_metadata.go
    * Validate sync committee message from p2p https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/sync/validate_sync_committee_message.go
    * Validate sync contribution message from p2p https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/sync/validate_sync_contrbution_proof.go
    * Helpers to retrieve fork digest https://github.com/prysmaticlabs/prysm/blob/develop/shared/p2putils/fork.go


* Sync committee pool
    * Added a new sync committee pool to cache sync committee objects received from p2p or local rpc. https://github.com/prysmaticlabs/prysm/tree/develop/beacon-chain/operations/synccommittee

* New beacon state v2 
    * Beacons state v2 that is similar to v1 but with modified altair state fields https://github.com/prysmaticlabs/prysm/tree/develop/beacon-chain/state/v2

* New sync committee related caching
    * Caches head state with highest slot:
        * https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/blockchain/head_sync_committee_info.go
    * Caches sync committee positions for current and next period:
        * https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/cache/sync_committee.go
    * Caches are utililzed by these helpers:
        * https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/core/helpers/committee.go
    * Total active balance is also cached now:
        * https://github.com/prysmaticlabs/prysm/pull/9123/files#diff-c8ffb6619fa0a80bffcf809110bdb5d6b592bac308387ac12edaa252f184eda7R55


* Beacon state DB changes
    * Changes to support Altair. Ensures marshal and unmarshal to the correct protobuf object. https://github.com/prysmaticlabs/prysm/blob/develop/beacon-chain/db/kv/state.go