Why are ethereum addresses hashes of public keys?
Externally owned accounts: No issue using public key directly.
Design choice for parity between externally owned and internal accounts (contracts).
Contracts are not linked to private keys, contract address is calculated from:
hash of creating address, transaction nonce.
Naive case: replace with hash of public key and nonce, in the case where a contract is created from another contract, there is not public key.