# Ordinary transactions (https://docs-orhepa2tm-ton-core-docs.vercel.app/llms/foundations/messages/ordinary-tx/content.md)



Ordinary [transactions](/llms/foundations/messages/overview/content.md) are the most common type of transaction because they result from processing [incoming external](/llms/foundations/messages/external-in/content.md) and [internal](/llms/foundations/messages/internal/content.md) messages. They can be produced only while processing such messages. The phases of a transaction are described in detail on the [dedicated page](/llms/foundations/phases/content.md).

The structure of an ordinary transaction is as follows:

```tlb
trans_ord$0000
    credit_first:Bool
    storage_ph:(Maybe TrStoragePhase)
    credit_ph:(Maybe TrCreditPhase)
    compute_ph:TrComputePhase
    action:(Maybe ^TrActionPhase)
    aborted:Bool
    bounce:(Maybe TrBouncePhase)
    destroyed:Bool
= TransactionDescr;
```

The fields of an ordinary transaction are:

* `credit_first` indicates whether the transaction started with the credit phase or the storage phase. This flag matches the `bounce` flag of the message that triggered the transaction and is `true` for incoming external messages.
* `storage_ph` indicates the result of the storage phase: the number of storage fees collected and any resulting contract state change. This field is never equal to `Nothing` in the current implementation.
* `credit_ph` indicates the result of the credit phase: the number of credits collected and the state update of the contract, if any. This field is `Nothing` when the transaction was triggered by an incoming external message.
* `compute_ph` holds the result of TVM execution on the contract. If this phase is [skipped](/llms/foundations/phases/content.md), for example, because there are no funds or no state on the destination account, the field stores the skip reason instead.
* `action` holds the result of the action phase. This field is `Nothing` if the compute phase failed and is populated otherwise.
* `aborted` indicates whether the action phase was unsuccessful.
* `bounce` holds the result of the bounce phase and is `Nothing` if the bounce phase was not executed.
* `destroyed` indicates whether the account was deleted in the action phase by using [`SEND_MODE_DESTROY`](/llms/foundations/messages/modes/content.md). If the contract was deleted in the action phase, this flag is `true`.
