Skip to content

Commit

Permalink
Remove dependency on hydra-prelude
Browse files Browse the repository at this point in the history
This makes hydra-cardano-api a standalone package not relying on
anything Hydra-specific.
  • Loading branch information
abailly-iohk committed Jan 31, 2023
1 parent e8d6c7f commit db95c1a
Show file tree
Hide file tree
Showing 15 changed files with 53 additions and 24 deletions.
2 changes: 0 additions & 2 deletions hydra-cardano-api/hydra-cardano-api.cabal
Expand Up @@ -21,7 +21,6 @@ flag hydra-development
common project-config
default-language: Haskell2010
default-extensions:
NoImplicitPrelude
BangPatterns
BinaryLiterals
ConstraintKinds
Expand Down Expand Up @@ -142,7 +141,6 @@ library
, cborg
, containers
, data-default
, hydra-prelude
, ouroboros-network ==0.1.0.1
, plutus-ledger-api ==1.0.0.0
, QuickCheck
Expand Down
6 changes: 4 additions & 2 deletions hydra-cardano-api/src/Cardano/Api/UTxO.hs
Expand Up @@ -8,13 +8,15 @@
-- cardano-api in the first palce.
module Cardano.Api.UTxO where

import Hydra.Prelude

import Cardano.Api hiding (UTxO, toLedgerUTxO)
import qualified Cardano.Api
import qualified Data.List as List
import qualified Data.Map as Map
import qualified Data.Text as T
import Data.Set (Set)
import Data.Map (Map)
import Data.Text (Text)
import Data.Coerce (coerce)

type Era = BabbageEra

Expand Down
5 changes: 2 additions & 3 deletions hydra-cardano-api/src/Hydra/Cardano/Api.hs
Expand Up @@ -31,8 +31,6 @@ module Hydra.Cardano.Api (
module X,
) where

import Hydra.Prelude

import Cardano.Api as X hiding (
AddressInEra (..),
AddressTypeInEra (..),
Expand Down Expand Up @@ -95,7 +93,7 @@ import Cardano.Api.UTxO (
import Hydra.Cardano.Api.Prelude (
Era,
LedgerEra,
StandardCrypto,
StandardCrypto, Map,
)

import Hydra.Cardano.Api.Address ()
Expand Down Expand Up @@ -143,6 +141,7 @@ import qualified Cardano.Ledger.Babbage.TxBody as Ledger
import qualified Cardano.Ledger.Keys as Ledger
import qualified Cardano.Ledger.Shelley.Address.Bootstrap as Ledger
import qualified Cardano.Ledger.Shelley.Tx as Ledger hiding (TxBody)
import Data.ByteString.Short (ShortByteString)

-- ** AddressInEra

Expand Down
2 changes: 1 addition & 1 deletion hydra-cardano-api/src/Hydra/Cardano/Api/Address.hs
Expand Up @@ -19,7 +19,7 @@ instance ToJSON (Address ByronAddr) where
instance FromJSON (Address ByronAddr) where
parseJSON =
Aeson.withText "Address Byron" $
maybe empty pure . deserialiseAddress AsByronAddress
maybe mempty pure . deserialiseAddress AsByronAddress

instance Arbitrary (Address ByronAddr) where
arbitrary = do
Expand Down
2 changes: 1 addition & 1 deletion hydra-cardano-api/src/Hydra/Cardano/Api/Hash.hs
Expand Up @@ -74,5 +74,5 @@ unsafeCastHash ::
unsafeCastHash a =
either
(\e -> error $ "unsafeCastHash: incompatible hash: " <> show e)
identity
id
(deserialiseFromCBOR (proxyToAsType Proxy) (serialiseToCBOR a))
4 changes: 2 additions & 2 deletions hydra-cardano-api/src/Hydra/Cardano/Api/KeyWitness.hs
Expand Up @@ -37,7 +37,7 @@ toLedgerKeyWitness ::
[KeyWitness era] ->
Set (Ledger.WitVKey 'Ledger.Witness StandardCrypto)
toLedgerKeyWitness vkWits =
fromList [w | ShelleyKeyWitness _ w <- vkWits]
Set.fromList [w | ShelleyKeyWitness _ w <- vkWits]

-- | Convert a 'List' of cardano-api's 'KeyWitness' into a 'Set' of
-- cardano-ledger's 'BootstrapWitness'.
Expand All @@ -47,7 +47,7 @@ toLedgerBootstrapWitness ::
[KeyWitness era] ->
Set (Ledger.BootstrapWitness StandardCrypto)
toLedgerBootstrapWitness vkWits =
fromList [w | ShelleyBootstrapWitness _ w <- vkWits]
Set.fromList [w | ShelleyBootstrapWitness _ w <- vkWits]

-- | Convert a cardano-ledger's 'TxWitness' object into a list of cardano-api's
-- 'KeyWitness'.
Expand Down
3 changes: 2 additions & 1 deletion hydra-cardano-api/src/Hydra/Cardano/Api/PlutusScript.hs
Expand Up @@ -8,6 +8,7 @@ import qualified Cardano.Ledger.Alonzo.Scripts as Ledger
import Codec.Serialise (serialise)
import Hydra.Cardano.Api.PlutusScriptVersion (HasPlutusScriptVersion (..))
import qualified Plutus.V2.Ledger.Api as Plutus
import Data.ByteString.Short (toShort)

-- * Type Conversions

Expand Down Expand Up @@ -37,7 +38,7 @@ toLedgerScript (PlutusScriptSerialised bytes) =
-- | Convert a plutus 'Script' into a cardano-api 'PlutusScript'
fromPlutusScript :: Plutus.Script -> PlutusScript lang
fromPlutusScript =
PlutusScriptSerialised . toShort . fromLazy . serialise
PlutusScriptSerialised . toShort . toStrict . serialise

-- * Orphans

Expand Down
28 changes: 25 additions & 3 deletions hydra-cardano-api/src/Hydra/Cardano/Api/Prelude.hs
@@ -1,18 +1,29 @@
module Hydra.Cardano.Api.Prelude (
module Hydra.Prelude,
module Cardano.Api,
module Cardano.Api.Shelley,
module Data.Aeson,
HasCallStack,
Proxy (..),
Typeable,
UTxO,
UTxO' (UTxO),
StandardCrypto,
Era,
LedgerEra,
UsesStandardCrypto,
Text,
decodeUtf8,
encodeUtf8,
toStrict,
fromStrict,
ByteString,
Map,
Set,
unsafeHashFromBytes,
Arbitrary (..),
Gen,
) where

import Hydra.Prelude hiding (Key)

import Cardano.Api hiding (
UTxO,
multiAssetSupportedInEra,
Expand All @@ -32,6 +43,17 @@ import qualified Cardano.Crypto.Hash.Class as CC
import qualified Cardano.Ledger.Babbage as Ledger
import Cardano.Ledger.Crypto (StandardCrypto)
import qualified Cardano.Ledger.Era as Ledger.Era
import Data.Aeson (FromJSON (..), ToJSON (..))
import Data.ByteString (ByteString)
import Data.ByteString.Lazy (fromStrict, toStrict)
import Data.Map (Map)
import Data.Proxy (Proxy (..))
import Data.Set (Set)
import Data.Text (Text)
import Data.Text.Encoding (decodeUtf8, encodeUtf8)
import Data.Typeable (Typeable)
import GHC.Stack (HasCallStack)
import Test.QuickCheck (Arbitrary (..), Gen)

type Era = BabbageEra

Expand Down
2 changes: 1 addition & 1 deletion hydra-cardano-api/src/Hydra/Cardano/Api/ScriptData.hs
Expand Up @@ -88,4 +88,4 @@ instance FromJSON ScriptData where
text :: Text <- parseJSON v
either fail (pure . fromPlutusData) $ do
bytes <- Base16.decode (encodeUtf8 text)
left show $ deserialiseOrFail $ toLazy bytes
left show $ deserialiseOrFail $ fromStrict bytes
2 changes: 1 addition & 1 deletion hydra-cardano-api/src/Hydra/Cardano/Api/Tx.hs
Expand Up @@ -77,7 +77,7 @@ toLedgerTx = \case
, Ledger.txwitsBoot =
toLedgerBootstrapWitness vkWits
, Ledger.txscripts =
fromList
Map.fromList
[ ( Ledger.hashScript @(ShelleyLedgerEra Era) s
, s
)
Expand Down
1 change: 1 addition & 0 deletions hydra-cardano-api/src/Hydra/Cardano/Api/TxBody.hs
Expand Up @@ -17,6 +17,7 @@ import qualified Data.Map as Map
import Data.Maybe.Strict (strictMaybeToMaybe)
import GHC.Records (HasField (..))
import qualified Plutus.V1.Ledger.Api as Plutus
import Data.List (find)

-- | Find and deserialise from 'ScriptData', a redeemer from the transaction
-- associated to the given input.
Expand Down
5 changes: 3 additions & 2 deletions hydra-cardano-api/src/Hydra/Cardano/Api/TxOut.hs
Expand Up @@ -21,6 +21,7 @@ import Hydra.Cardano.Api.ScriptDataSupportedInEra (HasScriptData, scriptDataSupp
import Hydra.Cardano.Api.Value (fromPlutusValue, minUTxOValue)
import Plutus.V2.Ledger.Api (OutputDatum (..), fromBuiltin)
import qualified Plutus.V2.Ledger.Api as Plutus
import qualified Data.List as List

-- * Extras

Expand Down Expand Up @@ -76,7 +77,7 @@ findTxOutByAddress ::
Tx era ->
Maybe (TxIn, TxOut CtxTx era)
findTxOutByAddress address tx =
flip find indexedOutputs $ \(_, TxOut addr _ _ _) -> addr == address
flip List.find indexedOutputs $ \(_, TxOut addr _ _ _) -> addr == address
where
indexedOutputs = zip [mkTxIn tx ix | ix <- [0 ..]] (txOuts' tx)

Expand All @@ -87,7 +88,7 @@ findTxOutByScript ::
PlutusScript lang ->
Maybe (TxIn, TxOut CtxUTxO Era)
findTxOutByScript utxo script =
find matchScript (UTxO.pairs utxo)
List.find matchScript (UTxO.pairs utxo)
where
version = plutusScriptVersion (proxyToAsType $ Proxy @lang)
matchScript = \case
Expand Down
5 changes: 4 additions & 1 deletion hydra-cardano-api/src/Hydra/Cardano/Api/UTxO.hs
Expand Up @@ -11,11 +11,14 @@ import qualified Cardano.Ledger.BaseTypes as Ledger
import qualified Cardano.Ledger.Shelley.UTxO as Ledger
import qualified Cardano.Ledger.TxIn as Ledger
import qualified Data.Map as Map
import Data.String (IsString (..))
import qualified Data.Text as Text
import Data.Foldable (toList)

-- | Get a human-readable pretty text representation of a UTxO.
renderUTxO :: IsString str => UTxO -> str
renderUTxO =
fromString . intercalate "\n" . fmap (toString . UTxO.render) . UTxO.pairs
fromString . Text.unpack . Text.intercalate "\n" . fmap UTxO.render . UTxO.pairs

-- | Construct a UTxO from a transaction. This constructs artificial `TxIn`
-- (a.k.a output reference) from the transaction itself, zipping them to the
Expand Down
9 changes: 5 additions & 4 deletions hydra-cardano-api/src/Hydra/Cardano/Api/UsingRawBytesHex.hs
Expand Up @@ -3,14 +3,15 @@
-- With some minor modifications of also using encodeUtf8 in 'IsString' instance.
module Hydra.Cardano.Api.UsingRawBytesHex where

import Hydra.Cardano.Api.Prelude hiding (show)
import Hydra.Cardano.Api.Prelude

import Data.Aeson (FromJSONKey, ToJSONKey)
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.Types as Aeson
import qualified Data.ByteString.Base16 as Base16
import Data.String (IsString (..))
import qualified Data.Text as Text
import Data.Typeable (tyConName, typeRep, typeRepTyCon)
import Text.Show (Show (..))

-- | For use with @deriving via@, to provide instances for any\/all of 'Show',
-- 'IsString', 'ToJSON', 'FromJSON', 'ToJSONKey', FromJSONKey' using a hex
Expand All @@ -25,7 +26,7 @@ instance SerialiseAsRawBytes a => Show (UsingRawBytesHex a) where
show (UsingRawBytesHex x) = show (serialiseToRawBytesHex x)

instance SerialiseAsRawBytes a => IsString (UsingRawBytesHex a) where
fromString = either (error . toText) id . deserialiseFromRawBytesBase16 . encodeUtf8
fromString = either error id . deserialiseFromRawBytesBase16 . encodeUtf8 . Text.pack

instance SerialiseAsRawBytes a => ToJSON (UsingRawBytesHex a) where
toJSON (UsingRawBytesHex x) = toJSON (serialiseToRawBytesHexText x)
Expand Down Expand Up @@ -62,4 +63,4 @@ unsafeDeserialiseFromRawBytesBase16 ::
ByteString ->
a
unsafeDeserialiseFromRawBytesBase16 =
either (error . toText) (\(UsingRawBytesHex a) -> a) . deserialiseFromRawBytesBase16
either error (\(UsingRawBytesHex a) -> a) . deserialiseFromRawBytesBase16
1 change: 1 addition & 0 deletions hydra-cardano-api/src/Hydra/Cardano/Api/Value.hs
Expand Up @@ -11,6 +11,7 @@ import Hydra.Cardano.Api.MultiAssetSupportedInEra (multiAssetSupportedInEra)
import Plutus.V1.Ledger.Value (flattenValue)
import Plutus.V2.Ledger.Api (CurrencySymbol, adaSymbol, adaToken, fromBuiltin, unCurrencySymbol, unTokenName)
import qualified Plutus.V2.Ledger.Api as Plutus
import Data.Word (Word64)

-- * Extras

Expand Down

0 comments on commit db95c1a

Please sign in to comment.