Internal Message
A message sent between two smart contracts inside TON. The primary way contracts interact in the network's actor model.
Aliases: intra-contract message, in-msg
Internal Message is a message sent from one TON smart contract to another. In TON’s actor model this is the only way contracts can interact — there are no synchronous cross-contract calls, only asynchronous messages.
Structure
An internal message in TVM is a cell that holds:
- Sender address (origin contract).
- Destination address (target contract).
- Value in TON plus optional jettons / extra currencies.
- Opcode (32-bit body prefix) used by the receiver for dispatch.
- Body — typed payload following a TLB schema or ABI.
- Bounce flag — whether to return the message on failure.
How it flows
When the sender contract emits an outgoing message during its action phase, the message lands in the outbound queue of its shard. The network routes it to the destination shard — which may take a block or two if the parties are on different shards. The receiver then processes it in its next transaction: checks the opcode, parses the body, executes the handler.
Key properties
- Asynchronous. At least one block passes between send and receive. A request/response pattern is two separate transactions.
- Who pays. Usually the sender: forward-fee for routing plus the receiver’s gas if it’s deducted from the attached value (
mode 0). - Delivery guarantees. The network guarantees delivery but not timing. If the destination doesn’t exist or rejects the message it bounces back, provided the bounce flag was set.
Internal messages are the unit of value and logic flow in TON. Every DEX swap, every jetton transfer, every NFT mint is a chain of internal messages.