{-# LANGUAGE DeriveAnyClass #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE NoFieldSelectors #-} module Haskoin.Network.Data ( Network (..), ) where import Control.DeepSeq import Data.Binary (Binary (..)) import Data.ByteString (ByteString) import Data.Serialize (Serialize (..)) import Data.Text (Text) import Data.Word (Word32, Word64, Word8) import GHC.Generics (Generic) import Haskoin.Block.Common -- | Network definition. data Network = Network { -- | lowercase alphanumeric and dashes name :: !String, -- | prefix for 'Base58' P2PKH addresses addrPrefix :: !Word8, -- | prefix for 'Base58' P2SH addresses scriptPrefix :: !Word8, -- | prefix for WIF private key secretPrefix :: !Word8, -- | prefix for extended public key xPubPrefix :: !Word32, -- | prefix for extended private key xPrvPrefix :: !Word32, -- | network magic magic :: !Word32, -- | genesis block header genesisHeader :: !BlockHeader, -- | maximum block size in bytes maxBlockSize :: !Int, -- | maximum amount of satoshi maxSatoshi :: !Word64, -- | user agent string userAgent :: !ByteString, -- | default port for P2P connections defaultPort :: !Int, -- | allow min difficulty blocks (testnet) minDiffBlocks :: !Bool, -- | do not retarget difficulty (regtest) powNoRetarget :: !Bool, -- | proof-of-work target higest possible value powLimit :: !Integer, -- | block at which BIP34 activates bip34Block :: !(BlockHeight, BlockHash), -- | block at which BIP65 activates bip65Height :: !BlockHeight, -- | block at which BIP66 activates bip66Height :: !BlockHeight, -- | time between difficulty retargets targetTimespan :: !Word32, -- | time between blocks targetSpacing :: !Word32, -- | checkpoints checkpoints :: ![(BlockHeight, BlockHash)], -- | BIP44 derivation path root bip44Coin :: !Word32, -- | peer-to-peer network seeds seeds :: ![String], -- | fork id for replay protection sigHashForkId :: !(Maybe Word32), -- | EDA start block height edaHeight :: !(Maybe Word32), -- | DAA start block height daaHeight :: !(Maybe Word32), -- | asert3-2d algorithm activation time -- TODO: Replace with block height after fork asertActivationTime :: !(Maybe Word32), -- | asert3-2d algorithm halflife (not used for non-BCH networks) asertHalfLife :: !Integer, -- | segregated witness active segWit :: !Bool, -- | 'CashAddr' prefix (for Bitcoin Cash) cashAddrPrefix :: !(Maybe Text), -- | 'Bech32' prefix (for SegWit network) bech32Prefix :: !(Maybe Text), -- | Replace-By-Fee (BIP-125) replaceByFee :: !Bool, -- | Subsidy halving interval halvingInterval :: !Word32 } deriving (Eq, Show, Read, Generic, NFData)