Jim Posen
ad0070fa44
gcs/builder: Deduplicate items before creating block filters.
2018-05-15 19:14:18 -07:00
Jim Posen
cbc2d0fee6
Allow construction of empty filters.
2018-05-15 19:14:18 -07:00
Jim Posen
884680ddbd
Serialize filter with N as a VarInt instead of fixed-size.
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
9da482119c
gcs/builder: revert recursion of push datas in p2sh/witness
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
54b6d534d2
gcs: extract fast reduce into distinct func, add comments
2018-05-15 19:14:18 -07:00
Alex
5151e0586d
gcs/builder: move tx hash from extended into basic filter
2018-05-15 19:14:18 -07:00
Alex
6cffb54a22
gcs/builder: recurse into P2SH/witness scripts
2018-05-15 19:14:18 -07:00
Alex
03a7f9b01f
gcs/builder: fix tests by rebuilding filter, making failure to match fatal
2018-05-15 19:14:18 -07:00
Alex
dabaf053db
gcs: update modulo algorithm to fast range per gmaxwell's suggestion
...
The BIP will now specify that the fast range described at the URL
below is used instead of modulo:
https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/
2018-05-15 19:14:18 -07:00
Alex
0878c162dd
gcs: update benchmarks to use correct import
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
e14ee486e6
gcs: fix constant overflow for 32-bit systems
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
18097a52c4
gcs: explicitly optimize inner loop of gcs filter computation
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
c26776fe48
gcs: add an extra benchmark for a filter with 100k items
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
e87fef40f3
gcs: ensure benchmarks aren't optimized away by the compiler
...
This commit modifies the benchmarks a bit to ensure that the
computations themselves aren’t optimized away. We do this by binding
each variable to a local variable, and them ultimately a variable at
the package level scope.
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
5a770ec85e
gcs/builder: an empty filter has a zero-hash
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
65172ea539
gcs/builder: ignore scripts with no data pushes
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
b3d8578868
gcs: add witness stack items to filter, update tests
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
c01c00e8b4
gcs: check to see if sigScript exists before adding it
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
0830c7046f
gcs: fix slight typo in docs, 2^-n not 2^-1
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
c59d7e8fba
gcs: pre-allocate capacity of slice for uncompressed filter values
...
This change will reduce the total number of allocations required to
create/store the allocated filter as we’ll now perform a _single_
allocation, rather than one each time the the dynamically size slice
reaches capacity.
2018-05-15 19:14:18 -07:00
Olaoluwa Osuntokun
0f2eb80fdb
gcs: add some line spacing, wrap comments to 80 characters
2018-05-15 19:14:18 -07:00
Alex
e3c79234e6
gcs/builder: Add pre-BIP block filter and header calculations.
2018-05-15 19:14:18 -07:00
Alex
f74edf2c4d
gcs: allow optional de/serialization of N and P parameters
2018-05-15 19:14:18 -07:00
Alex
ca65f28ca1
Ignore error from txscript.PushedData
2018-05-15 19:14:18 -07:00
Alex
12e95e2790
gcs: improve test coverage for builder
2018-05-15 19:14:18 -07:00
Alex
197462ade8
README.md fixes
2018-05-15 19:14:18 -07:00
Alex
856e3a320d
Change OutPoint index encoding to little-endian to match Bitcoin
2018-05-15 19:14:18 -07:00
Alex
119a03a3ca
Add comment to DefaultP to fix lint issue with exported constant.
2018-05-15 19:14:18 -07:00
Alex
6654eb61e4
Add filter builder and some tests
2018-05-15 19:14:18 -07:00
Alex
53c8e22157
Change tests to use gcs.Filter instead of custom interface
2018-05-15 19:14:18 -07:00
Alex
b21739c0e2
Fix issues found by golint without changing API.
2018-05-15 19:14:18 -07:00
Alex
684cf07725
Rename gcsFilter type to GCSFilter to export it.
2018-05-15 19:14:18 -07:00
Alex
3069dcf175
gcs: add package for building and using Golomb-coded set filters
2018-05-15 19:14:18 -07:00