Skip to main content
Ordinary transactions are the most common type of transaction because they result from processing incoming external and internal messages. They can be produced only while processing such messages. The phases of a transaction are described in detail on the dedicated page. The structure of an ordinary transaction is as follows:
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, 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 SendDestroyIfZero. If the contract was deleted in the action phase, this flag is true.