{-# LANGUAGE CPP #-}
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE OverloadedStrings #-}
module Haskoin.Constants
(
Network(..)
, btc
, btcTest
, btcRegTest
, bch
, bchTest
, bchRegTest
, allNets
, netByName
, netByIdent
) where
import Control.DeepSeq
import Data.Binary (Binary (..))
import Data.ByteString (ByteString)
import Data.Bytes.Get
import Data.Bytes.Put
import Data.Bytes.Serial
import Data.List
import Data.Maybe
import Data.Serialize (Serialize (..))
import Data.String
import Data.Text (Text)
import Data.Word (Word32, Word64, Word8)
import GHC.Generics (Generic)
import Haskoin.Block.Common
import Text.Read
versionString :: IsString a => a
#ifdef CURRENT_PACKAGE_VERSION
versionString :: a
versionString = CURRENT_PACKAGE_VERSION
#else
versionString = "Unavailable"
#endif
data Network = Network
{
Network -> String
getNetworkName :: !String
, Network -> String
getNetworkIdent :: !String
, Network -> Word8
getAddrPrefix :: !Word8
, Network -> Word8
getScriptPrefix :: !Word8
, Network -> Word8
getSecretPrefix :: !Word8
, Network -> Word32
getExtPubKeyPrefix :: !Word32
, Network -> Word32
getExtSecretPrefix :: !Word32
, Network -> Word32
getNetworkMagic :: !Word32
, :: !BlockHeader
, Network -> Int
getMaxBlockSize :: !Int
, Network -> Word64
getMaxSatoshi :: !Word64
, Network -> ByteString
getHaskoinUserAgent :: !ByteString
, Network -> Int
getDefaultPort :: !Int
, Network -> Bool
getAllowMinDifficultyBlocks :: !Bool
, Network -> Bool
getPowNoRetargetting :: !Bool
, Network -> Integer
getPowLimit :: !Integer
, Network -> (Word32, BlockHash)
getBip34Block :: !(BlockHeight, BlockHash)
, Network -> Word32
getBip65Height :: !BlockHeight
, Network -> Word32
getBip66Height :: !BlockHeight
, Network -> Word32
getTargetTimespan :: !Word32
, Network -> Word32
getTargetSpacing :: !Word32
, Network -> [(Word32, BlockHash)]
getCheckpoints :: ![(BlockHeight, BlockHash)]
, Network -> Word32
getBip44Coin :: !Word32
, Network -> [String]
getSeeds :: ![String]
, Network -> Maybe Word32
getSigHashForkId :: !(Maybe Word32)
, Network -> Maybe Word32
getEdaBlockHeight :: !(Maybe Word32)
, Network -> Maybe Word32
getDaaBlockHeight :: !(Maybe Word32)
, Network -> Maybe Word32
getAsertActivationTime :: !(Maybe Word32)
, Network -> Integer
getAsertHalfLife :: !Integer
, Network -> Bool
getSegWit :: !Bool
, Network -> Maybe Text
getCashAddrPrefix :: !(Maybe Text)
, Network -> Maybe Text
getBech32Prefix :: !(Maybe Text)
, Network -> Bool
getReplaceByFee :: !Bool
, Network -> Word32
getHalvingInterval :: !Word32
} deriving (Network -> Network -> Bool
(Network -> Network -> Bool)
-> (Network -> Network -> Bool) -> Eq Network
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Network -> Network -> Bool
$c/= :: Network -> Network -> Bool
== :: Network -> Network -> Bool
$c== :: Network -> Network -> Bool
Eq, (forall x. Network -> Rep Network x)
-> (forall x. Rep Network x -> Network) -> Generic Network
forall x. Rep Network x -> Network
forall x. Network -> Rep Network x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep Network x -> Network
$cfrom :: forall x. Network -> Rep Network x
Generic, Network -> ()
(Network -> ()) -> NFData Network
forall a. (a -> ()) -> NFData a
rnf :: Network -> ()
$crnf :: Network -> ()
NFData)
instance Serial Network where
serialize :: Network -> m ()
serialize net :: Network
net =
Word32 -> m ()
forall (m :: * -> *). MonadPut m => Word32 -> m ()
putWord32be (Word32 -> m ()) -> Word32 -> m ()
forall a b. (a -> b) -> a -> b
$ Network -> Word32
getNetworkMagic Network
net
deserialize :: m Network
deserialize = do
Word32
magic <- m Word32
forall (m :: * -> *). MonadGet m => m Word32
getWord32be
case (Network -> Bool) -> [Network] -> Maybe Network
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Maybe a
find ((Word32 -> Word32 -> Bool
forall a. Eq a => a -> a -> Bool
== Word32
magic) (Word32 -> Bool) -> (Network -> Word32) -> Network -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Network -> Word32
getNetworkMagic) [Network]
allNets of
Nothing -> String -> m Network
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> m Network) -> String -> m Network
forall a b. (a -> b) -> a -> b
$ "Network magic unknown: " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> Word32 -> String
forall a. Show a => a -> String
show Word32
magic
Just net :: Network
net -> Network -> m Network
forall (m :: * -> *) a. Monad m => a -> m a
return Network
net
instance Binary Network where
put :: Network -> Put
put = Network -> Put
forall a (m :: * -> *). (Serial a, MonadPut m) => a -> m ()
serialize
get :: Get Network
get = Get Network
forall a (m :: * -> *). (Serial a, MonadGet m) => m a
deserialize
instance Serialize Network where
put :: Putter Network
put = Putter Network
forall a (m :: * -> *). (Serial a, MonadPut m) => a -> m ()
serialize
get :: Get Network
get = Get Network
forall a (m :: * -> *). (Serial a, MonadGet m) => m a
deserialize
instance Show Network where
show :: Network -> String
show = Network -> String
getNetworkIdent
instance Read Network where
readPrec :: ReadPrec Network
readPrec = do
Ident str :: String
str <- ReadPrec Lexeme
lexP
ReadPrec Network
-> (Network -> ReadPrec Network)
-> Maybe Network
-> ReadPrec Network
forall b a. b -> (a -> b) -> Maybe a -> b
maybe ReadPrec Network
forall a. ReadPrec a
pfail Network -> ReadPrec Network
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> Maybe Network
netByIdent String
str)
instance IsString Network where
fromString :: String -> Network
fromString = Network -> Maybe Network -> Network
forall a. a -> Maybe a -> a
fromMaybe (String -> Network
forall a. HasCallStack => String -> a
error "Network name invalid") (Maybe Network -> Network)
-> (String -> Maybe Network) -> String -> Network
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Maybe Network
netByName
netByName :: String -> Maybe Network
netByName :: String -> Maybe Network
netByName str :: String
str = (Network -> Bool) -> [Network] -> Maybe Network
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Maybe a
find ((String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
str) (String -> Bool) -> (Network -> String) -> Network -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Network -> String
getNetworkName) [Network]
allNets
netByIdent :: String -> Maybe Network
netByIdent :: String -> Maybe Network
netByIdent str :: String
str = (Network -> Bool) -> [Network] -> Maybe Network
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Maybe a
find ((String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
str) (String -> Bool) -> (Network -> String) -> Network -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Network -> String
getNetworkIdent) [Network]
allNets
btc :: Network
btc :: Network
btc =
$WNetwork :: String
-> String
-> Word8
-> Word8
-> Word8
-> Word32
-> Word32
-> Word32
-> BlockHeader
-> Int
-> Word64
-> ByteString
-> Int
-> Bool
-> Bool
-> Integer
-> (Word32, BlockHash)
-> Word32
-> Word32
-> Word32
-> Word32
-> [(Word32, BlockHash)]
-> Word32
-> [String]
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Integer
-> Bool
-> Maybe Text
-> Maybe Text
-> Bool
-> Word32
-> Network
Network
{ getNetworkName :: String
getNetworkName = "btc"
, getNetworkIdent :: String
getNetworkIdent = "btc"
, getAddrPrefix :: Word8
getAddrPrefix = 0
, getScriptPrefix :: Word8
getScriptPrefix = 5
, getSecretPrefix :: Word8
getSecretPrefix = 128
, getExtPubKeyPrefix :: Word32
getExtPubKeyPrefix = 0x0488b21e
, getExtSecretPrefix :: Word32
getExtSecretPrefix = 0x0488ade4
, getNetworkMagic :: Word32
getNetworkMagic = 0xf9beb4d9
, getGenesisHeader :: BlockHeader
getGenesisHeader =
Word32
-> BlockHash
-> Hash256
-> Word32
-> Word32
-> Word32
-> BlockHeader
BlockHeader
0x01
"0000000000000000000000000000000000000000000000000000000000000000"
"3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a"
1231006505
0x1d00ffff
2083236893
, getMaxBlockSize :: Int
getMaxBlockSize = 1000000
, getMaxSatoshi :: Word64
getMaxSatoshi = 2100000000000000
, getHaskoinUserAgent :: ByteString
getHaskoinUserAgent =
"/haskoin-btc:" ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
forall a. IsString a => a
versionString ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> "/"
, getDefaultPort :: Int
getDefaultPort = 8333
, getAllowMinDifficultyBlocks :: Bool
getAllowMinDifficultyBlocks = Bool
False
, getPowNoRetargetting :: Bool
getPowNoRetargetting = Bool
False
, getPowLimit :: Integer
getPowLimit =
0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
, getBip34Block :: (Word32, BlockHash)
getBip34Block =
( 227931
, "000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8")
, getBip65Height :: Word32
getBip65Height = 388381
, getBip66Height :: Word32
getBip66Height = 363725
, getTargetTimespan :: Word32
getTargetTimespan = 14 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 24 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getTargetSpacing :: Word32
getTargetSpacing = 10 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getCheckpoints :: [(Word32, BlockHash)]
getCheckpoints =
[ ( 11111
, "0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")
, ( 33333
, "000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")
, ( 74000
, "0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20")
, ( 105000
, "00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97")
, ( 134444
, "00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")
, ( 168000
, "000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763")
, ( 193000
, "000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317")
, ( 210000
, "000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e")
, ( 216116
, "00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e")
, ( 225430
, "00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932")
, ( 250000
, "000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214")
, ( 279000
, "0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40")
, ( 295000
, "00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983")
]
, getSeeds :: [String]
getSeeds =
[ "seed.bitcoin.sipa.be"
, "dnsseed.bluematt.me"
, "dnsseed.bitcoin.dashjr.org"
, "seed.bitcoinstats.com"
, "seed.bitcoin.jonasschnelli.ch"
, "seed.btc.petertodd.org"
, "seed.bitcoin.sprovoost.nl"
, "dnsseed.emzy.de"
, "seed.bitcoin.wiz.biz"
]
, getBip44Coin :: Word32
getBip44Coin = 0
, getSigHashForkId :: Maybe Word32
getSigHashForkId = Maybe Word32
forall a. Maybe a
Nothing
, getEdaBlockHeight :: Maybe Word32
getEdaBlockHeight = Maybe Word32
forall a. Maybe a
Nothing
, getDaaBlockHeight :: Maybe Word32
getDaaBlockHeight = Maybe Word32
forall a. Maybe a
Nothing
, getAsertActivationTime :: Maybe Word32
getAsertActivationTime = Maybe Word32
forall a. Maybe a
Nothing
, getAsertHalfLife :: Integer
getAsertHalfLife = 0
, getSegWit :: Bool
getSegWit = Bool
True
, getCashAddrPrefix :: Maybe Text
getCashAddrPrefix = Maybe Text
forall a. Maybe a
Nothing
, getBech32Prefix :: Maybe Text
getBech32Prefix = Text -> Maybe Text
forall a. a -> Maybe a
Just "bc"
, getReplaceByFee :: Bool
getReplaceByFee = Bool
True
, getHalvingInterval :: Word32
getHalvingInterval = 210000
}
btcTest :: Network
btcTest :: Network
btcTest =
$WNetwork :: String
-> String
-> Word8
-> Word8
-> Word8
-> Word32
-> Word32
-> Word32
-> BlockHeader
-> Int
-> Word64
-> ByteString
-> Int
-> Bool
-> Bool
-> Integer
-> (Word32, BlockHash)
-> Word32
-> Word32
-> Word32
-> Word32
-> [(Word32, BlockHash)]
-> Word32
-> [String]
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Integer
-> Bool
-> Maybe Text
-> Maybe Text
-> Bool
-> Word32
-> Network
Network
{ getNetworkName :: String
getNetworkName = "btctest"
, getNetworkIdent :: String
getNetworkIdent = "btcTest"
, getAddrPrefix :: Word8
getAddrPrefix = 111
, getScriptPrefix :: Word8
getScriptPrefix = 196
, getSecretPrefix :: Word8
getSecretPrefix = 239
, getExtPubKeyPrefix :: Word32
getExtPubKeyPrefix = 0x043587cf
, getExtSecretPrefix :: Word32
getExtSecretPrefix = 0x04358394
, getNetworkMagic :: Word32
getNetworkMagic = 0x0b110907
, getGenesisHeader :: BlockHeader
getGenesisHeader =
Word32
-> BlockHash
-> Hash256
-> Word32
-> Word32
-> Word32
-> BlockHeader
BlockHeader
0x01
"0000000000000000000000000000000000000000000000000000000000000000"
"3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a"
1296688602
486604799
414098458
, getMaxBlockSize :: Int
getMaxBlockSize = 1000000
, getMaxSatoshi :: Word64
getMaxSatoshi = 2100000000000000
, getHaskoinUserAgent :: ByteString
getHaskoinUserAgent = "/haskoin-btc-test:" ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
forall a. IsString a => a
versionString ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> "/"
, getDefaultPort :: Int
getDefaultPort = 18333
, getAllowMinDifficultyBlocks :: Bool
getAllowMinDifficultyBlocks = Bool
True
, getPowNoRetargetting :: Bool
getPowNoRetargetting = Bool
False
, getPowLimit :: Integer
getPowLimit =
0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
, getBip34Block :: (Word32, BlockHash)
getBip34Block =
( 21111
, "0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8")
, getBip65Height :: Word32
getBip65Height = 581885
, getBip66Height :: Word32
getBip66Height = 330776
, getTargetTimespan :: Word32
getTargetTimespan = 14 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 24 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getTargetSpacing :: Word32
getTargetSpacing = 10 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getCheckpoints :: [(Word32, BlockHash)]
getCheckpoints =
[ ( 546
, "000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70")
]
, getSeeds :: [String]
getSeeds =
[ "testnet-seed.bitcoin.jonasschnelli.ch"
, "seed.tbtc.petertodd.org"
, "seed.testnet.bitcoin.sprovoost.nl"
, "testnet-seed.bluematt.me"
]
, getBip44Coin :: Word32
getBip44Coin = 1
, getSigHashForkId :: Maybe Word32
getSigHashForkId = Maybe Word32
forall a. Maybe a
Nothing
, getEdaBlockHeight :: Maybe Word32
getEdaBlockHeight = Maybe Word32
forall a. Maybe a
Nothing
, getDaaBlockHeight :: Maybe Word32
getDaaBlockHeight = Maybe Word32
forall a. Maybe a
Nothing
, getAsertActivationTime :: Maybe Word32
getAsertActivationTime = Maybe Word32
forall a. Maybe a
Nothing
, getAsertHalfLife :: Integer
getAsertHalfLife = 0
, getSegWit :: Bool
getSegWit = Bool
True
, getCashAddrPrefix :: Maybe Text
getCashAddrPrefix = Maybe Text
forall a. Maybe a
Nothing
, getBech32Prefix :: Maybe Text
getBech32Prefix = Text -> Maybe Text
forall a. a -> Maybe a
Just "tb"
, getReplaceByFee :: Bool
getReplaceByFee = Bool
True
, getHalvingInterval :: Word32
getHalvingInterval = 210000
}
btcRegTest :: Network
btcRegTest :: Network
btcRegTest =
$WNetwork :: String
-> String
-> Word8
-> Word8
-> Word8
-> Word32
-> Word32
-> Word32
-> BlockHeader
-> Int
-> Word64
-> ByteString
-> Int
-> Bool
-> Bool
-> Integer
-> (Word32, BlockHash)
-> Word32
-> Word32
-> Word32
-> Word32
-> [(Word32, BlockHash)]
-> Word32
-> [String]
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Integer
-> Bool
-> Maybe Text
-> Maybe Text
-> Bool
-> Word32
-> Network
Network
{ getNetworkName :: String
getNetworkName = "btcreg"
, getNetworkIdent :: String
getNetworkIdent = "btcRegTest"
, getAddrPrefix :: Word8
getAddrPrefix = 111
, getScriptPrefix :: Word8
getScriptPrefix = 196
, getSecretPrefix :: Word8
getSecretPrefix = 239
, getExtPubKeyPrefix :: Word32
getExtPubKeyPrefix = 0x043587cf
, getExtSecretPrefix :: Word32
getExtSecretPrefix = 0x04358394
, getNetworkMagic :: Word32
getNetworkMagic = 0xfabfb5da
, getGenesisHeader :: BlockHeader
getGenesisHeader =
Word32
-> BlockHash
-> Hash256
-> Word32
-> Word32
-> Word32
-> BlockHeader
BlockHeader
0x01
"0000000000000000000000000000000000000000000000000000000000000000"
"3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a"
1296688602
0x207fffff
2
, getMaxBlockSize :: Int
getMaxBlockSize = 1000000
, getMaxSatoshi :: Word64
getMaxSatoshi = 2100000000000000
, getHaskoinUserAgent :: ByteString
getHaskoinUserAgent = "/haskoin-btc-regtest:" ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
forall a. IsString a => a
versionString ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> "/"
, getDefaultPort :: Int
getDefaultPort = 18444
, getAllowMinDifficultyBlocks :: Bool
getAllowMinDifficultyBlocks = Bool
True
, getPowNoRetargetting :: Bool
getPowNoRetargetting = Bool
True
, getPowLimit :: Integer
getPowLimit =
0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
, getBip34Block :: (Word32, BlockHash)
getBip34Block =
( 100000000
, "0000000000000000000000000000000000000000000000000000000000000000")
, getBip65Height :: Word32
getBip65Height = 1351
, getBip66Height :: Word32
getBip66Height = 1251
, getTargetTimespan :: Word32
getTargetTimespan = 14 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 24 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getTargetSpacing :: Word32
getTargetSpacing = 10 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getCheckpoints :: [(Word32, BlockHash)]
getCheckpoints = []
, getSeeds :: [String]
getSeeds = ["localhost"]
, getBip44Coin :: Word32
getBip44Coin = 1
, getSigHashForkId :: Maybe Word32
getSigHashForkId = Maybe Word32
forall a. Maybe a
Nothing
, getEdaBlockHeight :: Maybe Word32
getEdaBlockHeight = Maybe Word32
forall a. Maybe a
Nothing
, getDaaBlockHeight :: Maybe Word32
getDaaBlockHeight = Maybe Word32
forall a. Maybe a
Nothing
, getAsertActivationTime :: Maybe Word32
getAsertActivationTime = Maybe Word32
forall a. Maybe a
Nothing
, getAsertHalfLife :: Integer
getAsertHalfLife = 0
, getSegWit :: Bool
getSegWit = Bool
True
, getCashAddrPrefix :: Maybe Text
getCashAddrPrefix = Maybe Text
forall a. Maybe a
Nothing
, getBech32Prefix :: Maybe Text
getBech32Prefix = Text -> Maybe Text
forall a. a -> Maybe a
Just "bcrt"
, getReplaceByFee :: Bool
getReplaceByFee = Bool
True
, getHalvingInterval :: Word32
getHalvingInterval = 150
}
bch :: Network
bch :: Network
bch =
$WNetwork :: String
-> String
-> Word8
-> Word8
-> Word8
-> Word32
-> Word32
-> Word32
-> BlockHeader
-> Int
-> Word64
-> ByteString
-> Int
-> Bool
-> Bool
-> Integer
-> (Word32, BlockHash)
-> Word32
-> Word32
-> Word32
-> Word32
-> [(Word32, BlockHash)]
-> Word32
-> [String]
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Integer
-> Bool
-> Maybe Text
-> Maybe Text
-> Bool
-> Word32
-> Network
Network
{ getNetworkName :: String
getNetworkName = "bch"
, getNetworkIdent :: String
getNetworkIdent = "bch"
, getAddrPrefix :: Word8
getAddrPrefix = 0
, getScriptPrefix :: Word8
getScriptPrefix = 5
, getSecretPrefix :: Word8
getSecretPrefix = 128
, getExtPubKeyPrefix :: Word32
getExtPubKeyPrefix = 0x0488b21e
, getExtSecretPrefix :: Word32
getExtSecretPrefix = 0x0488ade4
, getNetworkMagic :: Word32
getNetworkMagic = 0xe3e1f3e8
, getGenesisHeader :: BlockHeader
getGenesisHeader =
Word32
-> BlockHash
-> Hash256
-> Word32
-> Word32
-> Word32
-> BlockHeader
BlockHeader
0x01
"0000000000000000000000000000000000000000000000000000000000000000"
"3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a"
1231006505
0x1d00ffff
2083236893
, getMaxBlockSize :: Int
getMaxBlockSize = 32000000
, getMaxSatoshi :: Word64
getMaxSatoshi = 2100000000000000
, getHaskoinUserAgent :: ByteString
getHaskoinUserAgent = "/haskoin-bch:" ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
forall a. IsString a => a
versionString ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> "/"
, getDefaultPort :: Int
getDefaultPort = 8333
, getAllowMinDifficultyBlocks :: Bool
getAllowMinDifficultyBlocks = Bool
False
, getPowNoRetargetting :: Bool
getPowNoRetargetting = Bool
False
, getPowLimit :: Integer
getPowLimit =
0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
, getBip34Block :: (Word32, BlockHash)
getBip34Block =
( 227931
, "000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8")
, getBip65Height :: Word32
getBip65Height = 388381
, getBip66Height :: Word32
getBip66Height = 363725
, getTargetTimespan :: Word32
getTargetTimespan = 14 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 24 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getTargetSpacing :: Word32
getTargetSpacing = 10 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getCheckpoints :: [(Word32, BlockHash)]
getCheckpoints =
[ ( 11111
, "0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")
, ( 33333
, "000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")
, ( 74000
, "0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20")
, ( 105000
, "00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97")
, ( 134444
, "00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")
, ( 168000
, "000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763")
, ( 193000
, "000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317")
, ( 210000
, "000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e")
, ( 216116
, "00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e")
, ( 225430
, "00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932")
, ( 250000
, "000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214")
, ( 279000
, "0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40")
, ( 295000
, "00000000000000004d9b4ef50f0f9d686fd69db2e03af35a100370c64632a983")
, ( 478559
, "000000000000000000651ef99cb9fcbe0dadde1d424bd9f15ff20136191a5eec")
, ( 504031
, "0000000000000000011ebf65b60d0a3de80b8175be709d653b4c1a1beeb6ab9c")
]
, getSeeds :: [String]
getSeeds =
[ "seed.bitcoinabc.org"
, "seed-bch.bitcoinforks.org"
, "btccash-seeder.bitcoinunlimited.info"
, "seed.bchd.cash"
, "seed.bch.loping.net"
, "dnsseed.electroncash.de"
]
, getBip44Coin :: Word32
getBip44Coin = 145
, getSigHashForkId :: Maybe Word32
getSigHashForkId = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 0
, getEdaBlockHeight :: Maybe Word32
getEdaBlockHeight = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 478559
, getDaaBlockHeight :: Maybe Word32
getDaaBlockHeight = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 404031
, getAsertActivationTime :: Maybe Word32
getAsertActivationTime = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 1605441600
, getAsertHalfLife :: Integer
getAsertHalfLife = 60 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* 60 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* 10
, getSegWit :: Bool
getSegWit = Bool
False
, getCashAddrPrefix :: Maybe Text
getCashAddrPrefix = Text -> Maybe Text
forall a. a -> Maybe a
Just "bitcoincash"
, getBech32Prefix :: Maybe Text
getBech32Prefix = Maybe Text
forall a. Maybe a
Nothing
, getReplaceByFee :: Bool
getReplaceByFee = Bool
False
, getHalvingInterval :: Word32
getHalvingInterval = 210000
}
bchTest :: Network
bchTest :: Network
bchTest =
$WNetwork :: String
-> String
-> Word8
-> Word8
-> Word8
-> Word32
-> Word32
-> Word32
-> BlockHeader
-> Int
-> Word64
-> ByteString
-> Int
-> Bool
-> Bool
-> Integer
-> (Word32, BlockHash)
-> Word32
-> Word32
-> Word32
-> Word32
-> [(Word32, BlockHash)]
-> Word32
-> [String]
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Integer
-> Bool
-> Maybe Text
-> Maybe Text
-> Bool
-> Word32
-> Network
Network
{ getNetworkName :: String
getNetworkName = "bchtest"
, getNetworkIdent :: String
getNetworkIdent = "bchTest"
, getAddrPrefix :: Word8
getAddrPrefix = 111
, getScriptPrefix :: Word8
getScriptPrefix = 196
, getSecretPrefix :: Word8
getSecretPrefix = 239
, getExtPubKeyPrefix :: Word32
getExtPubKeyPrefix = 0x043587cf
, getExtSecretPrefix :: Word32
getExtSecretPrefix = 0x04358394
, getNetworkMagic :: Word32
getNetworkMagic = 0xf4e5f3f4
, getGenesisHeader :: BlockHeader
getGenesisHeader =
Word32
-> BlockHash
-> Hash256
-> Word32
-> Word32
-> Word32
-> BlockHeader
BlockHeader
0x01
"0000000000000000000000000000000000000000000000000000000000000000"
"3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a"
1296688602
486604799
414098458
, getMaxBlockSize :: Int
getMaxBlockSize = 32000000
, getMaxSatoshi :: Word64
getMaxSatoshi = 2100000000000000
, getHaskoinUserAgent :: ByteString
getHaskoinUserAgent = "/haskoin-bch-test:" ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
forall a. IsString a => a
versionString ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> "/"
, getDefaultPort :: Int
getDefaultPort = 18333
, getAllowMinDifficultyBlocks :: Bool
getAllowMinDifficultyBlocks = Bool
True
, getPowNoRetargetting :: Bool
getPowNoRetargetting = Bool
False
, getPowLimit :: Integer
getPowLimit =
0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
, getBip34Block :: (Word32, BlockHash)
getBip34Block =
( 21111
, "0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8")
, getBip65Height :: Word32
getBip65Height = 581885
, getBip66Height :: Word32
getBip66Height = 330776
, getTargetTimespan :: Word32
getTargetTimespan = 14 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 24 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getTargetSpacing :: Word32
getTargetSpacing = 10 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getCheckpoints :: [(Word32, BlockHash)]
getCheckpoints =
[ ( 546
, "000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70")
, ( 1155876
, "00000000000e38fef93ed9582a7df43815d5c2ba9fd37ef70c9a0ea4a285b8f5")
, ( 1188697
, "0000000000170ed0918077bde7b4d36cc4c91be69fa09211f748240dabe047fb")
]
, getSeeds :: [String]
getSeeds =
[ "testnet-seed.bitcoinabc.org"
, "testnet-seed-bch.bitcoinforks.org"
, "testnet-seed.bchd.cash"
, "seed.tbch.loping.net"
]
, getBip44Coin :: Word32
getBip44Coin = 1
, getSigHashForkId :: Maybe Word32
getSigHashForkId = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 0
, getEdaBlockHeight :: Maybe Word32
getEdaBlockHeight = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 1155876
, getDaaBlockHeight :: Maybe Word32
getDaaBlockHeight = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 1188697
, getAsertActivationTime :: Maybe Word32
getAsertActivationTime = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 1605441600
, getAsertHalfLife :: Integer
getAsertHalfLife = 60 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* 60
, getSegWit :: Bool
getSegWit = Bool
False
, getCashAddrPrefix :: Maybe Text
getCashAddrPrefix = Text -> Maybe Text
forall a. a -> Maybe a
Just "bchtest"
, getBech32Prefix :: Maybe Text
getBech32Prefix = Maybe Text
forall a. Maybe a
Nothing
, getReplaceByFee :: Bool
getReplaceByFee = Bool
False
, getHalvingInterval :: Word32
getHalvingInterval = 210000
}
bchRegTest :: Network
bchRegTest :: Network
bchRegTest =
$WNetwork :: String
-> String
-> Word8
-> Word8
-> Word8
-> Word32
-> Word32
-> Word32
-> BlockHeader
-> Int
-> Word64
-> ByteString
-> Int
-> Bool
-> Bool
-> Integer
-> (Word32, BlockHash)
-> Word32
-> Word32
-> Word32
-> Word32
-> [(Word32, BlockHash)]
-> Word32
-> [String]
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Maybe Word32
-> Integer
-> Bool
-> Maybe Text
-> Maybe Text
-> Bool
-> Word32
-> Network
Network
{ getNetworkName :: String
getNetworkName = "bchreg"
, getNetworkIdent :: String
getNetworkIdent = "bchRegTest"
, getAddrPrefix :: Word8
getAddrPrefix = 111
, getScriptPrefix :: Word8
getScriptPrefix = 196
, getSecretPrefix :: Word8
getSecretPrefix = 239
, getExtPubKeyPrefix :: Word32
getExtPubKeyPrefix = 0x043587cf
, getExtSecretPrefix :: Word32
getExtSecretPrefix = 0x04358394
, getNetworkMagic :: Word32
getNetworkMagic = 0xdab5bffa
, getGenesisHeader :: BlockHeader
getGenesisHeader =
Word32
-> BlockHash
-> Hash256
-> Word32
-> Word32
-> Word32
-> BlockHeader
BlockHeader
0x01
"0000000000000000000000000000000000000000000000000000000000000000"
"3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a"
1296688602
0x207fffff
2
, getMaxBlockSize :: Int
getMaxBlockSize = 1000000
, getMaxSatoshi :: Word64
getMaxSatoshi = 2100000000000000
, getHaskoinUserAgent :: ByteString
getHaskoinUserAgent = "/haskoin-bch-regtest:" ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> ByteString
forall a. IsString a => a
versionString ByteString -> ByteString -> ByteString
forall a. Semigroup a => a -> a -> a
<> "/"
, getDefaultPort :: Int
getDefaultPort = 18444
, getAllowMinDifficultyBlocks :: Bool
getAllowMinDifficultyBlocks = Bool
True
, getPowNoRetargetting :: Bool
getPowNoRetargetting = Bool
True
, getPowLimit :: Integer
getPowLimit =
0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
, getBip34Block :: (Word32, BlockHash)
getBip34Block =
( 100000000
, "0000000000000000000000000000000000000000000000000000000000000000")
, getBip65Height :: Word32
getBip65Height = 1351
, getBip66Height :: Word32
getBip66Height = 1251
, getTargetTimespan :: Word32
getTargetTimespan = 14 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 24 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getTargetSpacing :: Word32
getTargetSpacing = 10 Word32 -> Word32 -> Word32
forall a. Num a => a -> a -> a
* 60
, getCheckpoints :: [(Word32, BlockHash)]
getCheckpoints =
[ ( 0
, "0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206")
]
, getSeeds :: [String]
getSeeds = ["localhost"]
, getBip44Coin :: Word32
getBip44Coin = 1
, getSigHashForkId :: Maybe Word32
getSigHashForkId = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 0
, getEdaBlockHeight :: Maybe Word32
getEdaBlockHeight = Maybe Word32
forall a. Maybe a
Nothing
, getDaaBlockHeight :: Maybe Word32
getDaaBlockHeight = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 0
, getAsertActivationTime :: Maybe Word32
getAsertActivationTime = Word32 -> Maybe Word32
forall a. a -> Maybe a
Just 1605441600
, getAsertHalfLife :: Integer
getAsertHalfLife = 2 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* 24 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* 60 Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
* 60
, getSegWit :: Bool
getSegWit = Bool
False
, getCashAddrPrefix :: Maybe Text
getCashAddrPrefix = Text -> Maybe Text
forall a. a -> Maybe a
Just "bchreg"
, getBech32Prefix :: Maybe Text
getBech32Prefix = Maybe Text
forall a. Maybe a
Nothing
, getReplaceByFee :: Bool
getReplaceByFee = Bool
False
, getHalvingInterval :: Word32
getHalvingInterval = 150
}
allNets :: [Network]
allNets :: [Network]
allNets = [Network
btc, Network
bch, Network
btcTest, Network
bchTest, Network
btcRegTest, Network
bchRegTest]