{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-orphans #-}

module Cardano.Ledger.Conway.Tx (
  module BabbageTxReExport,
  tierRefScriptFee,
  getConwayMinFeeTx,
  Tx (..),
) where

import Cardano.Ledger.Allegra.Tx (validateTimelock)
import Cardano.Ledger.Alonzo.Core (AlonzoEraTxWits)
import Cardano.Ledger.Alonzo.Tx (
  alonzoMinFeeTx,
  alonzoTxEqRaw,
  auxDataAlonzoTxL,
  bodyAlonzoTxL,
  isValidAlonzoTxL,
  mkBasicAlonzoTx,
  sizeAlonzoTxF,
  witsAlonzoTxL,
 )
import Cardano.Ledger.Babbage.Tx as BabbageTxReExport (
  AlonzoEraTx (..),
  AlonzoTx (..),
  Tx (..),
 )
import Cardano.Ledger.BaseTypes (NonZero (..), unboundRational)
import Cardano.Ledger.Binary (Annotator, DecCBOR (..), EncCBOR, ToCBOR)
import Cardano.Ledger.Coin (Coin (Coin))
import Cardano.Ledger.Conway.Era (ConwayEra)
import Cardano.Ledger.Conway.PParams (ConwayEraPParams (..), ppMinFeeRefScriptCostPerByteL)
import Cardano.Ledger.Conway.TxAuxData ()
import Cardano.Ledger.Conway.TxBody ()
import Cardano.Ledger.Conway.TxWits ()
import Cardano.Ledger.Core
import Cardano.Ledger.MemoBytes (EqRaw (..))
import Cardano.Ledger.Val (Val (..))
import Control.DeepSeq (NFData)
import Data.Word (Word32)
import GHC.Generics (Generic)
import GHC.Stack
import Lens.Micro (Lens', lens, (^.))
import NoThunks.Class (NoThunks)

instance EraTx ConwayEra where
  newtype Tx ConwayEra = MkConwayTx {Tx ConwayEra -> AlonzoTx ConwayEra
unConwayTx :: AlonzoTx ConwayEra}
    deriving newtype (Tx ConwayEra -> Tx ConwayEra -> Bool
(Tx ConwayEra -> Tx ConwayEra -> Bool)
-> (Tx ConwayEra -> Tx ConwayEra -> Bool) -> Eq (Tx ConwayEra)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Tx ConwayEra -> Tx ConwayEra -> Bool
== :: Tx ConwayEra -> Tx ConwayEra -> Bool
$c/= :: Tx ConwayEra -> Tx ConwayEra -> Bool
/= :: Tx ConwayEra -> Tx ConwayEra -> Bool
Eq, Int -> Tx ConwayEra -> ShowS
[Tx ConwayEra] -> ShowS
Tx ConwayEra -> String
(Int -> Tx ConwayEra -> ShowS)
-> (Tx ConwayEra -> String)
-> ([Tx ConwayEra] -> ShowS)
-> Show (Tx ConwayEra)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> Tx ConwayEra -> ShowS
showsPrec :: Int -> Tx ConwayEra -> ShowS
$cshow :: Tx ConwayEra -> String
show :: Tx ConwayEra -> String
$cshowList :: [Tx ConwayEra] -> ShowS
showList :: [Tx ConwayEra] -> ShowS
Show, Tx ConwayEra -> ()
(Tx ConwayEra -> ()) -> NFData (Tx ConwayEra)
forall a. (a -> ()) -> NFData a
$crnf :: Tx ConwayEra -> ()
rnf :: Tx ConwayEra -> ()
NFData, Context -> Tx ConwayEra -> IO (Maybe ThunkInfo)
Proxy (Tx ConwayEra) -> String
(Context -> Tx ConwayEra -> IO (Maybe ThunkInfo))
-> (Context -> Tx ConwayEra -> IO (Maybe ThunkInfo))
-> (Proxy (Tx ConwayEra) -> String)
-> NoThunks (Tx ConwayEra)
forall a.
(Context -> a -> IO (Maybe ThunkInfo))
-> (Context -> a -> IO (Maybe ThunkInfo))
-> (Proxy a -> String)
-> NoThunks a
$cnoThunks :: Context -> Tx ConwayEra -> IO (Maybe ThunkInfo)
noThunks :: Context -> Tx ConwayEra -> IO (Maybe ThunkInfo)
$cwNoThunks :: Context -> Tx ConwayEra -> IO (Maybe ThunkInfo)
wNoThunks :: Context -> Tx ConwayEra -> IO (Maybe ThunkInfo)
$cshowTypeOf :: Proxy (Tx ConwayEra) -> String
showTypeOf :: Proxy (Tx ConwayEra) -> String
NoThunks, Typeable (Tx ConwayEra)
Typeable (Tx ConwayEra) =>
(Tx ConwayEra -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size)
    -> Proxy (Tx ConwayEra) -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size)
    -> Proxy [Tx ConwayEra] -> Size)
-> ToCBOR (Tx ConwayEra)
Tx ConwayEra -> Encoding
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [Tx ConwayEra] -> Size
(forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (Tx ConwayEra) -> Size
forall a.
Typeable a =>
(a -> Encoding)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy a -> Size)
-> ((forall t. ToCBOR t => Proxy t -> Size) -> Proxy [a] -> Size)
-> ToCBOR a
$ctoCBOR :: Tx ConwayEra -> Encoding
toCBOR :: Tx ConwayEra -> Encoding
$cencodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (Tx ConwayEra) -> Size
encodedSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy (Tx ConwayEra) -> Size
$cencodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [Tx ConwayEra] -> Size
encodedListSizeExpr :: (forall t. ToCBOR t => Proxy t -> Size)
-> Proxy [Tx ConwayEra] -> Size
ToCBOR, Typeable (Tx ConwayEra)
Typeable (Tx ConwayEra) =>
(Tx ConwayEra -> Encoding)
-> ((forall t. EncCBOR t => Proxy t -> Size)
    -> Proxy (Tx ConwayEra) -> Size)
-> ((forall t. EncCBOR t => Proxy t -> Size)
    -> Proxy [Tx ConwayEra] -> Size)
-> EncCBOR (Tx ConwayEra)
Tx ConwayEra -> Encoding
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [Tx ConwayEra] -> Size
(forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (Tx ConwayEra) -> Size
forall a.
Typeable a =>
(a -> Encoding)
-> ((forall t. EncCBOR t => Proxy t -> Size) -> Proxy a -> Size)
-> ((forall t. EncCBOR t => Proxy t -> Size) -> Proxy [a] -> Size)
-> EncCBOR a
$cencCBOR :: Tx ConwayEra -> Encoding
encCBOR :: Tx ConwayEra -> Encoding
$cencodedSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (Tx ConwayEra) -> Size
encodedSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size)
-> Proxy (Tx ConwayEra) -> Size
$cencodedListSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [Tx ConwayEra] -> Size
encodedListSizeExpr :: (forall t. EncCBOR t => Proxy t -> Size)
-> Proxy [Tx ConwayEra] -> Size
EncCBOR)
    deriving ((forall x. Tx ConwayEra -> Rep (Tx ConwayEra) x)
-> (forall x. Rep (Tx ConwayEra) x -> Tx ConwayEra)
-> Generic (Tx ConwayEra)
forall x. Rep (Tx ConwayEra) x -> Tx ConwayEra
forall x. Tx ConwayEra -> Rep (Tx ConwayEra) x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. Tx ConwayEra -> Rep (Tx ConwayEra) x
from :: forall x. Tx ConwayEra -> Rep (Tx ConwayEra) x
$cto :: forall x. Rep (Tx ConwayEra) x -> Tx ConwayEra
to :: forall x. Rep (Tx ConwayEra) x -> Tx ConwayEra
Generic)

  mkBasicTx :: TxBody ConwayEra -> Tx ConwayEra
mkBasicTx = AlonzoTx ConwayEra -> Tx ConwayEra
MkConwayTx (AlonzoTx ConwayEra -> Tx ConwayEra)
-> (TxBody ConwayEra -> AlonzoTx ConwayEra)
-> TxBody ConwayEra
-> Tx ConwayEra
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TxBody ConwayEra -> AlonzoTx ConwayEra
forall era. Monoid (TxWits era) => TxBody era -> AlonzoTx era
mkBasicAlonzoTx

  bodyTxL :: Lens' (Tx ConwayEra) (TxBody ConwayEra)
bodyTxL = (AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
-> Tx ConwayEra -> f (Tx ConwayEra)
Lens' (Tx ConwayEra) (AlonzoTx ConwayEra)
conwayTxL ((AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
 -> Tx ConwayEra -> f (Tx ConwayEra))
-> ((TxBody ConwayEra -> f (TxBody ConwayEra))
    -> AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
-> (TxBody ConwayEra -> f (TxBody ConwayEra))
-> Tx ConwayEra
-> f (Tx ConwayEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxBody ConwayEra -> f (TxBody ConwayEra))
-> AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra)
forall era (f :: * -> *).
Functor f =>
(TxBody era -> f (TxBody era)) -> AlonzoTx era -> f (AlonzoTx era)
bodyAlonzoTxL
  {-# INLINE bodyTxL #-}

  witsTxL :: Lens' (Tx ConwayEra) (TxWits ConwayEra)
witsTxL = (AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
-> Tx ConwayEra -> f (Tx ConwayEra)
Lens' (Tx ConwayEra) (AlonzoTx ConwayEra)
conwayTxL ((AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
 -> Tx ConwayEra -> f (Tx ConwayEra))
-> ((AlonzoTxWits ConwayEra -> f (AlonzoTxWits ConwayEra))
    -> AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
-> (AlonzoTxWits ConwayEra -> f (AlonzoTxWits ConwayEra))
-> Tx ConwayEra
-> f (Tx ConwayEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (TxWits ConwayEra -> f (TxWits ConwayEra))
-> AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra)
(AlonzoTxWits ConwayEra -> f (AlonzoTxWits ConwayEra))
-> AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra)
forall era (f :: * -> *).
Functor f =>
(TxWits era -> f (TxWits era)) -> AlonzoTx era -> f (AlonzoTx era)
witsAlonzoTxL
  {-# INLINE witsTxL #-}

  auxDataTxL :: Lens' (Tx ConwayEra) (StrictMaybe (TxAuxData ConwayEra))
auxDataTxL = (AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
-> Tx ConwayEra -> f (Tx ConwayEra)
Lens' (Tx ConwayEra) (AlonzoTx ConwayEra)
conwayTxL ((AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
 -> Tx ConwayEra -> f (Tx ConwayEra))
-> ((StrictMaybe (AlonzoTxAuxData ConwayEra)
     -> f (StrictMaybe (AlonzoTxAuxData ConwayEra)))
    -> AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
-> (StrictMaybe (AlonzoTxAuxData ConwayEra)
    -> f (StrictMaybe (AlonzoTxAuxData ConwayEra)))
-> Tx ConwayEra
-> f (Tx ConwayEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (StrictMaybe (TxAuxData ConwayEra)
 -> f (StrictMaybe (TxAuxData ConwayEra)))
-> AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra)
(StrictMaybe (AlonzoTxAuxData ConwayEra)
 -> f (StrictMaybe (AlonzoTxAuxData ConwayEra)))
-> AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra)
forall era (f :: * -> *).
Functor f =>
(StrictMaybe (TxAuxData era) -> f (StrictMaybe (TxAuxData era)))
-> AlonzoTx era -> f (AlonzoTx era)
auxDataAlonzoTxL
  {-# INLINE auxDataTxL #-}

  sizeTxF :: SimpleGetter (Tx ConwayEra) Integer
sizeTxF = (AlonzoTx ConwayEra -> Const r (AlonzoTx ConwayEra))
-> Tx ConwayEra -> Const r (Tx ConwayEra)
Lens' (Tx ConwayEra) (AlonzoTx ConwayEra)
conwayTxL ((AlonzoTx ConwayEra -> Const r (AlonzoTx ConwayEra))
 -> Tx ConwayEra -> Const r (Tx ConwayEra))
-> ((Integer -> Const r Integer)
    -> AlonzoTx ConwayEra -> Const r (AlonzoTx ConwayEra))
-> (Integer -> Const r Integer)
-> Tx ConwayEra
-> Const r (Tx ConwayEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Integer -> Const r Integer)
-> AlonzoTx ConwayEra -> Const r (AlonzoTx ConwayEra)
forall era. EraTx era => SimpleGetter (AlonzoTx era) Integer
SimpleGetter (AlonzoTx ConwayEra) Integer
sizeAlonzoTxF
  {-# INLINE sizeTxF #-}

  validateNativeScript :: Tx ConwayEra -> NativeScript ConwayEra -> Bool
validateNativeScript = Tx ConwayEra -> NativeScript ConwayEra -> Bool
forall era.
(EraTx era, AllegraEraTxBody era, AllegraEraScript era,
 NativeScript era ~ Timelock era) =>
Tx era -> NativeScript era -> Bool
validateTimelock
  {-# INLINE validateNativeScript #-}

  getMinFeeTx :: PParams ConwayEra -> Tx ConwayEra -> Int -> Coin
getMinFeeTx = PParams ConwayEra -> Tx ConwayEra -> Int -> Coin
forall era.
(EraTx era, AlonzoEraTxWits era, ConwayEraPParams era) =>
PParams era -> Tx era -> Int -> Coin
getConwayMinFeeTx

instance EqRaw (Tx ConwayEra) where
  eqRaw :: Tx ConwayEra -> Tx ConwayEra -> Bool
eqRaw = Tx ConwayEra -> Tx ConwayEra -> Bool
forall era. AlonzoEraTx era => Tx era -> Tx era -> Bool
alonzoTxEqRaw

conwayTxL :: Lens' (Tx ConwayEra) (AlonzoTx ConwayEra)
conwayTxL :: Lens' (Tx ConwayEra) (AlonzoTx ConwayEra)
conwayTxL = (Tx ConwayEra -> AlonzoTx ConwayEra)
-> (Tx ConwayEra -> AlonzoTx ConwayEra -> Tx ConwayEra)
-> Lens' (Tx ConwayEra) (AlonzoTx ConwayEra)
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens Tx ConwayEra -> AlonzoTx ConwayEra
unConwayTx (\Tx ConwayEra
x AlonzoTx ConwayEra
y -> Tx ConwayEra
x {unConwayTx = y})

getConwayMinFeeTx ::
  ( EraTx era
  , AlonzoEraTxWits era
  , ConwayEraPParams era
  ) =>
  PParams era ->
  Tx era ->
  Int ->
  Coin
getConwayMinFeeTx :: forall era.
(EraTx era, AlonzoEraTxWits era, ConwayEraPParams era) =>
PParams era -> Tx era -> Int -> Coin
getConwayMinFeeTx PParams era
pp Tx era
tx Int
refScriptsSize =
  PParams era -> Tx era -> Coin
forall era.
(EraTx era, AlonzoEraTxWits era, AlonzoEraPParams era) =>
PParams era -> Tx era -> Coin
alonzoMinFeeTx PParams era
pp Tx era
tx Coin -> Coin -> Coin
forall t. Val t => t -> t -> t
<+> Coin
refScriptsFee
  where
    refScriptCostPerByte :: Rational
refScriptCostPerByte = NonNegativeInterval -> Rational
forall r. BoundedRational r => r -> Rational
unboundRational (PParams era
pp PParams era
-> Getting NonNegativeInterval (PParams era) NonNegativeInterval
-> NonNegativeInterval
forall s a. s -> Getting a s a -> a
^. Getting NonNegativeInterval (PParams era) NonNegativeInterval
forall era.
ConwayEraPParams era =>
Lens' (PParams era) NonNegativeInterval
Lens' (PParams era) NonNegativeInterval
ppMinFeeRefScriptCostPerByteL)
    refScriptsFee :: Coin
refScriptsFee =
      HasCallStack => Rational -> Int -> Rational -> Int -> Coin
Rational -> Int -> Rational -> Int -> Coin
tierRefScriptFee
        (PositiveInterval -> Rational
forall r. BoundedRational r => r -> Rational
unboundRational (PositiveInterval -> Rational) -> PositiveInterval -> Rational
forall a b. (a -> b) -> a -> b
$ PParams era
pp PParams era
-> Getting PositiveInterval (PParams era) PositiveInterval
-> PositiveInterval
forall s a. s -> Getting a s a -> a
^. Getting PositiveInterval (PParams era) PositiveInterval
forall era.
ConwayEraPParams era =>
SimpleGetter (PParams era) PositiveInterval
SimpleGetter (PParams era) PositiveInterval
ppRefScriptCostMultiplierG)
        (forall a b. (Integral a, Num b) => a -> b
fromIntegral @Word32 @Int (Word32 -> Int)
-> (NonZero Word32 -> Word32) -> NonZero Word32 -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NonZero Word32 -> Word32
forall a. NonZero a -> a
unNonZero (NonZero Word32 -> Int) -> NonZero Word32 -> Int
forall a b. (a -> b) -> a -> b
$ PParams era
pp PParams era
-> Getting (NonZero Word32) (PParams era) (NonZero Word32)
-> NonZero Word32
forall s a. s -> Getting a s a -> a
^. Getting (NonZero Word32) (PParams era) (NonZero Word32)
forall era.
ConwayEraPParams era =>
SimpleGetter (PParams era) (NonZero Word32)
SimpleGetter (PParams era) (NonZero Word32)
ppRefScriptCostStrideG)
        Rational
refScriptCostPerByte
        Int
refScriptsSize

-- | Calculate the fee for reference scripts using an exponential growth of the price per
-- byte with linear increments
tierRefScriptFee ::
  HasCallStack =>
  -- | Growth factor or step multiplier
  Rational ->
  -- | Increment size in which price grows linearly according to the price
  Int ->
  -- | Base fee. Currently this is customizable by `ppMinFeeRefScriptCostPerByteL`
  Rational ->
  -- | Total RefScript size in bytes
  Int ->
  Coin
tierRefScriptFee :: HasCallStack => Rational -> Int -> Rational -> Int -> Coin
tierRefScriptFee Rational
multiplier Int
sizeIncrement
  | Rational
multiplier Rational -> Rational -> Bool
forall a. Ord a => a -> a -> Bool
<= Rational
0 Bool -> Bool -> Bool
|| Int
sizeIncrement Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
0 = String -> Rational -> Int -> Coin
forall a. HasCallStack => String -> a
error String
"Size increment and multiplier must be positive"
  | Bool
otherwise = Rational -> Rational -> Int -> Coin
go Rational
0
  where
    go :: Rational -> Rational -> Int -> Coin
go !Rational
acc !Rational
curTierPrice !Int
n
      | Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
sizeIncrement =
          Integer -> Coin
Coin (Integer -> Coin) -> Integer -> Coin
forall a b. (a -> b) -> a -> b
$ Rational -> Integer
forall b. Integral b => Rational -> b
forall a b. (RealFrac a, Integral b) => a -> b
floor (Rational
acc Rational -> Rational -> Rational
forall a. Num a => a -> a -> a
+ Int -> Rational
forall a. Real a => a -> Rational
toRational Int
n Rational -> Rational -> Rational
forall a. Num a => a -> a -> a
* Rational
curTierPrice)
      | Bool
otherwise =
          Rational -> Rational -> Int -> Coin
go (Rational
acc Rational -> Rational -> Rational
forall a. Num a => a -> a -> a
+ Rational
sizeIncrementRational Rational -> Rational -> Rational
forall a. Num a => a -> a -> a
* Rational
curTierPrice) (Rational
multiplier Rational -> Rational -> Rational
forall a. Num a => a -> a -> a
* Rational
curTierPrice) (Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
sizeIncrement)
    sizeIncrementRational :: Rational
sizeIncrementRational = Int -> Rational
forall a. Real a => a -> Rational
toRational Int
sizeIncrement

instance AlonzoEraTx ConwayEra where
  isValidTxL :: Lens' (Tx ConwayEra) IsValid
isValidTxL = (AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
-> Tx ConwayEra -> f (Tx ConwayEra)
Lens' (Tx ConwayEra) (AlonzoTx ConwayEra)
conwayTxL ((AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
 -> Tx ConwayEra -> f (Tx ConwayEra))
-> ((IsValid -> f IsValid)
    -> AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra))
-> (IsValid -> f IsValid)
-> Tx ConwayEra
-> f (Tx ConwayEra)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (IsValid -> f IsValid)
-> AlonzoTx ConwayEra -> f (AlonzoTx ConwayEra)
forall era (f :: * -> *).
Functor f =>
(IsValid -> f IsValid) -> AlonzoTx era -> f (AlonzoTx era)
isValidAlonzoTxL
  {-# INLINE isValidTxL #-}

instance DecCBOR (Annotator (Tx ConwayEra)) where
  decCBOR :: forall s. Decoder s (Annotator (Tx ConwayEra))
decCBOR = (AlonzoTx ConwayEra -> Tx ConwayEra)
-> Annotator (AlonzoTx ConwayEra) -> Annotator (Tx ConwayEra)
forall a b. (a -> b) -> Annotator a -> Annotator b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap AlonzoTx ConwayEra -> Tx ConwayEra
MkConwayTx (Annotator (AlonzoTx ConwayEra) -> Annotator (Tx ConwayEra))
-> Decoder s (Annotator (AlonzoTx ConwayEra))
-> Decoder s (Annotator (Tx ConwayEra))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Decoder s (Annotator (AlonzoTx ConwayEra))
forall s. Decoder s (Annotator (AlonzoTx ConwayEra))
forall a s. DecCBOR a => Decoder s a
decCBOR