Skip to content

Transaction Lifecycle

Steps executed during a transaction for Dusk

Transactions on Dusk follow a specific lifecycle. Here’s a basic overview:

  1. Creation: The process begins when a wallet or similar software generates a new transaction.
  2. Broadcasting: The transaction is sent out to the Dusk network and broadcast within it.
  3. Validation: Each node receiving the transaction verifies its validity before adding it to the Mempool.
  4. Inclusion in Mempool: The transaction is added to the Mempool (transaction included event).
    • If the transaction expires before being added to a block, it is removed from the Mempool (transaction removed event).
    • If the transaction is replaced by another transaction with higher gas price, it is removed from the Mempool (transaction removed event)
  5. Inclusion in candidate block: A block generator includes the transaction from the Mempool into a candidate block.
    • If the transaction is discarded during the block generation, it is removed from the Mempool (this event is currently not emitted1)
  6. Acceptance: The block containing the transaction is accepted into the blockchain (block accepted event).
    1. Execution: When accepting the block, the transaction is executed (transaction executed event).
      • Successful Transaction: No errors available
      • Reverted or Failed Transaction: Errors available (transaction executed event with error field available). This is contract-specific and indicates a revert (panic) or other error that was returned.
    2. Removal from Mempool: The transaction is removed from the mempool (transaction removed event).
  7. Confirmation: The block is confirmed, making the transaction unlikely to be reverted (block state-change event with state changed to confirmed).
  8. Finalization: The block reaches finality, making the transaction immutable and irreversible. (block state-change event with state changed to finalized).

For more details about confirmation and finalization, see the finality rules of the Succinct Attestation page.

Checking transaction status

This applies to all genesis contracts and any future third party contracts that use proper error handling and panics.

  • Successful Transaction: Check for the combination of a successful transaction executed event (with error None) and the finalized block event.
    • transaction executed event with no errors and block statechange finalized event.
  • Reverted & Failed Transactions: Check the transaction executed event for errors.
    • transaction executed event with error field available.
  • Reverted Block: If a block is reverted, re-listen for the transaction events and the new block.
    • block reverted event and re-evaluate the transaction status.

Practical considerations for listening to transactions

For example for handling Dusk deposits with Moonlight:

  • Monitor the transaction executed event and ensure no errors.
    • Check for relevant contract specific events like MoonlightTransactionEvent
  • Confirm that the block containing the transaction is finalized.
  • Handle block reverts by re-listening for transaction events.

By following these guidelines, you can ensure accurate tracking of transactions on the Dusk blockchain.

Deep dive: Discarded transactions

This is nothing to be concerned about and can be ignored if you are running official wallet software or using the official SDKs (eg. w3sper).

A transaction is rarely discarded in two cases:

  • Invalid to protocol specifications (payload incomplete, corrupted, wrong)
  • Gas limit is below the protocol minimum gas limit

Such invalid transactions are also caught by pre-verifications on multiple steps both in the wallet and later on the node.

To achieve this, one must actively use a modified or incorrectly implemented wallet software or SDK. Such transactions can be compared to invalid data packets on a port that are simply ignored because the listening application has no use for them.

Footnotes

  1. The emission of this event is planned to be implemented soon.