npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

hashcash-token

v1.0.0

Published

Generate proof-of-work tokens

Downloads

72

Readme

hashcash-token

generate tokens that prove you did some work.

easily configure the amount of work proven by each token by requiring the target difficulty to be included in the hash.

example

  var hashcashToken = require('hashcash-token')

  //Generate a token.

  var token = hashcashToken.generate({
    difficulty: 10000, // should take, on average, 10000 hashes to generate a valid token
    data: "woot"
  })

  var isValid = hashcashToken.validate(token);
  console.log(isValid); // true

  // Validate the token using constraints

  hashcashToken.validate(token, {
    difficulty: 20000,
    data: "blerp"
  }) // false

  hashcashToken.validate(token, {
    difficulty: 5000 // minimum difficulty. token difficulty just has to be greater than 5000
  }) // true

  var isRareEnough = hashcashToken.validate(token, {
    rarity: 15000
  }) // true sometimes, false sometimes.

methods

  var hashcashToken = require("hashcash-token")

var token = hashcashToken.generate(opts)

options can be:

  • opts.difficulty - the number of hashes (on average) it should take to generate the token.
  • opts.data - the main text body of the token. Maybe you want to issue a challenge token to a user? That'd go here.
  • opts.nonce - if you for some strange reason want to start searching from a certain nonce, you can specify it here.

and will return a token like

  { 
    difficulty: 10000,
    data: 'woot',  
    nonce: 5798283827805,
    rarity: 19250.060837947112,
    hash: '0000692aeec5132190df5dcb819ab33590b6a15e46b9348ef41b08758a0d4f5b' 
  }

where the hash is sufficiently low. Note that this is a blocking operation that can potentially take a long time.

  • token.rarity - represents the average number of hashes required to find a hash at least as small as this token's.

var isValid = hashcashToken.validate(token, constraints)

returns true or false

constraints:

  • constraints.difficulty - the token's difficulty has to be greater than this number.
  • constraints.data - the token's data must === this. Just a little convenience.
  • constraints.rarity - the token's rarity must be greater than this number.

install

With npm do:

npm install hashcash-token

license

MIT