11{-# LANGUAGE AllowAmbiguousTypes #-}
2+ {-# LANGUAGE MultiWayIf #-}
23
34module BotPlutusInterface.Files (
45 policyScriptFilePath ,
@@ -55,9 +56,10 @@ import Data.ByteString.Lazy qualified as LazyByteString
5556import Data.ByteString.Short qualified as ShortByteString
5657import Data.Either.Combinators (mapLeft )
5758import Data.Kind (Type )
59+ import Data.List (sortOn )
5860import Data.Map (Map )
5961import Data.Map qualified as Map
60- import Data.Maybe (mapMaybe )
62+ import Data.Maybe (catMaybes , mapMaybe )
6163import Data.Set qualified as Set
6264import Data.Text (Text )
6365import Data.Text qualified as Text
@@ -82,7 +84,7 @@ import Plutus.V1.Ledger.Api (
8284 )
8385import PlutusTx (ToData , toData )
8486import PlutusTx.Builtins (fromBuiltin )
85- import System.FilePath (isExtensionOf )
87+ import System.FilePath (isExtensionOf , (</>) )
8688import Prelude
8789
8890-- | Filename of a minting policy script
@@ -176,15 +178,21 @@ readPrivateKeys ::
176178 Eff effs (Either Text (Map PubKeyHash DummyPrivKey ))
177179readPrivateKeys pabConf = do
178180 files <- listDirectory @ w $ Text. unpack pabConf. pcSigningKeyFileDir
179- let vKeyFiles =
180- map (\ filename -> Text. unpack pabConf. pcSigningKeyFileDir ++ " /" ++ filename) $
181- filter (" vkey" `isExtensionOf` ) files
182- let sKeyFiles =
183- map (\ filename -> Text. unpack pabConf. pcSigningKeyFileDir ++ " /" ++ filename) $
184- filter (" skey" `isExtensionOf` ) files
185- privKeys <- mapM (readVerificationKey @ w ) vKeyFiles
186- privKeys' <- mapM (readSigningKey @ w ) sKeyFiles
187- pure $ toPrivKeyMap <$> sequence (privKeys <> privKeys')
181+
182+ privKeys <-
183+ catMaybes
184+ <$> mapM
185+ ( \ filename ->
186+ let fullPath = Text. unpack pabConf. pcSigningKeyFileDir </> filename
187+ in case filename of
188+ _
189+ | " vkey" `isExtensionOf` filename -> Just <$> readVerificationKey @ w fullPath
190+ | " skey" `isExtensionOf` filename -> Just <$> readSigningKey @ w fullPath
191+ | otherwise -> pure Nothing
192+ )
193+ files
194+
195+ pure $ toPrivKeyMap <$> sequence privKeys
188196 where
189197 toPrivKeyMap :: [DummyPrivKey ] -> Map PubKeyHash DummyPrivKey
190198 toPrivKeyMap =
@@ -194,6 +202,11 @@ readPrivateKeys pabConf = do
194202 in Map. insert pkh pKey pKeyMap
195203 )
196204 Map. empty
205+ . sortOn keyPriority
206+
207+ keyPriority :: DummyPrivKey -> Int
208+ keyPriority (FromSKey _) = 1
209+ keyPriority (FromVKey _) = 0
197210
198211data DummyPrivKey
199212 = FromSKey PrivateKey
0 commit comments