diff --git a/eth_bloom.nimble b/eth_bloom.nimble index 08dae2e..a2f70ed 100644 --- a/eth_bloom.nimble +++ b/eth_bloom.nimble @@ -10,8 +10,8 @@ srcDir = "src" requires "nim >= 0.18", "nimcrypto", - "ttmath" + "stint" task test, "Run tests": --run - setCommand "cpp", "tests/test1.nim" + setCommand "c", "tests/test1.nim" diff --git a/src/eth_bloom.nim b/src/eth_bloom.nim index 712d68f..b4e8231 100644 --- a/src/eth_bloom.nim +++ b/src/eth_bloom.nim @@ -1,4 +1,6 @@ -import ttmath, nimcrypto +import stint, nimcrypto + +type UInt2048 = StUint[2048] iterator chunksForBloom(h: MDigest[256]): array[2, uint8] = yield [h.data[0], h.data[1]] @@ -8,7 +10,7 @@ iterator chunksForBloom(h: MDigest[256]): array[2, uint8] = proc chunkToBloomBits(chunk: array[2, uint8]): UInt2048 = let h = chunk[0].int let l = chunk[1].int - 1.u2048 shl ((l + (h shl 8)) and 2047).uint32 + one(UInt2048) shl ((l + (h shl 8)) and 2047) iterator bloomBits(h: MDigest[256]): UInt2048 = for chunk in chunksForBloom(h): @@ -19,7 +21,7 @@ type BloomFilter* = object proc incl(f: var BloomFilter, h: MDigest[256]) = # Should this be public? for bits in bloomBits(h): - f.value |= bits + f.value = f.value or bits # TODO: The following 2 procs should be one genric, but it doesn't compile. Nim bug? proc incl*(f: var BloomFilter, v: string) = f.incl(keccak256.digest(v)) @@ -27,7 +29,7 @@ proc incl*(f: var BloomFilter, v: openarray[byte]) = f.incl(keccak256.digest(v)) proc contains(f: BloomFilter, h: MDigest[256]): bool = # Should this be public? for bits in bloomBits(h): - if isZero(f.value and bits): return false + if (f.value and bits).isZero: return false return true template contains*[T](f: BloomFilter, v: openarray[T]): bool = diff --git a/tests/test1.nim b/tests/test1.nim index 6fbf8cc..c7ebe2b 100644 --- a/tests/test1.nim +++ b/tests/test1.nim @@ -1,4 +1,4 @@ -import eth_bloom, ttmath, unittest +import eth_bloom, stint, unittest suite "Simple Bloom Filter tests": test "incl proc": @@ -14,4 +14,4 @@ suite "Simple Bloom Filter tests": var f: BloomFilter f.incl("value 1") f.incl("value 2") - check f.value == u2048"1090215279796298345343057319992441901006450066263950115824040002588950485497113027143927523755823134941133023716890165043342811041924870874305880232180990464248298835944719578227183672673286106858273952584661686762419935928160959430409028732374024192153399763277382459194254234587232383494962731940352290891816707697788111127980409605093135659121120897102645250001200507634146244124778321795865777525978540960830042468420173693965828992647991129039043403835835590424035347457188427354145120006479590726476620907513681178254852999008485376" + check f.value == parse("1090215279796298345343057319992441901006450066263950115824040002588950485497113027143927523755823134941133023716890165043342811041924870874305880232180990464248298835944719578227183672673286106858273952584661686762419935928160959430409028732374024192153399763277382459194254234587232383494962731940352290891816707697788111127980409605093135659121120897102645250001200507634146244124778321795865777525978540960830042468420173693965828992647991129039043403835835590424035347457188427354145120006479590726476620907513681178254852999008485376", StUint[2048])