once a contract is compiled and deployed to the blockchain, it stores the 'runtime bytecode' in the blockchain (as I understand). but to invoke the functions of a contract by an EOA, it requires ABI as an interface. Can anyone please tell me where exactly is the ABI definitions stored? is it also part of the runtime bytecode stored in blockchain?
The Abi is not stored in the blockchain, the code should be provided to the users to be able to interact with it. Services like Etherscan allow to verify the code and also allows to download the ABI of a contract trough their API if the contract was verified.
So you need the code or at least the functions names and parameters types of each function. However, If a contract was deployed and the full code is not publically available you should not trust it.
Hope this helps.
The ABI is a readable encoded form that describe the smart contract interface behavior.
What in the reality happens is that the EVM manage the calls to the contract using, let’s say, an equivalent of a “mapping” mechanism: you enter one hash key (the famous first four bytes of the true hash of function name and type of parameters) and found the jump to the code to be executed next.
So there is no ABI stored in the contract. At least there is one hash table functionally equivalent to the ABI, but not readable in human language.