# Actions (https://docs-dmpho5eos-ton-core-docs.vercel.app/llms/foundations/actions/overview/content.md)



There are four actions that a smart contract can perform during the [action phase](/llms/foundations/phases/content.md):

* [send a message](/llms/foundations/actions/send/content.md);
* [reserve coins](/llms/foundations/actions/reserve/content.md);
* [change its libraries](/llms/foundations/actions/change-library/content.md);
* [change its code](/llms/foundations/actions/set-code/content.md).

A smart contract can create up to 255 such actions during its execution. Actions are created during the compute phase by special [TVM instructions](/llms/tvm/instructions/content.md). When an action is created, it is populated into the output action list of the smart contract. From the low-level perspective, the output action list is a linked list where each action is represented as a cell.

Finally, in the action phase, created actions are executed in the order they were populated into the output action list.

```tlb
out_list_empty$_ = OutList 0;
out_list$_ {n:#} prev:^(OutList n) action:OutAction
    = OutList (n + 1);
action_send_msg#0ec3c86d mode:(## 8) 
    out_msg:^(MessageRelaxed Any) = OutAction;
action_set_code#ad4de08e new_code:^Cell = OutAction;
action_reserve_currency#36e6b809 mode:(## 8)
    currency:CurrencyCollection = OutAction;
libref_hash$0 lib_hash:bits256 = LibRef;
libref_ref$1 library:^Cell = LibRef;
action_change_library#26fa1dd4 mode:(## 7)
    libref:LibRef = OutAction;
```
