An external account sends ether
to either another external account or a smart contract identically--by initiating an signing the transaction. The smart contract will only receive the ether
if the called function is marked payable
.
In the case of an external account sending to another external account, the ether
simply transfers (as long as the sender has the money), no problem.
A smart contract can send ether
, but that send must have been initiated from an external account to begin with (in other words, smart contracts cannot initiate transactions). In the past, people called this type of send an internal transaction
, but these days its called a message call
, message
, call
, etc.
Be careful with the word "message," though. I can initiate an external transaction to another external account and insert a message
by stuffing text into the input
field. My friend can then read that "message."
The other type of message
you will hear about is a message
coming from a smart contract.
As far as "why does a contract not need to sign...", think of it this way: The smart contract is autonomous
. There's no-one there to sign anything. Plus the smart contract cannot initiate transactions. Furthermore, if a smart contract could initiate transactions and sign them, its private key would necessarily have to be stored on the blockchain. Everyone could see it, anyone could steal it, and it would be easy to impersonate the smart contract, so it wouldn't work in any case.
sendTransaction
2. I don't exactly understand this, but 2 accounts can send transaction without a contract. 3. Because contracts are governed by EoA's. So EOA's regulate how a contract works,