Copyright | No rights reserved |
---|---|
License | MIT |
Maintainer | jprupp@protonmail.ch |
Stability | experimental |
Portability | POSIX |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Common data types and functions to handle blocks from the block chain.
Synopsis
- data Block = Block {
- header :: !BlockHeader
- txs :: ![Tx]
- type BlockHeight = Word32
- type Timestamp = Word32
- data BlockHeader = BlockHeader {}
- headerHash :: BlockHeader -> BlockHash
- type BlockLocator = [BlockHash]
- data GetBlocks = GetBlocks {}
- data GetHeaders = GetHeaders {}
- type BlockHeaderCount = (BlockHeader, VarInt)
- newtype BlockHash = BlockHash {}
- blockHashToHex :: BlockHash -> Text
- hexToBlockHash :: Text -> Maybe BlockHash
- newtype Headers = Headers {
- list :: [BlockHeaderCount]
- decodeCompact :: Word32 -> (Integer, Bool)
- encodeCompact :: Integer -> Word32
Blocks
Block header and transactions.
Block | |
|
Instances
FromJSON Block Source # | |
Defined in Haskoin.Block.Common | |
ToJSON Block Source # | |
Generic Block Source # | |
Read Block Source # | |
Show Block Source # | |
Binary Block Source # | |
Serial Block Source # | |
Defined in Haskoin.Block.Common | |
Serialize Block Source # | |
NFData Block Source # | |
Defined in Haskoin.Block.Common | |
Eq Block Source # | |
Hashable Block Source # | |
Defined in Haskoin.Block.Common | |
type Rep Block Source # | |
Defined in Haskoin.Block.Common type Rep Block = D1 ('MetaData "Block" "Haskoin.Block.Common" "haskoin-core-1.0.2-inplace" 'False) (C1 ('MetaCons "Block" 'PrefixI 'True) (S1 ('MetaSel ('Just "header") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 BlockHeader) :*: S1 ('MetaSel ('Just "txs") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 [Tx]))) |
type BlockHeight = Word32 Source #
Height of a block in the block chain, starting at 0 for Genesis.
data BlockHeader Source #
Data type recording information of a Block
. The hash of a block is
defined as the hash of this data structure, serialized. The block mining
process involves finding a partial hash collision by varying the nonce in the
BlockHeader
and/or additional entropy in the coinbase Transaction
of this
Block
. Variations in the coinbase will result in different merkle roots in
the BlockHeader
.
Instances
headerHash :: BlockHeader -> BlockHash Source #
Compute hash of BlockHeader
.
type BlockLocator = [BlockHash] Source #
A block locator is a set of block headers, denser towards the best block and sparser towards the genesis block. It starts at the highest block known. It is used by a node to synchronize against the network. When the locator is provided to a peer, it will send back block hashes starting from the first block in the locator that it recognizes.
Data type representing a getblocks message request. It is used in the
bitcoin protocol to retrieve blocks from a peer by providing it a
BlockLocator
object. The response to a GetBlocks
message is an Inv
message containing a list of block hashes that the peer believes this node is
missing. The number of block hashes in that inv message will end at the stop
block hash, at at the tip of the chain, or after 500 entries, whichever comes
earlier.
Instances
Generic GetBlocks Source # | |
Read GetBlocks Source # | |
Show GetBlocks Source # | |
Serial GetBlocks Source # | |
Defined in Haskoin.Block.Common | |
Serialize GetBlocks Source # | |
NFData GetBlocks Source # | |
Defined in Haskoin.Block.Common | |
Eq GetBlocks Source # | |
type Rep GetBlocks Source # | |
Defined in Haskoin.Block.Common type Rep GetBlocks = D1 ('MetaData "GetBlocks" "Haskoin.Block.Common" "haskoin-core-1.0.2-inplace" 'False) (C1 ('MetaCons "GetBlocks" 'PrefixI 'True) (S1 ('MetaSel ('Just "version") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word32) :*: (S1 ('MetaSel ('Just "locator") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 BlockLocator) :*: S1 ('MetaSel ('Just "stop") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 BlockHash)))) |
data GetHeaders Source #
Similar to the GetBlocks
message type but for retrieving block headers
only. The response to a GetHeaders
request is a Headers
message
containing a list of block headers. A maximum of 2000 block headers can be
returned. GetHeaders
is used by simplified payment verification (SPV)
clients to exclude block contents when synchronizing the block chain.
Instances
type BlockHeaderCount = (BlockHeader, VarInt) Source #
BlockHeader
type with a transaction count as VarInt
Block header hash. To be serialized reversed for display purposes.
Instances
FromJSON BlockHash Source # | |
Defined in Haskoin.Block.Common | |
ToJSON BlockHash Source # | |
IsString BlockHash Source # | |
Defined in Haskoin.Block.Common fromString :: String -> BlockHash # | |
Generic BlockHash Source # | |
Read BlockHash Source # | |
Show BlockHash Source # | |
Binary BlockHash Source # | |
Serial BlockHash Source # | |
Defined in Haskoin.Block.Common | |
Serialize BlockHash Source # | |
NFData BlockHash Source # | |
Defined in Haskoin.Block.Common | |
Eq BlockHash Source # | |
Ord BlockHash Source # | |
Defined in Haskoin.Block.Common | |
Hashable BlockHash Source # | |
Defined in Haskoin.Block.Common | |
type Rep BlockHash Source # | |
Defined in Haskoin.Block.Common |
blockHashToHex :: BlockHash -> Text Source #
Block hashes are reversed with respect to the in-memory byte order in a block hash when displayed.
hexToBlockHash :: Text -> Maybe BlockHash Source #
Convert a human-readable hex block hash into a BlockHash
. Bytes are
reversed as normal.
The Headers
type is used to return a list of block headers in
response to a GetHeaders
message.
Headers | |
|
Instances
Generic Headers Source # | |
Read Headers Source # | |
Show Headers Source # | |
Binary Headers Source # | |
Serial Headers Source # | |
Defined in Haskoin.Block.Common | |
Serialize Headers Source # | |
NFData Headers Source # | |
Defined in Haskoin.Block.Common | |
Eq Headers Source # | |
type Rep Headers Source # | |
Defined in Haskoin.Block.Common type Rep Headers = D1 ('MetaData "Headers" "Haskoin.Block.Common" "haskoin-core-1.0.2-inplace" 'True) (C1 ('MetaCons "Headers" 'PrefixI 'True) (S1 ('MetaSel ('Just "list") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [BlockHeaderCount]))) |
Decode the compact number used in the difficulty target of a block.
The compact format is a representation of a whole number \(N\) using an unsigned 32-bit number similar to a floating point format. The most significant 8 bits are the unsigned exponent of base 256. This exponent can be thought of as the number of bytes of \(N\). The lower 23 bits are the mantissa. Bit number 24 represents the sign of \(N\).
\[ N = -1^{sign} \times mantissa \times 256^{exponent-3} \]