Blocks seem to store only txIDs, where does the transaction data come from for IBD? I know that blocks store transactions. After looking into a block, I can see that it only stores txIDs.
Question 1 - Where are actual transaction objects stored?
If you tell me that it's stored in a separate database called UTXO Set, I might say that the UTXO Set only stores an unspent transactions, what about spent transactions?
Question 2 If I join the network and I am new, my node starts syncing with other nodes to download the blockchain. But since each block only contains txIds, how does my node end up validating transactions (to validate, it needs to know if from address has the actual balance).
Does it mean that nodes also broadcast UTXO databases too and if so, how and when?
I'd appreciate a good explanation on this topic.
Blocks do not contain transcation ids at all, they contain the full transactions themselves. If you are using the getblock rpc and seeing txids, that's just because showing the details of all of the transactions is extremely verbose, so only the txids are output. You can see the full transaction details of a block by setting the second argument to 2.