Native node bindings for Ethash cpp implementation. This library is experimental. Use at your own risk. Currently working on Linux only. Tested on node v5.10.1.
For details on this project, please see the Ethereum wiki (https://github.com/ethereum/wiki/wiki/Ethash) and ethereumjs/ethashjs (https://github.com/ethereumjs/ethashjs).
$ git clone https://github.com/ethereumjs/node-ethash.git
$ cd node-ethash/
$ git submodule init
$ git submodule update
$ npm install
new Ethash([cacheDB])
ethash.verifyPOW(block, cb)
ethash.mkcache(cacheSize, seed)
ethash.run(val, nonce, fullSize)
ethash.loadEpoc(number, cb)
new Ethash([cacheDB])
Creates a new instance of Ethash
.
Parameters
cacheDB
- an instance of a levelup
DB which is used to store the cache(s).
Need by ethash.verifyPOW()
and
ethash.loadEpoc()
ethash.verifyPOW(block, cb)
Verifies the POW on a block and its uncles.
Note: uses ethash.loadEpoc()
to load cache.
Parameters
block
- the block to verifycb
- callback which is given a Boolean
determining the validity of the blockethash.mkcache(cacheSize, seed)
Creates a cache.
NOTE: this is automatically done for in
ethash.verifyPOW()
so you do not need to use this function if you are just validating blocks.
Parameters
cacheSize
- the size of the cacheseed
- the seed as a Buffer
ethash.run(val, nonce, fullSize)
Runs ethash on a given val/nonce pair.
NOTE: you need to run ethash.mkcache()
first before using this function.
Parameters
val
- header hash as Buffer
seed
- the seed as a Buffer
fullSize
- the fullsize of the cacheReturn
an Object
containing
hash
- the hash of the valuemix
- the mix resultethash.loadEpoc(number, cb)
Loads block number epoc's cache from DB.
Parameters
number
- the block's numbercb
- callback called after the epoc was loaded$ npm test
$ node benchmark/benchmark.js
Create 1 fixtures
++++++++++++++++++++++++++++++++++++++++++++++++++
Benchmarking: mkcache
--------------------------------------------------
bindings x 1.47 ops/sec ±2.31% (8 runs sampled)
ethashjs x 0.17 ops/sec ±13.59% (5 runs sampled)
==================================================
Benchmarking: run
--------------------------------------------------
bindings x 571 ops/sec ±3.52% (79 runs sampled)
ethashjs x 17.82 ops/sec ±1.58% (48 runs sampled)
==================================================
ethash.run()
's testsThis library is free and open-source software released under the MIT license.