@@ -68,6 +68,7 @@ import qualified Data.Aeson as Aeson
68
68
import Data.Aeson.Types (Parser , typeMismatch )
69
69
import Data.ByteString.Short (ShortByteString (), fromShort , toShort )
70
70
import Data.Default.Class (Default (.. ))
71
+ import qualified Data.Text as T
71
72
import Ouroboros.Consensus.Cardano.CanHardFork (TriggerHardFork (.. ))
72
73
73
74
newtype LogFileDir = LogFileDir
@@ -474,11 +475,12 @@ instance FromJSON ShelleyInsertConfig where
474
475
enable <- obj .: " enable"
475
476
stakeAddrs <- obj .:? " stake_addresses"
476
477
477
- pure $
478
- case (enable, stakeAddrs) of
479
- (False , _) -> ShelleyDisable
480
- (True , Nothing ) -> ShelleyEnable
481
- (True , Just addrs) -> ShelleyStakeAddrs (map parseShortByteString addrs)
478
+ case (enable, stakeAddrs) of
479
+ (False , _) -> pure ShelleyDisable
480
+ (True , Nothing ) -> pure ShelleyEnable
481
+ (True , Just addrs) -> do
482
+ addrsParsed <- traverse parseValidateHash addrs
483
+ pure $ ShelleyStakeAddrs addrsParsed
482
484
483
485
instance ToJSON MultiAssetConfig where
484
486
toJSON cfg =
@@ -495,11 +497,12 @@ instance FromJSON MultiAssetConfig where
495
497
enable <- obj .: " enable"
496
498
policies <- obj .:? " policies"
497
499
498
- pure $
499
- case (enable, policies) of
500
- (False , _) -> MultiAssetDisable
501
- (True , Nothing ) -> MultiAssetEnable
502
- (True , Just ps) -> MultiAssetPolicies (map parseShortByteString ps)
500
+ case (enable, policies) of
501
+ (False , _) -> pure MultiAssetDisable
502
+ (True , Nothing ) -> pure MultiAssetEnable
503
+ (True , Just ps) -> do
504
+ policiesParsed <- traverse parseValidateHash ps
505
+ pure $ MultiAssetPolicies policiesParsed
503
506
504
507
instance ToJSON MetadataConfig where
505
508
toJSON cfg =
@@ -537,11 +540,12 @@ instance FromJSON PlutusConfig where
537
540
enable <- obj .: " enable"
538
541
scriptHashes <- obj .:? " script_hashes"
539
542
540
- pure $
541
- case (enable, scriptHashes) of
542
- (False , _) -> PlutusDisable
543
- (True , Nothing ) -> PlutusEnable
544
- (True , Just hs) -> PlutusScripts (map parseShortByteString hs)
543
+ case (enable, scriptHashes) of
544
+ (False , _) -> pure PlutusDisable
545
+ (True , Nothing ) -> pure PlutusEnable
546
+ (True , Just hs) -> do
547
+ hsParsed <- traverse parseValidateHash hs
548
+ pure $ PlutusScripts hsParsed
545
549
546
550
instance ToJSON GovernanceConfig where
547
551
toJSON = boolToEnableDisable . isGovernanceEnabled
@@ -601,8 +605,11 @@ enableDisableToBool = \case
601
605
" disable" -> Just False
602
606
_ -> Nothing
603
607
604
- parseShortByteString :: Text -> ShortByteString
605
- parseShortByteString = toShort . encodeUtf8
608
+ parseValidateHash :: Text -> Parser ShortByteString
609
+ parseValidateHash txt =
610
+ if " \\ x" `T.isPrefixOf` txt
611
+ then fail $ " Invalid Hash: starts with \\ x please adjust it: " <> show txt
612
+ else pure $ toShort $ encodeUtf8 txt
606
613
607
614
shortByteStringToJSON :: ShortByteString -> Aeson. Value
608
615
shortByteStringToJSON = toJSON . decodeUtf8 . fromShort
0 commit comments