# Forks The aim of the fork tests is to ensure that a pre-fork state can be transformed into a valid post-fork state, utilizing the `upgrade` function found in the relevant `fork.md` spec. There is only one handler: `fork`. Each fork (after genesis) is handled with the same format, and the particular fork boundary being tested is noted in `meta.yaml`. ## Test case format ### `meta.yaml` A yaml file to signify which fork boundary is being tested. ```yaml fork: str -- Fork being transitioned to ``` #### Fork strings Key of valid `fork` strings that might be found in `meta.yaml` | String ID | Pre-fork | Post-fork | Function | | - | - | - | - | | `altair` | Phase 0 | Altair | `upgrade_to_altair` | | `merge` | Phase 0 | Merge | `upgrade_to_merge` | ### `pre.ssz_snappy` An SSZ-snappy encoded `BeaconState`, the state before running the fork transition. ### `post.ssz_snappy` An SSZ-snappy encoded `BeaconState`, the state after applying the fork transition. *Note*: This type is the `BeaconState` after the fork and is *not* the same type as `pre`. ## Processing To process this test, pass `pre` into the upgrade function defined by the `fork` in `meta.yaml`. ## Condition The resulting state should match the expected `post`.