Skip to content
This repository was archived by the owner on Dec 10, 2020. It is now read-only.
/ ethashjs Public archive

Project is in active development and has been moved to the EthereumJS VM monorepo.

License

Notifications You must be signed in to change notification settings

ethereumjs/ethashjs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

72 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SYNOPSIS

NPM Package Actions Status Coverage Status Discord

Implements Ethash.

INSTALL

npm install ethashjs

USAGE

const Ethash = require('ethashjs')
const Block = require('ethereumjs-block')
const levelup = require('levelup')
const memdown = require('memdown')

var cacheDB = levelup('', {
  db: memdown
})

var ethash = new Ethash(cacheDB)
var validblockRlp =
  'f90667f905fba0a8d5b7a4793baaede98b5236954f634a0051842df6a252f6a80492fd888678bda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0f93c8db1e931daa2e22e39b5d2da6fb4074e3d544094857608536155e3521bc1a0bb7495628f9160ddbcf6354380ee32c300d594e833caec3a428041a66e7bade1a0c7778a7376099ee2e5c455791c1885b5c361b95713fddcbe32d97fd01334d296b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84559c17b9b9040001020304050607080910111213141516171819202122232410000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000a09c7b47112a3afb385c12924bf6280d273c106eea7caeaf5131d8776f61056c148876ae05d46b58d1fff866f864800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d8785012a05f200801ba01d2c92cfaeb04e53acdff2b5d42005ff6aacdb0105e64eb8c30c273f445d2782a01e7d50ffce57840360c57d94977b8cdebde614da23e8d1e77dc07928763cfe21c0'

var validblock = new Block(Buffer.from(validblockRlp, 'hex'))

ethash.verifyPOW(validblock, function (result) {
  console.log(result)
})

BROWSER

Yep, you can browserify it.

API

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)

ethash.verifyPOW(block, cb)

Verifies the POW on a block and its uncles

Parameters

  • block - the block to verify
  • cb - the callback which is given a Boolean determining the validaty of the block

ethash.mkcache(cacheSize, seed)

Creates a cache. NOTE: this is automatically done for in - ethash.verifyPOW(block, cb) so you do not need to use this function if you are just validating blocks

Parameters

  • cachSize - the size of the cach
  • seed - the seed as a Buffer

ethash.run(val, nonce, fullsize)

Runs ethash on a give val/nonce pair. NOTE: you need to run ethash.mkcache(cacheSize, seed) first before using this function.

Parameters

  • val - value to run ethash on e.g. the header hash
  • nonce - the nonce used for this hash attempt
  • fullsize - the fullsize of the cache.

Returns

An Object containing:

  • hash - the hash of the value
  • mix - the mis result

TESTS

npm test

LICENSE

MPL-2.0

About

Project is in active development and has been moved to the EthereumJS VM monorepo.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 10