@startuml
skinparam backgroundColor #F0F8FF
skinparam defaultFontColor #333333
skinparam arrowColor #666666

' Define borders for all elements
skinparam entity {
  BorderColor #666666
  BackgroundColor #DDDDDD
}

skinparam control {
  BorderColor #666666
  BackgroundColor #DDDDDD
}

skinparam participant {
  BorderColor #666666
  BackgroundColor #DDDDDD
}



participant "TX Validator (Validator.go)" as TXValidator
participant "UTXO Store" as UTXOStore

== Fetch Block Height ==

TXValidator -> UTXOStore: getBlockHeight()
activate UTXOStore


UTXOStore --> TXValidator: Block Height
deactivate UTXOStore

== Spend UTXO ==


TXValidator -> UTXOStore: Spend(ctx, spends)
activate UTXOStore


UTXOStore --> TXValidator: Confirmation of Spend
deactivate UTXOStore

== Unspend UTXO ==


TXValidator -> UTXOStore: Unspend(ctx, spentUtxos)
activate UTXOStore

UTXOStore --> TXValidator: Confirmation of Unspend
deactivate UTXOStore

== Create UTXO ==

TXValidator -> UTXOStore: Create(ctx, tx)
activate UTXOStore


UTXOStore --> TXValidator: Confirmation of UTXO Creation
deactivate UTXOStore


== Delete UTXO ==

TXValidator -> UTXOStore: Delete(ctx, txId)
activate UTXOStore


UTXOStore --> TXValidator: Confirmation of Deleted UTXO
deactivate UTXOStore


== Decorate previous outputs ==

TXValidator -> UTXOStore: PreviousOutputsDecorate(ctx, outputs)
activate UTXOStore


UTXOStore --> TXValidator: Decorated outputs
deactivate UTXOStore

left footer Last Modified On: %date("dd-MMM-yyyy")

@enduml
