3 Answers
3

Internal transactions, despite the name (which isn't part of the yellowpaper; it's a convention people have settled on) aren't actual transactions, and aren't included directly in the blockchain; they're value transfers that were initiated by executing a contract.

In the Ethereum protocol there's only transactions and message calls. A transaction is a type of message call.

A transaction may perform other message calls, but these are not transactions (even though blockchain explorers may label them inaccurately as "internal transactions"). These (internal) message calls are not published on the blockchain.

This is what you will see on the blockchain: a "Normal transaction". An "Internal Transaction" is the effects of taking the data part, feeding it to the contract C1, and executing the Ethereum Virtual Machine. The data is what tells C1 that it should call another contract C2: there is no separate {from:C1, to:C2,...} object on the blockchain that's needed.

Contracts calling each other, along with receiving payment, is the reason why "Normal transactions are usually much less than Internal transactions". For example, TheDAO tokens were originally purchased by calling a function on TheDAO and sending ETH with it.

When you say "These (internal) message calls are not published on the blockchain", isn't that false since all the data is public and contained in a block, assuming of course the transaction was mined?
– mecampbellsoupDec 14 '17 at 22:52

1

@mecampbellsoup The internal message calls can be derived since indeed all blockchain data is public, but you also need to execute the EVM as the answer explains. They are not "published" in the sense that most clients do not provide a "lookup" for them.
– eth♦Dec 30 '17 at 13:15

An internal transaction is not a real transaction - it has no signature and is not included in the blockchain. It is the result of a contract initiating a value transfer, or calling another contract, typically using the CALL opcode.