how to get all the fields that have been modified on entity save (form submit)?
When you are in the presave hook, the updated $node object will have $node-&gt;original, which is the node before things were changed.

Nodes also have a $node-&gt;toArray(), method that will flatten the object into a multidimensional associative array.

So, this

array_keys(DiffArray::diffAssocRecursive($node-&gt;toArray(), $node-&gt;original-&gt;toArray())


should


Take the $node and $node-&gt;original and convert them into arrays.
Run the two arrays through one of the Drupal helper classes that will generate differences in multidimensional associative arrays.
Return the top level keys.  Because of the ways nodes are built, this will be all of the changed property and field names.