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

blockchain-ts

v1.1.0

Published

Fully fledged PoW blockchain implementation in TypeScript.

Downloads

5

Readme

blockchain

Fully fledged PoW blockchain implementation in TypeScript.

Features/Setup

  • Proof of Work (similar to Bitcoin's Hashcash)
  • Consensus (similar to Bitcoin's longest chain)
  • Implemented Node P2P communication via HTTP/S (register, transaction, blocks)
  • Addresses in RSA PEM 1024/2048 easily swapable with e.g. elliptic curves
  • Transaction SHA256 signature validation
  • SHA256 Block Hashes
  • All node operations are call-able via HTTP API
  • Chain backed to disk in nodes via SQLite3 easily swapable with a different backend

Use

Prepare

Requires Node.js > 8.x.x and yarn (npm i -g yarn).

yarn

Start

yarn start

Test

3 Node Network E2E Tests

P2P Protocol

yarn test:p2p

Consensus Algorithm

yarn test:consensus

HTTP Node API

Client Facing

  • GET /api/address/new blocking operation

  • POST /api/address/transactions/:address - {address}

  • POST /api/address/balance/:address - {address}

  • GET /api/blocks/last

  • POST /api/transaction/sign - {transaction, address, privateKey} test endpoint

  • POST /api/transactions/new - {sender, recipient, amount, payload, timestamp, signature}

Operations (trigger)

  • GET /api/mine blocking operation
  • GET /api/nodes/resolve

P2P Node Protocol

  • POST /api/nodes/register - {nodes}
  • GET /api/peer/chain p2p node endpoint
  • POST /api/peer/transaction - {transaction} p2p node endpoint
  • POST /api/peer/block - {block} p2p node endpoint

License

Apache License 2.0

Further Scaling Oppertunities

  • During conflict resolvation the servering node streams TransferInterface to the fetching client node, but currently the client node does not stream insert the blockchain.
  • Currently the blockchain validation function is based on a full in memory process, to scale further this needs to either be chunked/streamed or based on a db process.
  • The balance of a sender should be checked when a transaction is made and when such a transaction is received by another node via peer communcation (requires a single function call)
  • Additional hardening might be needed in case of blocks that are mined at the exact same time
  • Addresses should be switched to elliptic curves to generate and sign faster
  • SQLite3 should be switched with a more scaleable database
  • Nodes should constantly extend their known nodes, by asking for other registered nodes (easily implemented)