recv_internalandmainhaveid = 0recv_externalhasid = -1run_ticktockhasid = -2split_preparehasid = -3split_installhasid = -4
id = 0, meaning it must define either recv_internal or main, but not both.
Receive internal
Therecv_internal function is invoked when a smart contract receives an inbound internal message.
Any of the following recv_internal declarations can be used:
balanceis the smart contract balance in nanotons after adding the amountmsg_valuein the inbound message. It is an integer.msg_valueis the amount in nanotons included in the inbound message. It is an integer.in_msg_cellis the inbound message, given as a cell.in_msg_bodyis the inbound message body, equal to the body field inin_msg_cell. The body is given as a cell slice.
Main
main is an alias for recv_internal.
If the intention of the code is to handle inbound internal messages, it is preferable to use recv_internal over main, since recv_internal states more clearly the intention of the code.
Receive external
Therecv_external function handles inbound external messages. It allows declarations similar to those for recv_internal:
msg_value is always 0, since external messages cannot carry coins, as they are created outside the blockchain.
The behavior of the stack is identical to the behavior described for recv_internal.
Run ticktock
Therun_ticktock triggers when tick and tock transactions occur. It allows the following possible declarations:
balanceis the smart contract balance in nanotons. It is an integer.addressis the address of the current account inside the masterchain. It is an unsigned 256-bit integer.is_tocka flag that indicates if it is a tock transaction (-1) or a tick transaction (0).
recv_internal.
Split prepare
Thesplit_prepare would trigger when a split prepare transaction occurs. Even though the split_prepare name is currently reserved, split prepare transactions are currently not in use.
Split install
Thesplit_install would trigger when a split install transaction occurs. Even though the split_install name is currently reserved, split install transactions are currently unavailable.