diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki
new file mode 100644
index 0000000000..eab1ccef52
--- /dev/null
+++ b/gcs_light_client.mediawiki
@@ -0,0 +1,1056 @@
+
+BIP: ???
+Layer: Peer Services
+Title: Compact Client Side Filtering for Light Clients
+Author: Olaoluwa Osuntokun
+ Alex Akselrod
+Comments: ???
+Comments-URI: ???
+Type: Standards Track
+Created: 05-24-2017
+License: CC0-1.0
+
+
+== Abstract ==
+
+This BIP describes a new light client node type for Bitcoin as well as the
+modifications to current full-nodes required to support this new type of light
+client. The light client mode described in this BIP is meant to supersede BIP
+37 as it provides a greater degree of privacy, utility, and also reduces the
+resources required for full-nodes to service this new light client mode
+compared to BIP
+37[https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki].
+The light client mode described in this BIP can be seen as a "reversal" of BIP
+37[https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-May/012636.html]:
+rather than the light clients sending filters to full-nodes, full-nodes send
+filters to light clients. Unlike BIP 37, we don't utilize bloom filters.
+Instead, we utilize a compact filter (more efficient than bloom filters) which
+leverages Golomb-Rice coding for compression. Additionally, blocks are
+downloaded as a whole (from any source), rather than directly from peers as
+fragments with merkle-branches proving their authenticity.
+
+== Motivation ==
+
+Light clients in Bitcoin provide applications with a less resource intensive
+mechanism of validating the work of the most difficult chain and identifying
+entries in the blockchain's log which are relevant to said application. In order
+to accomplish the first, light clients download and verify the connectivity and
+work of ''only'' the block headers of the chain. Block headers are a constant
+80-bytes, resulting in minimal bandwidth even for very long chains. In order to
+efficiently accomplish the second task (ascertaining relevant chain data) light
+clients require a mechanism to learn of relevant data in blocks.
+
+BIP 37 is currently the most widely used light client execution mode within
+Bitcoin. In BIP 37, rather than fetching and fully validating all blocks in the
+chain, the light client instead verifies all headers and sends bloom filters
+containing relevant data to full-nodes. These full-nodes then service the light
+client by querying data within a block against the loaded bloom filter, if a
+transaction matches the filter, a merkle-branch for the matching transaction is
+sent and distinctly the transaction itself is sent.
+
+However, BIP 37 has several downsides. Bloom filtering as widely implemented
+provides virtually ''zero'' privacy to wallets or other applications using this
+mechanism
+[https://eprint.iacr.org/2014/763.pdf][https://jonasnick.github.io/blog/2015/02/12/privacy-in-bitcoinj/].
+Additionally, applications are forced to carefully manage their false positive
+rates in order to not completely give away their set of interested items.
+Additionally, full-nodes can nearly undetectably lie by omission, causing a
+denial of service which can lead to undesirable failure modes in applications
+whose safety critically relies on responding to certain on-chain events. When
+faithfully servicing BIP 37 light clients, full-nodes may incur significant I/O
+and CPU resource usage due to maliciously crafted bloom filters, creating a
+denial-of-service vector.
+
+The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
+"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be
+interpreted as described in RFC 2119.
+
+== Design Rationale ==
+
+In order to address the drawbacks of BIP 37 raised above, in this document we
+propose an alternative chain filtering mechanism for light clients. Our
+proposal sports a greater degree of privacy than BIP 37 as filtering is now
+done on the client side. Clients download a deterministically generated filter
+for a block and query it locally. If relevant items are found in the filter
+then the ''entire'' block will be fetched. The decoupling of filter querying from
+active communication with full-nodes enables light clients to fetch blocks from
+''any'' source. Extremely privacy conscious light clients may opt to anonymously
+fetch blocks using cryptographic techniques such a Private Information
+Retrieval [https://en.wikipedia.org/wiki/Private_information_retrieval].
+
+In order to reduce the size of the filter, we use a data structure capable of
+probabilistic set membership. We elide the selection of the bloom filter data
+structure in favor of utilising Golomb-Rice coding which allows us to generate
+filters more compact than bloom filters which approach the theoretical minimum
+size for probabilistic data structure.
+
+Light clients operating using the method described in this document are able to
+verify the authenticity of filters received, thereby eliminating the ability
+for full-nodes to lie by omission. Such client side filtering also improves the
+utility of light clients for generic applications beyond simple wallets and
+usage of basic public key templates.
+
+Finally, full-nodes only need to construct filters ''once'' as they're
+deterministically generated for each block. Once the index is built, no further
+active processing is required to serve light clients. Servicing light clients
+simply entails reading pre-computed filters and headers from disk and sending
+them over the network.
+
+
+== Preliminaries ==
+
+Before we specify the details of our proposal, we'll first go over a few
+preliminaries which will aid in the understanding our proposal.
+
+By []byte we refer to a slice (or vector) of bytes. This value is
+typically expressed in C-like languages as an array of uint_8's.
+
+By Var-Int we refer to the variable length integer encoding used
+widely within the Bitcoin p2p protocol as an efficient way to encode the number
+of items in a repeated series of items. The p2p message extensions in this
+proposal will utilize this variable-length integer encoding in an identical
+manner to the existing Bitcoin p2p messages.
+
+By siphash(k, n) we refer to an invocation of the SipHash
+pseudo-random function with k as the 128-bit key, and n
+as the input to the PRF. We instantiate with the recommended parameters of
+c = 2 and d = 4.
+
+We define the concept of an abstract bit stream instantiated by the function:
+new_bit_stream The bit_stream has two functions that
+operate on it, unary_encode(stream, n) and
+write_bits_big_endian(stream, n, k) where unary_encode(steam,
+n) emits n (an integer) to the stream in unary, and
+write_bits_big_endian(stream, n, k) emits the lower k
+bits of n to the stream using a big-endian binary encoding. For our unary
+encoding, we encode a series of 1's followed by a terminating 0.
+
+Whenever we reference sorting, we refer to an ascending sorted order. The items
+in a sorted set should increase from smallest index to largest index.
+
+We use a form of pseudo-code throughout the specification. In some areas we use
+pattern-matching to specify the details of an algorithm:
+
+* match(ITEM) denotes a clause which pattern matches on ITEM (similar to a switch statement in imperative languages).
+* Some denotes a non-empty ITEM, equivalent to a non-nil pointer or value
+* None denotes an empty ITEM, equivalent to a nil pointer or value
+
+== Specification ==
+
+=== Compact Chain Filters ===
+
+In this BIP, we propose that light clients be provided with compact filters
+which succinctly encode the contents of blocks. Instead of bloom filters, we
+instead employ a data structure which is a compressed version of the hashed
+values of the contents of blocks. Throughout the document, we refer to this
+data structure as a Golomb Coded Set (GCS). At a high level the set contains a
+list of sorted fixed size values. These values are then compressed using a type
+of run length encoding. In order to query the set, it must be decompressed.
+
+We will now define simple functions for encoding and decoding integers using
+Golomb-Rice [https://en.wikipedia.org/wiki/Golomb_coding#Rice_coding]
+coding. These functions will be used in the next section as a primitive in the
+construction of our compact filters.
+
+
+golomb_encode(stream, n, k):
+ let q = n >> k
+ unary_encode(stream, q)
+ write_bits_big_endian(stream, n, k)
+
+
+
+golomb_decode(stream, k) -> int:
+ let c = stream.read_bit()
+
+ let n = 0
+ while c == 0:
+ n++
+ c = stream.read_bit()
+
+ let r = b.read_bits_big_endian(k)
+
+ where read_bits_big_endian(k) decodes a fixed-length big-endian integer of
+ k-bits
+
+ c*m + r
+
+
+With the two functions above, we're able to efficiently compress a single
+integer using Golomb-Rice coding. In the next section, we'll put everything
+together and use the primitives described above to construct our compact sets.
+
+=== Golomb-Rice Coded Sets ===
+
+Rather than insert items directly into our set, we instead first run the items
+through a PRF. This creates a set of uniformly distributed values. If we then
+sort each of these values, the ''delta'' between each of the values closely
+resembles a ''Geometric Distribution''. We'll again leverage this fact to use
+Golomb-Rice coding to compresses our set by only encoding the ''delta'' between
+two successive elements in the set.
+
+Golomb-Rice coded sets take two parameters:
+* N the number of items to be inserted into the set
+* P a value which is computed as 1/fp where fp is the desired false positive rate.
+
+Given these two parameters, we can now construct our set.
+
+==== Set Construction ====
+
+Set construction takes three parameters: N, P and
+L
+* where L is a list of the ''raw'' items we wish to insert into the set
+* the type of L is assumed to be of []byte
+
+NOTE: P ''must'' be a power of two as we target the specialized case of
+Golomb coding: Golomb-Rice coding.
+
+Using N and P we compute F = N * P.
+F constricts the range of the hashed values accordingly in order
+to achieve our desired false positive rate.
+
+In addition, to help optimize the algorithm, we use a fast range
+algorithm[https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/],
+multiplying the hashed value by F and taking only the top 64 bits. This fairly
+distributes the values over F without expensive division operations. In our
+domain, the operation will use 64-bit integers. As a result, one may need to
+manually compute the upper 64-bits of a 64-bits integers multiplication. This
+can be done with fewer cycles on CPUs that have 128-bit registers. We use
+64-bits, as this is the outputs size of siphash(2, 4).
+
+The following routine computes the ''uncompressed'' set given the parameters
+above:
+
+hashed_set_construct(N, P, raw_items, k): -> []uint64:
+ let F = N * P
+
+ let set_items = []
+ for item in raw_items:
+ let set_value = (siphash(k, item) * F) >> 64
+ set_items.append(set_value)
+
+ // Sorts in ascending order.
+ set_items.sort()
+
+ set_items
+
+
+Using the routine above, we can transform our set of (possibly heterogeneous
+items) in to a list of uniformly distributed values. As a final step, these
+values are then sorted. When sorting then items MUST be ordered in ascending
+order.
+
+==== Set Compression ====
+
+Once the set of hashed items has been constructed (and sorted in ascending
+order) we then use Golomb-Rice coding to ''compress'' the set by encoding the
+''delta'' value between each successive element within the set. As these values
+are uniformly distributed, the deltas between these values will be
+Geometrically Distributed, meaning that Golomb-Rice coding will be optimal for
+this use-case [http://urchin.earth.li/~twic/Golombs_Original_Paper/].
+
+The following routine describes the compression process:
+
+gcs_compress(sorted_set, fp) -> []byte:
+ let stream = new_bit_stream()
+
+ // P is equivalent to m, the size of a golomb code-word.
+ let P = 1 << fp
+
+ let last_value = 0
+ for value in sorted_set:
+ // Compute the difference between this value and the last value modulo
+ // P.
+ let remainder = (value - last_value) & (P - 1)
+
+ // Compute the difference between this value and the last one, divided
+ // by P. This is our quotient.
+ let quotient = (value - last_value - remainder) >> fp
+
+ // Write out the quotient value in unary into the bit stream.
+ unary_encode(stream, quotient)
+
+ // Finally, write the remainder into the bit stream using fp bits.
+ write_bits_big_endian(stream, remainder, fp)
+
+ // Track this value so we can use it compute the diff between this
+ // value and the last.
+ last_value = value
+
+ stream.bytes()
+
+
+The routine above computes a ''compressed'' set using Golomb-Rice coding to
+encode the ''delta'' between elements within the set. Unlike a bloom-filter,
+this data-structure cannot be queried in its current form. Instead, one MUST
+first perform the reverse computation to ''decompress'' the items in the set,
+revealing the true values which can be queried against.
+
+==== Set Querying/Decompression ====
+
+Given a compressed Golomb-Rice coded set, one MUST first ''decompress'' the set
+itself in order to query items which have been included within the set.
+Decompression of a set follows the reverse procedure of encoding. To decode an
+element, we'll decode the encoded quotient and remainder of encoded delta.
+With the full delta re-constructed, we then ''add'' this value to the prior
+value in order to reconstruct the full value. Following this procedure we can
+incrementally decompress the set lazily without decompressing the entire
+filter.
+
+===== Querying for a Single Item =====
+
+The following routing describes how one queries a compressed set for a ''single''
+item:
+
+gcs_match(key: [16]byte, compressed_set: []byte, target: []byte, fp, N: int) -> bool:
+ // First we'll map the item into the domain of our encoding.
+ let item = (siphash(key, target) * (N * (1 << fp))) >> 64
+
+ stream = new_bit_stream(compressed_set)
+
+ // We initialize the initial accumulator to a value of zero.
+ let last_value = 0
+
+ // As the values in the set are sorted once the decoded values exceeds the
+ // value we wish to query for, we can terminate our search early.
+ for last_value < item:
+ // Read the delta between this value and the next value which has been
+ // encoded using Golomb-Rice codes.
+ let decoded_value = golomb_decode(stream, fp)
+
+ // With the delta computed, we can now reconstruct the original value.
+ let set_item = last_value + decoded_value
+
+ // If the values match up, then the target item _may_ be in the set, so
+ // we return true.
+ if set_item == item:
+ true
+
+ last_value = set_item
+
+ // If we reach this point, then the item isn't in the set.
+ false
+
+
+===== Querying Against a Set of Items =====
+
+For most applications, the common case will be attempting to match a ''list'' of
+items to the filter. In this case, we can perform a "zip" search against two
+sorted lists: the step-by-step decompressed values of the set, and the list of
+items we'd like to query.
+
+The following routine will evaluate to ''true'' if ''any'' of the items in a
+target set are ''maybe'' within the original set of items (pre encoding):
+
+gcs_match_any(key: [16]byte, compressed_set: []byte, targets [][]byte,
+ fp, N: int) -> bool:
+
+ stream = new_bit_stream(compressed_set)
+
+ // Once again, we'll map our set of target values into the domain our
+ // encoding, sorting as a last step so we can zip through the values.
+ let items = []
+ for t in target:
+ let item = (siphash(key, t) * (N * (1 << fp))) >> 64
+ items.append(item)
+ items.sort()
+
+ // Set up a set of accumulator values that we'll use to zip down the two
+ // filters.
+ let last_set_val, last_target_val = 0, 0
+ last_target_val = items[0]
+ let = 1
+
+ // We'll keep running until one of the values matches each other. If this
+ // happens, then we have a match!
+ while last_set_val != last_target_val:
+ // Perform a pattern match to decide which filter we'll need to
+ // advance.
+ match:
+ case last_set_val > last_target_val:
+ // If we still have items let, advance the pointer by one.
+ if i < len(items):
+ last_target_val = items[i]
+ i++
+
+ // Otherwise, we've ran our items in our target set, which
+ // means nothing matched.
+ false
+
+ case last_target_val > last_set_val:
+ // In this case, we'll advance the filter we're querying
+ // against. This entails decompressing the next element in the
+ // set.
+ let decoded_value = golomb_decode(stream, fp)
+
+ // Accumulate the decoded delta value to the current value in
+ // order to retrieve the current set item.
+ last_set_val += decoded_value
+
+ // If we reach this point, the two items in the set matched!
+ true
+
+
+
+=== Peer to Peer Network Extensions ===
+
+With the procedures to construct, compress, and query the sets explained, we'll
+now turn to the modifications to Bitcoin's p2p protocol required to support
+this new operating mode.
+
+
+==== Peer to Peer Service Bit ====
+
+To start, we reserve a currently unutilized service bit. This is required as
+light clients SHOULD ''preferentially'' peer to full-nodes that support the
+features outlined in this BIP.
+
+The 6th service bit will now be dedicated to signaling support for the
+features described within this BIP:
+* SFNodeCF = 1 << 6
+
+==== Filter Types ====
+
+As this framework for client-side chain filtering is meant to be generic, in
+this document we define two ''filter types''. A filter type denotes both the
+construction/querying for a filter as well as the contents of the filter.
+
+At the time of writing of this BIP, two filter types are defined:
+* Normal (0x00)
+* Extended (0x01)
+
+A Normal filter is intended to contain all the items that a light client
+needs to sync a basic Bitcoin wallet. In order to facilitate this use-case, for
+each transaction, normal filters contain:
+* The outpoints of each input within a transaction.
+* The data-pushes contained within the public key script of each output within the transaction.
+* The txid of the transaction itself.
+
+An Extended filter contains extra data that is meant to facilitate the
+adoption of more advanced smart contracting applications by this BIP. For each
+transaction found in a block, an Extended filter contains:
+* Each item within the witness stack of an input (if the input has a witness).
+* Each data push of the signature script of an input.
+
+Notably, this construction does not currently interpret P2SH scripts or witness
+scripts to extract data pushes from them; however, future filter types may be
+designed to do so.
+
+==== Filter Construction ====
+
+In order to ensure that filters are deterministically generated, we will use
+the ''first'' 16-bytes of the block hash of a Bitcoin
+block as the key to our siphash function. Full-nodes that support
+this BIP SHOULD treat the set of filters as an additional index of the
+blockchain. Once a new block arrives, both filter types SHOULD be constructed,
+and stored on disk. Full nodes MAY opt to dynamically construct the filters at
+runtime, trading off space for additional computation. Full-nodes that update
+to support this BIP once already synced, SHOULD upon start-up, re-index the
+chain, constructing filters for each block from genesis to current chain tip.
+
+When indexing input and output scripts, we only index the push datas in the
+script. The function extract_push_datas returns a vector of byte
+slices that contain any pushed data found within the script. Pushed datas are
+the byte slices following: OP_PUSHDATA1,
+OP_PUSHDATA2, OP_PUSHDATA4, and the opcodes numbered
+1 to 75. The set of returned values includes
+OP_O, but excludes OP_1 - OP_16.
+OP_O MUST be emitted as an empty byte slice. For the complete set
+of opcodes defined in Script, we refer the reader to
+[https://en.bitcoin.it/wiki/Script].
+
+Given a Bitcoin block, a full-node MUST construct a Normal compact
+filter as follows:
+
+
+construct_normal_gcs_filter(block, fp) -> []byte:
+ let siphash_key = block.hash()[:16]
+
+ let P = 1 << fp
+
+ let raw_items = []
+ for tx in block.transactions:
+ let txid = tx.hash()
+ raw_items.append(txid)
+
+ for output in tx.outputs:
+ let output_bytes = extract_push_datas(output.script)
+ for output_byte in output_bytes:
+ raw_items.append(output_byte)
+
+ if tx.is_coinbase():
+ continue
+
+ for input in tx.inputs:
+ // Inputs serialized as they are on the wire in transactions.
+ // Input index serialized in little-endian.
+ let input_bytes = input.hash || input.index
+ raw_items.append(input_bytes)
+
+ let N = len(raw_items)
+ let F = N * P
+
+ let hashed_items = []
+ for raw_item in raw_items:
+ let hashed_item = (siphash_key(siphash_key, raw_item) * F) >> 64
+ hashed_items.append(hashed_item)
+
+ hashed_items.sort()
+
+ gcs_compress(hashed_items, fp)
+
+
+Given a Bitcoin block, a full-node MUST construct an Extended
+compact filter as follows:
+
+construct_extended_gcs_filter(block, fp) -> []byte:
+
+ let siphash_key = block.hash()[:16]
+
+ let P = 1 << fp
+
+ let raw_items = []
+ for tx in block.transactions:
+ if tx.is_coinbase():
+ continue
+
+ for input in tx.inputs:
+ for wit_elem in input.witness:
+ raw_items.append(wit_elem)
+
+ let sig_script_pushes = extract_push_datas(input.sig_script)
+ for push in sig_script_pushes:
+ raw_items.append(push)
+
+ let N = len(raw_items)
+ let F = N * P
+
+ let hashed_items = []
+ for raw_item in raw_items:
+ let hashed_item = (siphash_key(siphash_key, raw_item) * F) >> 64
+ hashed_items.append(hashed_item)
+
+ // Sorted in ascending order.
+ hashed_items.sort()
+
+ gcs_compress(hashed_items, fp)
+
+
+==== Filter Capability Querying ====
+
+As it's feasible that in the future, this document is extended to encompass
+additional filter encoding algorithms or filter contents, we define a new p2p
+message that allows light clients to ascertain which filters a node supports.
+
+The getcftypes message is an ''empty message'' whose command string is:
+getcftypes
+
+A full-node that receives a getcftypes message MUST respond with a
+cftypes message which is defined as follows:
+
+{| class="wikitable"
+! Field Size
+! Description
+! Data Type
+! Comments
+|-
+| Var-Int
+| NumFilters
+| uint64
+| The number of supported filters.
+|-
+| NumFilters
+| SupportedFilters
+| [NumFilterBytes]byte
+| A byte slice with each byte denoting a supported filter type
+|}
+
+
+==== Compact Filter Header Chain ====
+
+As the filters described in this BIP ''are not'' consensus critical, meaning
+each filter is ``not`` validated by full-nodes and committed into blocks by
+miners, we require an alternative (albeit less-binding) method to allow light
+clients to ''identify'' and ''reject'' invalid filters. The purely p2p solution
+to this problem is to obtain a deterministic hash-chain of ''each'' filter.
+This hash chain or "filter header chain" is similar to the regular Bitcoin
+headers in that it allows a light client to verify the ''authenticity'' of a
+received
+filter.
+
+The filter header chain for a particular filter type is described by the
+following recurrence:
+
+filter_header(n: uint) -> [32]byte =
+ // The zero hash is 32 bytes of 0's.
+ let zero_hash [32]byte = {0*32}
+
+ if n == 0:
+ double-sha-256(genesis_block.prevblock || filter(0))
+
+ match filter(n):
+ // If the filter isn't empty, then we hash the filter itself into the
+ // header chain.
+ case Some:
+ double-sha-256(filter_header(n-1) || double-sha-256(filter(n)))
+
+ // Otherwise, if the filter is empty (created from a block with a single
+ // coinbase transaction whose output script contains no push datas), then
+ // we'll hash the zero_hash.
+ case None:
+ double-sha-256(filter_header(n-1) || double-sha-256(zero_hash))
+
+ where filter(n) is the filter for block height n
+
+
+The filter header for the genesis block uses the hash stored in the prevblock
+field of the genesis block header itself, as there's no prior filter header
+(by definition).
+
+Due to the nature of filter construction, it's possible to construct a block
+such that an "empty" filter will be produced. This is the case of a coinbase
+transaction that has no data pushes in its output script. In this case, the
+"hash" of said filter is simply "32 zeroes".
+
+
+We now introduce two new messages to support the fetching and verification of
+the filter header chain by light clients.
+
+The getcfheaders message is defined as follows:
+
+{| class="wikitable"
+! Field Size
+! Description
+! Data Type
+! Comments
+|-
+| Var-Int
+| NumBlockLocators
+| uint64
+| Number of block locators.
+|-
+| NumBlockLocators * 32
+| BlockLocatorHashes
+| [NumBlockLocators][32]byte
+| Block locator hashes, with the same semantics as in getheaders.
+|-
+| 32
+| HashStop
+| [32]byte
+| Hash to stop at.
+|-
+| 1
+| FilterType
+| byte
+| Type of filter header being requested.
+|}
+
+The BlockLocators within the message are to be interpreted
+identically to the BlockLocators within Bitcoin's
+getheaders and getblocks messages [https://en.bitcoin.it/wiki/Protocol_documentation].
+
+The cfheaders> message MUST be sent in response to a
+getcfheaders message for a particular block hash. The
+cfheaders message is defined as follows:
+
+{| class="wikitable"
+! Field Size
+! Descriptions
+! Data Type
+! Comments
+|-
+| 32
+| StopHash
+| []byte
+| Block hash for the last filter header returned, for locating the filter headers in the blockchain.
+|-
+| 1
+| FilterType
+| byte
+| Byte identifying the type of filter headers being returned.
+|-
+| Var-Int
+| NumHeaders
+| uint64
+| Hash to stop at.
+|-
+| NumHeaders * 32
+| HeaderHashes
+| [NumHeaders][32]byte
+| Slice of filter headers.
+|}
+
+=== Compact Filters ===
+
+The last set of messages we introduce are for ''fetching'' the compact filters
+themselves. Light clients can SHOULD use these two messages to request a
+compact filter for a particular block hash.
+
+The getcfilter message is defined as follows:
+
+{| class="wikitable"
+! Field Size
+! Description
+! Data Type
+! Comments
+|-
+| 32
+| BlockHash
+| [32]byte
+| Block hash of the Bitcoin block for which the client wishes to fetch a filter.
+|-
+| 1
+| FilterType
+| byte
+| Byte identifying the type of filter requested.
+|}
+
+The cfilter message MUST be sent in response to a
+getcfilter message for a particular block hash.The
+cfilter message is defined as follows:
+{| class="wikitable"
+! Field Size
+! Description
+! Data Type
+! Comments
+|-
+| 32
+| BlockHash
+| [32]byte
+| Block hash of the Bitcoin block for which the filter is being returned.
+|-
+| 1
+| FilterType
+| byte
+| Byte identifying the type of filter being returned.
+|-
+| Var-Int
+| NumFilterBytes
+| uint64
+| A variable length integer encoding the number of bytes of the filter in the following field.
+|-
+| NumFilterBytes
+| FilterBytes
+| [NumFilterBytes]byte
+| The raw compressed compact filter for this block.
+|}
+
+The BlockHash field is included in both messages as this allows
+easily matching requests against responses, as the responses aren't
+self-identifying like block headers are (via own hash).
+
+The parameters N (the number of elements in the filter) and
+P (1 << false_positive_rate) are required by the light
+client in order to properly incrementally decode, query, and validate
+(reconstruct from Bitcoin block) a compact filter. The parameter N
+cannot be known ahead of time, therefore we define the serialization of a
+compact filter of type 0x00 and 0x01 as:
+
+N || raw_filter_bytes
+
+where N is serialized as a 32-bit big-endian integer.
+
+However, there exists a special case of a null filter. This this
+case an empty byte slice is transmitted rather than consuming
+4-bytes to encode the size of zero.
+
+However, as the parameter P ''MUST'' be globally agreed upon (for
+a particular filter type), we define this value ''statically'' for filter
+types: 0x00 and 0x01. For the two aforementioned
+filter types, the false positive rate MUST be: 20, meaning the
+parameter P is: 2^20, meaning fp=20.
+This value was chosen as during simulations it was the value that minimized the
+bandwidth utilized by the expected number of blocks downloaded due to false
+positives, and the bandwidth used to download the filters themselves. The code
+along with a demo used for the parameter tuning can be found [here https://github.com/Roasbeef/bips/blob/83b83c78e189be898573e0bfe936dd0c9b99ecb9/gcs_light_client/gentestvectors.go]
+
+
+=== Protocol Version Bump ===
+
+As this BIP defines new peer-to-peer behavior, we bump the protocol version by
+one in order to distinguish the newly defined behavior. Full-nodes implementing
+this BIP should advertise a protocol version of: 70016.
+
+== New Wallet Capabilities Enabled ==
+
+The new light client mode enables wallet to maintain a very compact client-side
+index of (possibly) the entire chain. Such an index provides a great degree of
+utility for wallets, as they're now able to perform tasks such as private key
+imports and full HD-seed imports without the need of a trusted third-party
+server. Additionally, the compact client-side chain index also opens up the
+door to smart contract applications which require agent action in response to
+on-chain events. Examples of such applications include Lightning.
+
+== Backwards Compatability ==
+
+This light client protocl is NOT backwards compatible with BIP 37. Full nodes
+MAY implement both protocols to serve both types of light clients.
+
+
+== Implementation Notes ==
+
+This filter header chain SHOULD be utilized by light clients to gain a greater
+degree of security against bamboozling full-nodes during their initial chain
+sync. In addition to fetching all the bitcoin headers, light clients
+implementing this BIP SHOULD also fetch all the ''filter headers'' from
+''each'' of their connected peers. With these headers, light clients SHOULD
+efficiently detect nodes that advertise a conflicting filter chain history. To
+do this, light clients MUST ensure that all nodes return the ``same` filter
+header hash for a particular block header hash.
+
+Light clients MAY use the filter header chain to verify purported filter
+authenticity when fetching the next set of headers from chain tip. Light
+clients MAY use the following algorithm to more efficiently verify the
+authenticity of filters (the naive version would fetch the entire filter from
+each peer, this version saves bandwidth):
+
+
+verify_from_tip(tip_block_hash: [32]byte):
+ let filter_types = {supported_filter_types...}
+ let connected_peers = {list_of_connected_full_nodes...}
+
+ for filter_type in filter_types:
+
+ let filter_headers = set()
+ for peer in connected_peers:
+ let filter_header = peer.fetch_filter_header(tip_block_hash)
+ filter_headers.insert(filter_header)
+
+ if len(filter_headers) != 1:
+ // Peers have conflicting filters. The light client should fetch
+ // each unique filter from the set of peers AND fetch the block. The
+ // light client can then verify which filter header is correct, and
+ // BAN the offending peers.
+
+ // Otherwise, syncing continues as normal: fetch filter to see if it
+ // matches any relevant items.
+
+
+Light clients MAY persistently commit all filter headers to disk, as when
+lazily fetching filters (due to a historical re-scan or chain analysis),
+they're able to verify the authenticity of any fetched filters.
+
+Full-nodes MAY persistently compute and persist the filter header chain
+on-disk, just as the regular filters.
+
+Zero-length filters are sent without an N value, allowing us to save
+4-bytes. Clients are able to verify that a filter will be
+null before requesting it (as it will just be the prior filter
+header hashed with zero bytes). Clients can take this fact into account in
+order to save a round trip for null headers.
+
+Light clients implementing this proposal SHOULD utilize the
+sendheaders message. This allow quicker syncing from tip, as rather
+than sending an inv to announce a new blocks, nodes will instead
+directly send the headers message. With this, nodes can save a
+round-trip and immediately request
+cfheaders from each of their connected peers before ultimately
+fetching the filter itself.
+
+Light client syncing MAY be run in reverse, meaning fetching the regular
+Bitcoin and filter headers from the ''end'' of the chain and working backwards.
+This allows a client to nearly ''instantly'' be useable if an application doesn't
+require immediate access to historical filter data.
+
+If fetching blocks directly over the p2p network (rather than via a distinct
+channel), light clients SHOULD fetch blocks from multiple peers in order to
+mitigate transaction intersection analysis.
+
+Full nodes serving the light clients described in this BIP can be implemented
+in a completely ''stateless'' manner. Implementations can also make a
+space/time tradeoff by only holding filters on disk to some particular block
+horizon. If a filter beyond this horizon is requested, then it can be
+reconstructed in real time. This allows nodes to save on disk-space, as it's
+likely the older filters would only be fetched for historical rescans. It is
+also likely that the past few hundred filters will be fetched mostly frequently
+by smaller devices (phones, laptops, etc) periodically coming back online after a
+period of inactivity.
+
+It is possible to implementations of this BIP to serve ''other''
+implementations to a degree. All headers (regular bitcoin, regular, extended)
+can be served, and also any on-disk filters can also be served to other light
+clients.
+
+Key import and rescan: with lazy filters fetching, having a start
+block is VERY important to avoid fetching all cfilters starting
+with block 1 (assume you generate your own filters/headers for the genesis
+block).
+
+== Acknowledgments ==
+
+We would like to thank bfd (from the bitcoin-dev mailing list) for bringing the
+basis of this BIP to our attention, Greg Maxwell for pointing us in the
+direction of Golomb-Rice coding and fast range optimization, Joseph Poon for
+suggesting the filter header chain scheme, and Pedro Martelletto for writing the
+initial indexing code for btcd.
+
+We would also like to thank Dave Collins, JJ Jeffrey, Eric Lombrozo for useful
+discussions.
+
+== Reference Implementation ==
+
+Light client: [https://github.com/lightninglabs/neutrino]
+
+Full-node indexing: https://github.com/Roasbeef/btcd/tree/segwit-cbf
+
+Golomb-Rice Coded sets: https://github.com/Roasbeef/btcutil/tree/gcs/gcs
+
+== Appendix A ==
+
+== Mathematical Background ==
+
+In the following sections, borrowing from techniques typically used in image
+and video processing, we describe our chosen encoding for the hash fingerprints
+of the items in our set of relevant items. In order to compress the items of
+the set in a lossy manner (creating data-structure capable of probabilistic set
+membership), we utilize Golomb-Rice codes to encode the ''delta'' between
+successive hash items within our set. This results in a very compact
+probabilistic set-membership structure.
+
+With a goal of building relevant initiation in the minds of the readers of this
+document, we first start from the bottom of the abstraction ladder, describing
+the fundamental components our set encoding relies on.
+
+
+=== Run-Length Encoding ===
+
+Run-Length Encoding (or RLE) is typically used in the video/image processing
+space to losslessly compresses images, or video frames. RLE works by ''omitting''
+the encoding of ''repeated'' values in a data stream. This achieves lossless
+compression as repeated items simply aren't transmitted. Instead, a value which
+represents the ''number of times'' a value repeats is transmitted.
+
+Typically RLE takes the form of encoding repeated values in a ''binary'' stream.
+A simple RLE scheme works as follows:
+* Encode the run length (number of occurrences) of 0's using k bits.
+** k acts as fixed length encoding for the length of a run.
+** This value acts as the maximum encodable run-length.
+* Transmission of runs of 1's is omitted.
+* Two 1's in a row are denoted by a zero-length run of zero.
+
+As an example, consider the following sequence of bits:
+
+{0}^14 1 {0}^9 11 {0}^20 1 {0}^30 11 {0}^11
+
+
+The RLE of the bit stream above would be:
+
+
+1110 1001 0000 1111 0101 1111 1111 0000 0000 1011
+
+
+RLE allows one to efficiently encode a data stream in a lossless manner. Due to
+the encoding of runs, RLE works best when encoding a set with a high degree of
+redundancy. A careful reader will notice that by using a fix-length encoding
+for the size of runs, efficiency is lost. Therefore, rather than using a
+fix-length encoding for the size of a run, we can instead use a ''variable''
+length encoding for the size of a run. This allows us to compress runs of a
+large size. To do so, we'll now turn to Golomb-Rice Coding.
+
+=== Golomb-Rice Coding ===
+
+RLE works well when encoding a data stream that has a high degree of redundancy.
+However, in our case due to the hashing of items within the compact filter,
+we'll be dealing with items that are ''uniformly distributed''. We can use this
+fact to leverage a more efficient encoding scheme based on the distribution of
+the length of a run. The [https://en.wikipedia.org/wiki/Geometric_distribution
+Geometric Distribution] represents the probabilities of a number of failures
+before the first success in a series of Bernoulli trials (yes/no experiments).
+If our values are i.i.d (independent, identically distributed) distributed of
+the run-length r can be represented as [6]:
+
+P(r = n) = p^n * (1-p)
+
+Intuitively, this calculates the probability of N zeroes (a run) followed by a
+single 1 (end of a run). Golomb coding takes advantage of this relationship to
+efficiently encode integers using a two-tuple. Given a group size of m one
+can encode an integer as:
+
+n = (q*m) + r
+ where q is (n / m)
+ and r is n % m
+
+
+[https://en.wikipedia.org/wiki/Golomb_coding Golomb Coding] encodes the two
+values (q and r for a given integer n as
+a two-tuple. The first value q is encoded using ''unary'', and the
+second value r is encoded using a fixed-length series of bits. If
+m = 2^k for some k then this encoding is a
+specialized sub-set of Golomb encoding known as Golomb-Rice encoding. In this
+case, r (the remainder) is the k
+least-significant-bits of n
+
+In this case "runs", can be seen as the number of multiples of m
+that divide into n If an encoded integer is close to the value of
+m then few bits (in unary) will be used to encode each value.
+
+To aid in understanding we provide the following examples of using Golomb-Rice
+encoding to code integers given m=5
+
+n = (q, r) = c
+0 = (0, 0) = 0 00
+1 = (0, 1) = 0 01
+2 = (0, 2) = 0 10
+3 = (0, 3) = 0 110
+4 = (0, 4) = 0 111
+5 = (1, 0) = 10 00
+6 = (1, 1) = 10 01
+7 = (1, 2) = 10 10
+8 = (1, 3) = 10 110
+9 = (1, 4) = 10 111
+10 = (2, 0) = 110 00
+
+
+The P value can also be interpreted as the parameter to our
+Geometric Distribution. Intuitively, to achieve a false positive rate of 1/32
+(1/2^5), in a series of queries of items which ''aren't'' in the set, we expect
+to receive a "NO" (false) 32 times, before getting a "YES" (true, our false
+positive). Once again, P MUST be a power of two.
+
+
+== Appendix B ==
+
+=== Alternatives ===
+
+A number of alternative set encodings were considered before Golomb-Rice coded
+sets were settled upon. In this appendix section, we'll list a few of the
+alternatives along with our rationale for not pursuing them.
+
+==== Cryptographic Accumulators ====
+
+Cryptographic accumulators
+[https://en.wikipedia.org/wiki/Accumulator_(cryptography)]are a
+cryptographic data structure that enables (amongst other operations) a one way
+membership test. One advantage of accumulators are that they are ''constant''
+size, independent on the number of elements inserted into the accumulator.
+However, current constructions of cryptographic accumulators require an initial
+trusted set up. Additionally, accumulators based on the Strong-RSA Assumption
+require mapping set items to prime representatives in the associated group
+which can be preemptively expensive.
+
+==== Matrix Based Probabilistic Set Datastructures ====
+
+There exist data structures based on matrix solving which are even more space
+efficient compared to bloom filters
+[https://arxiv.org/pdf/0804.1845.pdf]. We instead opted for our
+GCS-based filters as they have a much lower implementation complexity and are
+easier to understand.
+
+== Appendix C ==
+
+=== Test Vectors ===
+
+A set of test vectors using real blocks from Bitcoin's testnet3 can be found
+[https://github.com/Roasbeef/bips/tree/master/gcs_light_client here]. The
+vectors come in the form of CSV files, which for a given testnet height and
+block hash contain the: basic filter header, extended filter header, basic
+filter, and extended filter.
+
+
+== References ==
+
+
+
+== Copyright ==
+
+This document is licensed under the Creative Commons CC0 1.0 Universal lisence.
diff --git a/gcs_light_client/gcstestvectors/testnet-01.csv b/gcs_light_client/gcstestvectors/testnet-01.csv
new file mode 100644
index 0000000000..0315c9dbfa
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-01.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000280,,0903b6fce9fb6ca49a0bced6e82bc1e8626df614fe6021747a52b8db76f64b4c,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,0903b6fce9fb6ca49a0bced6e82bc1e8626df614fe6021747a52b8db76f64b4c,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000240,,41969f4fd1616110a2ea97cb135968a52c430beac0195038c2b0eecd262065aa,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,41969f4fd1616110a2ea97cb135968a52c430beac0195038c2b0eecd262065aa,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000240,,5fdead4446455bcfe96fed95d08e2decc023839f4322256535649485184240e0,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,5fdead4446455bcfe96fed95d08e2decc023839f4322256535649485184240e0,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,0000000220,,d619da6aa426aa72275f7327461a5d96e04d96e2c9c9bf095cf882d073302424,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,e884de6ddbcb024d36cf717a2f3d4b74961021707948c4f8896df1bad0c71838,9687617e8ac7ac0f25809f7d4bba7c427a673020e93d3bd03f151b25255a41f5,0000001691445b14e238fb80,0000000ff3d6885a0000,81200ab1d76fe61a87b05cd3845d9e515bcfd5e199820b0d051f122dfdc4a093,6a3639fc15dd84dad9aca54943a1a835e0cf1d39d28fdbdd6146a7f945fcbfee
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,73c8bbe030baab4054ee2fa3dd1d40ead25465954996548222f41c9c10fdf76c,1e926295bffe82a778645e3eb348b398b1791188c16dbcad4cceec9457f0de58,0000000140,,e9d6ea69248cc9108cf57dbdca75be8f72eb46203167bd5530fb613433db7024,7b54320563f6a60415c54baba7e924d21d9cd82f8b65ed55467ac6084af9974d
diff --git a/gcs_light_client/gcstestvectors/testnet-02.csv b/gcs_light_client/gcstestvectors/testnet-02.csv
new file mode 100644
index 0000000000..c63fd76606
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-02.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000280,,0903b6fce9fb6ca49a0bced6e82bc1e8626df614fe6021747a52b8db76f64b4c,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,0903b6fce9fb6ca49a0bced6e82bc1e8626df614fe6021747a52b8db76f64b4c,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000244,,04696a3e2b692717add6a845af4e722c4ec348e8b0998ba413d3bc1ed2d379b5,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,04696a3e2b692717add6a845af4e722c4ec348e8b0998ba413d3bc1ed2d379b5,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244,,b316db9fd611e572c00837e6f99076899d6e1e57ecc4ccd7a8b266ff225f5f57,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,b316db9fd611e572c00837e6f99076899d6e1e57ecc4ccd7a8b266ff225f5f57,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,0000000230,,9ff1a1d657337a190120af9e7e5df66bee765e0900ad24513fed9ef80cf78093,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,c3635b7b229bfe6610ebd802a202a6682393bb18f2d48fc6e9db7728e80118b4,826ac8df81e5aa114987c60579aae97b74e59f75e08cf9229d60b9d8519659b7,000000168928305d41438455af59,0000000ff1e950444d8000,96a06174ee9048d0a3612da885c79443b69fde1515ad9cfbe62dc35d2a2f7b91,7e51392a33b432294c762e23c59cb1aab03eaf62aaa18a5ebd6e85419d7792a2
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,423bd9547bd3606568e9013a80bd79482e4f43f13d5c2eb228940fb6e4045b67,984d1251c4f5eeeda8ec75fdee0ec3633e74ce97ca9987972aed7c0745907228,0000000140,,742b6f46e5d4ad7f6dfcf0eac29f4a90e25f09576565ac069cdf3f43945e8e7d,dfcf54ecc8f975299378e7f55ad03ee69a842aed1e79b2770a4c6662922f2d06
diff --git a/gcs_light_client/gcstestvectors/testnet-03.csv b/gcs_light_client/gcstestvectors/testnet-03.csv
new file mode 100644
index 0000000000..ce3aa320aa
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-03.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,000000028000,,3e27bc6a192d9c1a20eb8dadfa07c1721de2d624966142fcdc84d144d93ee078,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,3e27bc6a192d9c1a20eb8dadfa07c1721de2d624966142fcdc84d144d93ee078,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000251,,887ba00f6357a3e5657f30326d2588c43ee8f6ffeee9a8e16f9780f5ec32969d,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,887ba00f6357a3e5657f30326d2588c43ee8f6ffeee9a8e16f9780f5ec32969d,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000243,,13ceb5969e8da870ba543f40b1311ea4aa4386d941c7755d146bd9e115cec3dc,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,13ceb5969e8da870ba543f40b1311ea4aa4386d941c7755d146bd9e115cec3dc,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022800,,a675c3580791afbe5ebe080b41393d05a90a27029db1e8e2165cf1fa4f82f2f5,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,4b7488141accce0e1d6d664e99cfae9c563aff32eeaf8a18eca2015c210ae7b0,0ca96c47841c708a74ed05103a0dd977df05a608e2d57a67ae6d77e2fd13a9cf,00000016848cc54496ae661c148ecbe990,0000000ff0f4598a08cac00000,febe955b35882501b32197242202f4d90af06d59ab0b18fd54921b68570e3a61,a209ff98f4d8917a468dbac3f2311adc2a87b474266d731a8cea8253fb7c6954
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,82d930db535fc801d913cd134bd105bcbc2dd86e8ee18d60d6f8b4272a08fa49,49cb2e864db0659a4d12df6672b5f37a3540bfaeb824fbb9810ebd78d3d6526e,0000000150,,1ce7098b0a911d1c95ca489f689cc5c84caefc08063ab227a4653b05eff6d5fa,478fdba6260e9301dfd6f9f032976fbb843512204c1c3c497b18b3697df2e31c
diff --git a/gcs_light_client/gcstestvectors/testnet-04.csv b/gcs_light_client/gcstestvectors/testnet-04.csv
new file mode 100644
index 0000000000..62c9589210
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-04.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,000000028400,,975060bc21bdcff5ce8f7096e209063c27000def29131d8fe5adf8c2d1ebdf3c,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,975060bc21bdcff5ce8f7096e209063c27000def29131d8fe5adf8c2d1ebdf3c,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000250c0,,145708dbb8c81abf6ca973d9b2e055ec86345c0f9fee81e904c46e08de097423,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,145708dbb8c81abf6ca973d9b2e055ec86345c0f9fee81e904c46e08de097423,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000241c0,,c68aeacd13cacbac223831439cfccdbfb1de0c132463e18f5f710056221f9fd8,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,c68aeacd13cacbac223831439cfccdbfb1de0c132463e18f5f710056221f9fd8,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022c00,,ea17067366ad29aeb67d834f3b14d77d24e661ab06a9e896c0d20b9319d56aa2,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,bb427f6f10fa3ca32adb8fad552316271386ae49f118f31f7c6dfda61c3eec6c,2a6012a2ddff82f1ac2c29644b2b870b721ff46f29cd37a50946dd034bb3848c,000000168252984b11135b4e606f514d627d1900,0000000ff0fa13388e214960000000,74aadb62fd861d96d566bc2df183de586fc045201ed93fed6059e75e4e58129c,d9e8925a5e06ae2e4928eab543d938524f8888f2faafd4c5f807bb869794c464
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,0cef7b76d2af2a8cd11bd48314ba218b774ca24aa482f8ba13e5a09b40bfde3e,4a8454b4c2258f77075464b0484ff6f30fba3a95ec84979840a4427364c63d96,0000000150,,8c1618f6536a38e29fc7720238abb2e9a7ea12cf2e84a55478fd1e46ef665133,7bbf85e3281201164baa1a7d4caa5b55d4dd342f06654ddc7ad6e1b0b28d302a
diff --git a/gcs_light_client/gcstestvectors/testnet-05.csv b/gcs_light_client/gcstestvectors/testnet-05.csv
new file mode 100644
index 0000000000..eed72d9fe4
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-05.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,000000028400,,975060bc21bdcff5ce8f7096e209063c27000def29131d8fe5adf8c2d1ebdf3c,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,975060bc21bdcff5ce8f7096e209063c27000def29131d8fe5adf8c2d1ebdf3c,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025060,,064f291f61e984cebc2a6c9b172ea427b97b87f09e2d31ba41b2ffa6f02371a0,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,064f291f61e984cebc2a6c9b172ea427b97b87f09e2d31ba41b2ffa6f02371a0,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244d0,,822996930969f36a37ea48932f4b1285e02cb4dfb01f6f661a7c7c23197bb86e,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,822996930969f36a37ea48932f4b1285e02cb4dfb01f6f661a7c7c23197bb86e,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022e00,,cb629abb17b2c764ef7903b2fd0f4b315ba737fde8ac0cc55753625fbeaf8954,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,023965c6d3ea301b3a54d07ca50a7b6179e652f9824b143b7c77d188c91567e1,9c0d95fccb5192eabd7c503b9ed590aa39487008cbbbfb82f181376875d4cd5a,00000016812ca2c5583252acd1c601baa146594bcfc8,0000000ff0bd04a7867082c7b000000000,94ee3f76b50462e79dd8f702f24776618ac868981bbab23ab1acd86d937049e9,349aa3f49d3a40af6d6f54e2c2003dccb1cf4736c93329197ebd1473a203c0ad
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,4eb27203626200de3d7c459950d240a15075daa19524728dd2472ed7ca15bca7,4e95d2bdc479415bfb6b34aaebd4cea34db33551353a8b90153b2f5233743e80,0000000154,,6e26654aca786e34dceb39e88cc1b8cc6202b4c6d8782a168c6d5b2336cc7d31,fb71894329c5a3558677067531c9383f024b50e3184b2f0bb1b590f797ed086a
diff --git a/gcs_light_client/gcstestvectors/testnet-06.csv b/gcs_light_client/gcstestvectors/testnet-06.csv
new file mode 100644
index 0000000000..76cf5d6cb2
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-06.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,000000028402,,ae933ee6c296358669490aab986042b0c78108e73e4837ddefaa45fd450eea98,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,ae933ee6c296358669490aab986042b0c78108e73e4837ddefaa45fd450eea98,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025030,,0d374c60e30eb80243bd7c542ef3a0192a24986456448a440ce224dd2d6a93aa,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,0d374c60e30eb80243bd7c542ef3a0192a24986456448a440ce224dd2d6a93aa,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,000000024468,,f36978d87f1cb3b9e663ab2040eeecfc3f0330e6c229be344620162f254e7509,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,f36978d87f1cb3b9e663ab2040eeecfc3f0330e6c229be344620162f254e7509,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022d02,,c63412549b75f5eb81b982af23b0fab0818ff94e3ade5e10e56c89a2016620f2,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,04a53827a2a2c5fb2efdac41c3edf046f79d83b5e62ff34802c97e3bcc66cc93,a0f8df945b8fc0132442fbf29c40545662fbd9cdc654b5c168cacf214cf2f860,000000168195285852d0a492d634385c06ed395316297cf63c,0000000ff09e8524f053820547588000000000,ea586b1de389e208db1fa49a71db774aa30d8d6d48a66a56571043311d885e7e,fe2e8cdf1fc38e6c2b2d4fd0ca837d39867c1adea6c847fbb243f07ca6d4e8bf
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,04ea7c512b9a650b7d9db185d82ba9df5df8995462dc93f5a77dc9f5da32e900,ee285e0bf782e6f91119373a9987e7ed4d44e04731056018596df7dcb7a224b1,0000000156,,a117a27848b370ca68c9f32e91546e09c2d6acb54442783586c8ee62228c4a9c,f9a85cde342ba14599bba3b6387bce8fb25af74e066a958a4dbafdc354f649db
diff --git a/gcs_light_client/gcstestvectors/testnet-07.csv b/gcs_light_client/gcstestvectors/testnet-07.csv
new file mode 100644
index 0000000000..02095ad962
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-07.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,00000002840180,,7025330576f74793a1be89c857f868faf9c8144c20d26e290014a0057d1409f9,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,7025330576f74793a1be89c857f868faf9c8144c20d26e290014a0057d1409f9,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025019,,60ef6e0181e0176da69769f00c0acb521d70c9ca38167ecd135a75579e3f5820,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,60ef6e0181e0176da69769f00c0acb521d70c9ca38167ecd135a75579e3f5820,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,000000024434,,c7582e1cbe0a4f89c68f16bdccb321fe345eafa2adb8aee6892daa3877243196,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,c7582e1cbe0a4f89c68f16bdccb321fe345eafa2adb8aee6892daa3877243196,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022c8100,,a4e393e965a2156496f5ab5e95a56bf4550e2ce906d1ca7322bb7f953ac4e980,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,2e1f67e8e8c0f94d4aadddad9d818e95847cc81d3ea9e1f56918befcb910655c,6a3c63c1d76979c8fd1b9094ecb731453669c0fe3501bac60db995c1041256be,0000001681ca89cb45168249526b0d26e5c01bb279498d852fcef1f0,0000000ff08f43479e849c878ac72c200000000000,3ba796736113c2c97a89893419ff7dc9c1ed055e76cadfccd0a066932d977a09,d79a8c6531db9712535fe1a4b01292c58ee80cd4e84f7fa268bea948d41421e9
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,7fdb5862f8d238fd2756044aa84b4b58fd121c0d0217e48c8bac2ed7d3781d69,ca34ad4f962345e17729e0f60693609f0d3327b3e5db22ec79505142c612245d,0000000157,,d448d653694d9b1bc013ec92fce403aedfb9d2ba83338ea7bbe36974e498aa85,21469f5d53eb0f70ddec347a4176f218ee8ac1e10ef82157a955dee57f69d66f
diff --git a/gcs_light_client/gcstestvectors/testnet-08.csv b/gcs_light_client/gcstestvectors/testnet-08.csv
new file mode 100644
index 0000000000..15352cafe8
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-08.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,000000028400e0,,54197cfc85cf0a5cd2161d4f68c09d672d35d58cc35095859c3674bc5cf21a87,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,54197cfc85cf0a5cd2161d4f68c09d672d35d58cc35095859c3674bc5cf21a87,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,00000002508c40,,b9976fa89632ef03860f44d6302d465fb94137942ddf772c821a172a1f2c5edc,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,b9976fa89632ef03860f44d6302d465fb94137942ddf772c821a172a1f2c5edc,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,00000002449a00,,9d7c41a135bfe3e4f9bef896cae478da16192b9136b3079be6082bb3de031991,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,9d7c41a135bfe3e4f9bef896cae478da16192b9136b3079be6082bb3de031991,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022cc080,,c15296f0413e64839b437a98e598610385fde93f316d82e7e2ca28ad79e96c27,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,9b47db78b9d56155d980139301c7df892a705bcee8245971f149debe51faa044,e18d07d265d496685dd9e58b8d02f4fb6f006f491b21885c26a96ce92e96b084,0000001681a552696c4eb40912d2358348dc5c006ed4f148c361a5bceb8f80,0000000ff08fa191b3d048e41f14c71610000000000000,8c68f57f87cc6a16c1a4832773a65d9034a75083caa791c220b95a5bd27944d3,01972a55f7a2e0808244c33bfe5b96e372bd5efaa066e8afe3d6e151bd046d5a
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,f95eef20f832816a985e18e2269d9215af7102ba78ab752f489e43a441981fb3,c3f9c5b2620759a331e46c6512a625c88b6e81b4529e44894b01a18db97c6852,000000015700,,bd981c08ddd7f61a7c2f623cd242132ceacc54d91966655261a814d1e3587ca2,6ed33050e43b4641e346999db1128001b5e6e4750b9c3e81921f4d5c78f258ec
diff --git a/gcs_light_client/gcstestvectors/testnet-09.csv b/gcs_light_client/gcstestvectors/testnet-09.csv
new file mode 100644
index 0000000000..343cb7b5cc
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-09.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,00000002840070,,7f7e7d4d9df8885121db659c031d1bdec03646491c3add08b0f7826ad8a2484a,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,7f7e7d4d9df8885121db659c031d1bdec03646491c3add08b0f7826ad8a2484a,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,00000002508620,,f26746cd7040385325391c8b053d83a073467af62b0e2e3f8ea631bbba8da51f,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,f26746cd7040385325391c8b053d83a073467af62b0e2e3f8ea631bbba8da51f,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244cd00,,1f6f172300096d74c346c657106cd13894a226e6a5e90474b7c29aca5c8ceac2,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,1f6f172300096d74c346c657106cd13894a226e6a5e90474b7c29aca5c8ceac2,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce040,,0a9e670e4410d532dbd0fdd5a394acb8e46c2beab4efe78789eb60939a1988dc,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,f97fea66f95567e84939ba4ca763b66c629b5cea993fd237f759657bb84f2d9b,a38f261b9045f9b5b10ca5ee4c237ecec953e74cf0281cdd6f558315cf896e4c,000000168192a89b2d84d5a02425922ac0d29b65c001bb69e146615874b3ce9c7c,0000000ff08bd0c46a7a0487207e29470b0600000000000000,310369efd0d683dc03090ffe65722e88c9c7afa1a4c2724797ade6a2395e9e63,25136f27b9a769910dfe6246ece32a9410406aca5e8bd694e56ad818714727b4
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,25a7190515e1dfdcd84bcd1ea3f28781bf8768e4022de228e5344f23a3be0cc0,c8358572aba0f1e7e9a8c4d32aa78375f95c0f9d4b3b9afcfa4beb3fec4e385d,000000015740,,418bbb691108816606c04151e5218f405d06c3028292728e40920c995769443d,ef05bd75d95b9ef1646bb1c91a8fa2dfd50cc8c77e86cc0e15742c1ea6e4e9f6
diff --git a/gcs_light_client/gcstestvectors/testnet-10.csv b/gcs_light_client/gcstestvectors/testnet-10.csv
new file mode 100644
index 0000000000..b3257695d6
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-10.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,00000002841036,,3871e38104e98e9f931b1215708f5e9296973bd88ea31857fc4d360cf4bd8df9,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,3871e38104e98e9f931b1215708f5e9296973bd88ea31857fc4d360cf4bd8df9,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,00000002508314,,2fe340fc9a535dbefc78ba5c639d04f32b47aeb337b9de84fa6286485c591bdb,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,2fe340fc9a535dbefc78ba5c639d04f32b47aeb337b9de84fa6286485c591bdb,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244e680,,0d0737031512c54e1f3e1cae478159bcc8a3306336d77a9c0e4521acf62f1351,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,0d0737031512c54e1f3e1cae478159bcc8a3306336d77a9c0e4521acf62f1351,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022cf020,,245e4f28742c26ff0591b0c312e6d520d5a37bd9c1e332df20952312d04334af,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,251a28699f86aaba1d8fbc4bb3e9641bd5ac22303533cdd49f1339f16122b522,d8a37969686b9bc909938fced920b915177d428ad10e9ac52ea66e53083af0e2,0000001681895526a5b44d2cf0924b12256034a36c5c0006ed53c14630b61a967ce8e3e4,0000000ff089e8651a4f38483921f851c7058300000000000000,583ddf42bf5fef2235b56dd2c8311031d44eea0a9af21b76182b57324d276726,c3cee90477ef835d4727a466c2c28ea198efca35efe7a9194a8bdaeadc2a5539
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,5ecfe042671964dcc0d3d69a1e2fe1c09007d374f21d2ec04599a4eb3808b30a,23d0d0e373def9f0dc2698c35326f097bd7951c67f381f6b8ab6172a24d686ec,000000015740,,bde877687873b1b96a03b94446f23df1ce28aedb2e5b9f486e16aa8f29060339,ce011ca6f14a2ec30b2c98b2dbe001341199a58657748ffbb245b5bd8b304a17
diff --git a/gcs_light_client/gcstestvectors/testnet-11.csv b/gcs_light_client/gcstestvectors/testnet-11.csv
new file mode 100644
index 0000000000..7b09e34f1a
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-11.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284101b00,,bf9c39d482f8f698ad50cb63ad84a7521a1eefbb932b1d594ba7e3bd4c99bf0d,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,bf9c39d482f8f698ad50cb63ad84a7521a1eefbb932b1d594ba7e3bd4c99bf0d,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,00000002509189,,ee44557d8057ac9c59ba9b5c32f1e235a181b5d8355aa050b925a614b8ceacc5,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,ee44557d8057ac9c59ba9b5c32f1e235a181b5d8355aa050b925a614b8ceacc5,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244e341,,a21ed2b1b2535237c348ee91dfd515ccc0b8d40c053aae37a9cbe51e912078ac,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,a21ed2b1b2535237c348ee91dfd515ccc0b8d40c053aae37a9cbe51e912078ac,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce81000,,26e97256fe4433c6ff872e765bb216c1a72b9a4f9f3b798c1d2ca980d03957ab,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,4198ca71e23fd681223b9d8172c63cf045c36b7f0cf9682c92e7327051f173c0,009e3c63ba93a9dcb09061f67f53a00647cc9ab7959cb2bc3fa51830ecf7168b,000000168184aac9a8b644d167824c95d222b02d286d85be001bb5a7814618558652cfce871f30,0000000ff088f4334689e70481c907d8a3c6fec18000000000000000,6ae2af4bcc39ad2595beef96ffe00b098933e8d8d9a52920f706cbf9bc4ea0d5,658d84cf249b2b08d056a04fb2a67bb6aaf41c1f0e114dff7d67e45497cf0984
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,5b8957cffab7e4d930885e124f672b81b6aa674abe757df4d60dc5dac189fd03,3f78984514e45b737bc7815c49c470de1db919bf0a8d7833599cbefb5349d0fe,000000015750,,a536012e78b9f674036d3c5803afde4c06bcdd3ee80fa115005f5fa257ac7c88,9f4c9bb615e2192449e3c9569879f37a9e9d1f63fe8ff62324c1052081ba9e12
diff --git a/gcs_light_client/gcstestvectors/testnet-12.csv b/gcs_light_client/gcstestvectors/testnet-12.csv
new file mode 100644
index 0000000000..6964f20c43
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-12.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284100da0,,d1e605eebd27fc0b5069bb67c513050e67146ef4a2370fced6db4ed99454981e,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,d1e605eebd27fc0b5069bb67c513050e67146ef4a2370fced6db4ed99454981e,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025090c4c0,,40c64934fed70c4eeaee60552e100097492fa462e18977cb2301a9f9b5a23189,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,40c64934fed70c4eeaee60552e100097492fa462e18977cb2301a9f9b5a23189,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244e9a080,,7b62997c09b75ba6353aa5c3087229361d663945358def1695b581be0c7cb4fa,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,7b62997c09b75ba6353aa5c3087229361d663945358def1695b581be0c7cb4fa,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce40800,,e9c682e7f4b8fc142ccfcd7b4a8ccf6a4467c730f73db6c3adf94d2e33815864,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,ee2abfc388d0a707f31469f5c8294984d396d86be995cd6c8226a2267d359197,46eb164f165a55b9ebfba1e09cf6b50d87a7e109ca8597b26417f4c54dba5075,00000016818655526a16cc4d0b3c09312b9221580b4a4dae5be0006ed74f01460c296192597ce878f980,0000000ff0887a19d1a13cd8484e461f6147c6fb60c80000000000000000,4b2d4b943d86278099330346dbff9f4c5ff5f900527b9b171b1d4ba787e0c8dd,38db73314e85f969c188c9e7c3729aed71bd508b9b3bcb4b96e50437e92203bc
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,04099da99bce53fe321853c02736714a1c7958c118bd3e577fea27b8a35cd62b,6f005a643aa5e910aa0848479c408d3631187b0ced377a4bd0537b647a437e51,000000015758,,f454cf1be32e38fc703e0d74e72cc8a6e119fdd4e583e58bb52b79c5d6828a9a,99c171c8dafc91244771f73ba54a15a6805c2803e07f312e0c3e18ef995074f5
diff --git a/gcs_light_client/gcstestvectors/testnet-13.csv b/gcs_light_client/gcstestvectors/testnet-13.csv
new file mode 100644
index 0000000000..1e5aa30ccf
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-13.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,00000002841206d0,,5814a77d79a0b0ca739a944609cfc23262e4e84b7e18b2c62108b4ac090d5cd3,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,5814a77d79a0b0ca739a944609cfc23262e4e84b7e18b2c62108b4ac090d5cd3,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000250906260,,c4356d0cb110a988eb05bdf2d45792fc2179933964ef86bcdaa0dbb03ad7bfe1,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,c4356d0cb110a988eb05bdf2d45792fc2179933964ef86bcdaa0dbb03ad7bfe1,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ecd040,,d003e220ae423aa3807245687d10dbcd91cc6118e2bdbb68f9f178c08edb4c90,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,d003e220ae423aa3807245687d10dbcd91cc6118e2bdbb68f9f178c08edb4c90,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce603f8,,4dfcd25ba105cff9b9e2530ea354b5dbfaae18c9c570840042094ee5cf1de217,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,87b9e61b6684d8c0f9a2a5d088ce80054929e0ee573c64039a2158917d364c13,5df880608af89509d43958a21948dc4e8a5dd6b996b67f4bee7b834665691147,0000001681852aac9a72d9c4d059e024c2571220ac04d291b5a5be8001bb5a9e0146261458644b2bce86c7cc,0000000ff0887d0cd468279b848272387d828f46f9b064000000000000000000,1803b2e949d7fa409e56c8bdce578dd18cbc70475cf739971e23144905e5c983,38ead9c2503bdfad98d965c5a5cf3a9e4393073f2561c9983b7e0b934c2d1410
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,da9e9a040cb0a92ce848561d8784d4492700b9c81e16c044add48c523f477b00,f001b754b360c77f232dd97e3e899c92016a42847196eb24099c460914ac5e15,000000015758,,6437a695969bf6d095ff6e871093ddd54d1110870ef56cfc23f37c66ce3dcf24,898f612673846b9655166056f6270e634de0a7ecfa9f82a41921e507c4ede4a2
diff --git a/gcs_light_client/gcstestvectors/testnet-14.csv b/gcs_light_client/gcstestvectors/testnet-14.csv
new file mode 100644
index 0000000000..13641afaed
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-14.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284130368,,61be45b576dd455adc748863440ae0783b6a5011e97c17ee5638cc8cf3dfe4a7,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,61be45b576dd455adc748863440ae0783b6a5011e97c17ee5638cc8cf3dfe4a7,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000250903130,,bcad76434f7b16e5c6ad75555448d0e925271e49b77259417cf92b1b42ed9957,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,bcad76434f7b16e5c6ad75555448d0e925271e49b77259417cf92b1b42ed9957,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee681c,,cf3dc2418dda23b9da3bda48ed584e30eebcd324e498dd5c438e9363ce378b02,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,cf3dc2418dda23b9da3bda48ed584e30eebcd324e498dd5c438e9363ce378b02,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce501fe,,d335bfbc79516c3f413d778261d159474692072286deb99786eb6f0777dc4baf,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,2e0b0b9037b79fa6019d7ad98a6b93fc6fcc8e5ee500f43e824b4b4a2b2d3657,292c86a125d217ae440395a3557a595093523a36b31acfa34d3a40b3ea140747,0000001681849557269c5b384d02cf0092e4ae52205601b4a436b45be80006ed693c0946230a1618e9653ce8663e60,0000000ff0885e866d19fcf370482391c1f6051e46f9d83180000000000000000000,f612308f2195aa4bd892a8aec4ceaf49da17a2a43fde63aebcc3b8ac748887fa,4570943b3fd4d23197956dd67e58d41d208412da2b6af7721fec422252bfa668
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,37da2d7e6a9651e2fa775a4bb83cfc0b437586cf7fb5cda27895fc9f453b205d,6d1a2a20fc29c1d26e9e9ded2f30efcd3974d9e42441f72d01efd9d3e40c80b5,000000015758,,3bd257ab08fbba6588cb2d3e6b2fc3a523e87cc1ce26e9ceecf8a2515ab80e9b,77deb0bf5135ffff96fa18ab15890e48dcb2d50b9cf44e211055a3386ec6aadc
diff --git a/gcs_light_client/gcstestvectors/testnet-15.csv b/gcs_light_client/gcstestvectors/testnet-15.csv
new file mode 100644
index 0000000000..4149712986
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-15.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,00000002841301b480,,ed540bcef5864a6f6892db70ddbde6b083184d9ec5e157845bc09d6638c6b8ce,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,ed540bcef5864a6f6892db70ddbde6b083184d9ec5e157845bc09d6638c6b8ce,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000250911898,,096e810aa376925e4931851bca2d16fb40fc3db4b68e22a798ac5cd4745162b5,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,096e810aa376925e4931851bca2d16fb40fc3db4b68e22a798ac5cd4745162b5,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee340e,,811fcb651f44dbdab1630a5c55e79ebcae1fc62f1d110ce77a5d098d13f31253,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,811fcb651f44dbdab1630a5c55e79ebcae1fc62f1d110ce77a5d098d13f31253,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce480ff80,,e8ca88f13414e5f7905c3fb46f6b0db039b3756f7e680906786109d05c326925,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,9a76b8491ca32bd6c661afa8a1e53d7e58972ab3ae9f57d3520105313ee09fb0,c5035ba5eba00731f57d72dcdfe694a282a02966fc3e3dcea3d9a6b313bdfa1f,0000001681844aabc9a6cb6704d01678424b895c52206b00cd2906d665be80001bb5a278114629850586392ca3ce85f1f300,0000000ff0885f4336467d9e6e84819c8e87d78a3c46f9ec18c000000000000000000000,e59ad6d7475730a8fc5dde5ee70c4fc85bce0097892c131b4fd7f6fb01503b64,74c07983a9f575a51e6632bc67bda516b22317723482c3d50c89cab2f1cc1015
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,034d0ace4003d91f423d9881c2dfc7ef6f71e16ba6b5310a3c9be03488217faa,dfa986580ede34621d86120c144b81771136e72d6100941c9448dcf3e9dffed8,000000015758,,9dcd64791a66f04797e7dd9ba7c6bcb8a862676848a1917f300873912d8a1e04,cfb8fbcf1d95520d38624038708dbe71ee73a1f2be969a16b56c81c5b30d8192
diff --git a/gcs_light_client/gcstestvectors/testnet-16.csv b/gcs_light_client/gcstestvectors/testnet-16.csv
new file mode 100644
index 0000000000..9986f9ec5d
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-16.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,00000002841340da40,,e649fd01c34cb8b33fb84ae5e0fa09d287f988ac06c9a983ba83dc23e115848e,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,e649fd01c34cb8b33fb84ae5e0fa09d287f988ac06c9a983ba83dc23e115848e,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000250910c4c40,,47e65d122ade3f675cc1114b43abacb0e65b79ff51371bc1460c5350be9a8aff,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,47e65d122ade3f675cc1114b43abacb0e65b79ff51371bc1460c5350be9a8aff,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee1a0700,,a5e65018c0f3fc39acc0fb52c051ee3c31e1d6b11d5952b49b6f86f340ccf915,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,a5e65018c0f3fc39acc0fb52c051ee3c31e1d6b11d5952b49b6f86f340ccf915,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4c07fa0,,3fd1cc9a204dfa1947f8c843abf240e77860ebc836283f6cc1553a6ac163a148,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,44de3258df6cd07ec5fa4b57786733986782ad4db674bec1067435fac8d85093,ebbc5b97b3087539c93c29bcc536ea19e9d2b00ae2b6e83a5fe4a5ab814e8165,0000001681842555e269b16ce04d00b3c3092e12b8522055806b4a3cdacc5be900006ed684f0214624c281618e25947ce85b8f9800,0000000ff0885fa19b119f53cdc8481ce4721f5e1478c6f9b60c680000000000000000000000,fcb9f4937366a2ac34974cdf72da6fa772126068747440cf1d0203db6f129400,4301929fd1526b11f3b417b8a7b66c5301c4ca62a773f1745d8173abcc47a5f3
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,3f3d7f52d766f2c090fd655f965515ee576fd8c98e143cc33d0389b23bcfcd2d,7d2156ab63cac6c6492f61a0ac541e737e6315a1467060069af02fbc874a028c,00000001575880,,5da60747eddd212f4de1ffde1460f9ff8e123c3a81647e2282b3dc6fbaea72c3,73cf47e850655c875bee21974aec87af1980de7969666d91e67d414ec5e2af7c
diff --git a/gcs_light_client/gcstestvectors/testnet-17.csv b/gcs_light_client/gcstestvectors/testnet-17.csv
new file mode 100644
index 0000000000..56758acac9
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-17.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,000000028413406d20,,10cc3f256f7bcb4f405dca9e59a4374f0f86ceff5925404b42cd77fd4a7e9686,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,10cc3f256f7bcb4f405dca9e59a4374f0f86ceff5925404b42cd77fd4a7e9686,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025091062630,,e90d73ecfeb8bd1d2bda96a6b0ef38dc0ee3bd076455eb677d088b761de1a2b0,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,e90d73ecfeb8bd1d2bda96a6b0ef38dc0ee3bd076455eb677d088b761de1a2b0,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee4d0380,,638f247f33863ec9834a2207f0eb39db09cc98d58196d42e6297058b6d534358,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,638f247f33863ec9834a2207f0eb39db09cc98d58196d42e6297058b6d534358,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4a03fd0,,212c3f272d25ed302a606e884a03e160980564a526da87c04690443223edfaa8,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,f043acc7a6b3c373b6fb6aecefdc65781c2ee9d5ef9a18b2095ad76be97516ac,468472844e0b24d025167d53353dab4390471cedc153f423b7955eca71e52522,00000016818412aaf49a6b2d9c04d0059e1824b82570d2204ac034d28f1b5985be900001bb5a09e03946246140d86374b28fce85ac7cbf,0000000ff0885fd0cd8467d279b90481c723907d7828f0c6f9bb0634000000000000000000000000,4106613fd9e43052b73f21c2f9c25416c1c6aaad101ff3a3027271ae86966f25,f55237481302bffee0b1a5ef5aa6e377c7bd4482a79f51586e6a45654d9165b7
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,1f60a69135b389662e99bf8fe2fcfbde55446cf9c22c92d901a3ded82d8656ba,1cbd9c6922b39324046d2bc7cb512d5e7a9fbed06f501cb37a895973dffdc3bb,00000001575880,,7a2a83ab75559874830420f355856b89d358800889e8d03c2f3ff698e51c0e22,9e38a37d4193e65e7e6951df239611b24c416a3d85dbac46d235ecb6d403a31d
diff --git a/gcs_light_client/gcstestvectors/testnet-18.csv b/gcs_light_client/gcstestvectors/testnet-18.csv
new file mode 100644
index 0000000000..35c08b9d8a
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-18.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,000000028413403690,,3d0acb674b306b41646c74c8feff1f804dc45a6d8b1e8595b5e868bdfeba30a7,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,3d0acb674b306b41646c74c8feff1f804dc45a6d8b1e8595b5e868bdfeba30a7,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025091031318,,6a7da6d37c8965418be8593cf7f92b7985c5d7e315628cd83b884ba742645286,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,6a7da6d37c8965418be8593cf7f92b7985c5d7e315628cd83b884ba742645286,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee6681bc,,a1a2e2ea66a8424abd4f73ec4959a2ff585db67562618eb59a89ca08d6ce83db,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,a1a2e2ea66a8424abd4f73ec4959a2ff585db67562618eb59a89ca08d6ce83db,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b01fe8,,f994e41f580e68c282f1d4717adab5ba44d6eaec5f782ec3749bf7c2cbfff062,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,3088a436dc79f0143b28046e1bf010134e08db48a2fd082813478109cac0e511,424b61a574af30698de40037e900043c0d2ab483e806e3869a27136e23aee4da,00000016818409557b269aa5b3844d002cf0c092e04ae1922045601a34a3b36b325be8c00006ed6813c071462430a05618de9651bce85a63e5f8,0000000ff0885de866c519f44f3720481c391c81f5e051e0c6f9bd8319800000000000000000000000,0281d24767ddeed0efbff0fc6df9648cef779fede6c686422cbaf55c4b0fe4aa,9fd2cc2eab1c70c9f7a76e6bead753d45ec8fee0abffed025cf00b5bec79ca8e
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,b8f895974d1a684a99e6e9305cf13d9f159c04bf09ec49df5f904637fadf1621,0e3d276ea927cf0d8436527c3d53a4304c152f2abcc9f6f0e0c668268f098518,000000015758a0,,533fc1c7e94164a0ab36d4ed0742563d253950131e247c5c9e53399e6beaf0eb,a142f3a814713430507207b84461e8ea9bdfb340718ef9aef2361eb907455f0b
diff --git a/gcs_light_client/gcstestvectors/testnet-19.csv b/gcs_light_client/gcstestvectors/testnet-19.csv
new file mode 100644
index 0000000000..c5e81f284f
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-19.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,000000028413481b4800,,e42499f352bc1d60907312d16ff1247d5ed03b5f7f1e7a7c7491b912d6a3017a,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,e42499f352bc1d60907312d16ff1247d5ed03b5f7f1e7a7c7491b912d6a3017a,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,00000002509111898c,,1323aaf2d8591280d587b4f66bbd11f737159f852858f6717d463d7aa691e8ca,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,1323aaf2d8591280d587b4f66bbd11f737159f852858f6717d463d7aa691e8ca,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7340dd,,56a8dce245f6e916830ef970ef8ea28a6d618605759548a55d947f3ce4f38f58,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,56a8dce245f6e916830ef970ef8ea28a6d618605759548a55d947f3ce4f38f58,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b80ff400,,c3bb19c7df0768e5c5e1b0044309d651266a0bd752c40d44f5658b8efbc087eb,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,abf00cd9428eeaf51fd79c70f04e597828eebf4af8c4701528d418283e4e0ee9,9f10f74eea23ce8e912f7159a63fad9feb471792e890ef79c1f1af2617f3e1ac,0000001681840caabd49a6acb67044d0016786024b8095c3122046b00ced28ee6d6625be8e00001bb5a02780e14623985025863792ca33ce85a31f2fc0,0000000ff0885cf43363467cf9e6e48481b9c8e487d778a3c146f9bec18ca0000000000000000000000000,3569fe258afa1806992761a7fc0701b7f8696fc4bf4a1e48af73c1795551efd8,f3d221310314eb0eef9565b4c0e386b33c33c468f849476c4833d31a3764eb72
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,2e2051f16b62eefe25b85b7a717ccab983a1224e961d12bfb4ae4bc59c156031,e9a4c89342c2bb4ee82de6cb6e0093d11f78e6366419a7625595f4f9abf18b8d,000000015758b0,,82c3de6c70c1d2ebc1cc92688973f03ccdfefba104630bbdb8222adfb30165b1,80e83c5e4b6a18fca6cf9e2e4549987554815fc0f2b74ccd0a36424bb315a486
diff --git a/gcs_light_client/gcstestvectors/testnet-20.csv b/gcs_light_client/gcstestvectors/testnet-20.csv
new file mode 100644
index 0000000000..0c43b7bb25
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-20.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134c0da400,,646e9776a9c271aba9f92c24836a58fb23dfd3a89c03e8e953008c662a1e28ea,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,646e9776a9c271aba9f92c24836a58fb23dfd3a89c03e8e953008c662a1e28ea,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,00000002509110c4c600,,2fb1ea905f3860f415d1315ffd80beebac319479bb3969782b79b51065f6229a,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,2fb1ea905f3860f415d1315ffd80beebac319479bb3969782b79b51065f6229a,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee79a06e40,,3f362605dbed46479c8aa136cc2bab23644931180c80b5fe9041f2a80381d156,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,3f362605dbed46479c8aa136cc2bab23644931180c80b5fe9041f2a80381d156,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b407fa00,,db38d5899f532858f0feb0705c959fe362084371168cf85735873b1d82220742,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,064abf504f7fb7e0e13f4d1a158b66e8da889b3dc44bc7fb0b47cadcfc0a0ee3,14a46caae43a6d10af7056d7e34d376662588fe38e6b74b684c6f249bdb0f475,0000001681840e555ea269aa96ce084d000b3c30092e092b8612204558066b4a3b8dacc45be8e000006ed6814f01c146234c2813618dda59467ce85a18f97e00,0000000ff0885c7a19b1d19f3d3cdc90481b4e47241f5de14782c6f9bd60c64800000000000000000000000000,7f751ea42f20e3630ebd19ba29372850d97e7d7aa48ad8bc4326713c4e967c5c,bb15d5647567607d87d4b54ed01a673fedd95d7e4f44194c231bbb5494b1a0b4
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,ba5f1f7c78465a4f33626d2c70d85766626037e4016e7422b337c4a88a482ca5,f25126406779dc834d9abab728a24ad90687f38fb6dc0f6e2554a2c24a3ea410,000000015758b0,,e5dc5e74f8a8c8dc2288e066330441b9b6624d40468e01678d37f527a5fc7e1c,2c54d9499c124bf493fd410a5051099f135cc547b0c4a2f63c78a417c7f9dc1f
diff --git a/gcs_light_client/gcstestvectors/testnet-21.csv b/gcs_light_client/gcstestvectors/testnet-21.csv
new file mode 100644
index 0000000000..86bbad4f74
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-21.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e06d1f8,,5035121c2b8d2ad78c769393d01c67caeb4b95af5ad26afb07ce738d0b22d2dd,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,5035121c2b8d2ad78c769393d01c67caeb4b95af5ad26afb07ce738d0b22d2dd,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,00000002509110626310,,f09544da82d1aa21d406319b208f65f30e9496d6dd9d82fc8452d148e8928308,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,f09544da82d1aa21d406319b208f65f30e9496d6dd9d82fc8452d148e8928308,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7cd03720,,3f774021d0d88dc7b936995001a9285fc2058544b4cecde4227f41478b812fb2,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,3f774021d0d88dc7b936995001a9285fc2058544b4cecde4227f41478b812fb2,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b603fcf8,,39f3648c9aa56e8249fe95201eab056c1794088a4757c3df1439de55255caadf,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,83197fb3b05fff166b36ba9fdcca7d133e9ff8f5d040fe1ff03f86804f30102b,78ee39bf548ec9249f0c5359bd4d2e9502e7baadf3ffc49bcd5803da67d01d4b,0000001681840d2aaf549a6aa2d9c104cfff59e18424b812570c122045ac0334d28ed9b598a5be8d800001bb5a049e038946232614095863774b28cbce859fc7cbf1,0000000ff0885c7d0cd8e467cee79b920481b47239207d77a28f0546f9bbb063260000000000000000000000000000,b4e069ca300e4c620ace66cdd9cbaf992239a2031f624039887d39cca01e602f,c7537ddb31ec3390d885ef8fba0f5a4a3eecf717f1d77cfb7ad35da2ebc6f829
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,5cdbdbc13fe5af1d453f3db149a7b74c5bbdb7811e9da5ed9c64c7aba449cbde,6f42c64b23746f91d7b9615c48017569a4e1b379cafeadb5f163ff76ced2f361,000000015758b0,,b3c5d575db65d06b6b462a4b7faadbf0e9317d4a39fc84fd9737e088f42e8530,60a605948920fae319b60389208ae9fb49f8d19764bb258fcc438771c89da370
diff --git a/gcs_light_client/gcstestvectors/testnet-22.csv b/gcs_light_client/gcstestvectors/testnet-22.csv
new file mode 100644
index 0000000000..6bd142ab5a
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-22.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e0368fe,,0c44d14cf1e80e0b0e0ac93c8d8541890121c5854521e3bb87ceddf932b37aba,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,0c44d14cf1e80e0b0e0ac93c8d8541890121c5854521e3bb87ceddf932b37aba,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,00000002509112313188,,6adf2258c94586e3add1deeeaca503d54ee3c5debdc8f49b60e80d83ea87c027,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,6adf2258c94586e3add1deeeaca503d54ee3c5debdc8f49b60e80d83ea87c027,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7e681b90,,8482e7fdffd0af8806e22f20d4712fc14a2f4c823ba479f299742702f166d866,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,8482e7fdffd0af8806e22f20d4712fc14a2f4c823ba479f299742702f166d866,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b701fe7a,,149dfa8038b6d36c1ff6a81fb532175110bf8774505290825ca86de6767ff074,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,93b4f3afa8fab71b9de118bb1aa4aee344b06b6b7ab1da9f5ab49633a551dce4,96018ce1419eeeb5282792b0a3aa5edf5702da0cc52fb3f4fac14ed0880e5962,0000001681840c9557aa269aa85b38204cfffacf0c1092e044ae18522044d6019a34a3b736b3145be8d4000006ed68153c07114623130a04b618ddc965193ce859ee3e5f88,0000000ff0885c5e866c7519f3b4f37238481b5391c8e1f5de851e0ac6f9bb583192800000000000000000000000000000,fc580f22830f314064d9f4790b47abf48f2ca5d23dc354d60aae1877c15e9975,32481556983c5a486d136cb65a8f58daf6a778ce54e660bd1e2ba4ba201bb5d5
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,fc06b3e215133b4434c1e60514a7b009645c9525b5b0fc4b8386474cc24d9126,5d7ae760f563a3388347c920d25d619adcc306e031e19f4e881886fb6a4a0924,000000015758b2,,c91ea860294929c782d84eb7af5372ddec4771d4ae0e39f13972a17b58f899b2,52c1ef2e71dfe5ab4620e64b02b5f61e2061dc043428739eb7b85c0872603a5a
diff --git a/gcs_light_client/gcstestvectors/testnet-23.csv b/gcs_light_client/gcstestvectors/testnet-23.csv
new file mode 100644
index 0000000000..b769343680
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-23.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e01b47f00,,436f42d4defd6cd335e28c8f3e75d3e746d05c9269c605d8863cbb5d67f93fe9,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,436f42d4defd6cd335e28c8f3e75d3e746d05c9269c605d8863cbb5d67f93fe9,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025091131898c3,,ca8bc82ba97c2b0dfaa27fcea0c8de33866b36a44e61e8df390c3d101a7995f3,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,ca8bc82ba97c2b0dfaa27fcea0c8de33866b36a44e61e8df390c3d101a7995f3,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7e340dc8,,d82c3ef38973b1729b53ba9b6e672d20b245ce9e51e49700362eb4f284c559c2,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,d82c3ef38973b1729b53ba9b6e672d20b245ce9e51e49700362eb4f284c559c2,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b680ff3d00,,f35d43ca72a1cfc871fe0842e982777b2128bb9d6e184331d9e8403b51c34370,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,0cbcaed0cb9b5c628c1205791514b565aa0c162921f3fa5348bd950bc7646d10,504aeea678a6d42eb8832ffd4e2efcc07554fcb8b947a53c51bf002be4254ff9,0000001681840ccaabd509a6a9cb670444cfff967860824b81095c30522044ab00cd0d28ede6d66285be8d2000001bb5a052780e294623118502558637712ca31fce859ef1f2fc40,0000000ff0885c4f43363a467cec9e6e478481b49c8e4707d77a8a3c1546f9baec18c940000000000000000000000000000000,69cc2ebd8fa75695808ce80fb328fe73f1deedbe128574447c3184b813f4e153,126c2ae07bddf48d04644d08653e54d19a12a12980a516b25d62910d3b709c8c
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,9df998515208680b4f24f7008326623b2e857b66b13065531dee9e99239d2853,dd9f2a870d4c21cac01e95f82179939ef767e818ba3b8766e90ba9d6131eebbe,000000015758b2,,d86a7af9eb37088a0f44b419958acb5a291715befb186ac159e5cb8fe7c1dadc,d7a1c73aa76b3fcace11f51deaa0649584c4f53dae0443a5d494a1cfba90bc73
diff --git a/gcs_light_client/gcstestvectors/testnet-24.csv b/gcs_light_client/gcstestvectors/testnet-24.csv
new file mode 100644
index 0000000000..8c982184fe
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-24.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e00da3f80,,a590f5bedcebe9e093ed7e1959e29bc0008fd576af671fab550b66fc77d8b41b,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,a590f5bedcebe9e093ed7e1959e29bc0008fd576af671fab550b66fc77d8b41b,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025091130c4c6180,,d59652cf77e0d3d285a1a4be6ef6fcb37d9f277e54d96e89d15404aa0d238e25,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,d59652cf77e0d3d285a1a4be6ef6fcb37d9f277e54d96e89d15404aa0d238e25,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7e9a06e3c0,,0ec7b2d01bb33e6f541b55fd3b81ae7387a2732fcc9fe7c0566b038984f99f5a,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,0ec7b2d01bb33e6f541b55fd3b81ae7387a2732fcc9fe7c0566b038984f99f5a,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b6c07f9e60,,a7660cb1fcca413a9c364432c4de9d3185c223b5f12221fb5d631569f022dfb2,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,7eafb579db245f82e74966f8cf5a94de6f1b27a8359902b8816b351d8f735ea9,51b818aa4fbb155401259d85758802a08ea811e49e884370a93331463f1c0ef4,0000001681840ca555ea8269aa796ce0884cfff8b3c303092e0412b8609220449580668b4a3b78dacc4e5be8d30000006ed68144f01c49462310c28129618ddc259463bce859ef8f97e200,0000000ff0885c47a19b1d119f3b13cdc8f8481b48e472361f5deb14782a46f9bab60c64a800000000000000000000000000000000,e563f9d7719edb8ef71891fd5bca75597543a8e9196e9efe9c94107760122b92,c10536c7fb7188aead122fc2664d3c3261f9216f15a9e2d609093cc8278fdf4f
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,ad4626972ac1d95f314e0c8ab9af570df547a62f1ab22a14ba7289f9fdbca152,6acfa5c528ab7ac7fe92f2af7a65ef5e3725a2caaefc69483dae12105d6586de,000000015758b200,,113227446ea55f669fb02e9f5c3a18a8e9bbb74f685f137334c68648347c97c7,c6bd59adb65fd6b07b156b1ca88a08f949e0c0840f8292078351fad7f1772c68
diff --git a/gcs_light_client/gcstestvectors/testnet-25.csv b/gcs_light_client/gcstestvectors/testnet-25.csv
new file mode 100644
index 0000000000..89209e08e7
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-25.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e006d1fc8,,f0b663866a71ba2ae1e144f09c68f8eeaf8b43108e6f060d2220d76be6c3382d,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,f0b663866a71ba2ae1e144f09c68f8eeaf8b43108e6f060d2220d76be6c3382d,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,00000002509113062630c0,,5ac2028485d5b5273ad9265cbb44c77e2c66deafd85f38192d72651354ecf65c,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,5ac2028485d5b5273ad9265cbb44c77e2c66deafd85f38192d72651354ecf65c,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7ecd0371d0,,5e447c9f548f8ed95c6e4b0fd2ef964ddb8eca0f4c08a13c5e27bd799fac52e8,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,5e447c9f548f8ed95c6e4b0fd2ef964ddb8eca0f4c08a13c5e27bd799fac52e8,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b6a03fcf30,,749387d260598fb7d44fb2eea1ab9edebf1144a13fe67c6ab048c359b1a03395,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,6bd722e8e00a158b96a94a5dddbcd2ebdbe249dc135575cb59ed2807e27f1e3e,a1d7956963e6af3b85fcddabbaee3f4aaf41e992e9ba0cecc53c5319883a8dcd,0000001681840cb2aaf53c9a6a9e2d9c1144cfff859e181824b8102570c11220447ac03346d28ede1b5989a5be8d38000001bb5a0509e0389146230e614094d8637704b28c73ce859eec7cbf0f,0000000ff0885c43d0cd8e8467cec279b91f8481b4672391b87d77aa28f05446f9baab0632560000000000000000000000000000000000,c590373b21da675abe2bd3193fbb3347e31a247365f3db9552c9a24ff383b428,f6bbc98e0a165bc1dcbb3fcc1fad5183047488927934a71f9d83769578645fd8
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,1708b1dd57b74857c78f622931d2668f3a37fe6397a4691e826d4843f9c1203d,a9edd2fa24cecefb034a55ad7712438d80fb107ab963d93d101c2ed28450025c,000000015758b200,,1c79992be12f72ef53b32a0c414fdf9a05693bbd60402aa84b02ff64256f4600,82dcb4e4ee349c9fe68390a6a633faf9843f27bec5ce05b7cc2df6e8acb9442c
diff --git a/gcs_light_client/gcstestvectors/testnet-26.csv b/gcs_light_client/gcstestvectors/testnet-26.csv
new file mode 100644
index 0000000000..afd1916a47
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-26.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e00368fe4,,a1fa9ab5d0f6b164cd44684dab1545dcada2d4a0e23747c3efcafbfaa59ee8cd,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,a1fa9ab5d0f6b164cd44684dab1545dcada2d4a0e23747c3efcafbfaa59ee8cd,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000250911323131860,,2dde1d8c4b3552b640ff533661138f28822e1c66da5ebdb9130637efb66fa43f,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,2dde1d8c4b3552b640ff533661138f28822e1c66da5ebdb9130637efb66fa43f,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7ec681b8ec,,1c1f163ee19854b081066cac0a513b37101f08606dcd98415b0b34699390f2f1,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,1c1f163ee19854b081066cac0a513b37101f08606dcd98415b0b34699390f2f1,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b6901fe79a,,16f05b54849c2343b532507441d59c5c38b7db8e95d41fe3236cb26703f75bb5,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,92786fb5282ed0d3740e2237cc184dce35381110962f57449d9ad8fd436ac724,96e56182eb55e10e110f88a29d7c818de878253664188032b42fe1e7f247e1ac,0000001681840ca9557a9e269aa785b3822c4cfff7acf0c0d092e03e4ae182522044756019a334a3b7836b31345be8d380000006ed681413c0712146230d30a04a5618ddc296518dfce859eee3e5f874,0000000ff0885c43e866c73d19f3b0cf3723e8481b46391c8dc1f5dea851e0a8c6f9baa583192a8000000000000000000000000000000000,de18e6aa201ea6c1596c352a3fe5f4928f9fe39bd403c93775035cdf54afa8bc,ccfc41adb2cd5e21accee36ae56c5de0f61bbc0e6f6444c31fbb34069e0e1e41
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,ad3afd90401384ac11c7e80d6d700fac17a7adf3e630a3cc6eaed6d960081521,a1a9e6c57f9238e013f426c66fdf1e43d5deba52e23940ab78a58dd6e555f4f3,000000015758b200,,b0aa01764a5d756828a78d1bde0178e71aa1611e8807405e18e468b9f969a873,3225c99cfe713e4589e880a5ff9ca1d79e88101bec12de59f53bd4c65cf54085
diff --git a/gcs_light_client/gcstestvectors/testnet-27.csv b/gcs_light_client/gcstestvectors/testnet-27.csv
new file mode 100644
index 0000000000..ce3ca3ac3c
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-27.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e081b47f180,,99d2701ff1ed500a251e76393b37c8a23b9e6d7af18c3403ab1bcda68bb5c70b,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,99d2701ff1ed500a251e76393b37c8a23b9e6d7af18c3403ab1bcda68bb5c70b,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000250911331898c30,,5f892debdca89e70f05e74f4136a3d136460187f1a3f87f02fd00ad0da10000e,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,5f892debdca89e70f05e74f4136a3d136460187f1a3f87f02fd00ad0da10000e,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7ec340dc76,,6ff7e0ef9c84787604121d19b599cc73e5afe1d2fdc46979c567a5df44d3d4da,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,6ff7e0ef9c84787604121d19b599cc73e5afe1d2fdc46979c567a5df44d3d4da,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b6880ff3cd80,,64fd5ea6f113ce75c6b1138954ef7ea3ed14953bc4e67fa6ee4b10c86cfeb90e,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,5c37afa8294ffaf23994f992505819233e58a0e8138752646756b4f780066985,e75e265d5a9b896cd147acbe9ad9610493c37b40158087018bf158b605ec2d75,0000001681840ca4aabd4f49a6a9e0b6704544cfff79678606824b80fc95c30452204472b00cd18d28ede26d662685be8d360000001bb5a0502780e24146230d9850251d863770d2ca31bbce859ee71f2fc3a0,0000000ff0885c42f433639e467cec39e6e47c8481b461c8e46e07d77aa8a3c150c6f9baa2c18c95600000000000000000000000000000000000,0e8b346176706a8f7c7d0f1aa7cd45350e89289f982b20da8978eae744f051da,70ca83ba3e1946a02145d0b4aa2ec7448da7eb959e7b8b89ae9e56460f4b4965
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,b5da80200ddf0eb25edb0ede4809ef26a11f610817db78a5263f73d36fcc35ea,f404d4ae12997be6e855cebae46e3d78361666b56a9960713beca863a3c16fac,000000015758b200,,fdda9d209d128f15d05bc0dae8b3b5f797dbc36026948cffb4474bd103b355db,610c7fec2b8be2012e0cef82126f9da25f71f85c00acbeabc0bf277fbfa0f739
diff --git a/gcs_light_client/gcstestvectors/testnet-28.csv b/gcs_light_client/gcstestvectors/testnet-28.csv
new file mode 100644
index 0000000000..87a003bae8
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-28.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e080da3f8c0,,ca5c2742fcb87ec5891f8400be1c4a5289c0ae0881fbc8f8f3e5393e09557cca,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,ca5c2742fcb87ec5891f8400be1c4a5289c0ae0881fbc8f8f3e5393e09557cca,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,0000000250911338c4c61800,,1570f896f78c82846527ea1805f7b71ed849f1cae3045c1c4ec5f06b5ade9c91,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,1570f896f78c82846527ea1805f7b71ed849f1cae3045c1c4ec5f06b5ade9c91,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7ec9a06e3ac0,,d64f7657b0494fbd13bf47a473b37550396289a5ca543306b789e40596f0a3d8,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,d64f7657b0494fbd13bf47a473b37550396289a5ca543306b789e40596f0a3d8,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b68407f9e6e0,,3c48ea2dbbbc0cd0109af75fcb4a10a53c3785c75c1b5260cd1afc5ffe2d2673,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,9e79f9f5fee7604a204b0f1e25c98a42362b72a820dc45b13104313e210b251a,ef3918f7e08c26438f73b25cf04c58b471ef4004f3021455d3b954b020412f18,0000001681840ca2555ea7a269aa7896ce08a44cfff78b3c3034092e03f12b8608d220446f580668cb4a3b784dacc4d05be8d3700000006ed6813f4f01c48946230d8c28128b618ddc325946373ce859ee58f97e1d40,0000000ff0885c42fa19b1ced19f3b0f3cdc8f88481b464e47236e1f5deab14782a0c6f9baa360c64aa8000000000000000000000000000000000000,21c786b5bcb01e480c504272ba873aa6913a510db566e5001b0106dcb8d20ab2,e4d02f2c67b97bc26e134825dda9c88934410c1e1df08135330974806b698dd8
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,e732bbd6e045ce5f3dce6c305cd1238d837effa979deecea974929dc59162d5d,0d327a001a2c7e905e7a0f54d6635eba7c80286a9b1c51b6d8e4d5c945a6a439,000000015758b208,,50001e07c25b982d84616dd1f663a31abc15b31b4410f58e6b27843162fcee27,63474603f65f8aad3c55d9050da3068c00872c8ed0c9605d646b54e5f8b76c6f
diff --git a/gcs_light_client/gcstestvectors/testnet-29.csv b/gcs_light_client/gcstestvectors/testnet-29.csv
new file mode 100644
index 0000000000..4af2dd113c
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-29.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e0a06d1fc60,,b20d6aedc8cf4429d7e4f2b9a444f11f0ffcdeef0d2a7b5aca33289eb58f15f7,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,b20d6aedc8cf4429d7e4f2b9a444f11f0ffcdeef0d2a7b5aca33289eb58f15f7,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025091133862630c10,,e2e43910d2ade3899170a2ead6b3c2c3abf73c60829992b64495a295cb7944d7,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,e2e43910d2ade3899170a2ead6b3c2c3abf73c60829992b64495a295cb7944d7,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7ec8d0371d70,,be5d2675b91a36fed5a7574179a111e2b066ee74e6b45bd6bdb7732b458830e2,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,be5d2675b91a36fed5a7574179a111e2b066ee74e6b45bd6bdb7732b458830e2,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b68203fcf370,,e18730d281864de550199da7666eece5c3106e562004df5866b04fdbd009dba9,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,d34941c3ddc72de97040426cee055b43a852bb0f9943a7b61fb295d8bbd529cf,e63891792c6b76bf54c789a6eea794546fd6e2db364d9e592ad6b6fbb37977da,0000001681840ca32aaf53d09a6a9e12d9c11484cfff7959e181a024b80fb2570c11d220446eac033462d28ede19b59899e5be8d3700000001bb5a04fc9e03891146230da61409455863770b4b28c6e7ce859ee4c7cbf0ea,0000000ff0885c42fd0cd8e75467cec3e79b91f10481b46272391b707d77aac28f054146f9baa3b063255400000000000000000000000000000000000000,be9cd250d192fc6f9f44be32bfdc811e31922c2e282616a39b0208149172b19e,f6571010b25a5ccd75cd372df6486b762783617b5fd4d058f3ca9c7608216e90
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,9c3554f90c5425bc4f2d4a3c8b95fc645d09149ceec87358086368b7d833f59a,a5cc84765098b72fb90cf6c88446308694f8dd622703293caf6bb714e45c0837,000000015758b208,,5c9f7a58977f6f93996910339a732f828fcd60bacebd6ae310142496db0ad3bd,4377e361ef7bc303ab190d0adfcb3489e78050f840c7c61dd64fdb4a3ef5985b
diff --git a/gcs_light_client/gcstestvectors/testnet-30.csv b/gcs_light_client/gcstestvectors/testnet-30.csv
new file mode 100644
index 0000000000..4e171994c9
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-30.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e0a0368fe32,,55815daff0f888a24d17818238e6928bcb0d73c2dd995fde5de32f7aebf61ff5,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,55815daff0f888a24d17818238e6928bcb0d73c2dd995fde5de32f7aebf61ff5,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025091133a31318604,,c87eecdd5196b88bf1f8f555c0262fc53daa94cdff9b8a686cdef62efa3a9668,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,c87eecdd5196b88bf1f8f555c0262fc53daa94cdff9b8a686cdef62efa3a9668,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7eca681b8eb4,,3072800f3de45279eedd82581c680ded20b19c1cbee9fbc22c9d0b5e15b68fb8,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,3072800f3de45279eedd82581c680ded20b19c1cbee9fbc22c9d0b5e15b68fb8,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b68301fe79b8,,8b47b2082cb16b85b4e04793da0e12602faa0c3ae149a31e371450376afd879b,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,84237cc683a39221ba8c75ced4d87821152df6414af5008600e285eaab5bc8fd,e37ca1aea1c383cfa076122ffaa78211be5c11bdccd0e64547d52ae1093e161f,0000001681840ca29557a9e8269aa7845b3822944cfff792cf0c0d0092e03ea4ae1823d220446dd6019a31b4a3b78636b3133a5be8d37400000006ed6813f13c07122146230da30a04a27618ddc2c96518dcbce859ee463e5f8754,0000000ff0885c42de866c73a919f3b0f4f3723e28481b461391c8db81f5deab051e0a8246f9baa3d83192aa0000000000000000000000000000000000000000,0bb22c48a53863e957a450ed48886d9971201b459e0d890312ee94677b5bc215,5d7aafd8f12b26fa5d434e2fc4f1640c02197492f0da60de42f3aac16a72ec35
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,dc8557a40ae5ec58f60a5de480d03c4ebc6931c831cc2263b03af4c049442866,edc7dd0b51a383e61acdbf2bd0788ccc73ea5193101b8b73b1e539e9d297eee3,000000015758b20a,,f7f17c91301a4f4d97531984d161d30d6ecaa5b3ad34addb51e7a5eb1130d429,56374d6e599929f72316f5d75644c1675e9f8df6b0adf9b90ad0efe7b1f68a55
diff --git a/gcs_light_client/gcstestvectors/testnet-31.csv b/gcs_light_client/gcstestvectors/testnet-31.csv
new file mode 100644
index 0000000000..4ca5f78311
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-31.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e0a81b47f1900,,c38b40dcb39aeb034228bdf97c8aae5b2a87d363d644d5162a0afae5dd2b31d1,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,c38b40dcb39aeb034228bdf97c8aae5b2a87d363d644d5162a0afae5dd2b31d1,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025091133b1898c302,,535100bb49ca43941aa815890ea8b465d808cd5d715332ce1dea619a23c9b5d0,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,535100bb49ca43941aa815890ea8b465d808cd5d715332ce1dea619a23c9b5d0,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7ecb340dc759,,fd591031d6d38c961d9feb5f9bbcf3cec50487d78d965073df3b4e5eb51f4d2c,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,fd591031d6d38c961d9feb5f9bbcf3cec50487d78d965073df3b4e5eb51f4d2c,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b68280ff3cdc80,,af16a9cc6f897b2e4e33c424c8f31d161e6900e254504292e4d0ac1a46566ddb,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,782c986d1d85f569fe9a0bdc1dc672b2b24d8c41908e4346dc384b1a7f311b1c,e764192422034fb2524eb289dd3314a12dfb27e466d984c126bf2a859259d9bb,0000001681840ca24aabd4f449a6a9e0cb670452c4cfff78d6786068024b80fa895c3047d220446dab00cd18ad28ede186d6626765be8d37400000001bb5a04fba780e244146230da185025135863770b12ca31b93ce859ee431f2fc3ab0,0000000ff0885c42cf433639d4467cec3d9e6e47c50481b4611c8e46dc07d77aac0a3c150446f9baa36c18c955000000000000000000000000000000000000000000,1a66c33273a1b49e8552c6e6927615e1f1cb611bf3902c2be6df4310d17c02e4,769c6b6d73b3f14198a46356d8f05bfef64bc5a7130b58f2f25ceb8d0606e997
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,5ff633524c2be7c17ef1adde8656cc36c0054d7a8cfd277099d419b677bd8f7c,4c1a6e25eb9fc3b246f144a140ad47a71e911e2b55e3a67eaaa6c74332da07bb,000000015758b20a,,3b2deb3064738d839056827d4e35d8e2dc1b1c9444f10075adfc4706c3acf620,dcbfc74a3a1ce4840c8fbd410116f43b9b24eeb85f63353616748332d96769a6
diff --git a/gcs_light_client/gcstestvectors/testnet-32.csv b/gcs_light_client/gcstestvectors/testnet-32.csv
new file mode 100644
index 0000000000..b6f6dbe7f7
--- /dev/null
+++ b/gcs_light_client/gcstestvectors/testnet-32.csv
@@ -0,0 +1,7 @@
+Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header
+0,000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943,0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4adae5494dffff001d1aa4ae180101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000,0000000000000000000000000000000000000000000000000000000000000000,0000000000000000000000000000000000000000000000000000000000000000,0000000284134e0ac0da3f8c60,,4e7736924873187242630be931e983a66da1f621f349b753a0f970b5c068556e,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2
+1,00000000b873e79784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206,0100000043497fd7f826957108f4a30fd9cec3aeba79972084e90ead01ea330900000000bac8b0fa927c0ac8234287e33c5f74d38d354820e24756ad709d7038fc5f31f020e7494dffff001d03e4b6720101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0420e7494d017f062f503253482fffffffff0100f2052a010000002321021aeaf2f8638a129a3156fbe7e5ef635226b0bafd495ff03afe2c843d7e3a4b51ac00000000,4e7736924873187242630be931e983a66da1f621f349b753a0f970b5c068556e,f98c4e9736d8eb8bb46299798906695c755369a3df99a93ffdded1713f1cf6e2,000000025091133b0c4c618140,,8bd7c7000953019a9a0bb96c5c3334cd87c42b4112d029fef17aa2fecc029e5e,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba
+2,000000006c02c8ea6e4ff69651f7fcde348fb9d557a06e6957b65552002a7820,0100000006128e87be8b1b4dea47a7247d5528d2702c96826c7a648497e773b800000000e241352e3bec0a95a6217e10c3abb54adfa05abb12c126695595580fb92e222032e7494dffff001d00d235340101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0432e7494d010e062f503253482fffffffff0100f2052a010000002321038a7f6ef1c8ca0c588aa53fa860128077c9e6c11e6830f4d7ee4e763a56b7718fac00000000,8bd7c7000953019a9a0bb96c5c3334cd87c42b4112d029fef17aa2fecc029e5e,fbae16d7c2d5b188182cc98096814029dd3fd7b6d2b3eec89b6aa143c5dca7ba,0000000244ee7ecb1a06e3acc0,,333bbc0563e2fe395d4a5bbce1447a37da779d21f4e4913bd23e8542cf4df3c8,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c
+3,000000008b896e272758da5297bcd98fdc6d97c9b765ecec401e286dc1fdbe10,0100000020782a005255b657696ea057d5b98f34defcf75196f64f6eeac8026c0000000041ba5afc532aae03151b8aa87b65e1594f97504a768e010c98c0add79216247186e7494dffff001d058dc2b60101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff0e0486e7494d0151062f503253482fffffffff0100f2052a01000000232103f6d9ff4c12959445ca5549c811683bf9c88e637b222dd2e0311154c4c85cf423ac00000000,333bbc0563e2fe395d4a5bbce1447a37da779d21f4e4913bd23e8542cf4df3c8,24d9ae5143129aebd224f98ea7de7d3b87c0dee9724cd90f71c904279f16a82c,000000022ce4b682407f9e6e40,,95d0be56fb8fb1e046aa50426ccee853ff4b49e02b109cacccd3dddd4a96a4b0,68e70baad72498a47adc9b6314c4a4215760663686813fccb6b7c9f4ad05d632
+926485,000000000000015d6077a411a8f5cc95caf775ccf11c54e27df75ce58d187313,0000002060bbab0edbf3ef8a49608ee326f8fd75c473b7e3982095e2d100000000000000c30134f8c9b6d2470488d7a67a888f6fa12f8692e0c3411fbfb92f0f68f67eedae03ca57ef13021acc22dc410501000000010000000000000000000000000000000000000000000000000000000000000000ffffffff2f0315230e0004ae03ca57043e3d1e1d0c8796bf579aef0c0000000000122f4e696e6a61506f6f6c2f5345475749542fffffffff038427a112000000001976a914876fbb82ec05caa6af7a3b5e5a983aae6c6cc6d688ac0000000000000000266a24aa21a9ed5c748e121c0fe146d973a4ac26fa4a68b0549d46ee22d25f50a5e46fe1b377ee00000000000000002952534b424c4f434b3acd16772ad61a3c5f00287480b720f6035d5e54c9efc71be94bb5e3727f10909000000000010000000145310e878941a1b2bc2d33797ee4d89d95eaaf2e13488063a2aa9a74490f510a0100000023220020b6744de4f6ec63cc92f7c220cdefeeb1b1bed2b66c8e5706d80ec247d37e65a1ffffffff01002d3101000000001976a9143ebc40e411ed3c76f86711507ab952300890397288ac00000000010000000120925534261de4dcebb1ed5ab1b62bfe7a3ef968fb111dc2c910adfebc6e3bdf010000006b483045022100f50198f5ae66211a4f485190abe4dc7accdabe3bc214ebc9ea7069b97097d46e0220316a70a03014887086e335fc1b48358d46cd6bdc9af3b57c109c94af76fc915101210316cff587a01a2736d5e12e53551b18d73780b83c3bfb4fcf209c869b11b6415effffffff0220a10700000000001976a91450333046115eaa0ac9e0216565f945070e44573988ac2e7cd01a000000001976a914c01a7ca16b47be50cbdbc60724f701d52d75156688ac00000000010000000203a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322010000006a47304402204efc3d70e4ca3049c2a425025edf22d5ca355f9ec899dbfbbeeb2268533a0f2b02204780d3739653035af4814ea52e1396d021953f948c29754edd0ee537364603dc012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff03a25f58630d7a1ea52550365fd2156683f56daf6ca73a4b4bbd097e66516322000000006a47304402202d96defdc5b4af71d6ba28c9a6042c2d5ee7bc6de565d4db84ef517445626e03022022da80320e9e489c8f41b74833dfb6a54a4eb5087cdb46eb663eef0b25caa526012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a914b7e6f7ff8658b2d1fb107e3d7be7af4742e6b1b3876f88fc00000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac0000000001000000043ffd60d3818431c495b89be84afac205d5d1ed663009291c560758bbd0a66df5010000006b483045022100f344607de9df42049688dcae8ff1db34c0c7cd25ec05516e30d2bc8f12ac9b2f022060b648f6a21745ea6d9782e17bcc4277b5808326488a1f40d41e125879723d3a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffffa5379401cce30f84731ef1ba65ce27edf2cc7ce57704507ebe8714aa16a96b92010000006a473044022020c37a63bf4d7f564c2192528709b6a38ab8271bd96898c6c2e335e5208661580220435c6f1ad4d9305d2c0a818b2feb5e45d443f2f162c0f61953a14d097fd07064012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff70e731e193235ff12c3184510895731a099112ffca4b00246c60003c40f843ce000000006a473044022053760f74c29a879e30a17b5f03a5bb057a5751a39f86fa6ecdedc36a1b7db04c022041d41c9b95f00d2d10a0373322a9025dba66c942196bc9d8adeb0e12d3024728012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff66b7a71b3e50379c8e85fc18fe3f1a408fc985f257036c34702ba205cef09f6f000000006a4730440220499bf9e2db3db6e930228d0661395f65431acae466634d098612fd80b08459ee022040e069fc9e3c60009f521cef54c38aadbd1251aee37940e6018aadb10f194d6a012103f7a897e4dbecab2264b21917f90664ea8256189ea725d28740cf7ba5d85b5763ffffffff0200e1f5050000000017a9148fc37ad460fdfbd2b44fe446f6e3071a4f64faa6878f447f0b000000001976a914913bcc2be49cb534c20474c4dee1e9c4c317e7eb88ac00000000,cc9b347b453c115a5e4701ae10d687f0c32146bb3d031788aa447a5bffea47fc,2b7f1068dfbe0ec0537da0470fa6e6f192cb002e1738828d2d2cbcad52f04550,0000001681840ca26555ea7a1269aa78316ce08a5c4cfff78ab3c30340092e03ea92b8608f5220446d9580668c534a3b7860dacc4cee5be8d374000000006ed6813ed4f01c488146230da0c281289b618ddc2ba59463723ce859ee418f97e1d5c0,0000000ff0885c42cfa19b1ce9d19f3b0f73cdc8f8a0481b4610e47236de1f5deab114782a0846f9baa3360c64aa88000000000000000000000000000000000000000000,c9a00855643285a9de8f252b9f7b857a0658ebc3164efebc9aa7117f53123145,f6eecf56dccea1e29d7b7cf78585334ea075b59d1da83fb3d71edbe117a75312
+987876,0000000000000c00901f2049055e2a437c819d79a3d54fd63e6af796cd7b8a79,000000202694f74969fdb542090e95a56bc8aa2d646e27033850e32f1c5f000000000000f7e53676b3f12d5beb524ed617f2d25f5a93b5f4f52c1ba2678260d72712f8dd0a6dfe5740257e1a4b1768960101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff1603e4120ff9c30a1c216900002f424d4920546573742fffffff0001205fa012000000001e76a914c486de584a735ec2f22da7cd9681614681f92173d83d0aa68688ac00000000,92246dec5bffd401e44c0d85a65ee9f6f3599b9e2736ef4bb197e6e596975c0b,a53cbcd0296d7eed2cdab6146b3d77129aa05af8f30bb573790af2b981a9d1ed,000000015758b20a00,,57595110cb5e812b5a43ee5df5b20f42dafd312402fa2e338e188bd9fcd76def,a0dc70634834cb2fd505df9988c5712e03c1999884046346fb85a1fb6e2f35ae
diff --git a/gcs_light_client/gentestvectors.go b/gcs_light_client/gentestvectors.go
new file mode 100644
index 0000000000..12b9358585
--- /dev/null
+++ b/gcs_light_client/gentestvectors.go
@@ -0,0 +1,334 @@
+// This program connects to your local btcd and generates test vectors for
+// 5 blocks and collision space sizes of 1-32 bits. Change the RPC cert path
+// and credentials to run on your system. The program assumes you're running
+// a btcd with cfilter support, which mainline btcd doesn't have; in order to
+// circumvent this assumption, comment out the if block that checks for
+// filter size of DefaultP.
+
+package main
+
+import (
+ "bytes"
+ "encoding/hex"
+ "fmt"
+ "io/ioutil"
+ "os"
+ "path"
+
+ "github.com/roasbeef/btcd/chaincfg"
+ "github.com/roasbeef/btcd/chaincfg/chainhash"
+ "github.com/roasbeef/btcd/rpcclient"
+ "github.com/roasbeef/btcd/wire"
+ "github.com/roasbeef/btcutil/gcs"
+ "github.com/roasbeef/btcutil/gcs/builder"
+)
+
+func main() {
+ err := os.Mkdir("gcstestvectors", os.ModeDir|0755)
+ if err != nil { // Don't overwrite existing output if any
+ fmt.Println("Couldn't create directory: ", err)
+ return
+ }
+ files := make([]*os.File, 33)
+ prevBasicHeaders := make([]chainhash.Hash, 33)
+ prevExtHeaders := make([]chainhash.Hash, 33)
+ for i := 1; i <= 32; i++ { // Min 1 bit of collision space, max 32
+ var blockBuf bytes.Buffer
+ fName := fmt.Sprintf("gcstestvectors/testnet-%02d.csv", i)
+ file, err := os.Create(fName)
+ if err != nil {
+ fmt.Println("Error creating CSV file: ", err.Error())
+ return
+ }
+ _, err = file.WriteString("Block Height,Block Hash,Block,Previous Basic Header,Previous Ext Header,Basic Filter,Ext Filter,Basic Header,Ext Header\n")
+ if err != nil {
+ fmt.Println("Error writing to CSV file: ", err.Error())
+ return
+ }
+ files[i] = file
+ basicFilter, err := buildBasicFilter(
+ chaincfg.TestNet3Params.GenesisBlock, uint8(i))
+ if err != nil && err != gcs.ErrNoData {
+ fmt.Println("Error generating basic filter: ", err.Error())
+ return
+ }
+ prevBasicHeaders[i] = builder.MakeHeaderForFilter(basicFilter,
+ chaincfg.TestNet3Params.GenesisBlock.Header.PrevBlock)
+ if basicFilter == nil {
+ basicFilter = &gcs.Filter{}
+ }
+ extFilter, err := buildExtFilter(
+ chaincfg.TestNet3Params.GenesisBlock, uint8(i))
+ if err != nil && err != gcs.ErrNoData {
+ fmt.Println("Error generating ext filter: ", err.Error())
+ return
+ }
+ prevExtHeaders[i] = builder.MakeHeaderForFilter(extFilter,
+ chaincfg.TestNet3Params.GenesisBlock.Header.PrevBlock)
+ if extFilter == nil {
+ extFilter = &gcs.Filter{}
+ }
+ err = chaincfg.TestNet3Params.GenesisBlock.Serialize(&blockBuf)
+ if err != nil {
+ fmt.Println("Error serializing block to buffer: ", err.Error())
+ return
+ }
+ var bfBytes []byte
+ var efBytes []byte
+ if basicFilter.N() > 0 {
+ bfBytes = basicFilter.NBytes()
+ }
+ if extFilter.N() > 0 { // Exclude special case for block 987876
+ efBytes = extFilter.NBytes()
+ }
+ err = writeCSVRow(
+ file,
+ 0, // Height
+ *chaincfg.TestNet3Params.GenesisHash,
+ blockBuf.Bytes(),
+ chaincfg.TestNet3Params.GenesisBlock.Header.PrevBlock,
+ chaincfg.TestNet3Params.GenesisBlock.Header.PrevBlock,
+ bfBytes,
+ efBytes,
+ prevBasicHeaders[i],
+ prevExtHeaders[i],
+ )
+ if err != nil {
+ fmt.Println("Error writing to CSV file: ", err.Error())
+ return
+ }
+ }
+ cert, err := ioutil.ReadFile(
+ path.Join(os.Getenv("HOME"), "/.btcd/rpc.cert"))
+ if err != nil {
+ fmt.Println("Couldn't read RPC cert: ", err.Error())
+ return
+ }
+ conf := rpcclient.ConnConfig{
+ Host: "127.0.0.1:18334",
+ Endpoint: "ws",
+ User: "kek",
+ Pass: "kek",
+ Certificates: cert,
+ }
+ client, err := rpcclient.New(&conf, nil)
+ if err != nil {
+ fmt.Println("Couldn't create a new client: ", err.Error())
+ return
+ }
+ for height := 1; height < 988000; height++ {
+ fmt.Printf("Height: %d\n", height)
+ blockHash, err := client.GetBlockHash(int64(height))
+ if err != nil {
+ fmt.Println("Couldn't get block hash: ", err.Error())
+ return
+ }
+ block, err := client.GetBlock(blockHash)
+ if err != nil {
+ fmt.Println("Couldn't get block hash: ", err.Error())
+ return
+ }
+ var blockBuf bytes.Buffer
+ err = block.Serialize(&blockBuf)
+ if err != nil {
+ fmt.Println("Error serializing block to buffer: ", err.Error())
+ return
+ }
+ blockBytes := blockBuf.Bytes()
+ for i := 1; i <= 32; i++ {
+ basicFilter, err := buildBasicFilter(block, uint8(i))
+ if err != nil && err != gcs.ErrNoData {
+ fmt.Println("Error generating basic filter: ", err.Error())
+ return
+ }
+ basicHeader := builder.MakeHeaderForFilter(basicFilter,
+ prevBasicHeaders[i])
+ if basicFilter == nil {
+ basicFilter = &gcs.Filter{}
+ }
+ extFilter, err := buildExtFilter(block, uint8(i))
+ if err != nil && err != gcs.ErrNoData {
+ fmt.Println("Error generating ext filter: ", err.Error())
+ return
+ }
+ extHeader := builder.MakeHeaderForFilter(extFilter,
+ prevExtHeaders[i])
+ if extFilter == nil {
+ extFilter = &gcs.Filter{}
+ }
+ if i == builder.DefaultP { // This is the default filter size so we can check against the server's info
+ filter, err := client.GetCFilter(blockHash, wire.GCSFilterRegular)
+ if err != nil {
+ fmt.Println("Error getting basic filter: ", err.Error())
+ return
+ }
+ if !bytes.Equal(filter.Data, basicFilter.NBytes()) &&
+ (len(filter.Data) != 0 || len(basicFilter.NBytes()) != 4) {
+ // Don't error on empty filters
+ fmt.Println("Basic filter doesn't match!")
+ return
+ }
+ filter, err = client.GetCFilter(blockHash, wire.GCSFilterExtended)
+ if err != nil {
+ fmt.Println("Error getting extended filter: ", err.Error())
+ return
+ }
+ if !bytes.Equal(filter.Data, extFilter.NBytes()) &&
+ (len(filter.Data) != 0 || len(extFilter.NBytes()) != 4) {
+ fmt.Println("Extended filter doesn't match!")
+ return
+ }
+ header, err := client.GetCFilterHeader(blockHash, wire.GCSFilterRegular)
+ if err != nil {
+ fmt.Println("Error getting basic header: ", err.Error())
+ return
+ }
+ if !bytes.Equal(header.HeaderHashes[0][:], basicHeader[:]) {
+ fmt.Println("Basic header doesn't match!")
+ return
+ }
+ header, err = client.GetCFilterHeader(blockHash, wire.GCSFilterExtended)
+ if err != nil {
+ fmt.Println("Error getting extended header: ", err.Error())
+ return
+ }
+ if !bytes.Equal(header.HeaderHashes[0][:], extHeader[:]) {
+ fmt.Println("Extended header doesn't match!")
+ return
+ }
+ fmt.Println("Verified against server")
+ }
+ switch height {
+ case 1, 2, 3, 926485, 987876: // Blocks for test cases
+ var bfBytes []byte
+ var efBytes []byte
+ if basicFilter.N() > 0 {
+ bfBytes = basicFilter.NBytes()
+ }
+ if extFilter.N() > 0 { // Exclude special case for block 987876
+ efBytes = extFilter.NBytes()
+ }
+ writeCSVRow(
+ files[i],
+ height,
+ *blockHash,
+ blockBytes,
+ prevBasicHeaders[i],
+ prevExtHeaders[i],
+ bfBytes,
+ efBytes,
+ basicHeader,
+ extHeader)
+ }
+ prevBasicHeaders[i] = basicHeader
+ prevExtHeaders[i] = extHeader
+ }
+ }
+}
+
+// writeCSVRow writes a test vector to a CSV file.
+func writeCSVRow(file *os.File, height int, blockHash chainhash.Hash,
+ blockBytes []byte, prevBasicHeader, prevExtHeader chainhash.Hash,
+ basicFilter, extFilter []byte, basicHeader, extHeader chainhash.Hash) error {
+ row := fmt.Sprintf("%d,%s,%s,%s,%s,%s,%s,%s,%s\n",
+ height,
+ blockHash.String(),
+ hex.EncodeToString(blockBytes),
+ prevBasicHeader.String(),
+ prevExtHeader.String(),
+ hex.EncodeToString(basicFilter),
+ hex.EncodeToString(extFilter),
+ basicHeader.String(),
+ extHeader.String(),
+ )
+ _, err := file.WriteString(row)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+// buildBasicFilter builds a basic GCS filter from a block. A basic GCS filter
+// will contain all the previous outpoints spent within a block, as well as the
+// data pushes within all the outputs created within a block. p is specified as
+// an argument in order to create test vectors with various values for p.
+func buildBasicFilter(block *wire.MsgBlock, p uint8) (*gcs.Filter, error) {
+ blockHash := block.BlockHash()
+ b := builder.WithKeyHashP(&blockHash, p)
+
+ // If the filter had an issue with the specified key, then we force it
+ // to bubble up here by calling the Key() function.
+ _, err := b.Key()
+ if err != nil {
+ return nil, err
+ }
+
+ // In order to build a basic filter, we'll range over the entire block,
+ // adding the outpoint data as well as the data pushes within the
+ // pkScript.
+ for i, tx := range block.Transactions {
+ // First we'll compute the bash of the transaction and add that
+ // directly to the filter.
+ txHash := tx.TxHash()
+ b.AddHash(&txHash)
+
+ // Skip the inputs for the coinbase transaction
+ if i != 0 {
+ // Each each txin, we'll add a serialized version of
+ // the txid:index to the filters data slices.
+ for _, txIn := range tx.TxIn {
+ b.AddOutPoint(txIn.PreviousOutPoint)
+ }
+ }
+
+ // For each output in a transaction, we'll add each of the
+ // individual data pushes within the script.
+ for _, txOut := range tx.TxOut {
+ b.AddScript(txOut.PkScript)
+ }
+ }
+
+ return b.Build()
+}
+
+// buildExtFilter builds an extended GCS filter from a block. An extended
+// filter supplements a regular basic filter by include all the _witness_ data
+// found within a block. This includes all the data pushes within any signature
+// scripts as well as each element of an input's witness stack. Additionally,
+// the _hashes_ of each transaction are also inserted into the filter. p is
+// specified as an argument in order to create test vectors with various values
+// for p.
+func buildExtFilter(block *wire.MsgBlock, p uint8) (*gcs.Filter, error) {
+ blockHash := block.BlockHash()
+ b := builder.WithKeyHashP(&blockHash, p)
+
+ // If the filter had an issue with the specified key, then we force it
+ // to bubble up here by calling the Key() function.
+ _, err := b.Key()
+ if err != nil {
+ return nil, err
+ }
+
+ // In order to build an extended filter, we add the hash of each
+ // transaction as well as each piece of witness data included in both
+ // the sigScript and the witness stack of an input.
+ for i, tx := range block.Transactions {
+ // Skip the inputs for the coinbase transaction
+ if i != 0 {
+ // Next, for each input, we'll add the sigScript (if
+ // it's present), and also the witness stack (if it's
+ // present)
+ for _, txIn := range tx.TxIn {
+ if txIn.SignatureScript != nil {
+ b.AddScript(txIn.SignatureScript)
+ }
+
+ if len(txIn.Witness) != 0 {
+ b.AddWitness(txIn.Witness)
+ }
+ }
+ }
+ }
+
+ return b.Build()
+}