import Cardano.Ledger.Address
-
bootstrapAddressAttrsSize,
import Cardano.Ledger.Coin
+
import Cardano.Ledger.CompactAddress
+
isBootstrapCompactAddr,
+
isPayCredScriptCompactAddr,
import qualified Cardano.Ledger.Core as Core
import Cardano.Ledger.Credential (Credential (..))
import qualified Cardano.Ledger.Crypto as CC
import Cardano.Ledger.Era (Era (..), ValidateScript (..))
import qualified Cardano.Ledger.Era as Era
import Cardano.Ledger.Rules.ValidationMode ((?!#))
-
import Cardano.Ledger.Shelley.Constraints
+
import Cardano.Ledger.Shelley.Constraints (UsesPParams)
import qualified Cardano.Ledger.Shelley.LedgerState as Shelley
import qualified Cardano.Ledger.Shelley.Rules.Utxo as Shelley
import Cardano.Ledger.Shelley.Tx (TxIn)
isKeyHashAddr (Addr _ (KeyHashObj _) _) = True
+
-- | This is equivalent to `isKeyHashAddr`, but for compacted version of an address.
+
isKeyHashCompactAddr :: CompactAddr crypto -> Bool
+
isKeyHashCompactAddr cAddr =
+
isBootstrapCompactAddr cAddr || not (isPayCredScriptCompactAddr cAddr)
vKeyLocked :: Era era => Core.TxOut era -> Bool
-
vKeyLocked txout = isKeyHashAddr (getTxOutAddr txout)
+
case getTxOutEitherAddr txOut of
+
Left addr -> isKeyHashAddr addr
+
Right cAddr -> isKeyHashCompactAddr cAddr
-- | feesOK is a predicate with several parts. Some parts only apply in special circumstances.
-- 1) The fee paid is >= the minimum fee
null outputsTooBig ?! OutputTooBigUTxO outputsTooBig
{- ∀ ( _ ↦ (a,_)) ∈ txoutstxb, a ∈ Addrbootstrap → bootstrapAttrsSize a ≤ 64 -}
-
-- Bootstrap (i.e. Byron) addresses have variable sized attributes in them.
-
-- It is important to limit their overall size.
-
let outputsAttrsTooBig =
-
( \out -> case getTxOutAddr out of
-
AddrBootstrap addr -> bootstrapAddressAttrsSize addr > 64
-
(SplitMap.elems outputs)
+
let outputsAttrsTooBig = Shelley.filterOutputsAttrsTooBig outputs
null outputsAttrsTooBig ?!# OutputBootAddrAttrsTooBig outputsAttrsTooBig
{- ∀(_ ↦ (a,_)) ∈ txouts txb, netId a = NetworkId -}