Skip to content
This repository was archived by the owner on Aug 18, 2020. It is now read-only.

Commit a596130

Browse files
authored
Merge pull request #3351 from input-output-hk/ruhatch/CDEC-485
[CDEC-485] Move Block data types from core to chain package
2 parents 877a92d + 04ccf68 commit a596130

File tree

156 files changed

+843
-771
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

156 files changed

+843
-771
lines changed

auxx/src/Command/Rollback.hs

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,9 @@ import Data.List (genericTake)
1313
import Formatting (build, int, sformat, string, (%))
1414
import System.Wlog (logInfo)
1515

16-
import Pos.Chain.Block (Blund)
16+
import Pos.Chain.Block (Blund, mainBlockTxPayload)
1717
import Pos.Chain.Txp (flattenTxPayload)
1818
import Pos.Core (difficultyL, epochIndexL)
19-
import Pos.Core.Block (mainBlockTxPayload)
2019
import Pos.Core.Chrono (NewestFirst, _NewestFirst)
2120
import Pos.Core.Txp (TxAux)
2221
import Pos.Crypto (ProtocolMagic)

chain/bench/block-bench.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import qualified Data.ByteString.Lazy as LBS
1010
import System.Environment (lookupEnv)
1111

1212
import Pos.Binary.Class (Bi, serialize, unsafeDeserialize)
13-
import Pos.Core.Block (Body, BodyProof, ConsensusData, ExtraBodyData,
13+
import Pos.Chain.Block (Body, BodyProof, ConsensusData, ExtraBodyData,
1414
ExtraHeaderData, MainBlock, MainBlockHeader,
1515
MainBlockchain, _gbBody, _gbExtra, _gbHeader,
1616
_gbhBodyProof, _gbhConsensus, _gbhExtra, _mbDlgPayload,

chain/cardano-sl-chain.cabal

+18
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,18 @@ library
2727

2828
other-modules:
2929

30+
Pos.Chain.Block.Blockchain
31+
Pos.Chain.Block.Genesis
32+
Pos.Chain.Block.Genesis.Lens
33+
Pos.Chain.Block.Genesis.Instances
34+
Pos.Chain.Block.Genesis.Types
35+
Pos.Chain.Block.Main
36+
Pos.Chain.Block.Main.Instances
37+
Pos.Chain.Block.Main.Types
38+
Pos.Chain.Block.Union
39+
Pos.Chain.Block.Union.ComponentBlock
40+
Pos.Chain.Block.Union.Types
41+
Pos.Chain.Block.Constructors
3042
Pos.Chain.Block.BHelpers
3143
Pos.Chain.Block.Configuration
3244
Pos.Chain.Block.Error
@@ -35,6 +47,7 @@ library
3547
Pos.Chain.Block.Types
3648
Pos.Chain.Block.Slog.Types
3749
Pos.Chain.Block.Logic.Integrity
50+
Pos.Chain.Block.JsonLog
3851

3952
Pos.Chain.Delegation.Cede
4053
Pos.Chain.Delegation.Cede.Class
@@ -108,6 +121,8 @@ library
108121
, cardano-sl-core
109122
, cardano-sl-crypto
110123
, cardano-sl-util
124+
, cborg
125+
, cereal
111126
, conduit
112127
, containers
113128
, cryptonite
@@ -130,6 +145,7 @@ library
130145
, neat-interpolation
131146
, parsec
132147
, plutus-prototype
148+
, safecopy
133149
, safe-exceptions
134150
, serokell-util
135151
, reflection
@@ -181,8 +197,10 @@ test-suite test
181197

182198
other-modules: Spec
183199
Test.Pos.Chain.Block.Arbitrary
200+
Test.Pos.Chain.Block.Bi
184201
Test.Pos.Chain.Block.BlockSpec
185202
Test.Pos.Chain.Block.CborSpec
203+
Test.Pos.Chain.Block.Gen
186204
Test.Pos.Chain.Block.SafeCopySpec
187205
Test.Pos.Chain.Delegation.Arbitrary
188206
Test.Pos.Chain.Lrc.FtsSpec

chain/src/Pos/Chain/Block.hs

+6
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,14 @@ module Pos.Chain.Block
22
( module X
33
) where
44

5+
import Pos.Chain.Block.Blockchain as X
56
import Pos.Chain.Block.Configuration as X
7+
import Pos.Chain.Block.Constructors as X
68
import Pos.Chain.Block.Error as X
9+
import Pos.Chain.Block.Genesis as X
10+
import Pos.Chain.Block.JsonLog as X
711
import Pos.Chain.Block.Logic as X
12+
import Pos.Chain.Block.Main as X
813
import Pos.Chain.Block.Slog as X
914
import Pos.Chain.Block.Types as X
15+
import Pos.Chain.Block.Union as X

chain/src/Pos/Chain/Block/BHelpers.hs

+6-6
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ import Universum
2121
import Control.Monad.Except (MonadError (throwError))
2222

2323
import Pos.Binary.Class (Bi)
24-
import Pos.Chain.Ssc (verifySscPayload)
25-
import Pos.Core.Block (Block, GenesisBlockchain, MainBlockchain,
26-
MainConsensusData (..), MainToSign (..))
27-
import Pos.Core.Block.Blockchain (Blockchain (..), GenericBlock (..),
24+
import Pos.Chain.Block.Blockchain (Blockchain (..), GenericBlock (..),
2825
GenericBlockHeader (..), gbExtra)
29-
import Pos.Core.Block.Main (MainBody (..), MainExtraHeaderData (..),
26+
import Pos.Chain.Block.Main (MainBody (..), MainExtraHeaderData (..),
3027
MainProof)
31-
import Pos.Core.Block.Union (BlockHeader (..), BlockSignature (..),
28+
import Pos.Chain.Block.Union (Block, BlockHeader (..),
29+
BlockSignature (..), GenesisBlockchain, MainBlockchain,
30+
MainConsensusData (..), MainToSign (..),
3231
mainBlockEBDataProof)
32+
import Pos.Chain.Ssc (verifySscPayload)
3333
import Pos.Core.Configuration (HasProtocolConstants)
3434
import Pos.Core.Delegation (LightDlgIndices (..), checkDlgPayload)
3535
import Pos.Core.Slotting (SlotId (..))

core/src/Pos/Core/Block/Blockchain.hs renamed to chain/src/Pos/Chain/Block/Blockchain.hs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
{-# LANGUAGE AllowAmbiguousTypes #-}
22
{-# LANGUAGE Rank2Types #-}
3+
{-# LANGUAGE TypeFamilies #-}
34

45
-- | This module contains some general definitions related to blocks
56
-- and headers. The heart of this module is 'Blockchain' type class.
67

7-
module Pos.Core.Block.Blockchain
8+
module Pos.Chain.Block.Blockchain
89
( Blockchain (..)
910
, GenericBlockHeader (..)
1011
, GenericBlock (..)

core/src/Pos/Core/Block/Constructors.hs renamed to chain/src/Pos/Chain/Block/Constructors.hs

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
-- | Block constructors and basic functions.
22

3-
module Pos.Core.Block.Constructors
3+
module Pos.Chain.Block.Constructors
44
( mkMainBlockExplicit
55
, mkMainBlock
66
, mkMainHeaderExplicit
@@ -13,21 +13,21 @@ module Pos.Core.Block.Constructors
1313

1414
import Universum
1515

16-
import Pos.Core.Attributes (mkAttributes)
17-
import Pos.Core.Block.Blockchain (GenericBlock (..), mkGenericHeader)
18-
import Pos.Core.Block.Genesis (GenesisBody (..),
16+
import Pos.Chain.Block.Blockchain (GenericBlock (..), mkGenericHeader)
17+
import Pos.Chain.Block.Genesis (GenesisBody (..),
1918
GenesisConsensusData (..), GenesisExtraBodyData (..),
2019
GenesisExtraHeaderData (..))
21-
import Pos.Core.Block.Main (MainBody (..), MainExtraBodyData (..),
20+
import Pos.Chain.Block.Main (MainBody (..), MainExtraBodyData (..),
2221
MainExtraHeaderData (..))
23-
import Pos.Core.Block.Union (BlockHeader, BlockSignature (..),
22+
import Pos.Chain.Block.Union (BlockHeader, BlockSignature (..),
2423
GenesisBlock, GenesisBlockHeader, HeaderHash, MainBlock,
2524
MainBlockHeader, MainConsensusData (..), MainToSign (..),
2625
headerHash)
26+
import Pos.Core.Attributes (mkAttributes)
2727
import Pos.Core.Common (ChainDifficulty, HasDifficulty (..),
2828
SlotLeaders)
2929
import Pos.Core.Configuration (GenesisHash (..))
30-
import Pos.Core.Delegation.HeavyDlgIndex (ProxySKBlockInfo)
30+
import Pos.Core.Delegation (ProxySKBlockInfo)
3131
import Pos.Core.Slotting (EpochIndex, SlotId)
3232
import Pos.Core.Update (BlockVersion, SoftwareVersion)
3333
import Pos.Crypto (ProtocolMagic, SecretKey, SignTag (..), hash,

chain/src/Pos/Chain/Block/Error.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import Formatting (bprint, stext, (%))
1616
import Formatting.Buildable (Buildable (..))
1717
import GHC.Generics (Generic)
1818

19-
import Pos.Core.Block (HeaderHash)
19+
import Pos.Chain.Block.Union (HeaderHash)
2020
import Pos.Crypto (shortHashF)
2121

2222

chain/src/Pos/Chain/Block/Genesis.hs

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{-# OPTIONS_GHC -Wno-unused-imports #-}
2+
{-# OPTIONS_GHC -Wno-dodgy-exports #-}
3+
4+
module Pos.Chain.Block.Genesis
5+
( module Pos.Chain.Block.Genesis.Instances
6+
, module Pos.Chain.Block.Genesis.Lens
7+
, module Pos.Chain.Block.Genesis.Types
8+
) where
9+
10+
import Pos.Chain.Block.Genesis.Instances
11+
import Pos.Chain.Block.Genesis.Lens
12+
import Pos.Chain.Block.Genesis.Types

core/src/Pos/Core/Block/Genesis/Instances.hs renamed to chain/src/Pos/Chain/Block/Genesis/Instances.hs

+5-5
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
-- | Miscellaneous instances, etc. Related to the genesis blockchain of course.
44

5-
module Pos.Core.Block.Genesis.Instances
5+
module Pos.Chain.Block.Genesis.Instances
66
(
77
) where
88

@@ -12,11 +12,11 @@ import Formatting (bprint, build, sformat, stext, (%))
1212
import qualified Formatting.Buildable as Buildable
1313
import Serokell.Util (Color (Magenta), colorize)
1414

15-
import Pos.Core.Block.Blockchain (GenericBlock (..), gbHeader,
15+
import Pos.Chain.Block.Blockchain (GenericBlock (..), gbHeader,
1616
gbhConsensus)
17-
import Pos.Core.Block.Genesis.Lens (gcdEpoch)
18-
import Pos.Core.Block.Genesis.Types (GenesisBody (..))
19-
import Pos.Core.Block.Union.Types (BlockHeader (..), GenesisBlock,
17+
import Pos.Chain.Block.Genesis.Lens (gcdEpoch)
18+
import Pos.Chain.Block.Genesis.Types (GenesisBody (..))
19+
import Pos.Chain.Block.Union.Types (BlockHeader (..), GenesisBlock,
2020
GenesisBlockHeader, HasHeaderHash (..), IsGenesisHeader,
2121
IsHeader, blockHeaderHash)
2222
import Pos.Core.Common (slotLeadersF)

core/src/Pos/Core/Block/Genesis/Lens.hs renamed to chain/src/Pos/Chain/Block/Genesis/Lens.hs

+4-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
-- small parts of it. It makes it clear what exactly is stored in
77
-- 'GenesisBlock'. Similar fact is true for `genHeader' prefix.
88

9-
module Pos.Core.Block.Genesis.Lens
9+
module Pos.Chain.Block.Genesis.Lens
1010
(
1111
-- * Extra types
1212
gehAttributes
@@ -40,14 +40,14 @@ import Universum
4040

4141
import Control.Lens (makeLenses)
4242

43-
import Pos.Core.Block.Blockchain (gbBody, gbExtra, gbHeader,
43+
import Pos.Chain.Block.Blockchain (gbBody, gbExtra, gbHeader,
4444
gbPrevBlock, gbhBodyProof, gbhConsensus, gbhExtra,
4545
gbhPrevBlock)
46-
import Pos.Core.Block.Genesis.Types (GenesisBody (..),
46+
import Pos.Chain.Block.Genesis.Types (GenesisBody (..),
4747
GenesisBodyAttributes, GenesisExtraBodyData (..),
4848
GenesisExtraHeaderData (..), GenesisHeaderAttributes,
4949
GenesisProof (..), gcdDifficulty, gcdEpoch)
50-
import Pos.Core.Block.Union.Types (GenesisBlock, GenesisBlockHeader,
50+
import Pos.Chain.Block.Union.Types (GenesisBlock, GenesisBlockHeader,
5151
HeaderHash)
5252
import Pos.Core.Common (ChainDifficulty, SlotLeaders)
5353
import Pos.Core.Slotting (EpochIndex (..))

core/src/Pos/Core/Block/Genesis/Types.hs renamed to chain/src/Pos/Chain/Block/Genesis/Types.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
-- | Types defining the genesis blockchain.
22

3-
module Pos.Core.Block.Genesis.Types
3+
module Pos.Chain.Block.Genesis.Types
44
( GenesisProof (..)
55
, GenesisConsensusData (..)
66
, GenesisBody (..)

chain/src/Pos/Chain/Block/JsonLog.hs

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
module Pos.Chain.Block.JsonLog
2+
( jlCreatedBlock
3+
, jlAdoptedBlock
4+
) where
5+
6+
import Universum
7+
8+
import Formatting (sformat)
9+
10+
import Pos.Chain.Block.Blockchain (gbHeader, gbhPrevBlock)
11+
import Pos.Chain.Block.Genesis (genBlockEpoch)
12+
import Pos.Chain.Block.Union (Block, HeaderHash, headerHash,
13+
headerHashF, mainBlockSlot, mainBlockTxPayload)
14+
import Pos.Core (HasConfiguration, SlotId (..), getEpochIndex,
15+
getSlotIndex, mkLocalSlotIndex)
16+
import Pos.Core.JsonLog.LogEvents (JLBlock (..), JLEvent (..))
17+
import Pos.Core.Txp (txpTxs)
18+
import Pos.Crypto (hash, hashHexF)
19+
20+
-- | Return event of created block.
21+
jlCreatedBlock :: HasConfiguration => Block -> JLEvent
22+
jlCreatedBlock block = JLCreatedBlock $ JLBlock {..}
23+
where
24+
jlHash = showHeaderHash $ headerHash block
25+
jlPrevBlock = showHeaderHash $ case block of
26+
Left gB -> view gbhPrevBlock (gB ^. gbHeader)
27+
Right mB -> view gbhPrevBlock (mB ^. gbHeader)
28+
jlSlot = (getEpochIndex $ siEpoch slot, getSlotIndex $ siSlot slot)
29+
jlTxs = case block of
30+
Left _ -> []
31+
Right mB -> map fromTx . toList $ mB ^. mainBlockTxPayload . txpTxs
32+
slot :: SlotId
33+
slot = case block of
34+
Left gB -> let slotZero = case mkLocalSlotIndex 0 of
35+
Right sz -> sz
36+
Left _ -> error "impossible branch"
37+
in SlotId (gB ^. genBlockEpoch) slotZero
38+
Right mB -> mB ^. mainBlockSlot
39+
fromTx = sformat hashHexF . hash
40+
41+
-- | Returns event of created 'Block'.
42+
jlAdoptedBlock :: Block -> JLEvent
43+
jlAdoptedBlock = JLAdoptedBlock . showHeaderHash . headerHash
44+
45+
showHeaderHash :: HeaderHash -> Text
46+
showHeaderHash = sformat headerHashF

chain/src/Pos/Chain/Block/Logic/Integrity.hs

+7-5
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,18 @@ import Serokell.Util (VerificationRes (..), verifyGeneric)
2626

2727
import qualified Pos.Binary.Class as Bi
2828
import qualified Pos.Chain.Block.BHelpers as BHelpers
29+
import Pos.Chain.Block.Blockchain (gbExtra, gbhExtra)
30+
import Pos.Chain.Block.Genesis (gebAttributes, gehAttributes,
31+
genBlockLeaders)
32+
import Pos.Chain.Block.Union (Block, BlockHeader (..),
33+
HasHeaderHash (..), HeaderHash, blockHeaderProtocolMagic,
34+
getBlockHeader, headerSlotL, mainHeaderLeaderKey,
35+
mebAttributes, mehAttributes, prevBlockL)
2936
import Pos.Core (ChainDifficulty, EpochOrSlot, HasDifficulty (..),
3037
HasEpochIndex (..), HasEpochOrSlot (..),
3138
HasProtocolConstants, SlotId (..), SlotLeaders,
3239
addressHash, getSlotIndex)
3340
import Pos.Core.Attributes (areAttributesKnown)
34-
import Pos.Core.Block (Block, BlockHeader (..), HasHeaderHash (..),
35-
HeaderHash, blockHeaderProtocolMagic, gbExtra, gbhExtra,
36-
gebAttributes, gehAttributes, genBlockLeaders,
37-
getBlockHeader, headerSlotL, mainHeaderLeaderKey,
38-
mebAttributes, mehAttributes, prevBlockL)
3941
import Pos.Core.Chrono (NewestFirst (..), OldestFirst)
4042
import Pos.Core.Slotting (EpochIndex)
4143
import Pos.Core.Update (BlockVersionData (..))

chain/src/Pos/Chain/Block/Main.hs

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{-# OPTIONS_GHC -Wno-unused-imports #-}
2+
{-# OPTIONS_GHC -Wno-dodgy-exports #-}
3+
4+
module Pos.Chain.Block.Main
5+
( module Pos.Chain.Block.Main.Instances
6+
, module Pos.Chain.Block.Main.Types
7+
) where
8+
9+
import Pos.Chain.Block.Main.Instances
10+
import Pos.Chain.Block.Main.Types

core/src/Pos/Core/Block/Main/Instances.hs renamed to chain/src/Pos/Chain/Block/Main/Instances.hs

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
-- | Miscellaneous instances, etc. Related to the main blockchain of course.
44

5-
module Pos.Core.Block.Main.Instances
5+
module Pos.Chain.Block.Main.Instances
66
(
77
) where
88

@@ -12,10 +12,10 @@ import Formatting (bprint, build, int, stext, (%))
1212
import qualified Formatting.Buildable as Buildable
1313
import Serokell.Util (Color (Magenta), colorize, listJson)
1414

15-
import Pos.Core.Block.Blockchain (GenericBlock (..))
16-
import Pos.Core.Block.Main.Types (MainBody (..),
15+
import Pos.Chain.Block.Blockchain (GenericBlock (..))
16+
import Pos.Chain.Block.Main.Types (MainBody (..),
1717
MainExtraHeaderData (..))
18-
import Pos.Core.Block.Union.Types (BlockHeader (..),
18+
import Pos.Chain.Block.Union.Types (BlockHeader (..),
1919
HasHeaderHash (..), IsHeader, IsMainHeader (..),
2020
MainBlock, MainBlockHeader, MainConsensusData (..),
2121
blockHeaderHash, mainBlockBlockVersion, mainBlockSlot,

core/src/Pos/Core/Block/Main/Types.hs renamed to chain/src/Pos/Chain/Block/Main/Types.hs

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
-- | Types defining the main blockchain.
22

3-
module Pos.Core.Block.Main.Types
3+
module Pos.Chain.Block.Main.Types
44
( MainProof (..)
55
, MainExtraHeaderData (..)
66
, MainBody (..)
@@ -54,7 +54,7 @@ instance Bi MainProof where
5454
decode <*>
5555
decode
5656

57-
instance SafeCopy SscProof => SafeCopy MainProof where
57+
instance SafeCopy MainProof where
5858
getCopy = contain $ do
5959
mpTxProof <- safeGet
6060
mpMpcProof <- safeGet
@@ -128,8 +128,7 @@ instance Bi MainBody where
128128

129129
instance NFData MainBody
130130

131-
instance SafeCopy SscPayload =>
132-
SafeCopy MainBody where
131+
instance SafeCopy MainBody where
133132
getCopy = contain $ do
134133
_mbTxPayload <- safeGet
135134
_mbSscPayload <- safeGet

chain/src/Pos/Chain/Block/Types.hs

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ import Serokell.Util.Text (listJson)
1818

1919
import Pos.Binary.Class (Cons (..), Field (..), deriveSimpleBi)
2020
import Pos.Chain.Block.Slog.Types (SlogUndo (..))
21+
import Pos.Chain.Block.Union (Block, BlockHeader, HasHeaderHash (..))
2122
import Pos.Chain.Delegation (DlgUndo)
2223
import Pos.Chain.Update (USUndo)
2324
import Pos.Core (HasConfiguration, HasDifficulty (..))
24-
import Pos.Core.Block (Block, BlockHeader, HasHeaderHash (..))
2525
import Pos.Core.Txp (TxpUndo)
2626
import Pos.Util.Util (HasLens (..))
2727

chain/src/Pos/Chain/Block/Union.hs

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
module Pos.Chain.Block.Union
2+
( module Pos.Chain.Block.Union.ComponentBlock
3+
, module Pos.Chain.Block.Union.Types
4+
) where
5+
6+
import Pos.Chain.Block.Union.ComponentBlock
7+
import Pos.Chain.Block.Union.Types

0 commit comments

Comments
 (0)