Skip to content

Commit 7d13491

Browse files
authored
Merge pull request #771 from IntersectMBO/query-interpreter
Add `HasTextEnvelope` instance for `EraHistory`
2 parents b28e8e2 + 43e7751 commit 7d13491

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

cardano-api/cardano-api.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ library
165165
prettyprinter-ansi-terminal,
166166
prettyprinter-configurable ^>=1.36,
167167
random,
168+
reflection,
168169
safe-exceptions,
169170
scientific,
170171
serialise,

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@
33
{-# LANGUAGE FlexibleContexts #-}
44
{-# LANGUAGE FlexibleInstances #-}
55
{-# LANGUAGE GADTs #-}
6+
{-# LANGUAGE InstanceSigs #-}
67
{-# LANGUAGE LambdaCase #-}
78
{-# LANGUAGE QuantifiedConstraints #-}
89
{-# LANGUAGE ScopedTypeVariables #-}
910
{-# LANGUAGE StandaloneDeriving #-}
1011
{-# LANGUAGE TupleSections #-}
1112
{-# LANGUAGE TypeApplications #-}
13+
{-# LANGUAGE TypeFamilies #-}
1214
{-# LANGUAGE TypeOperators #-}
1315
{-# LANGUAGE UndecidableInstances #-}
1416
-- The Shelley ledger uses promoted data kinds which we have to use, but we do
@@ -71,16 +73,23 @@ import Cardano.Api.Internal.Eon.ShelleyBasedEra
7173
import Cardano.Api.Internal.Eras.Case
7274
import Cardano.Api.Internal.Eras.Core
7375
import Cardano.Api.Internal.GenesisParameters
76+
import Cardano.Api.Internal.HasTypeProxy (HasTypeProxy (..), Proxy)
7477
import Cardano.Api.Internal.IPC.Version
7578
import Cardano.Api.Internal.Keys.Shelley
7679
import Cardano.Api.Internal.Modes
7780
import Cardano.Api.Internal.NetworkId
7881
import Cardano.Api.Internal.ProtocolParameters
7982
import Cardano.Api.Internal.Query.Types
8083
import Cardano.Api.Internal.ReexposeLedger qualified as Ledger
84+
import Cardano.Api.Internal.SerialiseCBOR (SerialiseAsCBOR (deserialiseFromCBOR, serialiseToCBOR))
85+
import Cardano.Api.Internal.SerialiseTextEnvelope
86+
( HasTextEnvelope (textEnvelopeType)
87+
, TextEnvelopeType
88+
)
8189
import Cardano.Api.Internal.Tx.Body
8290
import Cardano.Api.Internal.Tx.UTxO (UTxO (..))
8391

92+
import Cardano.Binary qualified as CBOR
8493
import Cardano.Chain.Update.Validation.Interface qualified as Byron.Update
8594
import Cardano.Ledger.Api qualified as L
8695
import Cardano.Ledger.Api.State.Query qualified as L
@@ -116,13 +125,16 @@ import Ouroboros.Network.NodeToClient.Version (NodeToClientVersion (..))
116125
import Ouroboros.Network.PeerSelection.LedgerPeers.Type (LedgerPeerSnapshot)
117126
import Ouroboros.Network.Protocol.LocalStateQuery.Client (Some (..))
118127

128+
import Codec.Serialise qualified as CBOR
119129
import Control.Monad.Trans.Except
120130
import Data.Bifunctor (bimap, first)
131+
import Data.ByteString qualified as BS
121132
import Data.ByteString.Lazy qualified as LBS
122133
import Data.Either.Combinators (rightToMaybe)
123134
import Data.Map.Strict (Map)
124135
import Data.Map.Strict qualified as Map
125136
import Data.Maybe (mapMaybe)
137+
import Data.Reflection (give)
126138
import Data.SOP.Constraint (SListI)
127139
import Data.Sequence (Seq)
128140
import Data.Set (Set)
@@ -167,6 +179,28 @@ data EraHistory where
167179
=> History.Interpreter xs
168180
-> EraHistory
169181

182+
instance HasTypeProxy EraHistory where
183+
data AsType EraHistory = AsEraHistory
184+
185+
proxyToAsType :: Proxy EraHistory -> AsType EraHistory
186+
proxyToAsType _ = AsEraHistory
187+
188+
instance SerialiseAsCBOR EraHistory where
189+
serialiseToCBOR :: EraHistory -> BS.ByteString
190+
serialiseToCBOR (EraHistory interpreter) = CBOR.toStrictByteString (give History.EraParamsWithGenesisWindow (CBOR.encode interpreter))
191+
192+
deserialiseFromCBOR :: AsType EraHistory -> BS.ByteString -> Either DecoderError EraHistory
193+
deserialiseFromCBOR _ bs =
194+
EraHistory
195+
<$> CBOR.decodeFullDecoder' "EraHistory" (give History.EraParamsWithGenesisWindow CBOR.decode) bs
196+
197+
-- | The @HasTextEnvelope@ instance for @EraHistory@ is required by the
198+
-- @transaction calculate-plutus-script-cost@ command in @cartdano-cli and it
199+
-- can be obtained through the @query era-history@ command.
200+
instance HasTextEnvelope EraHistory where
201+
textEnvelopeType :: AsType EraHistory -> TextEnvelopeType
202+
textEnvelopeType _ = "EraHistory"
203+
170204
getProgress
171205
:: ()
172206
=> SlotNo

0 commit comments

Comments
 (0)