# In the geth codebase where is the smart contract function executed

I'm looking to add some logging code to Geth.

I have a vm created with a single geth node and private blockchain running. I've deployed a smart contract to it.

I want to initiate a transaction on smart contract function and in the geth codebase I want to add some logging code before and after the EVM executes the function.

I've been looking through the code base and am unsure of where the entry and exit points of the EVM are.

(The structure of the EVM itself is defined in evm.go, the instruction set is defined in instructions.go, and the opcodes are defined in opcodes.go.)