Skip to content

Commit

Permalink
Update to latest Plutus and ledger repos
Browse files Browse the repository at this point in the history
This includes a fix for the mixup over the plutus script serialisation
format.

The Alonzo genesis file parameter adaPerUTxOWord is renamed to
lovelacePerUTxOWord. It's meaning was actually always lovelace, it was
just misnamed.
  • Loading branch information
dcoutts committed Jun 12, 2021
1 parent a6af72b commit a6478b0
Show file tree
Hide file tree
Showing 8 changed files with 57 additions and 42 deletions.
19 changes: 14 additions & 5 deletions cabal.project
Expand Up @@ -129,11 +129,10 @@ source-repository-package
source-repository-package
type: git
location: https://github.com/input-output-hk/cardano-ledger-specs
tag: 91dc8868db4d7b9aa48b8e8c7a912378489ac373
--sha256: 1byq0mkgn1b2vkw159g2xsykwvhwn8zjgarywysjdp36z83ic4gw
tag: d6b3d6b8ed16b2c69684fa44218f4e7060f166d3
--sha256: 1afsvxv8a24rpd3inr4m323l1dx5xg6kmfnjkzb6jw72ykcgpsyz
subdir:
alonzo/impl
alonzo/test
byron/chain/executable-spec
byron/crypto
byron/crypto/test
Expand All @@ -148,6 +147,8 @@ source-repository-package
shelley/chain-and-ledger/shelley-spec-ledger-test
shelley-ma/impl
shelley-ma/shelley-ma-test
--TODO: disabled until it drops its dep on plutus-tx-plugin
-- alonzo/test

source-repository-package
type: git
Expand Down Expand Up @@ -207,13 +208,21 @@ source-repository-package
source-repository-package
type: git
location: https://github.com/input-output-hk/plutus
tag: 13da6d416b2b47cdb6f287ff078b9e759bb90b7f
--sha256: 11jpcjdr05l2yyhy9zp3hpkq8bhipx5w3y9bjzg2hzh0fay8571w
tag: bd0dec6dbbf87a14b54384cc083be2bfaf8d5ca6
--sha256: 09qhhiks1qj3x0h3vhr3j7p8kfnbrp2sqi2gc6d16s5zy2pyjbqh
subdir:
plutus-core
plutus-ledger-api
plutus-tx
prettyprinter-configurable
word-array

-- Drops an instance breaking our code. Should be released to Hackage eventually.
source-repository-package
type: git
location: https://github.com/Quid2/flat.git
tag: 95e5d7488451e43062ca84d5376b3adcc465f1cd
--sha256: 06l31x3y93rjpryvlxnpsyq2zyxvb0z6lik6yq2fvh36i5zwvwa3

constraints:
hedgehog >= 1.0
Expand Down
4 changes: 2 additions & 2 deletions cardano-api-gen/src/Gen/Cardano/Api.hs
Expand Up @@ -77,7 +77,7 @@ genCostModel r gt gi = do

genAlonzoGenesis :: MonadGen m => m Alonzo.AlonzoGenesis
genAlonzoGenesis = do
adaPerUTxOWord' <- genCoin (Range.linear 0 5)
coinsPerUTxOWord <- genCoin (Range.linear 0 5)
costmdls' <- Gen.map (Range.linear 0 5) $ (,)
<$> genLanguage
<*> genCostModel (Range.linear 0 5)
Expand All @@ -91,7 +91,7 @@ genAlonzoGenesis = do
maxCollateralInputs' <- Gen.integral (Range.linear 0 10)

return Alonzo.AlonzoGenesis
{ Alonzo.adaPerUTxOWord = adaPerUTxOWord'
{ Alonzo.coinsPerUTxOWord = coinsPerUTxOWord
, Alonzo.costmdls = costmdls'
, Alonzo.prices = prices'
, Alonzo.maxTxExUnits = maxTxExUnits'
Expand Down
54 changes: 30 additions & 24 deletions cardano-api/src/Cardano/Api/Orphans.hs
Expand Up @@ -14,18 +14,26 @@

module Cardano.Api.Orphans () where

import Cardano.Ledger.BaseTypes (StrictMaybe (..), strictMaybeToMaybe)
import Cardano.Ledger.Crypto (StandardCrypto)
import Cardano.Prelude (panic)
import Cardano.Slotting.Slot (SlotNo (..))
import Control.Iterate.SetAlgebra (BiMap (..), Bimap)
import Prelude

import qualified Data.ByteString.Base16 as B16
import qualified Data.ByteString.Lazy as LBS
import Data.Text (Text)
import qualified Data.Text as Text
import qualified Data.Text.Encoding as Text
import qualified Data.Map.Strict as Map
import Data.Aeson (FromJSON (..), ToJSON (..), object, (.=), (.!=), (.:), (.:?))
import qualified Data.Aeson as Aeson
import Data.Aeson.Types (FromJSONKey (..), ToJSONKey (..), toJSONKeyText)
import qualified Data.Aeson.Types as Aeson
import Data.Scientific (Scientific)
import Data.Text (Text)
import Prelude
import Shelley.Spec.Ledger.PParams (PParamsUpdate)

import Control.Applicative
import Control.Iterate.SetAlgebra (BiMap (..), Bimap)

import Cardano.Ledger.BaseTypes (StrictMaybe (..), strictMaybeToMaybe)
import Cardano.Ledger.Crypto (StandardCrypto)
import Cardano.Slotting.Slot (SlotNo (..))

import qualified Cardano.Crypto.Hash.Class as Crypto
import qualified Cardano.Ledger.Alonzo.Genesis as Alonzo
Expand All @@ -42,17 +50,13 @@ import qualified Cardano.Ledger.Era as Ledger
import qualified Cardano.Ledger.Mary.Value as Mary
import qualified Cardano.Ledger.SafeHash as SafeHash
import qualified Cardano.Ledger.Shelley.Constraints as Shelley
import qualified Data.ByteString.Base16 as B16
import qualified Data.ByteString.Lazy as LBS
import qualified Data.Map.Strict as Map
import qualified Data.Text as Text
import qualified Data.Text.Encoding as Text
import qualified Ouroboros.Consensus.Shelley.Eras as Consensus
import qualified Plutus.V1.Ledger.Api as Plutus
import qualified Shelley.Spec.Ledger.API as Shelley
import qualified Shelley.Spec.Ledger.Delegation.Certificates as Shelley
import qualified Shelley.Spec.Ledger.EpochBoundary as ShelleyEpoch
import qualified Shelley.Spec.Ledger.LedgerState as ShelleyLedger
import Shelley.Spec.Ledger.PParams (PParamsUpdate)
import qualified Shelley.Spec.Ledger.Rewards as Shelley
import qualified Shelley.Spec.Ledger.RewardUpdate as Shelley

Expand Down Expand Up @@ -316,19 +320,21 @@ instance ToJSONKey Alonzo.Language where
toJSONKey = toJSONKeyText (Text.decodeLatin1 . LBS.toStrict . Aeson.encode)

instance FromJSONKey Alonzo.Language where
fromJSONKey = Aeson.FromJSONKeyText parseLang
fromJSONKey = Aeson.FromJSONKeyTextParser parseLang
where
parseLang :: Text -> Alonzo.Language
parseLang lang = case Aeson.eitherDecode $ LBS.fromStrict $ Text.encodeUtf8 lang of
Left err -> panic $ Text.pack err
Right lang' -> lang'
parseLang :: Text -> Aeson.Parser Alonzo.Language
parseLang lang =
case Aeson.eitherDecode $ LBS.fromStrict $ Text.encodeUtf8 lang of
Left err -> fail (show err)
Right lang' -> return lang'

-- We defer parsing of the cost model so that we can
-- read it as a filepath. This is to reduce further pollution
-- of the genesis file.
instance FromJSON Alonzo.AlonzoGenesis where
parseJSON = Aeson.withObject "Alonzo Genesis" $ \o -> do
adaPerUTxOWord <- o .: "adaPerUTxOWord"
coinsPerUTxOWord <- o .: "lovelacePerUTxOWord"
<|> o .: "adaPerUTxOWord" --TODO: deprecate
cModels <- o .:? "costModels"
prices <- o .: "executionPrices"
maxTxExUnits <- o .: "maxTxExUnits"
Expand All @@ -339,7 +345,7 @@ instance FromJSON Alonzo.AlonzoGenesis where
case cModels of
Nothing -> case Plutus.defaultCostModelParams of
Just m -> return Alonzo.AlonzoGenesis
{ Alonzo.adaPerUTxOWord
{ Alonzo.coinsPerUTxOWord
, Alonzo.costmdls = Map.singleton Alonzo.PlutusV1 (Alonzo.CostModel m)
, Alonzo.prices
, Alonzo.maxTxExUnits
Expand All @@ -350,7 +356,7 @@ instance FromJSON Alonzo.AlonzoGenesis where
}
Nothing -> fail "Failed to extract the cost model params from Plutus.defaultCostModel"
Just costmdls -> return Alonzo.AlonzoGenesis
{ Alonzo.adaPerUTxOWord
{ Alonzo.coinsPerUTxOWord
, Alonzo.costmdls
, Alonzo.prices
, Alonzo.maxTxExUnits
Expand All @@ -365,7 +371,7 @@ instance FromJSON Alonzo.AlonzoGenesis where
-- and keep the cost model (which is chunky) as a separate file.
instance ToJSON Alonzo.AlonzoGenesis where
toJSON v = object
[ "adaPerUTxOWord" .= Alonzo.adaPerUTxOWord v
[ "lovelacePerUTxOWord" .= Alonzo.coinsPerUTxOWord v
, "costModels" .= Alonzo.costmdls v
, "executionPrices" .= Alonzo.prices v
, "maxTxExUnits" .= Alonzo.maxTxExUnits v
Expand Down Expand Up @@ -394,7 +400,7 @@ instance ToJSON (Alonzo.PParams era) where
, "extraEntropy" .= Alonzo._extraEntropy pp
, "protocolVersion" .= Alonzo._protocolVersion pp
, "minPoolCost" .= Alonzo._minPoolCost pp
, "adaPerUTxOWord" .= Alonzo._adaPerUTxOWord pp
, "lovelacePerUTxOWord" .= Alonzo._coinsPerUTxOWord pp
, "costmdls" .= Alonzo._costmdls pp
, "prices" .= Alonzo._prices pp
, "maxTxExUnits" .= Alonzo._maxTxExUnits pp
Expand Down Expand Up @@ -426,7 +432,7 @@ instance FromJSON (Alonzo.PParams era) where
<*> obj .: "extraEntropy"
<*> obj .: "protocolVersion"
<*> obj .: "minPoolCost" .!= mempty
<*> obj .: "adaPerUTxOWord"
<*> obj .: "lovelacePerUTxOWord"
<*> obj .: "costmdls"
<*> obj .: "prices"
<*> obj .: "maxTxExUnits"
Expand Down
12 changes: 6 additions & 6 deletions cardano-api/src/Cardano/Api/ProtocolParameters.hs
Expand Up @@ -976,7 +976,7 @@ toAlonzoPParamsUpdate
maybeToStrictMaybe protocolUpdateProtocolVersion
, Alonzo._minPoolCost = toShelleyLovelace <$>
maybeToStrictMaybe protocolUpdateMinPoolCost
, Alonzo._adaPerUTxOWord = toShelleyLovelace <$>
, Alonzo._coinsPerUTxOWord= toShelleyLovelace <$>
maybeToStrictMaybe protocolUpdateUTxOCostPerWord
, Alonzo._costmdls = if Map.null protocolUpdateCostModels
then Ledger.SNothing
Expand Down Expand Up @@ -1108,7 +1108,7 @@ fromAlonzoPParamsUpdate
, Alonzo._extraEntropy
, Alonzo._protocolVersion
, Alonzo._minPoolCost
, Alonzo._adaPerUTxOWord
, Alonzo._coinsPerUTxOWord
, Alonzo._costmdls
, Alonzo._prices
, Alonzo._maxTxExUnits
Expand Down Expand Up @@ -1144,7 +1144,7 @@ fromAlonzoPParamsUpdate
, protocolUpdateTreasuryCut = Ledger.unitIntervalToRational <$>
strictMaybeToMaybe _tau
, protocolUpdateUTxOCostPerWord = fromShelleyLovelace <$>
strictMaybeToMaybe _adaPerUTxOWord
strictMaybeToMaybe _coinsPerUTxOWord
, protocolUpdateCostModels = maybe mempty fromAlonzoCostModels
(strictMaybeToMaybe _costmdls)
, protocolUpdatePrices = fromAlonzoPrices <$>
Expand Down Expand Up @@ -1270,7 +1270,7 @@ toAlonzoPParams ProtocolParameters {
protocolParamTreasuryCut

-- New params in Alonzo:
, Alonzo._adaPerUTxOWord = toShelleyLovelace utxoCostPerWord
, Alonzo._coinsPerUTxOWord= toShelleyLovelace utxoCostPerWord
, Alonzo._costmdls = toAlonzoCostModels protocolParamCostModels
, Alonzo._prices = toAlonzoPrices prices
, Alonzo._maxTxExUnits = toAlonzoExUnits maxTxExUnits
Expand Down Expand Up @@ -1380,7 +1380,7 @@ fromAlonzoPParams
, Alonzo._extraEntropy
, Alonzo._protocolVersion
, Alonzo._minPoolCost
, Alonzo._adaPerUTxOWord
, Alonzo._coinsPerUTxOWord
, Alonzo._costmdls
, Alonzo._prices
, Alonzo._maxTxExUnits
Expand Down Expand Up @@ -1408,7 +1408,7 @@ fromAlonzoPParams
, protocolParamPoolPledgeInfluence = _a0
, protocolParamMonetaryExpansion = Ledger.unitIntervalToRational _rho
, protocolParamTreasuryCut = Ledger.unitIntervalToRational _tau
, protocolParamUTxOCostPerWord = Just (fromShelleyLovelace _adaPerUTxOWord)
, protocolParamUTxOCostPerWord = Just (fromShelleyLovelace _coinsPerUTxOWord)
, protocolParamCostModels = fromAlonzoCostModels _costmdls
, protocolParamPrices = Just (fromAlonzoPrices _prices)
, protocolParamMaxTxExUnits = Just (fromAlonzoExUnits _maxTxExUnits)
Expand Down
4 changes: 2 additions & 2 deletions cardano-cli/src/Cardano/CLI/Shelley/Run/Genesis.hs
Expand Up @@ -763,7 +763,7 @@ updateTemplate
updateTemplate (SystemStart start)
genDelegMap mAmountNonDeleg utxoAddrsNonDeleg
poolSpecs (Lovelace amountDeleg) utxoAddrsDeleg stuffedUtxoAddrs
template adaPerUTxOWord prices maxTxExUnits maxBlockExUnits
template coinsPerUTxOWord prices maxTxExUnits maxBlockExUnits
maxValueSize collateralPercentage maxCollateralInputs = do

let shelleyGenesis = template
Expand Down Expand Up @@ -792,7 +792,7 @@ updateTemplate (SystemStart start)

Nothing -> panic "updateTemplate: Could not extract cost model params from Plutus.defaultCostModel"
alonzoGenesis = Alonzo.AlonzoGenesis
{ Alonzo.adaPerUTxOWord = toShelleyLovelace adaPerUTxOWord
{ Alonzo.coinsPerUTxOWord = toShelleyLovelace coinsPerUTxOWord
, Alonzo.costmdls = cModel
, Alonzo.prices = toAlonzoPrices prices
, Alonzo.maxTxExUnits = toAlonzoExUnits maxTxExUnits
Expand Down
2 changes: 1 addition & 1 deletion configuration/cardano/mainnet-alonzo-genesis.json
@@ -1,5 +1,5 @@
{
"adaPerUTxOWord": 0,
"lovelacePerUTxOWord": 0,
"executionPrices": {
"prMem": 1,
"prSteps": 1
Expand Down
2 changes: 1 addition & 1 deletion configuration/cardano/shelley_qa-shelley-genesis.json
Expand Up @@ -50,7 +50,7 @@
"maxKESEvolutions": 62,
"securityParam": 36,

"adaPerUTxOWord": 42,
"lovelacePerUTxOWord": 42,
"executionPrices": 42,
"maxTxExUnits": 42,
"maxBlockExUnits": 42,
Expand Down
2 changes: 1 addition & 1 deletion nix/workbench/genesis.sh
Expand Up @@ -147,7 +147,7 @@ case "${op}" in

## TODO: temporary step for Alonzo
jq_fmutate ""$dir"/genesis.json" '. *
{ adaPerUTxOWord: 0
{ lovelacePerUTxOWord: 0
, executionPrices:
{ prMem: 1
, prSteps: 1
Expand Down

0 comments on commit a6478b0

Please sign in to comment.