From 83b83c78e189be898573e0bfe936dd0c9b99ecb9 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Thu, 1 Jun 2017 11:59:19 -0700 Subject: [PATCH 01/14] new bip: compact client side filtering --- gcs_light_client.mediawiki | 992 ++++++++++++++++++ .../gcstestvectors/testnet-01.csv | 7 + .../gcstestvectors/testnet-02.csv | 7 + .../gcstestvectors/testnet-03.csv | 7 + .../gcstestvectors/testnet-04.csv | 7 + .../gcstestvectors/testnet-05.csv | 7 + .../gcstestvectors/testnet-06.csv | 7 + .../gcstestvectors/testnet-07.csv | 7 + .../gcstestvectors/testnet-08.csv | 7 + .../gcstestvectors/testnet-09.csv | 7 + .../gcstestvectors/testnet-10.csv | 7 + .../gcstestvectors/testnet-11.csv | 7 + .../gcstestvectors/testnet-12.csv | 7 + .../gcstestvectors/testnet-13.csv | 7 + .../gcstestvectors/testnet-14.csv | 7 + .../gcstestvectors/testnet-15.csv | 7 + .../gcstestvectors/testnet-16.csv | 7 + .../gcstestvectors/testnet-17.csv | 7 + .../gcstestvectors/testnet-18.csv | 7 + .../gcstestvectors/testnet-19.csv | 7 + .../gcstestvectors/testnet-20.csv | 7 + .../gcstestvectors/testnet-21.csv | 7 + .../gcstestvectors/testnet-22.csv | 7 + .../gcstestvectors/testnet-23.csv | 7 + .../gcstestvectors/testnet-24.csv | 7 + .../gcstestvectors/testnet-25.csv | 7 + .../gcstestvectors/testnet-26.csv | 7 + .../gcstestvectors/testnet-27.csv | 7 + .../gcstestvectors/testnet-28.csv | 7 + .../gcstestvectors/testnet-29.csv | 7 + .../gcstestvectors/testnet-30.csv | 7 + .../gcstestvectors/testnet-31.csv | 7 + .../gcstestvectors/testnet-32.csv | 7 + gcs_light_client/gentestvectors.go | 334 ++++++ 34 files changed, 1550 insertions(+) create mode 100644 gcs_light_client.mediawiki create mode 100644 gcs_light_client/gcstestvectors/testnet-01.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-02.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-03.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-04.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-05.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-06.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-07.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-08.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-09.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-10.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-11.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-12.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-13.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-14.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-15.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-16.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-17.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-18.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-19.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-20.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-21.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-22.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-23.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-24.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-25.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-26.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-27.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-28.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-29.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-30.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-31.csv create mode 100644 gcs_light_client/gcstestvectors/testnet-32.csv create mode 100644 gcs_light_client/gentestvectors.go diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki new file mode 100644 index 0000000000..9bcb79d394 --- /dev/null +++ b/gcs_light_client.mediawiki @@ -0,0 +1,992 @@ +
+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: PD
+
+ +== 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. The light client mode described in this BIP can be seen as +a "reversal"[1] of BIP 37: 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 [3][4]. 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. + +== 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 [5]. + +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 array) 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. + +== 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. + +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 +the 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 m 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. + +We will now define simple functions for encoding and decoding integers using +Golomb-Rice 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
+
+ +To aide 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
+
+ +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. + +P 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. + +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[7], +multiplying the hashed value by F and taking only the top 64 bits. This fairly +distributes the values over F without division and can be done with fewer cycles +cycles on CPUs that have 128-bit registers. + +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)
+
+    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. + +==== Set Compression ==== + +Once the set of hashed items has been constructed (and sorted) 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 [6]. + +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 will need to ''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: +* CFNodeCF = 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 are to 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 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. + +Given a Bitcoin block, a full-node constructs 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)
+            raw_items.append(output_bytes)
+
+        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 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)
+
+    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 should 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 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 = 
+   let zero_hash [32]byte = {0*32}
+
+   if n == 0:
+       double-sha-256(genesis_block.prevblock || filter(0))
+
+   match filter(n):
+      case Some:
+          double-sha-256(filter_header(n-1) || double-sha-256(filter(n)))
+      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 public key script. In this case, the +"hash" of said filter is simply "32 zeroes". + +This filter header chain can 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. This allows light clients to efficiently detect nodes +that advertise a conflicting filter chain history (by ensuring all nodes return +the ''same'' filter header hash for a particular block hash). + +Additionally, the filter header chain also allows a light client to efficiently +verify purported filter authenticity when fetching the next set of headers from +chain tip. Instead of fetching the filter ''from each peer'' (which wastes +bandwidth), a light client instead does the following: + +
+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 should 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 should also persistently compute and persist the filter header chain +on-disk, just as the regular filters. + +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. + +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 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 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 has been chosen to 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 paramter tuning can be found [here] + + +=== 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. + + +== Implementation Notes == + +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 == + +=== 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 [8] 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 [9]. We instead opted for our GCS-based +filters as they have a much lower implementation complexity and are easier to +understand. + +== Appendix B == + +=== 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 == +1. https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki + +2. https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-May/012636.html + +3. https://eprint.iacr.org/2014/763.pdf + +4. https://jonasnick.github.io/blog/2015/02/12/privacy-in-bitcoinj/ + +5. https://en.wikipedia.org/wiki/Private_information_retrieval + +6. http://urchin.earth.li/~twic/Golombs_Original_Paper/ + +7. https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/ + +8. https://en.wikipedia.org/wiki/Accumulator_(cryptography) + +9. https://arxiv.org/pdf/0804.1845.pdf 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() +} From af5e1376efa9d3670141e9edc1d0fdead1e47f25 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 29 Nov 2017 20:41:30 -0800 Subject: [PATCH 02/14] fixup! new bip: compact client side filtering --- gcs_light_client.mediawiki | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki index 9bcb79d394..b3f1ec9167 100644 --- a/gcs_light_client.mediawiki +++ b/gcs_light_client.mediawiki @@ -8,7 +8,7 @@ Comments: ??? Comments-URI: ??? Type: Standards Track Created: 05-24-2017 -License: PD +License: CC0-1.0 == Abstract == @@ -990,3 +990,7 @@ filter, and extended filter. 8. https://en.wikipedia.org/wiki/Accumulator_(cryptography) 9. https://arxiv.org/pdf/0804.1845.pdf + +== Copyright == + +This document is licensed under the Creative Commons CC0 1.0 Universal lisence. From 59fd92e556873927b5f27ad00e9b0c1cc13675c0 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 29 Nov 2017 21:00:06 -0800 Subject: [PATCH 03/14] fixup! new bip: compact client side filtering --- gcs_light_client.mediawiki | 89 ++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 48 deletions(-) diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki index b3f1ec9167..3fd063921d 100644 --- a/gcs_light_client.mediawiki +++ b/gcs_light_client.mediawiki @@ -18,14 +18,16 @@ 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. The light client mode described in this BIP can be seen as -a "reversal"[1] of BIP 37: 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. +compared to BIP +37https://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: +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 == @@ -48,14 +50,16 @@ 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 [3][4]. 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. +mechanism +https://eprint.iacr.org/2014/763.pdfhttps://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. == Design Rationale == @@ -68,7 +72,7 @@ then the ''entire'' block will be fetched. The decoupling of filter querying fro 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 [5]. +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 @@ -292,10 +296,11 @@ 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[7], +In addition, to help optimize the algorithm, we use a fast range +algorithmhttps://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 division and can be done with fewer cycles -cycles on CPUs that have 128-bit registers. +distributes the values over F without division and can be done with fewer +cycles cycles on CPUs that have 128-bit registers. The following routine computes the ''uncompressed'' set given the parameters above: @@ -323,7 +328,8 @@ Once the set of hashed items has been constructed (and sorted) 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 [6]. +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:
@@ -945,21 +951,23 @@ alternatives along with our rationale for not pursuing them.
 
 ==== Cryptographic Accumulators ====
 
-Cryptographic accumulators [8] 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.
+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 [9]. We instead opted for our GCS-based
-filters as they have a much lower implementation complexity and are easier to
-understand.
+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 B ==
 
@@ -973,23 +981,8 @@ filter, and extended filter.
 
 
 == References ==
-1. https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki
 
-2. https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2016-May/012636.html
-
-3. https://eprint.iacr.org/2014/763.pdf
-
-4. https://jonasnick.github.io/blog/2015/02/12/privacy-in-bitcoinj/
-
-5. https://en.wikipedia.org/wiki/Private_information_retrieval
-
-6. http://urchin.earth.li/~twic/Golombs_Original_Paper/
-
-7. https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/
-
-8. https://en.wikipedia.org/wiki/Accumulator_(cryptography)
-
-9. https://arxiv.org/pdf/0804.1845.pdf
+
 
 == Copyright ==
 

From 6a2f9cdac7545ff2aa70fc5e5e9faacfc92f5ec1 Mon Sep 17 00:00:00 2001
From: Olaoluwa Osuntokun 
Date: Wed, 29 Nov 2017 21:00:17 -0800
Subject: [PATCH 04/14] fixup! new bip: compact client side filtering

---
 gcs_light_client.mediawiki | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki
index 3fd063921d..d031990f6c 100644
--- a/gcs_light_client.mediawiki
+++ b/gcs_light_client.mediawiki
@@ -98,7 +98,7 @@ them over the network.
 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 array) of bytes. This value is
+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

From 33b6f49f08f1454e035c2561a058d703998239d2 Mon Sep 17 00:00:00 2001
From: Olaoluwa Osuntokun 
Date: Wed, 29 Nov 2017 23:12:50 -0800
Subject: [PATCH 05/14] fixup! new bip: compact client side filtering

---
 gcs_light_client.mediawiki | 457 +++++++++++++++++++++----------------
 1 file changed, 260 insertions(+), 197 deletions(-)

diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki
index d031990f6c..e20af798d7 100644
--- a/gcs_light_client.mediawiki
+++ b/gcs_light_client.mediawiki
@@ -61,6 +61,10 @@ 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
@@ -118,103 +122,40 @@ 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.
-
-== 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.
+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.
 
-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.
+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.
 
-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.
+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).
 
-=== Run-Length Encoding ===
+   * Some denotes a non-empty ITEM, equivalent to a
+      non-nil pointer or value
 
-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.
+   * None denotes an empty ITEM, equivalent to a nil
+      pointer or value
 
-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 -the 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
-
+== Specification == -[https://en.wikipedia.org/wiki/Golomb_coding Golomb Coding] encodes the two -values (q and m 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 +=== Compact Chain Filters === -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. +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 coding. These functions will be used in the next section as a -primitive in the construction of our compact filters. +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):
@@ -240,23 +181,6 @@ golomb_decode(stream, k) -> int:
     c*m + r
 
-To aide 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
-
- 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. @@ -274,12 +198,6 @@ 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. -P 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. - Given these two parameters, we can now construct our set. ==== Set Construction ==== @@ -292,15 +210,18 @@ Set construction takes three parameters: N, P and 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. +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 algorithmhttps://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 division and can be done with fewer -cycles cycles on CPUs that have 128-bit registers. +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: @@ -313,6 +234,7 @@ hashed_set_construct(N, P, raw_items, k): -> []uint64: let set_value = (siphash(k, item) * F) >> 64 set_items.append(set_value) + // Sorts in ascending order. set_items.sort() set_items @@ -320,16 +242,17 @@ hashed_set_construct(N, P, raw_items, k): -> []uint64: 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. +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) 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/. +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:
@@ -364,13 +287,13 @@ gcs_compress(sorted_set, fp) -> []byte:
 
 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
+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
+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.
@@ -484,12 +407,12 @@ this new operating mode.
 ==== Peer to Peer Service Bit ====
 
 To start, we reserve a currently unutilized service bit. This is required as
-light clients will need to ''preferentially'' peer to full-nodes that support
-the features outlined in this BIP.
+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: 
-* CFNodeCF = 1 << 6
+* SFNodeCF = 1 << 6
 
 ==== Filter Types ====
 
@@ -523,13 +446,25 @@ designed to do so.
 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 are to 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 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.
-
-Given a Bitcoin block, a full-node constructs a Normal compact
+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:
@@ -544,7 +479,8 @@ construct_normal_gcs_filter(block, fp) -> []byte:
 
         for output in tx.outputs:
             let output_bytes = extract_push_datas(output.script)
-            raw_items.append(output_bytes)
+            for output_byte in output_bytes:
+                raw_items.append(output_byte)
 
         if tx.is_coinbase():
             continue
@@ -568,8 +504,8 @@ construct_normal_gcs_filter(block, fp) -> []byte:
     gcs_compress(hashed_items, fp)
 
- -Given a Bitcoin block, a full-node construct an Extended compact filter as follows +Given a Bitcoin block, a full-node MUST construct an Extended +compact filter as follows:
 construct_extended_gcs_filter(block, fp) -> []byte:
 
@@ -598,6 +534,7 @@ construct_extended_gcs_filter(block, fp) -> []byte:
         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)
@@ -612,7 +549,7 @@ 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 should respond with a
+A full-node that receives a getcftypes message MUST respond with a
 cftypes message which is defined as follows:
 
 {| class="wikitable"
@@ -636,26 +573,34 @@ A full-node that receives a getcftypes message should respond with
 ==== Compact Filter Header Chain ====
 
 As the filters described in this BIP ''are not'' consensus critical, meaning
-each filter is 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
+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):
+   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))
 
@@ -668,50 +613,9 @@ field of the genesis block header itself, as there's no prior filter header
 
 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 public key script. In this case, the
+transaction that has no data pushes in its output script. In this case, the
 "hash" of said filter is simply "32 zeroes". 
 
-This filter header chain can 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. This allows light clients to efficiently detect nodes
-that advertise a conflicting filter chain history (by ensuring all nodes return
-the ''same'' filter header hash for a particular block hash).
-
-Additionally, the filter header chain also allows a light client to efficiently
-verify purported filter authenticity when fetching the next set of headers from
-chain tip. Instead of fetching the filter ''from each peer'' (which wastes
-bandwidth), a light client instead does the following:
-
-
-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 should 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 should also persistently compute and persist the filter header chain -on-disk, just as the regular filters. We now introduce two new messages to support the fetching and verification of the filter header chain by light clients. @@ -747,9 +651,11 @@ The getcfheaders message is defined as follows: The BlockLocators within the message are to be interpreted identically to the BlockLocators within Bitcoin's -getheaders and getblocks messages. +getheaders and getblocks messages https://en.bitcoin.it/wiki/Protocol_documentation. -The cfheaders message is defined as follows: +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 @@ -781,8 +687,8 @@ The cfheaders message is defined as follows: === Compact Filters === The last set of messages we introduce are for ''fetching'' the compact filters -themselves. Light clients can use these two messages to request a compact -filter for a particular block hash. +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: @@ -803,7 +709,9 @@ The getcfilter message is defined as follows: | Byte identifying the type of filter requested. |} -The cfilter message is defined as follows: +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 @@ -850,14 +758,15 @@ 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 has been chosen to be: 20, meaning the +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 paramter tuning can be found [here] +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 === @@ -876,9 +785,163 @@ 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. +== 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. + == 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 From 0a68479a0b5ffec4b5f2669d16a2e5791761b530 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 29 Nov 2017 23:14:22 -0800 Subject: [PATCH 06/14] fixup! new bip: compact client side filtering --- gcs_light_client.mediawiki | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki index e20af798d7..c3dd1b1f8e 100644 --- a/gcs_light_client.mediawiki +++ b/gcs_light_client.mediawiki @@ -896,6 +896,12 @@ to receive a "NO" (false) 32 times, before getting a "YES" (true, our false positive). Once again, P MUST be a power of two. +== 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 From 5d71117b3da9739d27c5eeb87a38903ea54e97cb Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 29 Nov 2017 23:18:34 -0800 Subject: [PATCH 07/14] fixup! new bip: compact client side filtering --- gcs_light_client.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki index c3dd1b1f8e..9e5c4c4014 100644 --- a/gcs_light_client.mediawiki +++ b/gcs_light_client.mediawiki @@ -21,7 +21,7 @@ resources required for full-nodes to service this new light client mode compared to BIP 37https://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: +37: 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 From 3728ea0db55f903760ea56c07777dc9465183cfc Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 29 Nov 2017 23:19:47 -0800 Subject: [PATCH 08/14] fixup! new bip: compact client side filtering --- gcs_light_client.mediawiki | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki index 9e5c4c4014..b003c1873b 100644 --- a/gcs_light_client.mediawiki +++ b/gcs_light_client.mediawiki @@ -21,7 +21,7 @@ resources required for full-nodes to service this new light client mode compared to BIP 37https://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: +37https://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 From de4c6c9cabd5d1c66aca92d4bb07e0e650818809 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 29 Nov 2017 23:20:42 -0800 Subject: [PATCH 09/14] fixup! new bip: compact client side filtering --- gcs_light_client.mediawiki | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki index b003c1873b..14692b9762 100644 --- a/gcs_light_client.mediawiki +++ b/gcs_light_client.mediawiki @@ -131,14 +131,12 @@ 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 +* 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 == From 3c31af657fcfd7ed8c89b4ed6fc9ef2d11e58321 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 29 Nov 2017 23:21:34 -0800 Subject: [PATCH 10/14] fixup! new bip: compact client side filtering --- gcs_light_client.mediawiki | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki index 14692b9762..41943cd5ef 100644 --- a/gcs_light_client.mediawiki +++ b/gcs_light_client.mediawiki @@ -131,12 +131,9 @@ 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 +* 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 == From 3ee99e66a93861b156a9bac2b9167b3acc5a2b82 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 29 Nov 2017 23:23:23 -0800 Subject: [PATCH 11/14] fixup! new bip: compact client side filtering --- gcs_light_client.mediawiki | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki index 41943cd5ef..818d9708c6 100644 --- a/gcs_light_client.mediawiki +++ b/gcs_light_client.mediawiki @@ -192,7 +192,7 @@ 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 ==== @@ -454,7 +454,7 @@ 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
+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. From ba823157135907382275ad063e54f74a1879a376 Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 29 Nov 2017 23:25:11 -0800 Subject: [PATCH 12/14] fixup! new bip: compact client side filtering --- gcs_light_client.mediawiki | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki index 818d9708c6..eb9e994272 100644 --- a/gcs_light_client.mediawiki +++ b/gcs_light_client.mediawiki @@ -454,13 +454,14 @@ 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 +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]

From bfe336c8e8845ae55bdc02eca28d93e1b11faddf Mon Sep 17 00:00:00 2001
From: Olaoluwa Osuntokun 
Date: Wed, 29 Nov 2017 23:26:36 -0800
Subject: [PATCH 13/14] fixup! new bip: compact client side filtering

---
 gcs_light_client.mediawiki | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki
index eb9e994272..3379ea92f6 100644
--- a/gcs_light_client.mediawiki
+++ b/gcs_light_client.mediawiki
@@ -450,8 +450,8 @@ 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,
+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.

From d52f586a1309be04e0297e44fa06f6241780e466 Mon Sep 17 00:00:00 2001
From: Olaoluwa Osuntokun 
Date: Wed, 29 Nov 2017 23:28:26 -0800
Subject: [PATCH 14/14] fixup! new bip: compact client side filtering

---
 gcs_light_client.mediawiki | 226 +++++++++++++++++++------------------
 1 file changed, 114 insertions(+), 112 deletions(-)

diff --git a/gcs_light_client.mediawiki b/gcs_light_client.mediawiki
index 3379ea92f6..eab1ccef52 100644
--- a/gcs_light_client.mediawiki
+++ b/gcs_light_client.mediawiki
@@ -781,117 +781,6 @@ 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.
 
-== 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. - - == Backwards Compatability == This light client protocl is NOT backwards compatible with BIP 37. Full nodes @@ -1008,6 +897,119 @@ 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 @@ -1034,7 +1036,7 @@ efficient compared to bloom filters GCS-based filters as they have a much lower implementation complexity and are easier to understand. -== Appendix B == +== Appendix C == === Test Vectors ===