diff --git a/bot-plutus-interface.cabal b/bot-plutus-interface.cabal index 1924933f..61ce60a2 100644 --- a/bot-plutus-interface.cabal +++ b/bot-plutus-interface.cabal @@ -148,6 +148,7 @@ library , process , QuickCheck , regex-compat + , relude , row-types , serialise , servant @@ -230,6 +231,7 @@ test-suite bot-plutus-interface-test , prettyprinter , QuickCheck , quickcheck-instances + , relude , row-types , serialise , servant diff --git a/src/BotPlutusInterface.hs b/src/BotPlutusInterface.hs index 076c6723..17aaf3eb 100644 --- a/src/BotPlutusInterface.hs +++ b/src/BotPlutusInterface.hs @@ -5,10 +5,9 @@ module BotPlutusInterface (runPAB) where import BotPlutusInterface.Server qualified as Server import BotPlutusInterface.Types (PABConfig (..)) import Data.Aeson (FromJSON) -import Data.Kind (Type) import Network.Wai.Handler.Warp (run) import Plutus.PAB.Effects.Contract.Builtin (HasDefinitions) -import Prelude +import Relude hiding (state) runPAB :: forall (t :: Type). (HasDefinitions t, FromJSON t) => PABConfig -> IO () runPAB pabConf = do diff --git a/src/BotPlutusInterface/Balance.hs b/src/BotPlutusInterface/Balance.hs index 9f09d97f..f1fea0b4 100644 --- a/src/BotPlutusInterface/Balance.hs +++ b/src/BotPlutusInterface/Balance.hs @@ -36,21 +36,14 @@ import BotPlutusInterface.Types ( import Cardano.Api (ExecutionUnitPrices (ExecutionUnitPrices)) import Cardano.Api.Shelley (ProtocolParameters (protocolParamPrices)) import Control.Lens (folded, to, (^..)) -import Control.Monad (foldM, void) +import Control.Monad (foldM) import Control.Monad.Freer (Eff, Member) -import Control.Monad.Trans.Class (lift) -import Control.Monad.Trans.Either (EitherT, firstEitherT, hoistEither, newEitherT, runEitherT) +import Control.Monad.Trans.Either (EitherT, firstEitherT, newEitherT, runEitherT) import Control.Monad.Trans.Except (throwE) -import Data.Bifunctor (bimap) -import Data.Coerce (coerce) -import Data.Kind (Type) import Data.List qualified as List -import Data.Map (Map) import Data.Map qualified as Map -import Data.Maybe (fromMaybe, mapMaybe) import Data.Set qualified as Set -import Data.Text (Text) -import Data.Text qualified as Text +import Data.Text (unpack) import GHC.Real (Ratio ((:%))) import Ledger qualified import Ledger.Ada qualified as Ada @@ -80,7 +73,7 @@ import Plutus.V1.Ledger.Api ( TokenName (..), ) import Prettyprinter (pretty, viaShow, (<+>)) -import Prelude +import Relude -- Config for balancing a `Tx`. data BalanceConfig = BalanceConfig @@ -139,7 +132,7 @@ balanceTxIO' balanceCfg pabConf ownPkh unbalancedTx = lift $ printBpiLog @w (Debug [TxBalancingLog]) $ viaShow utxoIndex -- We need this folder on the CLI machine, which may not be the local machine - lift $ createDirectoryIfMissingCLI @w False (Text.unpack "pcTxFileDir") + lift $ createDirectoryIfMissingCLI @w False (unpack "pcTxFileDir") tx <- newEitherT $ @@ -237,7 +230,7 @@ utxosAndCollateralAtAddress :: Eff effs (Either Text (Map TxOutRef Tx.ChainIndexTxOut, Maybe CollateralUtxo)) utxosAndCollateralAtAddress balanceCfg _pabConf changeAddr = runEitherT $ do - utxos <- firstEitherT (Text.pack . show) $ newEitherT $ queryNode @w (UtxosAt changeAddr) + utxos <- firstEitherT show $ newEitherT $ queryNode @w (UtxosAt changeAddr) inMemCollateral <- lift $ getInMemCollateral @w -- check if `bcHasScripts` is true, if this is the case then we search of @@ -379,7 +372,7 @@ handleNonAdaChange balanceCfg changeAddr utxos tx = runEitherT $ do } newOutputWithMinAmt <- - firstEitherT (Text.pack . show) $ + firstEitherT show $ newEitherT $ queryNode @w (MinUtxo newOutput) @@ -440,7 +433,7 @@ addOutput changeAddr tx = } changeTxOutWithMinAmt <- - firstEitherT (Text.pack . show) $ + firstEitherT show $ newEitherT $ queryNode @w (MinUtxo changeTxOut) @@ -470,7 +463,7 @@ addValidRange _ (Left _) = pure $ Left "BPI is not using CardanoBuildTx" addValidRange timeRange (Right tx) = if validateRange timeRange then - bimap (Text.pack . show) (setRange tx) + bimap show (setRange tx) <$> posixTimeRangeToContainedSlotRange @w timeRange else pure $ Left "Invalid validity interval." where diff --git a/src/BotPlutusInterface/BodyBuilder.hs b/src/BotPlutusInterface/BodyBuilder.hs index 94da8801..1d94b974 100644 --- a/src/BotPlutusInterface/BodyBuilder.hs +++ b/src/BotPlutusInterface/BodyBuilder.hs @@ -15,13 +15,10 @@ import BotPlutusInterface.Files ( import BotPlutusInterface.Types (PABConfig, TxFile (Raw)) import Control.Monad.Freer (Eff, Member) import Control.Monad.Trans.Either (firstEitherT, newEitherT, runEitherT) -import Data.Kind (Type) -import Data.Map (Map) -import Data.Text (Text) import Data.Text qualified as Text import Ledger (ExBudget, Tx, txId) import Ledger.Crypto (PubKeyHash) -import Prelude +import Relude {- | Build and save raw transaction (transaction body) with estimated execution budgets using `CardanoCLI`. It builds first transaction body with 0 budget for all spending inputs and minting policies, @@ -43,7 +40,7 @@ buildAndEstimateBudget pabConf privKeys tx = runEitherT $ do buildDraftTxBody = newEitherT $ CardanoCLI.buildTx @w pabConf privKeys mempty tx estimateBudgetByDraftBody path = - firstEitherT toText . newEitherT $ estimateBudget @w (Raw path) + firstEitherT show . newEitherT $ estimateBudget @w (Raw path) buildBodyUsingEstimatedBudget exBudget = newEitherT $ @@ -52,5 +49,3 @@ buildAndEstimateBudget pabConf privKeys tx = runEitherT $ do privKeys exBudget tx - - toText = Text.pack . show diff --git a/src/BotPlutusInterface/CardanoAPI.hs b/src/BotPlutusInterface/CardanoAPI.hs index e600632c..79f8d677 100644 --- a/src/BotPlutusInterface/CardanoAPI.hs +++ b/src/BotPlutusInterface/CardanoAPI.hs @@ -14,9 +14,6 @@ import Cardano.Prelude (maybeToEither) import Cardano.Slotting.EpochInfo (hoistEpochInfo) import Cardano.Slotting.Time (SystemStart, toRelativeTime) import Control.Monad.Trans.Except (runExcept) -import Data.Bifunctor (first) -import Data.Text (Text) -import Data.Text qualified as Text import Data.Time (UTCTime, secondsToNominalDiffTime) import Data.Time.Clock.POSIX (posixSecondsToUTCTime) import Ledger qualified @@ -28,7 +25,7 @@ import Plutus.Script.Utils.Scripts qualified as ScriptUtils import Plutus.V1.Ledger.Api (Credential (..)) import Plutus.V2.Ledger.Tx qualified as V2 import PlutusTx.Prelude qualified as PlutusTx -import Prelude +import Relude fromCardanoTxOut :: CApi.TxOut CApi.CtxUTxO CApi.BabbageEra -> Either TxApi.FromCardanoError ChainIndexTxOut fromCardanoTxOut (CApi.TxOut caddr val cdatum _refScript) = do @@ -71,7 +68,7 @@ fromCardanoEpochInfo :: CApi.EraHistory mode -> EpochInfo (Either Text) fromCardanoEpochInfo (CApi.EraHistory _ interpreter) = - hoistEpochInfo (first (Text.pack . show) . runExcept) $ + hoistEpochInfo (first show . runExcept) $ Consensus.interpreterToEpochInfo interpreter posixTimeToSlot :: diff --git a/src/BotPlutusInterface/CardanoCLI.hs b/src/BotPlutusInterface/CardanoCLI.hs index 322893d7..33543e61 100644 --- a/src/BotPlutusInterface/CardanoCLI.hs +++ b/src/BotPlutusInterface/CardanoCLI.hs @@ -35,24 +35,15 @@ import BotPlutusInterface.Types ( ) import BotPlutusInterface.UtxoParser qualified as UtxoParser import Cardano.Api.Shelley (NetworkId (Mainnet, Testnet), NetworkMagic (..), serialiseAddress) -import Control.Monad (join) import Control.Monad.Freer (Eff, Member) import Data.Aeson qualified as JSON import Data.Aeson.Extras (encodeByteString) import Data.Attoparsec.Text (parseOnly) -import Data.Bifunctor (first) -import Data.Bool (bool) import Data.ByteString.Lazy.Char8 qualified as Char8 import Data.Either.Combinators (mapLeft) import Data.Hex (hex) -import Data.Kind (Type) -import Data.List (sort) -import Data.Map (Map) import Data.Map qualified as Map -import Data.Maybe (fromMaybe) -import Data.Text (Text) import Data.Text qualified as Text -import Data.Text.Encoding (decodeUtf8) import Ledger (Slot (Slot), SlotRange) import Ledger qualified import Ledger.Ada (fromValue, getLovelace) @@ -80,7 +71,7 @@ import Plutus.V1.Ledger.Api ( TokenName (..), ) import PlutusTx.Builtins (fromBuiltin) -import Prelude +import Relude -- | Getting information of the latest block queryTip :: @@ -112,9 +103,9 @@ calculateMinFee pabConf tx = mconcat [ ["transaction", "calculate-min-fee"] , ["--tx-body-file", txFilePath pabConf "raw" (txId tx)] - , ["--tx-in-count", showText $ length $ txInputs tx] - , ["--tx-out-count", showText $ length $ txOutputs tx] - , ["--witness-count", showText $ length $ txSignatures tx] + , ["--tx-in-count", show $ length $ txInputs tx] + , ["--tx-out-count", show $ length $ txOutputs tx] + , ["--witness-count", show $ length $ txSignatures tx] , ["--protocol-params-file", pabConf.pcProtocolParamsFile] , networkOpt pabConf ] @@ -159,7 +150,7 @@ buildTx pabConf privKeys txBudget tx = do , -- TODO: Removed for now, as the main iohk branch doesn't support metadata yet -- , metadataOpts pabConf (txMetadata tx) requiredSigners - , ["--fee", showText . getLovelace . fromValue $ txFee tx] + , ["--fee", show . getLovelace . fromValue $ txFee tx] , mconcat [ ["--protocol-params-file", pabConf.pcProtocolParamsFile] , ["--out-file", txFilePath pabConf "raw" (txId tx)] @@ -300,11 +291,11 @@ validRangeOpts (Interval lowerBound upperBound) = mconcat [ case lowerBound of LowerBound (Finite (Slot x)) closed -> - ["--invalid-before", showText (bool (x + 1) x closed)] + ["--invalid-before", show (bool (x + 1) x closed)] _ -> [] , case upperBound of UpperBound (Finite (Slot x)) closed -> - ["--invalid-hereafter", showText (bool x (x + 1) closed)] + ["--invalid-hereafter", show (bool x (x + 1) closed)] _ -> [] ] @@ -332,12 +323,12 @@ txOutOpts pabConf datums = networkOpt :: PABConfig -> [Text] networkOpt pabConf = case pabConf.pcNetwork of - Testnet (NetworkMagic t) -> ["--testnet-magic", showText t] + Testnet (NetworkMagic t) -> ["--testnet-magic", show t] Mainnet -> ["--mainnet"] txOutRefToCliArg :: TxOutRef -> Text txOutRefToCliArg (TxOutRef (TxId tId) txIx) = - encodeByteString (fromBuiltin tId) <> "#" <> showText txIx + encodeByteString (fromBuiltin tId) <> "#" <> show txIx flatValueToCliArg :: (CurrencySymbol, TokenName, Integer) -> Text flatValueToCliArg (curSymbol, name, amount) @@ -345,7 +336,7 @@ flatValueToCliArg (curSymbol, name, amount) | Text.null tokenNameStr = amountStr <> " " <> curSymbolStr | otherwise = amountStr <> " " <> curSymbolStr <> "." <> tokenNameStr where - amountStr = showText amount + amountStr = show amount curSymbolStr = encodeByteString $ fromBuiltin $ unCurrencySymbol curSymbol tokenNameStr = decodeUtf8 $ hex $ fromBuiltin $ unTokenName name @@ -361,10 +352,7 @@ unsafeSerialiseAddress network address = exBudgetToCliArg :: ExBudget -> Text exBudgetToCliArg (ExBudget (ExCPU steps) (ExMemory memory)) = - "(" <> showText steps <> "," <> showText memory <> ")" - -showText :: forall (a :: Type). Show a => a -> Text -showText = Text.pack . show + "(" <> show steps <> "," <> show memory <> ")" -- TODO: Removed for now, as the main iohk branch doesn't support metadata yet -- metadataOpts :: PABConfig -> Maybe BuiltinByteString -> [Text] diff --git a/src/BotPlutusInterface/CardanoNode/Effects.hs b/src/BotPlutusInterface/CardanoNode/Effects.hs index 1c3297cf..7caf8fca 100644 --- a/src/BotPlutusInterface/CardanoNode/Effects.hs +++ b/src/BotPlutusInterface/CardanoNode/Effects.hs @@ -41,9 +41,7 @@ import Cardano.Ledger.Shelley.API.Wallet ( import Control.Lens (folded, to, (^..)) import Control.Monad.Freer (Eff, Members, interpret, runM, send, type (~>)) import Control.Monad.Freer.Reader (Reader, ask, runReader) -import Control.Monad.Trans.Class (lift) -import Control.Monad.Trans.Either (firstEitherT, hoistEither, newEitherT, runEitherT) -import Data.Map (Map) +import Control.Monad.Trans.Either (firstEitherT, newEitherT, runEitherT) import Data.Map qualified as Map import Data.Set qualified as Set import Ledger qualified @@ -53,7 +51,7 @@ import Ledger.Tx (ChainIndexTxOut (..)) import Ledger.Tx.CardanoAPI qualified as TxApi import Ledger.Validation (Coin (Coin)) import Plutus.V2.Ledger.Tx qualified as V2 -import Prelude +import Relude hiding (Reader, ask, runReader) data NodeQuery a where UtxosAt :: Address -> NodeQuery (Either NodeQueryError (Map V2.TxOutRef ChainIndexTxOut)) diff --git a/src/BotPlutusInterface/CardanoNode/Query.hs b/src/BotPlutusInterface/CardanoNode/Query.hs index ba57be6d..33f92c65 100644 --- a/src/BotPlutusInterface/CardanoNode/Query.hs +++ b/src/BotPlutusInterface/CardanoNode/Query.hs @@ -16,10 +16,8 @@ import Control.Monad.Freer.Reader (Reader, ask) import Control.Monad.Trans.Class import Control.Monad.Trans.Either import Control.Monad.Trans.Except (throwE) -import Data.Text (Text) -import Data.Text qualified as Text +import Relude hiding (Reader, ask) import System.Environment (getEnv) -import Prelude {- | Error returned in case any error happened querying local node (wraps whatever received in `Text`) @@ -46,7 +44,7 @@ queryInCardanoMode :: queryInCardanoMode query = runEitherT $ do conn <- lift $ ask @NodeConn - firstEitherT (NodeQueryError . Text.pack . show) $ + firstEitherT (NodeQueryError . show) $ newEitherT $ send $ CApi.queryNodeLocalState conn Nothing query @@ -88,4 +86,4 @@ connectionInfo pabConf = epochSlots = CApi.EpochSlots 21600 toQueryError :: Show e => e -> NodeQueryError -toQueryError = NodeQueryError . Text.pack . show +toQueryError = NodeQueryError . show diff --git a/src/BotPlutusInterface/ChainIndex.hs b/src/BotPlutusInterface/ChainIndex.hs index 05ac6c46..3a97fc77 100644 --- a/src/BotPlutusInterface/ChainIndex.hs +++ b/src/BotPlutusInterface/ChainIndex.hs @@ -10,7 +10,6 @@ import BotPlutusInterface.Types ( PABConfig, readCollateralUtxo, ) -import Data.Kind (Type) import Network.HTTP.Client ( ManagerSettings (managerResponseTimeout), defaultManagerSettings, @@ -28,6 +27,7 @@ import Plutus.ChainIndex.Api ( ) import Plutus.ChainIndex.Client qualified as ChainIndexClient import Plutus.Contract.Effects (ChainIndexQuery (..), ChainIndexResponse (..)) +import Relude import Servant.Client ( ClientError (FailureResponse), ClientM, @@ -35,7 +35,6 @@ import Servant.Client ( mkClientEnv, runClientM, ) -import Prelude handleChainIndexReq :: forall (w :: Type). ContractEnvironment w -> ChainIndexQuery -> IO ChainIndexResponse handleChainIndexReq contractEnv@ContractEnvironment {cePABConfig} = diff --git a/src/BotPlutusInterface/CoinSelection.hs b/src/BotPlutusInterface/CoinSelection.hs index 4971d160..ef50c863 100644 --- a/src/BotPlutusInterface/CoinSelection.hs +++ b/src/BotPlutusInterface/CoinSelection.hs @@ -20,23 +20,16 @@ import Control.Lens ( uncons, withIndex, (%~), - (&), (^..), (^?), _Just, ) -import Control.Monad.Except (foldM, throwError, unless) +import Control.Monad.Except (foldM, throwError) import Control.Monad.Freer (Eff, Member) -import Control.Monad.Trans.Class (lift) -import Control.Monad.Trans.Either (hoistEither, newEitherT, runEitherT) -import Data.Either.Combinators (isRight, maybeToRight) -import Data.Kind (Type) +import Control.Monad.Trans.Either (newEitherT, runEitherT) import Data.List qualified as List -import Data.Map (Map) import Data.Map qualified as Map -import Data.Set (Set) import Data.Set qualified as Set -import Data.Text (Text, pack) import Data.Vector (Vector) import Data.Vector qualified as Vec import Ledger qualified @@ -51,7 +44,7 @@ import Plutus.V1.Ledger.Api ( Credential (PubKeyCredential, ScriptCredential), ) import Prettyprinter (pretty, (<+>)) -import Prelude +import Relude hiding (uncons) {- @@ -422,13 +415,13 @@ l2norm v1 v2 | length v1 == length v2 = Right $ sqrt $ fromInteger $ sum $ Vec.zipWith formula v1 v2 | otherwise = Left $ - pack $ + show $ "Error: The length of the vectors should be same for l2norm." <> "length of vector v1: " - <> show (length v1) + <> show @Text (length v1) <> " " <> "length of vector v2: " - <> show (length v2) + <> show @Text (length v2) <> "." where formula :: Integer -> Integer -> Integer @@ -487,11 +480,11 @@ opVec f v1 v2 | length v1 == length v2 = Right $ Vec.zipWith f v1 v2 | otherwise = Left $ - pack $ + show @Text $ "Error: The length of the vectors should be same for arithemetic operation." <> "length of vector v1: " - <> show (length v1) + <> show @Text (length v1) <> " " <> "length of vector v2: " - <> show (length v2) + <> show @Text (length v2) <> "." diff --git a/src/BotPlutusInterface/Collateral.hs b/src/BotPlutusInterface/Collateral.hs index 2d5e2d7c..675dfcd5 100644 --- a/src/BotPlutusInterface/Collateral.hs +++ b/src/BotPlutusInterface/Collateral.hs @@ -14,15 +14,11 @@ import BotPlutusInterface.Types ( collateralValue, unCollateralVar, ) -import Cardano.Prelude (Void) -import Control.Concurrent.STM (atomically, readTVarIO, writeTVar) -import Data.Kind (Type) -import Data.Map (Map) import Data.Map qualified as Map import Ledger (ChainIndexTxOut, PaymentPubKeyHash (PaymentPubKeyHash), TxOutRef) import Ledger.Constraints qualified as Constraints import Plutus.ChainIndex (Page (pageItems)) -import Prelude +import Relude getInMemCollateral :: forall (w :: Type). ContractEnvironment w -> IO (Maybe CollateralUtxo) getInMemCollateral = readTVarIO . unCollateralVar . ceCollateral diff --git a/src/BotPlutusInterface/Config.hs b/src/BotPlutusInterface/Config.hs index 6088a72f..c00ffbd5 100644 --- a/src/BotPlutusInterface/Config.hs +++ b/src/BotPlutusInterface/Config.hs @@ -36,8 +36,6 @@ import Config.Schema ( (), ) import Data.Default (def) -import Data.String.ToString (toString) -import Data.Text (Text) import Data.Text qualified as Text import PlutusConfig.Base ( customRationalSpec, @@ -58,7 +56,7 @@ import PlutusConfig.Types ( serialize, withNamePrefixSpec, ) -import Prelude +import Relude instance ToValue CLILocation where toValue Local = Atom () "local" @@ -322,7 +320,7 @@ loadPABConfig fn = do networkArg :: NetworkId -> [Text] networkArg Mainnet = ["--mainnet"] -networkArg (Testnet magic) = ["--testnet-magic", Text.pack $ show $ unNetworkMagic magic] +networkArg (Testnet magic) = ["--testnet-magic", show $ unNetworkMagic magic] {- |Save 'PABConfig'. diff --git a/src/BotPlutusInterface/Contract.hs b/src/BotPlutusInterface/Contract.hs index 8588ba53..c2a34bd1 100644 --- a/src/BotPlutusInterface/Contract.hs +++ b/src/BotPlutusInterface/Contract.hs @@ -47,27 +47,20 @@ import Cardano.Api ( EraInMode (..), Tx (Tx), ) -import Cardano.Prelude (liftA2) import Control.Lens (preview, (.~), (^.)) -import Control.Monad (join, void, when) import Control.Monad.Freer (Eff, Member, interpret, reinterpret, runM, subsume, type (~>)) import Control.Monad.Freer.Error (runError) import Control.Monad.Freer.Extras.Modify (raiseEnd) import Control.Monad.Freer.Writer (Writer (Tell)) -import Control.Monad.Trans.Class (lift) -import Control.Monad.Trans.Either (EitherT, eitherT, firstEitherT, hoistEither, newEitherT, runEitherT) -import Control.Monad.Trans.Except (ExceptT, throwE) +import Control.Monad.Trans.Either (EitherT, eitherT, firstEitherT, newEitherT, runEitherT) +import Control.Monad.Trans.Except (throwE) import Data.Aeson (ToJSON, Value (Array, Bool, Null, Number, Object, String)) import Data.Aeson.Extras (encodeByteString) import Data.Aeson.KeyMap qualified as KeyMap -import Data.Either.Combinators (maybeToLeft, swapEither) -import Data.Function (fix, (&)) -import Data.Kind (Type) -import Data.List.NonEmpty (NonEmpty ((:|))) +import Data.Either.Combinators (swapEither) import Data.Map qualified as Map import Data.Row (Row) -import Data.Text (Text) -import Data.Text qualified as Text +import Data.Text (unpack) import Data.Vector qualified as V import Ledger (POSIXTime, getCardanoTxId) import Ledger qualified @@ -92,8 +85,8 @@ import Plutus.Contract.Types (Contract (..), ContractEffs) import PlutusTx.Builtins (fromBuiltin) import Prettyprinter (Pretty (pretty), (<+>)) import Prettyprinter qualified as PP +import Relude import Wallet.Emulator.Error (WalletAPIError (..)) -import Prelude runContract :: forall (w :: Type) (s :: Row Type) (e :: Type) (a :: Type). @@ -121,7 +114,7 @@ handleContract contractEnv = instance Pretty Value where pretty (String s) = pretty s - pretty (Number n) = pretty $ show n + pretty (Number n) = pretty $ show @Text n pretty (Bool b) = pretty b pretty (Array arr) = PP.list $ pretty <$> V.toList arr pretty (Object obj) = @@ -131,7 +124,7 @@ instance Pretty Value where ( \(k, v) -> PP.hang 2 $ PP.sep - [ pretty (show k) <+> ": " + [ pretty (show @Text k) <+> ": " , pretty v ] ) @@ -157,7 +150,7 @@ handleResumable contractEnv = ( \case RRequest o -> handlePABReq @w contractEnv o RSelect -> pure True - RZero -> undefined + RZero -> error "undefined" ) -- | Mocking checkpoint calls @@ -214,12 +207,12 @@ handlePABReq contractEnv req = do ------------------------ -- Unhandled requests -- ------------------------ - AwaitUtxoSpentReq _ -> error ("Unsupported PAB effect: " ++ show req) - AwaitUtxoProducedReq _ -> error ("Unsupported PAB effect: " ++ show req) - AwaitTxOutStatusChangeReq _ -> error ("Unsupported PAB effect: " ++ show req) - ExposeEndpointReq _ -> error ("Unsupported PAB effect: " ++ show req) - YieldUnbalancedTxReq _ -> error ("Unsupported PAB effect: " ++ show req) - CurrentChainIndexSlotReq -> error ("Unsupported PAB effect: " ++ show req) + AwaitUtxoSpentReq _ -> error ("Unsupported PAB effect: " <> show req) + AwaitUtxoProducedReq _ -> error ("Unsupported PAB effect: " <> show req) + AwaitTxOutStatusChangeReq _ -> error ("Unsupported PAB effect: " <> show req) + ExposeEndpointReq _ -> error ("Unsupported PAB effect: " <> show req) + YieldUnbalancedTxReq _ -> error ("Unsupported PAB effect: " <> show req) + CurrentChainIndexSlotReq -> error ("Unsupported PAB effect: " <> show req) printBpiLog @w (Debug [PABLog]) $ pretty resp pure resp @@ -371,10 +364,10 @@ writeBalancedTx contractEnv cardanoTx = do let pabConf = contractEnv.cePABConfig tx' = fromCardanoTx cardanoTx uploadDir @w pabConf.pcSigningKeyFileDir - createDirectoryIfMissing @w False (Text.unpack pabConf.pcScriptFileDir) + createDirectoryIfMissing @w False (unpack pabConf.pcScriptFileDir) eitherT (pure . WriteBalancedTxFailed . OtherError) (pure . WriteBalancedTxSuccess . CardanoApiTx) $ do - void $ firstEitherT (Text.pack . show) $ newEitherT $ Files.writeAll @w pabConf tx' + void $ firstEitherT show $ newEitherT $ Files.writeAll @w pabConf tx' lift $ uploadDir @w pabConf.pcScriptFileDir privKeys <- newEitherT $ Files.readPrivateKeys @w pabConf @@ -386,9 +379,9 @@ writeBalancedTx contractEnv cardanoTx = do void $ newEitherT $ BodyBuilder.buildAndEstimateBudget @w pabConf privKeys tx' -- TODO: This whole part is hacky and we should remove it. - let path = Text.unpack $ Files.txFilePath pabConf "raw" (Tx.txId tx') + let path = unpack $ Files.txFilePath pabConf "raw" (Tx.txId tx') -- We read back the tx from file as tx currently has the wrong id (but the one we create with cardano-cli is correct) - babbageBody <- firstEitherT (Text.pack . show) $ newEitherT $ readFileTextEnvelope @w (AsTxBody AsBabbageEra) path + babbageBody <- firstEitherT show $ newEitherT $ readFileTextEnvelope @w (AsTxBody AsBabbageEra) path let cardanoApiTx = Tx.SomeTx (Tx babbageBody []) BabbageEraInCardanoMode if signable @@ -397,7 +390,7 @@ writeBalancedTx contractEnv cardanoTx = do lift . printBpiLog @w (Warn [PABLog]) . PP.vsep $ [ "Not all required signatures have signing key files. Please sign and submit the tx manually:" , "Tx file:" <+> pretty (Files.txFilePath pabConf "raw" (Tx.txId tx')) - , "Signatories (pkh):" <+> pretty (Text.unwords (map pkhToText requiredSigners)) + , "Signatories (pkh):" <+> pretty (unwords $ map pkhToText requiredSigners) ] when (pabConf.pcCollectStats && signable) $ @@ -426,16 +419,13 @@ writeBalancedTx contractEnv cardanoTx = do } collectBudgetStats txId pabConf = do - let path = Text.unpack (Files.txFilePath pabConf "signed" txId) + let path = unpack (Files.txFilePath pabConf "signed" txId) txBudget <- firstEitherT toBudgetSaveError $ newEitherT $ estimateBudget @w (Signed path) void $ newEitherT (Right <$> saveBudget @w txId txBudget) - toBudgetSaveError = - Text.pack - . ("Failed to save Tx budgets statistics: " ++) - . show + toBudgetSaveError = ("Failed to save Tx budgets statistics: " <>) . show pkhToText :: Ledger.PubKey -> Text pkhToText = encodeByteString . fromBuiltin . Ledger.getPubKeyHash . Ledger.pubKeyHash @@ -482,7 +472,7 @@ currentTip :: Eff effs (Block, Slot) currentTip contractEnv = do tip <- - either (error . Text.unpack) id + either error id <$> CardanoCLI.queryTip @w contractEnv.cePABConfig pure $ liftA2 (,) block (Slot . slot) tip @@ -562,7 +552,7 @@ makeCollateral cEnv = runEitherT $ do let pabConf = cEnv.cePABConfig unbalancedTx <- - firstEitherT (Text.pack . show) $ + firstEitherT show $ hoistEither $ Collateral.mkCollateralTx pabConf balancedTx <- @@ -574,7 +564,7 @@ makeCollateral cEnv = runEitherT $ do wbr <- lift $ writeBalancedTx cEnv (EmulatorTx balancedTx) case wbr of - WriteBalancedTxFailed e -> throwE . Text.pack $ "Failed to create collateral output: " <> show e + WriteBalancedTxFailed e -> throwE $ "Failed to create collateral output: " <> show e WriteBalancedTxSuccess cTx -> do status <- lift $ awaitTxStatusChange cEnv (getCardanoTxId cTx) lift $ printBpiLog @w (Notice [CollateralLog]) $ "Collateral Tx Status: " <> pretty status @@ -596,7 +586,7 @@ findCollateralAtOwnPKH cEnv = pabConf.pcOwnStakePubKeyHash r <- - firstEitherT (Text.pack . show) $ + firstEitherT show $ newEitherT $ queryNode @w (UtxosAt changeAddr) let refsAndOuts = Map.toList $ Tx.toTxOut <$> r hoistEither $ case filter check refsAndOuts of diff --git a/src/BotPlutusInterface/Effects.hs b/src/BotPlutusInterface/Effects.hs index db46013c..0d248ae0 100644 --- a/src/BotPlutusInterface/Effects.hs +++ b/src/BotPlutusInterface/Effects.hs @@ -57,21 +57,15 @@ import BotPlutusInterface.Types ( import Cardano.Api (AsType, FileError (FileIOError), HasTextEnvelope, TextEnvelopeDescr, TextEnvelopeError) import Cardano.Api qualified import Control.Concurrent qualified as Concurrent -import Control.Concurrent.STM (TVar, atomically, modifyTVar, modifyTVar') +import Control.Concurrent.STM (modifyTVar) import Control.Lens ((^.)) -import Control.Monad (void, when) import Control.Monad.Freer (Eff, LastMember, Member, interpretM, reinterpret, send, subsume, type (~>)) import Control.Monad.Freer.Extras (LogMsg (LMessage)) import Control.Monad.Freer.Extras qualified as Freer -import Control.Monad.Trans.Except.Extra (handleIOExceptT, runExceptT) +import Control.Monad.Trans.Except.Extra (handleIOExceptT) import Data.Aeson (ToJSON) import Data.Aeson qualified as JSON -import Data.Bifunctor (second) import Data.ByteString qualified as ByteString -import Data.Kind (Type) -import Data.Maybe (catMaybes) -import Data.String (IsString, fromString) -import Data.Text (Text) import Data.Text qualified as Text import Ledger qualified import Plutus.Contract.Effects (ChainIndexQuery, ChainIndexResponse) @@ -80,10 +74,11 @@ import PlutusTx.Builtins.Internal (BuiltinByteString (BuiltinByteString)) import Prettyprinter (Pretty (pretty), defaultLayoutOptions, layoutPretty) import Prettyprinter qualified as PP import Prettyprinter.Render.String qualified as Render +import Relude hiding (stderr, stdout) import System.Directory qualified as Directory import System.Exit (ExitCode (ExitFailure, ExitSuccess)) import System.Process (readProcess, readProcessWithExitCode) -import Prelude hiding (readFile) +import Text.Show qualified as Text (Show (..)) data ShellArgs a = ShellArgs { cmdName :: Text @@ -258,7 +253,7 @@ readProcessEither path args = mapToEither :: (ExitCode, String, String) -> Either Text String mapToEither (ExitSuccess, stdout, _) = Right stdout mapToEither (ExitFailure exitCode, _, stderr) = - Left $ "ExitCode " <> Text.pack (show exitCode) <> ": " <> Text.pack stderr + Left $ "ExitCode " <> show exitCode <> ": " <> Text.pack stderr saveBudgetImpl :: ContractEnvironment w -> Ledger.TxId -> TxBudget -> IO () saveBudgetImpl contractEnv txId budget = diff --git a/src/BotPlutusInterface/ExBudget.hs b/src/BotPlutusInterface/ExBudget.hs index 7cae1861..b031435e 100644 --- a/src/BotPlutusInterface/ExBudget.hs +++ b/src/BotPlutusInterface/ExBudget.hs @@ -23,16 +23,11 @@ import Cardano.Prelude (maybeToEither) import Control.Arrow (left) import Control.Monad.Freer (Eff, runM) import Control.Monad.Freer.Reader (runReader) -import Data.Either (rights) -import Data.List (sort) -import Data.Map (Map) import Data.Map qualified as Map import Data.Set qualified as Set -import Data.Text qualified as Text -import GHC.Natural (Natural) import Ledger (ExBudget (ExBudget), ExCPU (ExCPU), ExMemory (ExMemory), MintingPolicyHash, TxOutRef) import Ledger.Tx.CardanoAPI (fromCardanoPolicyId, fromCardanoTxIn) -import Prelude +import Relude hiding (runReader) {- | Estimate budget of transaction. Returns separate budgets for spending and minting. @@ -77,8 +72,7 @@ getScaledBudget maxUnits scaler budget = else Left $ BudgetEstimationError $ - Text.pack $ - "Exceeded global transaction budget\nCalculated: " ++ show budgetSum ++ "\nLimit: " ++ show maxUnits + "Exceeded global transaction budget\nCalculated: " <> show budgetSum <> "\nLimit: " <> show maxUnits where budgetSum = foldr addBudgets (CApi.ExecutionUnits 0 0) $ rights $ Map.elems budget scalers = @@ -250,4 +244,4 @@ unitsToBudget (CApi.ExecutionUnits cpu mem) = -- | Helper error converter toBudgetError :: Show e => e -> BudgetEstimationError -toBudgetError = BudgetEstimationError . Text.pack . show +toBudgetError = BudgetEstimationError . show diff --git a/src/BotPlutusInterface/Files.hs b/src/BotPlutusInterface/Files.hs index 8a33f636..1b349de2 100644 --- a/src/BotPlutusInterface/Files.hs +++ b/src/BotPlutusInterface/Files.hs @@ -58,13 +58,9 @@ import Data.ByteString qualified as ByteString import Data.ByteString.Lazy qualified as LazyByteString import Data.ByteString.Short qualified as ShortByteString import Data.Either.Combinators (mapLeft) -import Data.Kind (Type) -import Data.List (sortOn, unzip4) -import Data.Map (Map) +import Data.List (foldl, unzip4) import Data.Map qualified as Map -import Data.Maybe (catMaybes, mapMaybe) -import Data.Text (Text) -import Data.Text qualified as Text +import Data.Text (pack, unpack) import Ledger.Crypto (PubKey (PubKey), PubKeyHash (PubKeyHash)) import Ledger.Crypto qualified as Crypto import Ledger.Tx (Tx) @@ -88,8 +84,8 @@ import Plutus.V1.Ledger.Api ( import Plutus.V1.Ledger.Api qualified as Ledger import PlutusTx (ToData, toData) import PlutusTx.Builtins (fromBuiltin) +import Relude import System.FilePath (takeExtension, ()) -import Prelude -- | Filename of a minting policy script policyScriptFilePath :: PABConfig -> CurrencySymbol -> Text @@ -146,7 +142,7 @@ writePolicyScriptFile :: writePolicyScriptFile pabConf mintingPolicy = let script = serialiseScript $ Ledger.unMintingPolicyScript mintingPolicy filepath = policyScriptFilePath pabConf (ScriptUtils.scriptCurrencySymbol mintingPolicy) - in fmap (const filepath) <$> writeFileTextEnvelope @w (Text.unpack filepath) Nothing script + in fmap (const filepath) <$> writeFileTextEnvelope @w (unpack filepath) Nothing script -- | Compiles and writes a script file under the given folder writeValidatorScriptFile :: @@ -158,7 +154,7 @@ writeValidatorScriptFile :: writeValidatorScriptFile pabConf validatorScript = let script = serialiseScript $ Ledger.unValidatorScript validatorScript filepath = validatorScriptFilePath pabConf (ScriptUtils.validatorHash validatorScript) - in fmap (const filepath) <$> writeFileTextEnvelope @w (Text.unpack filepath) Nothing script + in fmap (const filepath) <$> writeFileTextEnvelope @w (unpack filepath) Nothing script -- TODO: Removed for now, as the main iohk branch doesn't support metadata yet -- -- | Writes metadata file under the given folder @@ -170,7 +166,7 @@ writeValidatorScriptFile pabConf validatorScript = -- Eff effs (Either (FileError ()) Text) -- writeMetadataFile pabConf metadata = -- let filepath = metadataFilePath pabConf metadata --- in const filepath <<$>> writeFileRaw @w (Text.unpack filepath) metadata +-- in const filepath <<$>> writeFileRaw @w (unpack filepath) metadata -- | Write to disk all validator scripts, datums and redemeers appearing in the tx writeAll :: @@ -180,9 +176,9 @@ writeAll :: Tx -> Eff effs (Either (FileError ()) [Text]) writeAll pabConf tx = do - createDirectoryIfMissing @w False (Text.unpack pabConf.pcScriptFileDir) + createDirectoryIfMissing @w False (unpack pabConf.pcScriptFileDir) -- TODO: Removed for now, as the main iohk branch doesn't support metadata yet - -- createDirectoryIfMissing @w False (Text.unpack pabConf.pcMetadataDir) + -- createDirectoryIfMissing @w False (unpack pabConf.pcMetadataDir) let (_, validatorScripts, redeemers, datums) = unzip4 $ mapMaybe Tx.inScripts $ Tx.txInputs tx @@ -210,13 +206,13 @@ readPrivateKeys :: PABConfig -> Eff effs (Either Text (Map PubKeyHash DummyPrivKey)) readPrivateKeys pabConf = do - files <- listDirectory @w $ Text.unpack pabConf.pcSigningKeyFileDir + files <- listDirectory @w $ unpack pabConf.pcSigningKeyFileDir privKeys <- catMaybes <$> mapM ( \filename -> - let fullPath = Text.unpack pabConf.pcSigningKeyFileDir filename + let fullPath = unpack pabConf.pcSigningKeyFileDir filename in case takeExtension filename of ".vkey" -> Just <$> readVerificationKey @w fullPath ".skey" -> Just <$> readSigningKey @w fullPath @@ -254,7 +250,7 @@ readSigningKey :: FilePath -> Eff effs (Either Text DummyPrivKey) readSigningKey filePath = do - pKey <- mapLeft (Text.pack . show) <$> readFileTextEnvelope @w (AsSigningKey AsPaymentKey) filePath + pKey <- mapLeft show <$> readFileTextEnvelope @w (AsSigningKey AsPaymentKey) filePath pure $ skeyToDummyPrivKey =<< pKey readVerificationKey :: @@ -263,7 +259,7 @@ readVerificationKey :: FilePath -> Eff effs (Either Text DummyPrivKey) readVerificationKey filePath = do - pKey <- mapLeft (Text.pack . show) <$> readFileTextEnvelope @w (AsVerificationKey AsPaymentKey) filePath + pKey <- mapLeft show <$> readFileTextEnvelope @w (AsVerificationKey AsPaymentKey) filePath pure $ vkeyToDummyPrivKey =<< pKey vkeyToDummyPrivKey :: VerificationKey PaymentKey -> Either Text DummyPrivKey @@ -291,7 +287,7 @@ mkDummyPrivateKey (PubKey (LedgerBytes pubkey)) = dummyPrivKeySuffix = ByteString.replicate 32 0 dummyChainCode = ByteString.replicate 32 1 pubkeyBS = fromBuiltin pubkey - in mapLeft Text.pack $ + in mapLeft pack $ Crypto.xprv $ mconcat [dummyPrivKey, dummyPrivKeySuffix, pubkeyBS, dummyChainCode] @@ -311,7 +307,7 @@ writeDatumJsonFile :: writeDatumJsonFile pabConf datum = let json = dataToJson $ getDatum datum filepath = datumJsonFilePath pabConf (ScriptUtils.datumHash datum) - in fmap (const filepath) <$> writeFileJSON @w (Text.unpack filepath) json + in fmap (const filepath) <$> writeFileJSON @w (unpack filepath) json writeRedeemerJsonFile :: forall (w :: Type) (effs :: [Type -> Type]). @@ -322,7 +318,7 @@ writeRedeemerJsonFile :: writeRedeemerJsonFile pabConf redeemer = let json = dataToJson $ getRedeemer redeemer filepath = redeemerJsonFilePath pabConf (ScriptUtils.redeemerHash redeemer) - in fmap (const filepath) <$> writeFileJSON @w (Text.unpack filepath) json + in fmap (const filepath) <$> writeFileJSON @w (unpack filepath) json dataToJson :: forall (a :: Type). ToData a => a -> JSON.Value dataToJson = diff --git a/src/BotPlutusInterface/Helpers.hs b/src/BotPlutusInterface/Helpers.hs index c5ab50c0..16d53632 100644 --- a/src/BotPlutusInterface/Helpers.hs +++ b/src/BotPlutusInterface/Helpers.hs @@ -1,15 +1,12 @@ module BotPlutusInterface.Helpers (awaitTxConfirmedUntilTime) where import Control.Lens (review) -import Control.Monad (void) -import Data.Kind (Type) import Data.Row (Row) -import Data.Text (pack) import Ledger (POSIXTime, TxId) import Plutus.Contract.Error (AsContractError, _OtherContractError) import Plutus.Contract.Request (RollbackState (Unknown), awaitTxStatusChange, currentTime, waitNSlots) import Plutus.Contract.Types (Contract, throwError) -import Prelude +import Relude awaitTxConfirmedUntilTime :: forall (w :: Type) (s :: Row Type) (e :: Type). (AsContractError e) => TxId -> POSIXTime -> Contract w s e () awaitTxConfirmedUntilTime txId maxTime = do @@ -21,8 +18,7 @@ awaitTxConfirmedUntilTime txId maxTime = do then throwError $ review _OtherContractError $ - pack $ - "Could not find transaction - " ++ show txId ++ " - before " ++ show maxTime + "Could not find transaction - " <> show txId <> " - before " <> show maxTime else do void $ waitNSlots 20 awaitTxConfirmedUntilTime txId maxTime diff --git a/src/BotPlutusInterface/Server.hs b/src/BotPlutusInterface/Server.hs index 6bddfc9b..dae52bf8 100644 --- a/src/BotPlutusInterface/Server.hs +++ b/src/BotPlutusInterface/Server.hs @@ -21,23 +21,14 @@ import BotPlutusInterface.Types ( SomeContractState (SomeContractState), ) import Control.Concurrent (ThreadId, forkIO) -import Control.Concurrent.STM (TVar, atomically, modifyTVar, newTVarIO, readTVar, readTVarIO, retry) -import Control.Monad (forever, guard, unless, void) +import Control.Concurrent.STM (modifyTVar, retry) import Control.Monad.Error.Class (throwError) -import Control.Monad.IO.Class (liftIO) import Data.Aeson (FromJSON, ToJSON (toJSON)) import Data.Aeson qualified as JSON -import Data.Bifunctor (bimap) import Data.ByteString.Lazy qualified as LBS -import Data.Either.Combinators (leftToMaybe) -import Data.Kind (Type) import Data.Map qualified as Map -import Data.Maybe (catMaybes) -import Data.Proxy (Proxy (Proxy)) import Data.Row (Row) -import Data.String (fromString) -import Data.Text (Text, pack, unpack) -import Data.Text.Encoding (encodeUtf8) +import Data.Text (pack, unpack) import Data.UUID.V4 qualified as UUID import Ledger.Tx (TxId (TxId)) import Network.WebSockets ( @@ -64,6 +55,7 @@ import Plutus.PAB.Webserver.Types ( ) import Plutus.V1.Ledger.Bytes (LedgerBytes (LedgerBytes), fromHex) import PlutusTx.Prelude (lengthOfByteString) +import Relude hiding (state) import Servant.API ( Capture, FromHttpApiData (parseUrlPiece), @@ -81,7 +73,6 @@ import System.Directory (doesFileExist, makeAbsolute) import System.FilePath (()) import Test.QuickCheck (Arbitrary (arbitrary), elements, vectorOf) import Wallet.Types (ContractInstanceId (..)) -import Prelude initState :: IO AppState initState = AppState <$> newTVarIO Map.empty diff --git a/src/BotPlutusInterface/TimeSlot.hs b/src/BotPlutusInterface/TimeSlot.hs index a0b38935..4759694d 100644 --- a/src/BotPlutusInterface/TimeSlot.hs +++ b/src/BotPlutusInterface/TimeSlot.hs @@ -36,13 +36,9 @@ import Control.Monad.Except (runExcept) import Control.Monad.Trans.Either ( EitherT, firstEitherT, - hoistEither, newEitherT, runEitherT, ) -import Data.Bifunctor (first) -import Data.Text (Text) -import Data.Text qualified as Text import Data.Time (UTCTime, secondsToNominalDiffTime) import Data.Time.Clock.POSIX (posixSecondsToUTCTime) import Ledger ( @@ -54,7 +50,7 @@ import Ledger ( import Ledger qualified import Ouroboros.Consensus.HardFork.History qualified as Consensus import Ouroboros.Consensus.HardFork.History.Qry qualified as HF -import Prelude +import Relude hiding (runReader) -- | Error returned by the functions of this module data TimeSlotConversionError @@ -216,7 +212,7 @@ newET :: (Show e, Monad m) => m (Either e a) -> EitherT TimeSlotConversionError newET = firstEitherT toError . newEitherT toError :: Show e => e -> TimeSlotConversionError -toError = TimeSlotConversionError . Text.pack . show +toError = TimeSlotConversionError . show -- "Ported" from cardano-node: -- https://github.com/input-output-hk/cardano-node/blob/64f3d19a681a872f07bd61e6cc473738e78ab0e8/cardano-api/src/Cardano/Api/Fees.hs#L560 @@ -226,5 +222,5 @@ toLedgerEpochInfo :: CApi.EraHistory mode -> EpochInfo (Either Text) toLedgerEpochInfo (CApi.EraHistory _ interpreter) = - hoistEpochInfo (first (Text.pack . show) . runExcept) $ + hoistEpochInfo (first show . runExcept) $ Consensus.interpreterToEpochInfo interpreter diff --git a/src/BotPlutusInterface/Types.hs b/src/BotPlutusInterface/Types.hs index 2c3e7f27..20827226 100644 --- a/src/BotPlutusInterface/Types.hs +++ b/src/BotPlutusInterface/Types.hs @@ -37,18 +37,13 @@ module BotPlutusInterface.Types ( import Cardano.Api (NetworkId (Testnet), NetworkMagic (..), ScriptExecutionError, ScriptWitnessIndex) import Cardano.Api.Shelley (ProtocolParameters) -import Control.Concurrent.STM (TVar, readTVarIO) import Data.Aeson (ToJSON) import Data.Aeson qualified as JSON import Data.Aeson.TH (Options (..), defaultOptions, deriveJSON) import Data.Data (Data (toConstr), constrIndex, dataTypeOf, eqT, fromConstrB, indexConstr, type (:~:) (Refl)) import Data.Default (Default (def)) -import Data.Kind (Type) import Data.List (intersect) -import Data.Map (Map) import Data.Map qualified as Map -import Data.Text (Text) -import GHC.Generics (Generic) import Ledger ( ExBudget, MintingPolicyHash, @@ -60,7 +55,6 @@ import Ledger ( import Ledger qualified import Ledger.Ada qualified as Ada import Network.Wai.Handler.Warp (Port) -import Numeric.Natural (Natural) import Plutus.PAB.Core.ContractInstance.STM (Activity) import Plutus.PAB.Effects.Contract.Builtin ( HasDefinitions (..), @@ -69,9 +63,10 @@ import Plutus.PAB.Effects.Contract.Builtin ( ) import Prettyprinter (Pretty (pretty), (<+>)) import Prettyprinter qualified as PP +import Relude import Servant.Client (BaseUrl (BaseUrl), Scheme (Http)) +import Text.Show qualified as Text (Show (..)) import Wallet.Types (ContractInstanceId (..)) -import Prelude data PABConfig = PABConfig { -- | Calling the cli through ssh when set to Remote diff --git a/src/BotPlutusInterface/UtxoParser.hs b/src/BotPlutusInterface/UtxoParser.hs index f3070406..be17d6ac 100644 --- a/src/BotPlutusInterface/UtxoParser.hs +++ b/src/BotPlutusInterface/UtxoParser.hs @@ -3,8 +3,6 @@ module BotPlutusInterface.UtxoParser ( tokenNameParser, ) where -import Control.Applicative (optional) -import Control.Monad (mzero, void) import Data.Aeson.Extras (tryDecode) import Data.Attoparsec.ByteString.Char8 (isSpace) import Data.Attoparsec.Text ( @@ -18,13 +16,12 @@ import Data.Attoparsec.Text ( string, takeWhile, ) -import Data.Text (Text) import Plutus.V1.Ledger.Api ( BuiltinByteString, TokenName (..), ) import PlutusTx.Builtins (toBuiltin) -import Prelude hiding (takeWhile) +import Relude hiding (takeWhile) tokenNameParser :: Parser TokenName tokenNameParser = do diff --git a/src/PlutusConfig/Base.hs b/src/PlutusConfig/Base.hs index 78bc8e9b..2e0f296e 100644 --- a/src/PlutusConfig/Base.hs +++ b/src/PlutusConfig/Base.hs @@ -32,21 +32,17 @@ import Config.Schema ( ) import Data.Aeson (FromJSON, ToJSON) import Data.Aeson qualified as JSON -import Data.Bifunctor (first) import Data.Ratio ((%)) -import Data.String (fromString) -import Data.String.ToString (toString) -import Data.Text (Text) import Data.Text qualified as Text import Network.Wai.Handler.Warp (Port) -import Numeric.Natural (Natural) import PlutusConfig.Types (ToValue (toValue), withNamePrefixSpec) +import Relude +import Relude.Unsafe (read) import Servant.Client.Core (BaseUrl (..), parseBaseUrl, showBaseUrl) import Text.Regex (matchRegex, mkRegex) -import Prelude instance ToValue Bool where - toValue = Atom () . MkAtom . Text.toLower . Text.pack . show + toValue = Atom () . MkAtom . Text.toLower . show instance ToValue Natural where toValue x = Number () $ integerToNumber $ toInteger x @@ -61,7 +57,7 @@ instance ToValue Text where toValue = Text () instance ToValue String where - toValue = Text () . Text.pack + toValue = Text () . show instance {-# OVERLAPS #-} HasSpec String where anySpec = stringSpec @@ -70,7 +66,7 @@ instance ToValue a => ToValue (Maybe a) where toValue = maybe (Atom () "nothing") toValue enumToAtom :: forall a. Show a => a -> Value () -enumToAtom = Atom () . MkAtom . Text.toLower . Text.pack . show +enumToAtom = Atom () . MkAtom . Text.toLower . show maybeSpec :: forall a. ValueSpec a -> ValueSpec (Maybe a) maybeSpec spec = @@ -78,7 +74,7 @@ maybeSpec spec = Just <$> spec instance ToValue Rational where - toValue x = Text () $ Text.pack $ show x + toValue x = Text () $ show x customRationalSpec :: ValueSpec Rational customRationalSpec = @@ -92,7 +88,7 @@ customRationalSpec = in if d' == 0 then Left "denominator should not be zero" else Right $ n' % d' - _ -> Left $ Text.pack "Ratio format: '1 % 2'" + _ -> Left $ show ("Ratio format: '1 % 2'" :: Text) ) where ratioRE = mkRegex "^ *([0-9]+) *% *([0-9]+) *$" @@ -104,7 +100,7 @@ filepathSpec :: ValueSpec Text filepathSpec = withNamePrefixSpec "filepath" anySpec toValueTextViaJSON :: forall a. ToJSON a => a -> Value () -toValueTextViaJSON = Text () . Text.pack . filter (/= '"') . toString . JSON.encode +toValueTextViaJSON = Text () . show . filter (/= '"') . toString @Text . decodeUtf8 . JSON.encode textSpecViaJSON :: forall a. FromJSON a => Text -> ValueSpec a textSpecViaJSON name = @@ -119,7 +115,7 @@ textSpecViaJSON name = wrap s = "\"" <> s <> "\"" instance ToValue BaseUrl where - toValue = Text () . Text.pack . showBaseUrl + toValue = Text () . show . showBaseUrl instance HasSpec BaseUrl where anySpec = baseUrlSpec @@ -129,7 +125,7 @@ baseUrlSpec = customSpec "url" anySpec - (first (Text.pack . show) . parseBaseUrl . Text.unpack) + (first show . parseBaseUrl . Text.unpack) portSpec :: ValueSpec Port portSpec = fromEnum <$> customSpec "port" naturalSpec Right diff --git a/src/PlutusConfig/Cardano/Api.hs b/src/PlutusConfig/Cardano/Api.hs index 073f239a..282ce50a 100644 --- a/src/PlutusConfig/Cardano/Api.hs +++ b/src/PlutusConfig/Cardano/Api.hs @@ -37,11 +37,7 @@ import Config.Schema ( (), ) import Data.Aeson (eitherDecode, encode) -import Data.Bifunctor (first) -import Data.Map (Map) import Data.Map qualified as Map -import Data.String (fromString) -import Data.String.ToString (toString) import Data.Text qualified as Text import PlutusConfig.Base ( caseAgnosticAtomSpec, @@ -50,7 +46,7 @@ import PlutusConfig.Base ( toValueTextViaJSON, ) import PlutusConfig.Types (ToValue (toValue)) -import Prelude +import Relude instance HasSpec PraosNonce where anySpec = textSpecViaJSON "PraosNonce" @@ -158,7 +154,7 @@ versionCostModelSpec = Map.fromList <$> listSpec pair pure (ver, cost) instance ToValue AnyPlutusScriptVersion where - toValue = Text () . fromString . filter (/= '"') . toString . encode + toValue = Text () . fromString . filter (/= '"') . toString @Text . decodeUtf8 . encode instance HasSpec AnyPlutusScriptVersion where anySpec = anyPlutusScriptVersionSpec diff --git a/src/PlutusConfig/Cardano/Api/Shelley.hs b/src/PlutusConfig/Cardano/Api/Shelley.hs index 029dc0f3..89395c07 100644 --- a/src/PlutusConfig/Cardano/Api/Shelley.hs +++ b/src/PlutusConfig/Cardano/Api/Shelley.hs @@ -37,7 +37,7 @@ import PlutusConfig.Cardano.Api () -- sectionWithDefault, -- sectionWithDefault', -- ) -import Prelude +import Relude -- instance ToValue (Natural, Natural) where -- toValue (a, b) = List () [toValue a, toValue b] diff --git a/src/PlutusConfig/Ledger.hs b/src/PlutusConfig/Ledger.hs index cac4a764..f3c05399 100644 --- a/src/PlutusConfig/Ledger.hs +++ b/src/PlutusConfig/Ledger.hs @@ -6,12 +6,10 @@ module PlutusConfig.Ledger () where import Config (Value (Text)) import Config.Schema (HasSpec (anySpec), ValueSpec, stringSpec) -import Data.String (fromString) -import Data.Text (Text) import Ledger (POSIXTime (..), PubKeyHash, StakePubKeyHash (..)) import PlutusConfig.Base () import PlutusConfig.Types (ToValue (toValue), withNamePrefixSpec) -import Prelude +import Relude instance ToValue PubKeyHash where toValue = Text () . fromString . show diff --git a/src/PlutusConfig/Misc.hs b/src/PlutusConfig/Misc.hs index 6383573b..33860c82 100644 --- a/src/PlutusConfig/Misc.hs +++ b/src/PlutusConfig/Misc.hs @@ -9,9 +9,9 @@ import PlutusConfig.Cardano.Api () import PlutusConfig.Cardano.Api.Shelley () import PlutusConfig.Ledger () import PlutusConfig.Types (ToValue, deserialize', serialize) +import Relude import System.FilePath (()) import System.IO.Temp (withSystemTempDirectory) -import Prelude serializeDeserialize :: (ToValue a, HasSpec a) => a -> Either String a serializeDeserialize = serializeDeserialize' anySpec diff --git a/src/PlutusConfig/Types.hs b/src/PlutusConfig/Types.hs index ad5e1ca6..309a413e 100644 --- a/src/PlutusConfig/Types.hs +++ b/src/PlutusConfig/Types.hs @@ -38,13 +38,9 @@ import Config.Schema ( optSection', ) import Config.Schema.Load.Error (prettyValueSpecMismatch) -import Control.Exception (displayException) -import Data.Bifunctor (first) -import Data.Maybe (fromMaybe) -import Data.Text (Text) import Data.Text qualified as Text +import Relude import Text.PrettyPrint (Style (lineLength), render, renderStyle, style) -import Prelude class ToValue a where toValue :: a -> Value () diff --git a/test/Spec/BotPlutusInterface/AdjustUnbalanced.hs b/test/Spec/BotPlutusInterface/AdjustUnbalanced.hs index 63ba98c5..e4acfbd5 100644 --- a/test/Spec/BotPlutusInterface/AdjustUnbalanced.hs +++ b/test/Spec/BotPlutusInterface/AdjustUnbalanced.hs @@ -4,9 +4,8 @@ import BotPlutusInterface.Types ( ContractEnvironment (cePABConfig), PABConfig (pcOwnPubKeyHash, pcProtocolParams), ) -import Control.Lens ((&), (.~), (^.)) +import Control.Lens ((.~), (^.)) import Data.Default (def) -import Data.Text (Text) import Ledger ( ChainIndexTxOut (PublicKeyChainIndexTxOut), PaymentPubKeyHash (unPaymentPubKeyHash), @@ -34,10 +33,8 @@ import Spec.MockContract ( ) import Test.Tasty (TestTree) import Test.Tasty.HUnit (Assertion, assertBool, assertFailure, testCase) -import Prelude +import Relude -import Data.Foldable (find) -import Data.Void (Void) import Ledger.Ada (fromValue) import Ledger.Constraints.OffChain (tx) diff --git a/test/Spec/BotPlutusInterface/Balance.hs b/test/Spec/BotPlutusInterface/Balance.hs index a917ab8e..b3c9ee9f 100644 --- a/test/Spec/BotPlutusInterface/Balance.hs +++ b/test/Spec/BotPlutusInterface/Balance.hs @@ -18,7 +18,7 @@ import Ledger.Value qualified as Value import Spec.MockContract (runPABEffectPure) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (Assertion, assertFailure, testCase, (@?=)) -import Prelude +import Relude {- | Tests for 'cardano-cli query utxo' result parsers @since 0.1 diff --git a/test/Spec/BotPlutusInterface/CoinSelection.hs b/test/Spec/BotPlutusInterface/CoinSelection.hs index fe12b74c..b275ed71 100644 --- a/test/Spec/BotPlutusInterface/CoinSelection.hs +++ b/test/Spec/BotPlutusInterface/CoinSelection.hs @@ -6,13 +6,9 @@ import BotPlutusInterface.CoinSelection (selectTxIns, uniqueAssetClasses, values import BotPlutusInterface.Effects (PABEffect) import Control.Lens (filtered, foldOf, folded, to, (^..)) import Data.Default (def) -import Data.Either (isLeft) -import Data.Map (Map) import Data.Map qualified as Map import Data.Maybe (fromJust) -import Data.Set (Set) import Data.Set qualified as Set -import Data.Text (Text) import Data.Text qualified as Text import Data.Vector (Vector) import Data.Vector qualified as Vec @@ -32,7 +28,8 @@ import Test.QuickCheck (Gen, Property, forAll, withMaxSuccess) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (Assertion, assertFailure, testCase, (@?=)) import Test.Tasty.QuickCheck (testProperty) -import Prelude +import Relude.Unsafe (head, tail) +import Relude hiding (head, tail) tests :: TestTree tests = diff --git a/test/Spec/BotPlutusInterface/Collateral.hs b/test/Spec/BotPlutusInterface/Collateral.hs index ecc3b40c..13b1a990 100644 --- a/test/Spec/BotPlutusInterface/Collateral.hs +++ b/test/Spec/BotPlutusInterface/Collateral.hs @@ -3,11 +3,9 @@ module Spec.BotPlutusInterface.Collateral where -import Control.Lens ((&), (.~), (^.)) +import Control.Lens ((.~), (^.)) import Data.Aeson.Extras (encodeByteString) import Data.Default (def) -import Data.Text (Text, pack) -import Data.Void (Void) import Ledger qualified import Ledger.Ada qualified as Ada import Ledger.Constraints qualified as Constraints @@ -40,7 +38,6 @@ import BotPlutusInterface.Types ( ContractEnvironment (ceCollateral, cePABConfig), PABConfig (pcCollateralSize), ) -import Control.Concurrent.STM (newTVarIO) import Spec.BotPlutusInterface.Contract (assertCommandHistory, assertContract) @@ -49,7 +46,7 @@ import PlutusTx.Builtins (fromBuiltin) import System.IO.Unsafe (unsafePerformIO) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (Assertion, assertEqual, testCase) -import Prelude +import Relude hiding (state) tests :: TestTree tests = @@ -113,7 +110,7 @@ testTxCreatesCollateralCorrectly = do inTxId = encodeByteString $ fromBuiltin $ TxId.getTxId $ Tx.txOutRefId txOutRef1 (_, state) = runContractPure mintContract initState - collatVal = pack $ show $ pcCollateralSize $ cePABConfig (state ^. contractEnv) + collatVal = show $ pcCollateralSize $ cePABConfig (state ^. contractEnv) assertCommandHistory state diff --git a/test/Spec/BotPlutusInterface/Config.hs b/test/Spec/BotPlutusInterface/Config.hs index 9f74259b..367b4152 100644 --- a/test/Spec/BotPlutusInterface/Config.hs +++ b/test/Spec/BotPlutusInterface/Config.hs @@ -33,7 +33,7 @@ import System.FilePath (()) import System.IO.Temp (withSystemTempDirectory) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (testCase, (@?=)) -import Prelude +import Relude {- | Tests for PABConfig serialize/deserialize diff --git a/test/Spec/BotPlutusInterface/Contract.hs b/test/Spec/BotPlutusInterface/Contract.hs index ceeb8f60..32e2b5b9 100644 --- a/test/Spec/BotPlutusInterface/Contract.hs +++ b/test/Spec/BotPlutusInterface/Contract.hs @@ -81,7 +81,7 @@ import Spec.MockContract ( ) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (Assertion, assertBool, assertFailure, testCase, (@?=)) -import Prelude +import Relude {- | Contract tests diff --git a/test/Spec/BotPlutusInterface/ContractStats.hs b/test/Spec/BotPlutusInterface/ContractStats.hs index dea7b9dd..3e58f86e 100644 --- a/test/Spec/BotPlutusInterface/ContractStats.hs +++ b/test/Spec/BotPlutusInterface/ContractStats.hs @@ -4,9 +4,8 @@ import BotPlutusInterface.Types ( ContractEnvironment (cePABConfig), PABConfig (pcCollectStats, pcOwnPubKeyHash), ) -import Control.Lens ((&), (.~), (^.)) +import Control.Lens ((.~), (^.)) import Data.Default (def) -import Data.Text (Text) import Data.Text qualified as Text import Ledger (ChainIndexTxOut (PublicKeyChainIndexTxOut), PaymentPubKeyHash (unPaymentPubKeyHash)) import Ledger.Ada qualified as Ada @@ -29,7 +28,7 @@ import Spec.MockContract ( ) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (Assertion, assertFailure, testCase, (@?=)) -import Prelude +import Relude hiding (state) tests :: TestTree tests = diff --git a/test/Spec/BotPlutusInterface/Server.hs b/test/Spec/BotPlutusInterface/Server.hs index f96c61d8..d9951870 100644 --- a/test/Spec/BotPlutusInterface/Server.hs +++ b/test/Spec/BotPlutusInterface/Server.hs @@ -30,12 +30,10 @@ import Servant.Client.Core.BaseUrl (BaseUrl (..), parseBaseUrl) import Data.Aeson (FromJSON, ToJSON, encode) import Data.ByteString.Lazy qualified as LBS import Data.Default (def) -import Data.Proxy (Proxy (..)) import Data.Text (pack, unpack) -import Data.Void (Void, absurd) import System.FilePath (()) import System.IO.Temp (withSystemTempDirectory) -import Prelude +import Relude hiding (state) type RawTxEndpointResponse = Either ClientError RawTx type RawTxTest a = (TxId -> IO RawTxEndpointResponse) -> IO a diff --git a/test/Spec/BotPlutusInterface/TxStatusChange.hs b/test/Spec/BotPlutusInterface/TxStatusChange.hs index 38fd007d..8099d23c 100644 --- a/test/Spec/BotPlutusInterface/TxStatusChange.hs +++ b/test/Spec/BotPlutusInterface/TxStatusChange.hs @@ -5,9 +5,8 @@ import BotPlutusInterface.Types ( PABConfig (pcOwnPubKeyHash, pcTxStatusPolling), TxStatusPolling (spBlocksTimeOut), ) -import Control.Lens ((&), (.~), (^.)) +import Control.Lens ((.~), (^.)) import Data.Default (def) -import Data.Text (Text) import Data.Text qualified as Text import Ledger (ChainIndexTxOut (PublicKeyChainIndexTxOut), PaymentPubKeyHash (unPaymentPubKeyHash), getCardanoTxId) import Ledger.Ada qualified as Ada @@ -35,7 +34,7 @@ import Spec.MockContract ( ) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (Assertion, assertBool, assertFailure, testCase, (@?=)) -import Prelude +import Relude hiding (state) tests :: TestTree tests = diff --git a/test/Spec/MockContract.hs b/test/Spec/MockContract.hs index 02626e40..23057610 100644 --- a/test/Spec/MockContract.hs +++ b/test/Spec/MockContract.hs @@ -94,38 +94,27 @@ import Cardano.Api.Shelley (PlutusScript (PlutusScriptSerialised)) import Cardano.Crypto.DSIGN (genKeyDSIGN) import Cardano.Crypto.Seed (mkSeedFromBytes) import Codec.Serialise (serialise) -import Control.Applicative (liftA2) -import Control.Concurrent.STM (newTVarIO) -import Control.Lens (at, set, view, (%~), (&), (<|), (?~), (^.), (^..), _1) +import Control.Lens (at, set, view, (%~), (<|), (?~), (^.), (^..), _1) import Control.Lens.TH (makeLenses) -import Control.Monad (join) import Control.Monad.Freer (Eff, reinterpret2, run) import Control.Monad.Freer.Error (Error, runError, throwError) import Control.Monad.Freer.Extras.Pagination (pageOf) -import Control.Monad.Freer.State (State, get, modify, runState) +import Control.Monad.Freer.State (get, modify, runState, State) import Data.Aeson (Result (Success), ToJSON) import Data.Aeson qualified as JSON import Data.Aeson.Extras (encodeByteString) -import Data.Bool (bool) import Data.ByteString qualified as ByteString import Data.ByteString.Char8 qualified as BS import Data.ByteString.Lazy qualified as LBS import Data.ByteString.Short qualified as SBS import Data.Default (Default (def)) -import Data.Either.Combinators (fromRight, mapLeft) import Data.Either.Extra (maybeToEither) import Data.Hex (hex, unhex) -import Data.Kind (Type) -import Data.List (isPrefixOf, sortOn) -import Data.Map (Map) +import Data.List qualified as List import Data.Map qualified as Map -import Data.Maybe (fromMaybe) import Data.Row (Row) import Data.Set qualified as Set -import Data.Text (Text) import Data.Text qualified as Text -import Data.Text.Encoding (decodeUtf8) -import Data.Tuple.Extra (first) import Data.UUID qualified as UUID import GHC.IO.Exception (IOErrorType (NoSuchThing), IOException (IOError)) import Ledger ( @@ -171,9 +160,9 @@ import PlutusTx.Builtins (fromBuiltin) import PlutusTx.Builtins.Internal (BuiltinByteString (BuiltinByteString)) import Prettyprinter qualified as PP import System.IO.Unsafe (unsafePerformIO) -import Text.Read (readMaybe) import Wallet.Types (ContractInstanceId (ContractInstanceId)) -import Prelude +import Relude hiding (State, get, modify, runState, state) +import Data.Either.Combinators (mapLeft) signingKey1, signingKey2, signingKey3 :: SigningKey PaymentKey signingKey1 = PaymentSigningKey $ genKeyDSIGN $ mkSeedFromBytes $ ByteString.replicate 32 0 @@ -228,14 +217,14 @@ skeyToPubKey :: SigningKey PaymentKey -> PubKey skeyToPubKey = Ledger.toPublicKey . Files.unDummyPrivateKey - . either (error . Text.unpack) id + . either error id . Files.skeyToDummyPrivKey vkeyToPubKey :: VerificationKey PaymentKey -> PubKey vkeyToPubKey = Ledger.toPublicKey . Files.unDummyPrivateKey - . either (error . Text.unpack) id + . either error id . Files.vkeyToDummyPrivKey toSigningKeyFile :: FilePath -> SigningKey PaymentKey -> (FilePath, MockFile) @@ -635,10 +624,10 @@ mockQueryChainIndex = \case throwError @Text "RedeemerFromHash is unimplemented" TxOutFromRef txOutRef -> do state <- get @(MockContractState w) - pure $ TxOutRefResponse $ lookup txOutRef (state ^. utxos) + pure $ TxOutRefResponse $ List.lookup txOutRef (state ^. utxos) UnspentTxOutFromRef txOutRef -> do state <- get @(MockContractState w) - pure $ UnspentTxOutResponse $ lookup txOutRef (state ^. utxos) + pure $ UnspentTxOutResponse $ List.lookup txOutRef (state ^. utxos) UnspentTxOutSetAtAddress _ _ -> do state <- get @(MockContractState w) pure $ UnspentTxOutsAtResponse $ QueryResponse (state ^. utxos) Nothing diff --git a/test/Spec/RandomLedger.hs b/test/Spec/RandomLedger.hs index 931a03bc..11796de5 100644 --- a/test/Spec/RandomLedger.hs +++ b/test/Spec/RandomLedger.hs @@ -11,17 +11,14 @@ module Spec.RandomLedger ( import Plutus.PAB.Arbitrary () -import Control.Lens (folded, (%~), (&), (^..)) -import Control.Monad (replicateM) +import Control.Lens (folded, (%~), (^..)) import Data.List.Extra (mconcatMap) -import Data.Set (Set) import Data.Set qualified as Set -import GHC.Natural (Natural) import Ledger.Tx (TxOut (..), TxOutRef (..)) import Ledger.Value (AssetClass (AssetClass), Value) import Ledger.Value qualified as Value import Test.QuickCheck (Arbitrary (arbitrary), Gen, elements) -import Prelude +import Relude deriving newtype instance Arbitrary AssetClass