haskoin-core-0.21.2: Bitcoin & Bitcoin Cash library for Haskell
CopyrightNo rights reserved
LicenseMIT
Maintainerjprupp@protonmail.ch
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

Haskoin.Network.Bloom

Description

Bloom filters are used to reduce data transfer when synchronizing thin cients. When bloom filters are used a client will obtain filtered blocks that only contain transactions that pass the bloom filter. Transactions announced via inv messages also pass the filter.

Synopsis

Bloom Filters

data BloomFlags Source #

The bloom flags are used to tell the remote peer how to auto-update the provided bloom filter.

Constructors

BloomUpdateNone

never update

BloomUpdateAll

auto-update on all outputs

BloomUpdateP2PubKeyOnly

auto-update on pay-to-pubkey or pay-to-multisig (default)

Instances

Instances details
Eq BloomFlags Source # 
Instance details

Defined in Haskoin.Network.Bloom

Read BloomFlags Source # 
Instance details

Defined in Haskoin.Network.Bloom

Show BloomFlags Source # 
Instance details

Defined in Haskoin.Network.Bloom

Generic BloomFlags Source # 
Instance details

Defined in Haskoin.Network.Bloom

Associated Types

type Rep BloomFlags :: Type -> Type #

Binary BloomFlags Source # 
Instance details

Defined in Haskoin.Network.Bloom

Serial BloomFlags Source # 
Instance details

Defined in Haskoin.Network.Bloom

Methods

serialize :: MonadPut m => BloomFlags -> m () #

deserialize :: MonadGet m => m BloomFlags #

Serialize BloomFlags Source # 
Instance details

Defined in Haskoin.Network.Bloom

NFData BloomFlags Source # 
Instance details

Defined in Haskoin.Network.Bloom

Methods

rnf :: BloomFlags -> () #

type Rep BloomFlags Source # 
Instance details

Defined in Haskoin.Network.Bloom

type Rep BloomFlags = D1 ('MetaData "BloomFlags" "Haskoin.Network.Bloom" "haskoin-core-0.21.2-inplace" 'False) (C1 ('MetaCons "BloomUpdateNone" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "BloomUpdateAll" 'PrefixI 'False) (U1 :: Type -> Type) :+: C1 ('MetaCons "BloomUpdateP2PubKeyOnly" 'PrefixI 'False) (U1 :: Type -> Type)))

data BloomFilter Source #

A bloom filter is a probabilistic data structure that SPV clients send to other peers to filter the set of transactions received from them. Bloom filters can have false positives but not false negatives. Some transactions that pass the filter may not be relevant to the receiving peer. By controlling the false positive rate, SPV nodes can trade off bandwidth versus privacy.

Constructors

BloomFilter 

Fields

Instances

Instances details
Eq BloomFilter Source # 
Instance details

Defined in Haskoin.Network.Bloom

Read BloomFilter Source # 
Instance details

Defined in Haskoin.Network.Bloom

Show BloomFilter Source # 
Instance details

Defined in Haskoin.Network.Bloom

Generic BloomFilter Source # 
Instance details

Defined in Haskoin.Network.Bloom

Associated Types

type Rep BloomFilter :: Type -> Type #

Binary BloomFilter Source # 
Instance details

Defined in Haskoin.Network.Bloom

Serial BloomFilter Source # 
Instance details

Defined in Haskoin.Network.Bloom

Serialize BloomFilter Source # 
Instance details

Defined in Haskoin.Network.Bloom

NFData BloomFilter Source # 
Instance details

Defined in Haskoin.Network.Bloom

Methods

rnf :: BloomFilter -> () #

type Rep BloomFilter Source # 
Instance details

Defined in Haskoin.Network.Bloom

type Rep BloomFilter = D1 ('MetaData "BloomFilter" "Haskoin.Network.Bloom" "haskoin-core-0.21.2-inplace" 'False) (C1 ('MetaCons "BloomFilter" 'PrefixI 'True) ((S1 ('MetaSel ('Just "bloomData") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (Seq Word8)) :*: S1 ('MetaSel ('Just "bloomHashFuncs") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word32)) :*: (S1 ('MetaSel ('Just "bloomTweak") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Word32) :*: S1 ('MetaSel ('Just "bloomFlags") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 BloomFlags))))

newtype FilterLoad Source #

Set a new bloom filter on the peer connection.

Instances

Instances details
Eq FilterLoad Source # 
Instance details

Defined in Haskoin.Network.Bloom

Read FilterLoad Source # 
Instance details

Defined in Haskoin.Network.Bloom

Show FilterLoad Source # 
Instance details

Defined in Haskoin.Network.Bloom

Generic FilterLoad Source # 
Instance details

Defined in Haskoin.Network.Bloom

Associated Types

type Rep FilterLoad :: Type -> Type #

Binary FilterLoad Source # 
Instance details

Defined in Haskoin.Network.Bloom

Serial FilterLoad Source # 
Instance details

Defined in Haskoin.Network.Bloom

Methods

serialize :: MonadPut m => FilterLoad -> m () #

deserialize :: MonadGet m => m FilterLoad #

Serialize FilterLoad Source # 
Instance details

Defined in Haskoin.Network.Bloom

NFData FilterLoad Source # 
Instance details

Defined in Haskoin.Network.Bloom

Methods

rnf :: FilterLoad -> () #

type Rep FilterLoad Source # 
Instance details

Defined in Haskoin.Network.Bloom

type Rep FilterLoad = D1 ('MetaData "FilterLoad" "Haskoin.Network.Bloom" "haskoin-core-0.21.2-inplace" 'True) (C1 ('MetaCons "FilterLoad" 'PrefixI 'True) (S1 ('MetaSel ('Just "filterLoadBloomFilter") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 BloomFilter)))

newtype FilterAdd Source #

Add the given data element to the connections current filter without requiring a completely new one to be set.

Constructors

FilterAdd 

Instances

Instances details
Eq FilterAdd Source # 
Instance details

Defined in Haskoin.Network.Bloom

Read FilterAdd Source # 
Instance details

Defined in Haskoin.Network.Bloom

Show FilterAdd Source # 
Instance details

Defined in Haskoin.Network.Bloom

Generic FilterAdd Source # 
Instance details

Defined in Haskoin.Network.Bloom

Associated Types

type Rep FilterAdd :: Type -> Type #

Binary FilterAdd Source # 
Instance details

Defined in Haskoin.Network.Bloom

Serial FilterAdd Source # 
Instance details

Defined in Haskoin.Network.Bloom

Methods

serialize :: MonadPut m => FilterAdd -> m () #

deserialize :: MonadGet m => m FilterAdd #

Serialize FilterAdd Source # 
Instance details

Defined in Haskoin.Network.Bloom

NFData FilterAdd Source # 
Instance details

Defined in Haskoin.Network.Bloom

Methods

rnf :: FilterAdd -> () #

type Rep FilterAdd Source # 
Instance details

Defined in Haskoin.Network.Bloom

type Rep FilterAdd = D1 ('MetaData "FilterAdd" "Haskoin.Network.Bloom" "haskoin-core-0.21.2-inplace" 'True) (C1 ('MetaCons "FilterAdd" 'PrefixI 'True) (S1 ('MetaSel ('Just "getFilterData") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 ByteString)))

bloomCreate Source #

Arguments

:: Int

number of elements

-> Double

false positive rate

-> Word32

random nonce (tweak) for the hash function

-> BloomFlags

bloom filter flags

-> BloomFilter

bloom filter

Build a bloom filter that will provide the given false positive rate when the given number of elements have been inserted.

bloomInsert Source #

Arguments

:: BloomFilter

Original bloom filter

-> ByteString

New data to insert

-> BloomFilter

Bloom filter containing the new data

Insert arbitrary data into a bloom filter. Returns the new bloom filter containing the new data.

bloomContains Source #

Arguments

:: BloomFilter

Bloom filter

-> ByteString

Data that will be checked against the given bloom filter

-> Bool

Returns True if the data matches the filter

Tests if some arbitrary data matches the filter. This can be either because the data was inserted into the filter or because it is a false positive.

isBloomValid Source #

Arguments

:: BloomFilter

Bloom filter to test

-> Bool

True if the given filter is valid

Tests if a given bloom filter is valid.

isBloomEmpty :: BloomFilter -> Bool Source #

Returns True if the filter is empty (all bytes set to 0x00)

isBloomFull :: BloomFilter -> Bool Source #

Returns True if the filter is full (all bytes set to 0xff)

acceptsFilters :: Word64 -> Bool Source #

Does the peer with these version services accept bloom filters?

bloomRelevantUpdate Source #

Arguments

:: BloomFilter

Bloom filter

-> Tx

Tx that may (or may not) have relevant outputs

-> Maybe BloomFilter

Returns an updated bloom filter adding relevant output

Checks if any of the outputs of a tx is in the current bloom filter. If it is, add the txid and vout as an outpoint (i.e. so that a future tx that spends the output won't be missed).