{-# 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.ByteString (ByteString)
import Data.List
import Data.Maybe
import Data.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 Serialize Network where
put :: Putter Network
put net :: Network
net =
Putter Word32
putWord32be Putter Word32 -> Putter Word32
forall a b. (a -> b) -> a -> b
$ Network -> Word32
getNetworkMagic Network
net
get :: Get Network
get = do
Word32
magic <- Get 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 -> Get Network
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> Get Network) -> String -> Get 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 -> Get Network
forall (m :: * -> *) a. Monad m => a -> m a
return Network
net
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]