{-# LANGUAGE TemplateHaskell #-}

-- | Datum and redeemer types, as well as helper functions for the commit
-- validator implemented in aiken.
module Hydra.Contract.Initial where

import PlutusLedgerApi.V3 (
  CurrencySymbol,
  Datum (..),
  Redeemer (Redeemer),
  ToData (toBuiltinData),
  TxOutRef,
 )
import PlutusTx qualified

type DatumType = CurrencySymbol

type RedeemerType = InitialRedeemer

data InitialRedeemer
  = ViaAbort
  | ViaCommit
      { RedeemerType -> [TxOutRef]
committedRefs :: [TxOutRef]
      -- ^ Points to the committed Utxo.
      }

PlutusTx.unstableMakeIsData ''InitialRedeemer

datum :: DatumType -> Datum
datum :: DatumType -> Datum
datum DatumType
a = BuiltinData -> Datum
Datum (DatumType -> BuiltinData
forall a. ToData a => a -> BuiltinData
toBuiltinData DatumType
a)

redeemer :: RedeemerType -> Redeemer
redeemer :: RedeemerType -> Redeemer
redeemer RedeemerType
a = BuiltinData -> Redeemer
Redeemer (RedeemerType -> BuiltinData
forall a. ToData a => a -> BuiltinData
toBuiltinData RedeemerType
a)