Ethereum transactions are also messages. The difference is that transactions are signed messages, because they were signed by a human with a private key.
Ethereum contracts create 'unsigned messages' and humans create 'signed messages'.
When a contract calls .send()
or .transfer()
, it can transfer some amount of Ether. This is an unsigned message, but it is also called an 'internal transaction'. An example:
https://etherscan.io/tx/0x3f50e8b755fdefceb2dad2854424211c3c1f8a8b085160c5be5c46d57c2ec183#internal
In this transaction, the human owner of 0xc459...
called a function in contract 0xe70b...
by creating a signed message. Then, the contract called .send()
to create an unsigned message to transfer some Ether to 0xc459...
.
Signed messages are stored physically in the blockchain, on the hard drives of Ethereum nodes. Unsigned messages are not necessarily stored, they are implied by the execution flow of a contract function call.
In conclusion:
Signed messages are 'transactions' and are created by humans
Unsigned messages are 'internal transactions' and are created by contracts using a function call