From 45ee94d7182017a81f3caba540f94d12b87b616d Mon Sep 17 00:00:00 2001 From: kderme Date: Wed, 16 Jun 2021 11:55:09 +0300 Subject: [PATCH] Extend ProtocolParams for Alonzo --- .../src/Cardano/DbSync/Era/Shelley/Insert.hs | 11 ++++++ cardano-db/src/Cardano/Db/Schema.hs | 12 ++++++ .../Sync/Era/Shelley/Generic/ProtoParams.hs | 37 +++++++++++++++++++ schema/migration-2-0007-20210617.sql | 29 +++++++++++++++ 4 files changed, 89 insertions(+) create mode 100644 schema/migration-2-0007-20210617.sql diff --git a/cardano-db-sync/src/Cardano/DbSync/Era/Shelley/Insert.hs b/cardano-db-sync/src/Cardano/DbSync/Era/Shelley/Insert.hs index 917c48521..0af5139dd 100644 --- a/cardano-db-sync/src/Cardano/DbSync/Era/Shelley/Insert.hs +++ b/cardano-db-sync/src/Cardano/DbSync/Era/Shelley/Insert.hs @@ -718,6 +718,17 @@ insertEpochParam _tracer blkId (EpochNo epoch) params nonce = , DB.epochParamMinUtxoValue = Generic.coinToDbLovelace (Generic.ppMinUTxOValue params) , DB.epochParamMinPoolCost = Generic.coinToDbLovelace (Generic.ppMinPoolCost params) , DB.epochParamNonce = Generic.nonceToBytes nonce + , DB.epochParamAdaPerUTxOWord = Generic.coinToDbLovelace <$> Generic.ppAdaPerUTxOWord params + , DB.epochParamCostModels = Generic.renderLanguageCostModel <$> Generic.ppCostmdls params + , DB.epochParamPriceMem = Generic.coinToDbLovelace <$> Generic.ppPriceMem params + , DB.epochParamPriceStep = Generic.coinToDbLovelace <$> Generic.ppPriceStep params + , DB.epochParamMaxTxExMem = DbWord64 <$> Generic.ppMaxTxExMem params + , DB.epochParamMaxTxExSteps = DbWord64 <$> Generic.ppMaxTxExSteps params + , DB.epochParamMaxBlockExMem = DbWord64 <$> Generic.ppMaxBlockExMem params + , DB.epochParamMaxBlockExSteps = DbWord64 <$> Generic.ppMaxBlockExSteps params + , DB.epochParamMaxValSize = DbWord64 . fromIntegral <$> Generic.ppMaxValSize params + , DB.epochParamCollateralPercent = fromIntegral <$> Generic.ppCollateralPercentage params + , DB.epochParamMaxCollateralInputs = fromIntegral <$> Generic.ppMaxCollateralInputs params , DB.epochParamBlockId = blkId } diff --git a/cardano-db/src/Cardano/Db/Schema.hs b/cardano-db/src/Cardano/Db/Schema.hs index b6bc34db5..7f9f4d917 100644 --- a/cardano-db/src/Cardano/Db/Schema.hs +++ b/cardano-db/src/Cardano/Db/Schema.hs @@ -407,6 +407,18 @@ share nonce ByteString Maybe sqltype=hash32type + adaPerUTxOWord DbLovelace Maybe sqltype=lovelace + costModels Text Maybe + priceMem DbLovelace Maybe sqltype=lovelace + priceStep DbLovelace Maybe sqltype=lovelace + maxTxExMem DbWord64 Maybe sqltype=word64type + maxTxExSteps DbWord64 Maybe sqltype=word64type + maxBlockExMem DbWord64 Maybe sqltype=word64type + maxBlockExSteps DbWord64 Maybe sqltype=word64type + maxValSize DbWord64 Maybe sqltype=word64type + collateralPercent Word16 Maybe sqltype=uinteger + maxCollateralInputs Word16 Maybe sqltype=uinteger + blockId BlockId OnDeleteCascade -- The first block where these parameters are valid. UniqueEpochParam epochNo blockId diff --git a/cardano-sync/src/Cardano/Sync/Era/Shelley/Generic/ProtoParams.hs b/cardano-sync/src/Cardano/Sync/Era/Shelley/Generic/ProtoParams.hs index 407fc3cdc..2d7ce5114 100644 --- a/cardano-sync/src/Cardano/Sync/Era/Shelley/Generic/ProtoParams.hs +++ b/cardano-sync/src/Cardano/Sync/Era/Shelley/Generic/ProtoParams.hs @@ -8,7 +8,9 @@ module Cardano.Sync.Era.Shelley.Generic.ProtoParams import Cardano.Prelude import qualified Cardano.Ledger.Alonzo as Alonzo +import Cardano.Ledger.Alonzo.Language (Language) import qualified Cardano.Ledger.Alonzo.PParams as Alonzo +import qualified Cardano.Ledger.Alonzo.Scripts as Alonzo import Cardano.Ledger.BaseTypes (UnitInterval) import Cardano.Ledger.Coin (Coin (..)) import Cardano.Slotting.Slot (EpochNo (..)) @@ -45,6 +47,19 @@ data ProtoParams = ProtoParams , ppProtocolVersion :: !ProtVer , ppMinUTxOValue :: !Coin , ppMinPoolCost :: !Coin + + -- New for Alonzo. + , ppAdaPerUTxOWord :: !(Maybe Coin) + , ppCostmdls :: !(Maybe (Map Language Alonzo.CostModel)) + , ppPriceMem :: !(Maybe Coin) + , ppPriceStep :: !(Maybe Coin) + , ppMaxTxExMem :: !(Maybe Word64) + , ppMaxTxExSteps :: !(Maybe Word64) + , ppMaxBlockExMem :: !(Maybe Word64) + , ppMaxBlockExSteps :: !(Maybe Word64) + , ppMaxValSize :: !(Maybe Natural) + , ppCollateralPercentage :: !(Maybe Natural) + , ppMaxCollateralInputs :: !(Maybe Natural) } epochProtoParams :: ExtLedgerState CardanoBlock -> Maybe ProtoParams @@ -94,6 +109,17 @@ fromAlonzoParams params = , ppProtocolVersion = Alonzo._protocolVersion params , ppMinUTxOValue = Alonzo._adaPerUTxOWord params , ppMinPoolCost = Alonzo._minPoolCost params + , ppAdaPerUTxOWord = Just $ Alonzo._adaPerUTxOWord params + , ppCostmdls = Just $ Alonzo._costmdls params + , ppPriceMem = Just $ Alonzo.prMem (Alonzo._prices params) + , ppPriceStep = Just $ Alonzo.prSteps (Alonzo._prices params) + , ppMaxTxExMem = Just $ Alonzo.exUnitsMem (Alonzo._maxTxExUnits params) + , ppMaxTxExSteps = Just $ Alonzo.exUnitsSteps (Alonzo._maxTxExUnits params) + , ppMaxBlockExMem = Just $ Alonzo.exUnitsMem (Alonzo._maxBlockExUnits params) + , ppMaxBlockExSteps = Just $ Alonzo.exUnitsSteps (Alonzo._maxBlockExUnits params) + , ppMaxValSize = Just $ Alonzo._maxValSize params + , ppCollateralPercentage = Just $ Alonzo._collateralPercentage params + , ppMaxCollateralInputs = Just $ Alonzo._maxCollateralInputs params } fromShelleyParams :: Shelley.PParams' Identity era -> ProtoParams @@ -116,4 +142,15 @@ fromShelleyParams params = , ppProtocolVersion = Shelley._protocolVersion params , ppMinUTxOValue = Shelley._minUTxOValue params , ppMinPoolCost = Shelley._minPoolCost params + , ppAdaPerUTxOWord = Nothing + , ppCostmdls = Nothing + , ppPriceMem = Nothing + , ppPriceStep = Nothing + , ppMaxTxExMem = Nothing + , ppMaxTxExSteps = Nothing + , ppMaxBlockExMem = Nothing + , ppMaxBlockExSteps = Nothing + , ppMaxValSize = Nothing + , ppCollateralPercentage = Nothing + , ppMaxCollateralInputs = Nothing } diff --git a/schema/migration-2-0007-20210617.sql b/schema/migration-2-0007-20210617.sql new file mode 100644 index 000000000..3ed369c15 --- /dev/null +++ b/schema/migration-2-0007-20210617.sql @@ -0,0 +1,29 @@ +-- Persistent generated migration. + +CREATE FUNCTION migrate() RETURNS void AS $$ +DECLARE + next_version int ; +BEGIN + SELECT stage_two + 1 INTO next_version FROM schema_version ; + IF next_version = 7 THEN + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "ada_per_u_tx_o_word" lovelace NULL' ; + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "cost_models" VARCHAR NULL' ; + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "price_mem" lovelace NULL' ; + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "price_step" lovelace NULL' ; + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "max_tx_ex_mem" word64type NULL' ; + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "max_tx_ex_steps" word64type NULL' ; + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "max_block_ex_mem" word64type NULL' ; + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "max_block_ex_steps" word64type NULL' ; + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "max_val_size" word64type NULL' ; + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "collateral_percent" uinteger NULL' ; + EXECUTE 'ALTER TABLE "epoch_param" ADD COLUMN "max_collateral_inputs" uinteger NULL' ; + -- Hand written SQL statements can be added here. + UPDATE schema_version SET stage_two = next_version ; + RAISE NOTICE 'DB has been migrated to stage_two version %', next_version ; + END IF ; +END ; +$$ LANGUAGE plpgsql ; + +SELECT migrate() ; + +DROP FUNCTION migrate() ;