public boolean peerCheck(final ForkId forkId) {
    if (forkId == null || noForksAvailable) {
      return true; // Another method must be used to validate (i.e. genesis hash)
    }
    // Run the fork checksum validation rule set:
    //   1. If local and remote FORK_CSUM matches, connect.
    //        The two nodes are in the same fork state currently. They might know
    //        of differing future forks, but that's not relevant until the fork
    //        triggers (might be postponed, nodes might be updated to match).
    //   2. If the remote FORK_CSUM is a subset of the local past forks and the
    //      remote FORK_NEXT matches with the locally following fork block number,
    //      connect.
    //        Remote node is currently syncing. It might eventually diverge from
    //        us, but at this current point in time we don't have enough information.
    //   3. If the remote FORK_CSUM is a superset of the local past forks and can
    //      be completed with locally known future forks, connect.
    //        Local node is currently syncing. It might eventually diverge from
    //        the remote, but at this current point in time we don't have enough
    //        information.
    //   4. Reject in all other cases.
    if (!isHashKnown(forkId.getHash())) {
      return false;
    }

    final BlockHeader header = chainHeadSupplier.get();
    final long forkValue =
        blockNumberForks.contains(forkNext) ? header.getNumber() : header.getTimestamp();

    return forkValue < forkNext
        || (isForkKnown(forkId.getNext())
            && isRemoteAwareOfPresent(forkId.getHash(), forkId.getNext()));
  }
EIP-2124 behaviour

@param forkId to be validated.
@return boolean (peer valid (true) or invalid (false))
ethereum/core/src/main/java/org/hyperledger/besu/ethereum/forkid/ForkIdManager.java