# Transaction lifecycle diagram

**URL:** <https://community.starknet.io/t/transaction-lifecycle-diagram/999>\
**Category:** Starknet Technical Development\
**Created:** [March 31, 2022, 1:53pm UTC](https://community.starknet.io/t/transaction-lifecycle-diagram/999 "2022-03-31T13:53:29Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![maciejka](https://dub1.discourse-cdn.com/flex005/user_avatar/community.starknet.io/maciejka/32/96_2.png) [@maciejka](https://community.starknet.io/u/maciejka)\
**Post date:** [March 31, 2022, 1:53pm UTC](https://community.starknet.io/t/transaction-lifecycle-diagram/999/1 "2022-03-31T13:53:29Z")

</div>

I am posting here a diagram that is an outcome of discord discussion with @FeedTheFed about StarkNet transaction lifecycle. It is a documentation of current state of affairs not a design document. Expect changes in the future.

 ![transaction-lifecycle](https://europe1.discourse-cdn.com/flex005/uploads/starknet1/original/1X/5fb0aa4da47aa002d3d5892b54e50ef5e29c1a66.png)

---

<div class="post-metadata">

**Author:** ![0xjanek](https://dub1.discourse-cdn.com/flex005/user_avatar/community.starknet.io/0xjanek/32/424_2.png) [@0xjanek](https://community.starknet.io/u/0xjanek)\
**Post date:** [March 31, 2022, 2:15pm UTC](https://community.starknet.io/t/transaction-lifecycle-diagram/999/2 "2022-03-31T14:15:35Z")

</div>

Great diagram! Are the arrows possible transitions? And if so, why is it possible to go backwards? (ie ACCEPTED\_ON\_L2 → RECEIVED )

---

<div class="post-metadata">

**Author:** ![maciejka](https://dub1.discourse-cdn.com/flex005/user_avatar/community.starknet.io/maciejka/32/96_2.png) [@maciejka](https://community.starknet.io/u/maciejka)\
**Post date:** [March 31, 2022, 3:02pm UTC](https://community.starknet.io/t/transaction-lifecycle-diagram/999/3 "2022-03-31T15:02:11Z")

</div>

- ACCEPTED\_ON\_L2 → RECEIVED - state update failed due to l1 reorg or sequencer creating invalid proof
- ACCEPTED\_ON\_L1 → RECEIVED - l2 state rewind due to a deep l1 reorg
- REJECTED → RECEIVED - due to l1 reorg unprovable state might become provable because reorged l1 state might create another set of l1-\>l2 messages.

I am not sure how transactions that will be canceled by a reorg (I mean there are no corresponding l1-\>l2 messages after the reorg) should be treated. REJECTED? @FeedTheFed

---

<div class="post-metadata">

**Author:** ![milan](https://dub1.discourse-cdn.com/flex005/user_avatar/community.starknet.io/milan/32/23836_2.png) [@milan](https://community.starknet.io/u/milan)\
**Post date:** [March 31, 2022, 3:41pm UTC](https://community.starknet.io/t/transaction-lifecycle-diagram/999/4 "2022-03-31T15:41:49Z")

</div>

I was learning about this some time ago as well, came up with [this diagram](https://www.figma.com/file/gsjq6VvvFAMMranpvnpjDj/StarkNet-TX-and-Block-status?node-id=0%3A1). It’s pretty similar to @maciejka’s but the tx and block statuses are split and I’ve added some more comments (because I forget these things).
