class CombinedChainDataClient {

  public List<CommitteeAssignment> getCommitteesFromState(BeaconState state, UInt64 epoch) {
    List<CommitteeAssignment> result = new ArrayList<>();
    final UInt64 startingSlot = compute_start_slot_at_epoch(epoch);
    int committeeCount = get_committee_count_per_slot(state, epoch).intValue();
    for (int i = 0; i < SLOTS_PER_EPOCH; i++) {
      UInt64 slot = startingSlot.plus(i);
      for (int j = 0; j < committeeCount; j++) {
        UInt64 idx = UInt64.valueOf(j);
        List<Integer> committee = CommitteeUtil.get_beacon_committee(state, slot, idx);
        result.add(new CommitteeAssignment(committee, idx, slot));
      }
    }
    return result;
  }

  public  CombinedChainDataClient(
      final RecentChainData recentChainData, final StorageQueryChannel historicalChainData);
  public  CombinedChainDataClient(
      final RecentChainData recentChainData,
      final StorageQueryChannel historicalChainData,
      final StateTransition stateTransition);

}