# WIP: Merge Interop Preparation
## Background
Let's get ready to support the merge interop effort that's happening at the start of Oct. This document tracks the necessary components that need to be done to participate at the virtual merge event. We will break down the general implementation into tasks.
Prysm has participated in Rayonism using this [merge]() branch and we have made it easy to spin up a merge devnet using Prysm and Catalyst with [instructions](https://github.com/rauljordan/catalyst-devnet).
Many moving pieces have changed since Rayonism from both spec and API's perspective. It's important that we use the next 2-3 weeks to catch up with a stable implementation to reflect the current progress.
## High level tasks
We *must* implement the core consensus spec
We *must* understand and utililize the engine API calls by hooking them to state transition function, fork choice and more
We *must* pass cross client vector tests
We *should* implement client settings such as terminal total difficulty override if time permits
## Tasks
- Beacon chain & Validator
- Extend Beacon state object to support merge
- Extend Beacon block object to support merge
- New extended objects can pass spec ssz vector tests
- Add beacon block Merge wrapper on top of protobuf
- Add beacon state v3 pkg which includes caching, getter and setter
- Implement `process_execution_payload`
- Fork trigger / upgrade
- Implement fork trigger condition and `upgrade_to_merge`
- Implement initizliation of transition store `initialize_transition_store`
- Fork choice handler
- Implement proper calling of `set_head` and `finalize_block` for fork choice handler
- Implement `is_valid_terminal_pow_block` and usage for fork choice handler
- Networking
- Extend new gossipsub checks for `beacon_block`
- Add new fork diguest, discovery and req/resp changes