Every transaction starts with an Externally Owned Account, and it's signed by somebody. When
As part of that transaction, a contract callsmay call another contract, and some people call itthis an "internal transaction", but it isn't actuallyan "internal transaction" isn't really a transaction; It's part of the transaction started by an Externally Owned Account. It's more accurate to refer to it as a call. The sameA single transaction, with a single signature, may include multiple other contract-to-contract calls.
A call doesn't need to be signed. The called contract automatically has access to the identity of the calling contract that called it in a variable called msg.sender
, so if it needs to make authentication checks it usually looks at that.