From 4a9d4d4029d87010cda3b10ceb7ac3cb7350dccf Mon Sep 17 00:00:00 2001 From: Aniket Deshpande Date: Tue, 27 Aug 2024 21:02:54 +0530 Subject: [PATCH 1/2] Byron: Force startTime in genesis data to be strict --- eras/byron/ledger/impl/cardano-ledger-byron.cabal | 1 + eras/byron/ledger/impl/src/Cardano/Chain/Genesis/Data.hs | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/eras/byron/ledger/impl/cardano-ledger-byron.cabal b/eras/byron/ledger/impl/cardano-ledger-byron.cabal index 8888092d5c4..7b8abbe8d76 100644 --- a/eras/byron/ledger/impl/cardano-ledger-byron.cabal +++ b/eras/byron/ledger/impl/cardano-ledger-byron.cabal @@ -243,6 +243,7 @@ library contra-tracer, cryptonite, Cabal-syntax, + deepseq, digest, directory, filepath, diff --git a/eras/byron/ledger/impl/src/Cardano/Chain/Genesis/Data.hs b/eras/byron/ledger/impl/src/Cardano/Chain/Genesis/Data.hs index 9e9e880bab8..8b960e01c23 100644 --- a/eras/byron/ledger/impl/src/Cardano/Chain/Genesis/Data.hs +++ b/eras/byron/ledger/impl/src/Cardano/Chain/Genesis/Data.hs @@ -29,6 +29,7 @@ import Cardano.Crypto ( ) import Cardano.Ledger.Binary import Cardano.Prelude +import Control.DeepSeq ((<$!!>)) import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as BSL import Data.List (lookup) @@ -48,6 +49,7 @@ import Text.JSON.Canonical ( parseCanonicalJSON, renderCanonicalJSON, ) +import Prelude (id) -- | Genesis data contains all data which determines consensus rules. It must be -- same for all nodes. It's used to initialize global state, slotting, etc. @@ -93,7 +95,7 @@ instance MonadError SchemaError m => FromJSON m GenesisData where GenesisData <$> fromJSField obj "bootStakeholders" <*> fromJSField obj "heavyDelegation" - <*> fromJSField obj "startTime" + <*> (id <$!!> fromJSField obj "startTime") <*> fromJSField obj "nonAvvmBalances" <*> fromJSField obj "blockVersionData" -- The above is called blockVersionData for backwards compatibility with From 60a89ca5b3b19cfc1295591a7d59a7bef9bfc346 Mon Sep 17 00:00:00 2001 From: Aniket Deshpande Date: Fri, 30 Aug 2024 19:43:13 +0530 Subject: [PATCH 2/2] Switch use of <$!!> to `force` --- eras/byron/ledger/impl/CHANGELOG.md | 4 ++-- eras/byron/ledger/impl/cardano-ledger-byron.cabal | 3 +-- eras/byron/ledger/impl/src/Cardano/Chain/Genesis/Data.hs | 4 +--- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/eras/byron/ledger/impl/CHANGELOG.md b/eras/byron/ledger/impl/CHANGELOG.md index 9e7c30cb635..2b16a34fd7d 100644 --- a/eras/byron/ledger/impl/CHANGELOG.md +++ b/eras/byron/ledger/impl/CHANGELOG.md @@ -1,8 +1,8 @@ # Revision history for `cardano-ledger-byron` -## 1.0.1.1 +## 1.0.2.0 -* +* `force` `startTime` in the evaluation of genesis-data. #4574 ## 1.0.1.0 diff --git a/eras/byron/ledger/impl/cardano-ledger-byron.cabal b/eras/byron/ledger/impl/cardano-ledger-byron.cabal index 7b8abbe8d76..f3b09d2ac41 100644 --- a/eras/byron/ledger/impl/cardano-ledger-byron.cabal +++ b/eras/byron/ledger/impl/cardano-ledger-byron.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: cardano-ledger-byron -version: 1.0.1.0 +version: 1.0.2.0 license: Apache-2.0 maintainer: operations@iohk.io author: IOHK @@ -243,7 +243,6 @@ library contra-tracer, cryptonite, Cabal-syntax, - deepseq, digest, directory, filepath, diff --git a/eras/byron/ledger/impl/src/Cardano/Chain/Genesis/Data.hs b/eras/byron/ledger/impl/src/Cardano/Chain/Genesis/Data.hs index 8b960e01c23..2dc8d24dc06 100644 --- a/eras/byron/ledger/impl/src/Cardano/Chain/Genesis/Data.hs +++ b/eras/byron/ledger/impl/src/Cardano/Chain/Genesis/Data.hs @@ -29,7 +29,6 @@ import Cardano.Crypto ( ) import Cardano.Ledger.Binary import Cardano.Prelude -import Control.DeepSeq ((<$!!>)) import qualified Data.ByteString as BS import qualified Data.ByteString.Lazy as BSL import Data.List (lookup) @@ -49,7 +48,6 @@ import Text.JSON.Canonical ( parseCanonicalJSON, renderCanonicalJSON, ) -import Prelude (id) -- | Genesis data contains all data which determines consensus rules. It must be -- same for all nodes. It's used to initialize global state, slotting, etc. @@ -95,7 +93,7 @@ instance MonadError SchemaError m => FromJSON m GenesisData where GenesisData <$> fromJSField obj "bootStakeholders" <*> fromJSField obj "heavyDelegation" - <*> (id <$!!> fromJSField obj "startTime") + <*> (force <$> fromJSField obj "startTime") <*> fromJSField obj "nonAvvmBalances" <*> fromJSField obj "blockVersionData" -- The above is called blockVersionData for backwards compatibility with