Skip to content

Commit

Permalink
Completely drop Cardano.ProtocolParameters
Browse files Browse the repository at this point in the history
  • Loading branch information
Anviking committed May 29, 2023
1 parent f5bbe6c commit 293baa7
Show file tree
Hide file tree
Showing 11 changed files with 275 additions and 308 deletions.
138 changes: 54 additions & 84 deletions lib/wallet/api/http/Cardano/Wallet/Api/Http/Shelley/Server.hs

Large diffs are not rendered by default.

268 changes: 131 additions & 137 deletions lib/wallet/src/Cardano/Wallet.hs

Large diffs are not rendered by default.

16 changes: 7 additions & 9 deletions lib/wallet/src/Cardano/Wallet/Byron/Compatibility.hs
Expand Up @@ -93,7 +93,6 @@ import Ouroboros.Consensus.HardFork.History.Summary
import Ouroboros.Network.Block
( BlockNo (..), ChainHash, SlotNo (..) )

import qualified Cardano.Api.Shelley as Node
import qualified Cardano.Chain.Update as Update
import qualified Cardano.Chain.Update.Validation.Interface as Update
import qualified Cardano.Crypto.Hashing as CC
Expand All @@ -106,6 +105,7 @@ import qualified Cardano.Wallet.Primitive.Types.Tx as W
import qualified Cardano.Wallet.Primitive.Types.Tx.Constraints as W
import qualified Cardano.Wallet.Primitive.Types.Tx.TxOut as W
( TxOut (TxOut) )
import qualified Cardano.Wallet.Write.Tx as Write
import qualified Data.Map.Strict as Map
import qualified Ouroboros.Consensus.Block as O

Expand Down Expand Up @@ -151,7 +151,7 @@ mainnetNetworkParameters = W.NetworkParameters
, maximumCollateralInputCount = 0
, minimumCollateralPercentage = 0
, executionUnitPrices = Nothing
, currentNodeProtocolParameters = Nothing
, currentLedgerProtocolParameters = Write.InNonRecentEraByron
}
}

Expand Down Expand Up @@ -314,10 +314,9 @@ fromMaxSize =

protocolParametersFromPP
:: W.EraInfo Bound
-> Maybe Node.ProtocolParameters
-> Update.ProtocolParameters
-> W.ProtocolParameters
protocolParametersFromPP eraInfo currentNodeProtocolParameters pp =
protocolParametersFromPP eraInfo pp =
W.ProtocolParameters
{ decentralizationLevel = minBound
, txParameters = W.TxParameters
Expand All @@ -334,7 +333,7 @@ protocolParametersFromPP eraInfo currentNodeProtocolParameters pp =
, maximumCollateralInputCount = 0
, minimumCollateralPercentage = 0
, executionUnitPrices = Nothing
, currentNodeProtocolParameters
, currentLedgerProtocolParameters = Write.InNonRecentEraByron
}
where
fromBound (Bound _relTime _slotNo (O.EpochNo e)) =
Expand All @@ -344,11 +343,10 @@ protocolParametersFromPP eraInfo currentNodeProtocolParameters pp =
-- cardano-chain update state record.
protocolParametersFromUpdateState
:: W.EraInfo Bound
-> Maybe Node.ProtocolParameters
-> Update.State
-> W.ProtocolParameters
protocolParametersFromUpdateState b ppNode =
(protocolParametersFromPP b ppNode) . Update.adoptedProtocolParameters
protocolParametersFromUpdateState b =
(protocolParametersFromPP b) . Update.adoptedProtocolParameters

-- | Convert non AVVM balances to genesis UTxO.
fromNonAvvmBalances :: GenesisNonAvvmBalances -> [W.TxOut]
Expand All @@ -375,7 +373,7 @@ fromGenesisData (genesisData, genesisHash) =
}
, protocolParameters =
-- emptyEraInfo contains no info about byron. Should we add it?
protocolParametersFromPP W.emptyEraInfo Nothing $
protocolParametersFromPP W.emptyEraInfo $
gdProtocolParameters genesisData
}
, fromNonAvvmBalances . gdNonAvvmBalances $ genesisData
Expand Down
14 changes: 8 additions & 6 deletions lib/wallet/src/Cardano/Wallet/Primitive/Types.hs
Expand Up @@ -175,6 +175,8 @@ import Cardano.Wallet.Primitive.Types.Tx.Tx
( Tx (..) )
import Cardano.Wallet.Util
( ShowFmt (..), parseURI, uriToText )
import Cardano.Wallet.Write.Tx
( MaybeInRecentEra )
import Control.Arrow
( left, right )
import Control.DeepSeq
Expand Down Expand Up @@ -256,7 +258,7 @@ import Numeric.Natural
import Test.QuickCheck
( Arbitrary (..), oneof )

import qualified Cardano.Api.Shelley as Node
import qualified Cardano.Wallet.Write.ProtocolParameters as Write
import qualified Data.Text as T
import qualified Data.Text.Encoding as T

Expand Down Expand Up @@ -883,10 +885,10 @@ data ProtocolParameters = ProtocolParameters
-- used to determine the fee for the use of a script within a
-- transaction, based on the 'ExecutionUnits' needed by the use of
-- the script.
, currentNodeProtocolParameters
:: Maybe Node.ProtocolParameters
-- ^ Get the last known node's protocol parameters.
-- In principle, these can only change once per epoch.
, currentLedgerProtocolParameters
:: MaybeInRecentEra Write.ProtocolParameters
-- ^ The full, raw ledger protocol parameters for writing (constructing)
-- transactions in case the node is in a recent era.
} deriving (Eq, Generic, Show)

instance NFData ProtocolParameters where
Expand All @@ -900,7 +902,7 @@ instance NFData ProtocolParameters where
, rnf maximumCollateralInputCount
, rnf minimumCollateralPercentage
, rnf executionUnitPrices
-- currentNodeProtocolParameters is omitted
-- currentLedgerProtocolParameters is omitted
]

instance Buildable ProtocolParameters where
Expand Down
37 changes: 18 additions & 19 deletions lib/wallet/src/Cardano/Wallet/Shelley/Compatibility.hs
Expand Up @@ -416,6 +416,8 @@ import qualified Cardano.Wallet.Primitive.Types.Tx.TxIn as W
import qualified Cardano.Wallet.Primitive.Types.Tx.TxOut as W
( TxOut (TxOut) )
import qualified Cardano.Wallet.Primitive.Types.UTxO as W
import qualified Cardano.Wallet.Write.ProtocolParameters as Write
import qualified Cardano.Wallet.Write.Tx as Write
import qualified Codec.Binary.Bech32 as Bech32
import qualified Codec.Binary.Bech32.TH as Bech32
import qualified Codec.CBOR.Decoding as CBOR
Expand Down Expand Up @@ -872,10 +874,9 @@ fromMaxSize = Quantity . fromIntegral

fromShelleyPParams
:: W.EraInfo Bound
-> Maybe Cardano.ProtocolParameters
-> Shelley.ShelleyPParams StandardShelley
-> W.ProtocolParameters
fromShelleyPParams eraInfo currentNodeProtocolParameters pp =
fromShelleyPParams eraInfo pp =
W.ProtocolParameters
{ decentralizationLevel =
decentralizationLevelFromPParams pp
Expand All @@ -892,15 +893,15 @@ fromShelleyPParams eraInfo currentNodeProtocolParameters pp =
, maximumCollateralInputCount = 0
, minimumCollateralPercentage = 0
, executionUnitPrices = Nothing
, currentNodeProtocolParameters
, currentLedgerProtocolParameters = Write.InNonRecentEraShelley

}

fromAllegraPParams
:: W.EraInfo Bound
-> Maybe Cardano.ProtocolParameters
-> Shelley.ShelleyPParams StandardAllegra
-> W.ProtocolParameters
fromAllegraPParams eraInfo currentNodeProtocolParameters pp =
fromAllegraPParams eraInfo pp =
W.ProtocolParameters
{ decentralizationLevel =
decentralizationLevelFromPParams pp
Expand All @@ -917,15 +918,14 @@ fromAllegraPParams eraInfo currentNodeProtocolParameters pp =
, maximumCollateralInputCount = 0
, minimumCollateralPercentage = 0
, executionUnitPrices = Nothing
, currentNodeProtocolParameters
, currentLedgerProtocolParameters = Write.InNonRecentEraAllegra
}

fromMaryPParams
:: W.EraInfo Bound
-> Maybe Cardano.ProtocolParameters
-> Mary.ShelleyPParams StandardMary
-> W.ProtocolParameters
fromMaryPParams eraInfo currentNodeProtocolParameters pp =
fromMaryPParams eraInfo pp =
W.ProtocolParameters
{ decentralizationLevel =
decentralizationLevelFromPParams pp
Expand All @@ -942,7 +942,7 @@ fromMaryPParams eraInfo currentNodeProtocolParameters pp =
, maximumCollateralInputCount = 0
, minimumCollateralPercentage = 0
, executionUnitPrices = Nothing
, currentNodeProtocolParameters
, currentLedgerProtocolParameters = Write.InNonRecentEraMary
}

fromBoundToEpochNo :: Bound -> W.EpochNo
Expand All @@ -952,10 +952,9 @@ fromBoundToEpochNo (Bound _relTime _slotNo (EpochNo e)) =
fromAlonzoPParams
:: HasCallStack
=> W.EraInfo Bound
-> Maybe Cardano.ProtocolParameters
-> Alonzo.AlonzoPParams StandardAlonzo
-> W.ProtocolParameters
fromAlonzoPParams eraInfo currentNodeProtocolParameters pp =
fromAlonzoPParams eraInfo pp =
W.ProtocolParameters
{ decentralizationLevel =
decentralizationLevelFromPParams pp
Expand All @@ -975,16 +974,15 @@ fromAlonzoPParams eraInfo currentNodeProtocolParameters pp =
Alonzo._collateralPercentage pp
, executionUnitPrices =
Just $ executionUnitPricesFromPParams pp
, currentNodeProtocolParameters
, currentLedgerProtocolParameters = Write.InNonRecentEraAlonzo
}

fromBabbagePParams
:: HasCallStack
=> W.EraInfo Bound
-> Maybe Cardano.ProtocolParameters
-> Babbage.BabbagePParams StandardBabbage
-> W.ProtocolParameters
fromBabbagePParams eraInfo currentNodeProtocolParameters pp =
fromBabbagePParams eraInfo pp =
W.ProtocolParameters
{ decentralizationLevel =
decentralizationLevelFromPParams pp
Expand All @@ -1004,16 +1002,16 @@ fromBabbagePParams eraInfo currentNodeProtocolParameters pp =
Babbage._collateralPercentage pp
, executionUnitPrices =
Just $ executionUnitPricesFromPParams pp
, currentNodeProtocolParameters
, currentLedgerProtocolParameters =
Write.InRecentEraBabbage $ Write.ProtocolParameters pp
}

fromConwayPParams
:: HasCallStack
=> W.EraInfo Bound
-> Maybe Cardano.ProtocolParameters
-> Babbage.BabbagePParams StandardConway
-> W.ProtocolParameters
fromConwayPParams eraInfo currentNodeProtocolParameters pp =
fromConwayPParams eraInfo pp =
W.ProtocolParameters
{ decentralizationLevel = decentralizationLevelFromPParams pp
, txParameters = txParametersFromPParams
Expand All @@ -1028,7 +1026,8 @@ fromConwayPParams eraInfo currentNodeProtocolParameters pp =
unsafeIntToWord $ Conway._maxCollateralInputs pp
, minimumCollateralPercentage = Conway._collateralPercentage pp
, executionUnitPrices = Just $ executionUnitPricesFromPParams pp
, currentNodeProtocolParameters
, currentLedgerProtocolParameters =
Write.InRecentEraConway $ Write.ProtocolParameters pp
}

-- | Extract the current network decentralization level from the given set of
Expand Down Expand Up @@ -1154,7 +1153,7 @@ fromGenesisData g =
}
, slottingParameters = slottingParametersFromGenesis g
, protocolParameters =
fromShelleyPParams W.emptyEraInfo Nothing $ sgProtocolParams g
fromShelleyPParams W.emptyEraInfo $ sgProtocolParams g
}
, genesisBlockFromTxOuts (ListMap.toList $ sgInitialFunds g)
, poolCerts $ sgStaking g
Expand Down
30 changes: 7 additions & 23 deletions lib/wallet/src/Cardano/Wallet/Shelley/Network/Node.hs
Expand Up @@ -279,7 +279,6 @@ import UnliftIO.Concurrent
import UnliftIO.Exception
( Handler (..), IOException )

import qualified Cardano.Api as Cardano
import qualified Cardano.Crypto.Hash as Crypto
import qualified Cardano.Ledger.Alonzo.PParams as Alonzo
import qualified Cardano.Ledger.Babbage.PParams as Babbage
Expand Down Expand Up @@ -710,35 +709,20 @@ mkWalletToNodeProtocols
((slottingParametersFromGenesis . getCompactGenesis)
<$> LSQry Shelley.GetGenesisConfig)

ppNode <- onAnyEra
(pure Nothing)
(Just . Cardano.fromLedgerPParams Cardano.ShelleyBasedEraShelley
<$> LSQry Shelley.GetCurrentPParams)
(Just . Cardano.fromLedgerPParams Cardano.ShelleyBasedEraAllegra
<$> LSQry Shelley.GetCurrentPParams)
(Just . Cardano.fromLedgerPParams Cardano.ShelleyBasedEraMary
<$> LSQry Shelley.GetCurrentPParams)
(Just . Cardano.fromLedgerPParams Cardano.ShelleyBasedEraAlonzo
<$> LSQry Shelley.GetCurrentPParams)
(Just . Cardano.fromLedgerPParams Cardano.ShelleyBasedEraBabbage
<$> LSQry Shelley.GetCurrentPParams)
(Just . Cardano.fromLedgerPParams Cardano.ShelleyBasedEraConway
<$> LSQry Shelley.GetCurrentPParams)

pp <- onAnyEra
(protocolParametersFromUpdateState eraBounds ppNode
(protocolParametersFromUpdateState eraBounds
<$> LSQry Byron.GetUpdateInterfaceState)
(fromShelleyPParams eraBounds ppNode
(fromShelleyPParams eraBounds
<$> LSQry Shelley.GetCurrentPParams)
(fromAllegraPParams eraBounds ppNode
(fromAllegraPParams eraBounds
<$> LSQry Shelley.GetCurrentPParams)
(fromMaryPParams eraBounds ppNode
(fromMaryPParams eraBounds
<$> LSQry Shelley.GetCurrentPParams)
(fromAlonzoPParams eraBounds ppNode
(fromAlonzoPParams eraBounds
<$> LSQry Shelley.GetCurrentPParams)
(fromBabbagePParams eraBounds ppNode
(fromBabbagePParams eraBounds
<$> LSQry Shelley.GetCurrentPParams)
(fromConwayPParams eraBounds ppNode
(fromConwayPParams eraBounds
<$> LSQry Shelley.GetCurrentPParams)

return (pp, sp)
Expand Down
32 changes: 6 additions & 26 deletions lib/wallet/src/Cardano/Wallet/Write/ProtocolParameters.hs
@@ -1,5 +1,7 @@
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE UndecidableInstances #-}

-- |
-- Copyright: © 2023 IOHK
Expand All @@ -9,14 +11,10 @@
--
module Cardano.Wallet.Write.ProtocolParameters
( ProtocolParameters (..)
, unsafeFromWalletProtocolParameters
) where

import Prelude

import qualified Cardano.Api as CardanoApi
import qualified Cardano.Api.Extra as CardanoApi
import qualified Cardano.Wallet.Primitive.Types as Wallet
import qualified Cardano.Wallet.Write.Tx as Write

-- TODO:
Expand All @@ -27,24 +25,6 @@ newtype ProtocolParameters era = ProtocolParameters
:: Write.PParams (Write.ShelleyLedgerEra era)
}

-- TODO: ADP-2459 - replace with something nicer.
unsafeFromWalletProtocolParameters
:: forall era. CardanoApi.IsShelleyBasedEra era
=> Wallet.ProtocolParameters
-> ProtocolParameters era
unsafeFromWalletProtocolParameters pparamsWallet = ProtocolParameters $
maybe
(error missingNodeParamsError)
unbundleParameters
(Wallet.currentNodeProtocolParameters pparamsWallet)
where
unbundleParameters
= CardanoApi.unbundleLedgerShelleyBasedProtocolParams
(CardanoApi.shelleyBasedEra @era)
. CardanoApi.bundleProtocolParams
(CardanoApi.cardanoEra @era)
missingNodeParamsError = unwords
[ "unsafeFromWalletProtocolParameters: no nodePParams."
, "This should only be possible in Byron, where IsShelleyBasedEra"
, "should prevent this from being reached."
]
deriving instance Eq (Write.PParams (Write.ShelleyLedgerEra era)) => Eq (ProtocolParameters era)
deriving instance Show (Write.PParams (Write.ShelleyLedgerEra era)) => Show (ProtocolParameters era)

0 comments on commit 293baa7

Please sign in to comment.