> ## Documentation Index
> Fetch the complete documentation index at: https://companyname-a7d5b98e-security-edits.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Actions

There are four actions that a smart contract can perform during the [action phase](/foundations/phases#action-phase):

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

A smart contract can create up to 255 such actions during its execution. Actions are created during the compute phase by special [TVM instructions](/tvm/instructions). 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 theme={"theme":{"light":"github-light-default","dark":"dark-plus"},"languages":{"custom":["/resources/grammars/tolk.tmLanguage.json","/resources/grammars/tlb.tmLanguage.json","/resources/grammars/fift.tmLanguage.json","/resources/grammars/tasm.tmLanguage.json","/resources/grammars/func.tmLanguage.json"]}}
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;
```
