Skip to content

Commit d7d8d48

Browse files
committed
Address undefineds and review comments
1 parent 58dc248 commit d7d8d48

5 files changed

Lines changed: 53 additions & 115 deletions

File tree

cardano-api/src/Cardano/Api/Certificate/Internal.hs

Lines changed: 0 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ module Cardano.Api.Certificate.Internal
6363
, fromShelleyCertificate
6464
, toShelleyPoolParams
6565
, fromShelleyPoolParams
66-
, fromShelleyStakePoolState
6766

6867
-- * Data family instances
6968
, AsType (AsCertificate, AsTxId)
@@ -93,7 +92,6 @@ import Cardano.Api.Serialise.TextEnvelope.Internal
9392

9493
import Cardano.Ledger.BaseTypes (strictMaybe)
9594
import Cardano.Ledger.Coin qualified as L
96-
import Cardano.Ledger.State qualified as Ledger
9795

9896
import Control.Monad
9997
import Control.Monad.Except (MonadError (..))
@@ -792,76 +790,6 @@ fromShelleyPoolParams
792790
Text.encodeUtf8
793791
. Ledger.dnsToText
794792

795-
fromShelleyStakePoolState
796-
:: Ledger.KeyHash Ledger.StakePool
797-
-> Ledger.StakePoolState
798-
-> StakePoolParameters
799-
fromShelleyStakePoolState
800-
poolId
801-
Ledger.StakePoolState
802-
{ Ledger.spsVrf
803-
, Ledger.spsPledge
804-
, Ledger.spsCost
805-
, Ledger.spsMargin
806-
, Ledger.spsAccountAddress
807-
, Ledger.spsOwners
808-
, Ledger.spsRelays
809-
, Ledger.spsMetadata
810-
} =
811-
StakePoolParameters
812-
{ stakePoolId = StakePoolKeyHash poolId
813-
, stakePoolVRF = VrfKeyHash (Ledger.fromVRFVerKeyHash spsVrf)
814-
, stakePoolCost = spsCost
815-
, stakePoolMargin = Ledger.unboundRational spsMargin
816-
, stakePoolRewardAccount = StakeAddress undefined spsAccountAddress -- TODO the Network argument was removed in Ledger
817-
, stakePoolPledge = spsPledge
818-
, stakePoolOwners = map StakeKeyHash (toList spsOwners)
819-
, stakePoolRelays =
820-
map
821-
fromShelleyStakePoolRelay
822-
(toList spsRelays)
823-
, stakePoolMetadata =
824-
fromShelleyPoolMetadata
825-
<$> Ledger.strictMaybeToMaybe spsMetadata
826-
}
827-
where
828-
fromShelleyStakePoolRelay :: Ledger.StakePoolRelay -> StakePoolRelay
829-
fromShelleyStakePoolRelay (Ledger.SingleHostAddr mport mipv4 mipv6) =
830-
StakePoolRelayIp
831-
(Ledger.strictMaybeToMaybe mipv4)
832-
(Ledger.strictMaybeToMaybe mipv6)
833-
(fromIntegral . Ledger.portToWord16 <$> Ledger.strictMaybeToMaybe mport)
834-
fromShelleyStakePoolRelay (Ledger.SingleHostName mport dnsname) =
835-
StakePoolRelayDnsARecord
836-
(fromShelleyDnsName dnsname)
837-
(fromIntegral . Ledger.portToWord16 <$> Ledger.strictMaybeToMaybe mport)
838-
fromShelleyStakePoolRelay (Ledger.MultiHostName dnsname) =
839-
StakePoolRelayDnsSrvRecord
840-
(fromShelleyDnsName dnsname)
841-
842-
fromShelleyPoolMetadata :: Ledger.PoolMetadata -> StakePoolMetadataReference
843-
fromShelleyPoolMetadata
844-
Ledger.PoolMetadata
845-
{ Ledger.pmUrl
846-
, Ledger.pmHash
847-
} =
848-
StakePoolMetadataReference
849-
{ stakePoolMetadataURL = Ledger.urlToText pmUrl
850-
, stakePoolMetadataHash =
851-
StakePoolMetadataHash
852-
. fromMaybe (error "fromShelleyPoolMetadata: invalid hash. TODO: proper validation")
853-
. Ledger.hashFromBytes
854-
. SBS.fromShort
855-
. byteArrayToShortByteString
856-
$ pmHash
857-
}
858-
859-
-- TODO: change the ledger rep of the DNS name to use ShortByteString
860-
fromShelleyDnsName :: Ledger.DnsName -> ByteString
861-
fromShelleyDnsName =
862-
Text.encodeUtf8
863-
. Ledger.dnsToText
864-
865793
data AnchorDataFromCertificateError
866794
= InvalidPoolMetadataHashError Ledger.Url ByteArray
867795
deriving (Eq, Show)

cardano-api/src/Cardano/Api/Consensus/Internal/InMode.hs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,22 @@ appTxErrToJson
262262
=> ShelleyBasedEra era
263263
-> Consensus.ApplyTxErr (Consensus.ShelleyBlock (ConsensusProtocol era) (ShelleyLedgerEra era))
264264
-> Aeson.Value
265-
appTxErrToJson w e = shelleyBasedEraConstraints w $ toJSON e
265+
appTxErrToJson w e =
266+
case w of
267+
ShelleyBasedEraShelley -> toJSON e
268+
ShelleyBasedEraAllegra -> toJSON e
269+
ShelleyBasedEraMary -> toJSON e
270+
ShelleyBasedEraAlonzo -> toJSON e
271+
ShelleyBasedEraBabbage -> toJSON e
272+
ShelleyBasedEraConway -> toJSON e
273+
-- TODO: Ledger needs to expose DijkstraLedgerPredFailure in order
274+
-- to define the necessary JSON instances for Dijkstra era.
275+
ShelleyBasedEraDijkstra ->
276+
Aeson.String . Text.pack $
277+
unlines
278+
[ "This is not JSON serializable yet. Ledger must expose DijkstraLedgerPredFailure to implement the necessary instances."
279+
, show e
280+
]
266281

267282
-- | A 'TxValidationError' in one of the eras supported by a given protocol
268283
-- mode.

cardano-api/src/Cardano/Api/Era/Internal/Case.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ caseShelleyToMaryOrAlonzoEraOnwards l r = \case
121121
ShelleyBasedEraAlonzo -> r AlonzoEraOnwardsAlonzo
122122
ShelleyBasedEraBabbage -> r AlonzoEraOnwardsBabbage
123123
ShelleyBasedEraConway -> r AlonzoEraOnwardsConway
124-
ShelleyBasedEraDijkstra -> error "caseShelleyToMaryOrAlonzoEraOnwards: DijkstraEra is not supported"
124+
ShelleyBasedEraDijkstra -> r AlonzoEraOnwardsDijkstra
125125

126126
-- | @caseShelleyToAlonzoOrBabbageEraOnwards f g era@ applies @f@ to shelley, allegra, mary, and alonzo;
127127
-- and applies @g@ to babbage and later eras.

cardano-api/src/Cardano/Api/Internal/Orphans/Serialisation.hs

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import Cardano.Chain.Update.Validation.Registration qualified as L.Registration
4545
import Cardano.Chain.Update.Validation.Voting qualified as L.Voting
4646
import Cardano.Crypto.Hash qualified as Crypto
4747
import Cardano.Ledger.Allegra.Rules qualified as L
48+
import Cardano.Ledger.Alonzo qualified as L
4849
import Cardano.Ledger.Alonzo.PParams qualified as Ledger
4950
import Cardano.Ledger.Alonzo.Rules qualified as Alonzo
5051
import Cardano.Ledger.Alonzo.Rules qualified as L
@@ -63,6 +64,8 @@ import Cardano.Ledger.Conway.PParams qualified as Ledger
6364
import Cardano.Ledger.Conway.Rules qualified as L
6465
import Cardano.Ledger.Conway.TxCert qualified as L
6566
import Cardano.Ledger.Core qualified as L hiding (KeyHash)
67+
import Cardano.Ledger.Dijkstra qualified as L
68+
import Cardano.Ledger.Dijkstra.Rules qualified as L
6669
import Cardano.Ledger.HKD (NoUpdate (..))
6770
import Cardano.Ledger.Hashes qualified as L hiding (KeyHash)
6871
import Cardano.Ledger.Keys qualified as L.Keys
@@ -108,6 +111,7 @@ import Data.Aeson
108111
)
109112
import Data.Aeson qualified as A
110113
import Data.Aeson qualified as Aeson
114+
import Data.Aeson.Types (toJSONKeyText)
111115
import Data.Bifunctor
112116
import Data.ByteString qualified as BS
113117
import Data.ByteString.Base16 qualified as B16
@@ -119,7 +123,7 @@ import Data.Data (Data)
119123
import Data.Kind (Constraint, Type)
120124
import Data.ListMap (ListMap)
121125
import Data.ListMap qualified as ListMap
122-
import Data.Map.NonEmpty (NonEmptyMap)
126+
import Data.Map.NonEmpty (NonEmptyMap, toMap)
123127
import Data.Map.NonEmpty qualified as NonEmptyMap
124128
import Data.Maybe.Strict (StrictMaybe (..))
125129
import Data.Monoid
@@ -204,11 +208,11 @@ deriving anyclass instance ToJSON L.VotingPeriod
204208

205209
deriving anyclass instance ToJSON L.Withdrawals
206210

207-
instance ToJSON (NonEmptyMap k v) where
208-
toJSON = undefined
211+
instance (ToJSONKey k, ToJSON v) => ToJSON (NonEmptyMap k v) where
212+
toJSON = toJSON . toMap
209213

210-
instance ToJSON (NonEmptySet v) where
211-
toJSON = undefined
214+
instance ToJSON v => ToJSON (NonEmptySet v) where
215+
toJSON = toJSON . NonEmptySet.toSet
212216

213217
deriving anyclass instance
214218
( ToJSON (L.PredicateFailure (L.EraRule "UTXOW" ledgerera))
@@ -247,8 +251,31 @@ instance
247251
where
248252
toJSON = genericToJSON defaultOptions
249253

250-
instance ToJSON (L.ApplyTxError ledgerera) where
251-
toJSON = undefined
254+
instance ToJSON (L.ApplyTxError L.ShelleyEra) where
255+
toJSON = Aeson.genericToJSON Aeson.defaultOptions
256+
257+
instance ToJSON (L.ApplyTxError L.AllegraEra) where
258+
toJSON = Aeson.genericToJSON Aeson.defaultOptions
259+
260+
instance ToJSON (L.ApplyTxError L.MaryEra) where
261+
toJSON = Aeson.genericToJSON Aeson.defaultOptions
262+
263+
instance ToJSON (L.ApplyTxError L.AlonzoEra) where
264+
toJSON = Aeson.genericToJSON Aeson.defaultOptions
265+
266+
instance ToJSON (L.ApplyTxError L.BabbageEra) where
267+
toJSON = Aeson.genericToJSON Aeson.defaultOptions
268+
269+
instance ToJSON (L.ApplyTxError L.ConwayEra) where
270+
toJSON = Aeson.genericToJSON Aeson.defaultOptions
271+
272+
-- TODO: Ledger must expose DijkstraLedgerPredFailure in order to write the
273+
-- instances below.
274+
-- instance ToJSON (L.ApplyTxError L.DijkstraEra) where
275+
-- toJSON = Aeson.genericToJSON Aeson.defaultOptions
276+
277+
-- instance ToJSON (L.DijkstraMempoolPredFailure L.DijkstraEra) where
278+
-- toJSON = Aeson.genericToJSON Aeson.defaultOptions
252279

253280
deriving via
254281
ShowOf (L.Keys.VKey L.Keys.Witness)

cardano-api/src/Cardano/Api/Tx/Internal/Output.hs

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -793,8 +793,8 @@ toShelleyTxOut
793793
=> ShelleyBasedEra era
794794
-> TxOut CtxUTxO era
795795
-> Ledger.TxOut ledgerera
796-
toShelleyTxOut sbe = shelleyBasedEraConstraints sbe $ \case
797-
TxOut addr (TxOutValueShelleyBased _ value) txoutdata refScript ->
796+
toShelleyTxOut sbe' = shelleyBasedEraConstraints sbe' $ \case
797+
TxOut addr (TxOutValueShelleyBased sbe value) txoutdata refScript ->
798798
caseShelleyToMaryOrAlonzoEraOnwards
799799
(const $ L.mkBasicTxOut (toShelleyAddr addr) value)
800800
( \case
@@ -814,13 +814,6 @@ toShelleyTxOut sbe = shelleyBasedEraConstraints sbe $ \case
814814
.~ toBabbageTxOutDatumUTxO txoutdata
815815
& L.referenceScriptTxOutL
816816
.~ refScriptToShelleyScript sbe refScript
817-
-- TODO: this pattern shows up as redundant
818-
-- AlonzoEraOnwardsDijkstra ->
819-
-- L.mkBasicTxOut (toShelleyAddr addr) value
820-
-- & L.datumTxOutL
821-
-- .~ toBabbageTxOutDatumUTxO txoutdata
822-
-- & L.referenceScriptTxOutL
823-
-- .~ refScriptToShelleyScript sbe refScript
824817
)
825818
sbe
826819

@@ -855,13 +848,6 @@ toShelleyTxOutAny sbe = shelleyBasedEraConstraints sbe $ \case
855848
.~ toBabbageTxOutDatum txoutdata
856849
& L.referenceScriptTxOutL
857850
.~ refScriptToShelleyScript sbe refScript
858-
-- TODO: this pattern shows up as redundant
859-
-- AlonzoEraOnwardsDijkstra ->
860-
-- L.mkBasicTxOut (toShelleyAddr addr) value
861-
-- & L.datumTxOutL
862-
-- .~ toBabbageTxOutDatum txoutdata
863-
-- & L.referenceScriptTxOutL
864-
-- .~ refScriptToShelleyScript sbe refScript
865851
)
866852
sbe
867853

@@ -924,24 +910,6 @@ fromShelleyTxOut sbe ledgerTxOut = shelleyBasedEraConstraints sbe $ do
924910
where
925911
datum = ledgerTxOut ^. L.datumTxOutL
926912
mRefScript = ledgerTxOut ^. L.referenceScriptTxOutL
927-
-- TODO: this pattern shows up as redundant
928-
-- ShelleyBasedEraDijkstra ->
929-
-- TxOut
930-
-- addressInEra
931-
-- txOutValue
932-
-- ( fromBabbageTxOutDatum
933-
-- AlonzoEraOnwardsDijkstra
934-
-- BabbageEraOnwardsDijkstra
935-
-- datum
936-
-- )
937-
-- ( case mRefScript of
938-
-- SNothing -> ReferenceScriptNone
939-
-- SJust refScript ->
940-
-- fromShelleyScriptToReferenceScript ShelleyBasedEraDijkstra refScript
941-
-- )
942-
-- where
943-
-- datum = ledgerTxOut ^. L.datumTxOutL
944-
-- mRefScript = ledgerTxOut ^. L.referenceScriptTxOutL
945913

946914
-- ----------------------------------------------------------------------------
947915
-- Transaction output values (era-dependent)

0 commit comments

Comments
 (0)