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 🙏

© 2026 – Pkg Stats / Ryan Hefner

@effectstream/crypto

v0.103.3

Published

Multi-chain signature verification for EffectStream

Readme

@effectstream/crypto

Multi-chain signature verification - one API that verifies wallet signatures from EVM, Cardano, Polkadot, Algorand, Mina, Midnight, and Solana. Also includes the Prando seeded RNG used for on-chain-derived randomness.

  • Multi-chain signature verification: EVM, Cardano, Polkadot, Algorand, Mina, Midnight, Solana.
  • Bundles the Prando seeded RNG for on-chain-derived randomness.
  • Used by the batcher to verify user-submitted input signatures.
  • Only depends on @effectstream/utils; safe to use standalone.

Install

bun add @effectstream/crypto
# or
npm install @effectstream/crypto

Standalone usage

Any TypeScript app that lets users sign in with a wallet can use CryptoManager to verify the signature server-side, without pulling in the rest of EffectStream.

import { CryptoManager } from "@effectstream/crypto";
import { AddressType } from "@effectstream/utils";

const evm = CryptoManager.getCryptoManager(AddressType.EVM);

const ok = await evm.verifySignature(
  "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd",
  "Sign in to my dapp at 2026-05-14T00:00:00Z",
  "0x...the 130-hex-char signature...",
);

if (!ok) throw new Error("bad signature");

The same CryptoManager works for Cardano, Polkadot, Algorand, Mina, and Midnight signatures - switch the AddressType and pass the chain-native signature string.

Deterministic randomness with Prando

Prando is a seeded RNG you can drive from any deterministic source (block hash, transaction id, RNG-as-a-service result). Useful for on-chain games that need verifiable shuffles or dice rolls.

import { Prando } from "@effectstream/crypto";

const rng = new Prando(blockHash); // any string or number seed
const roll = rng.nextInt(1, 6);

// Re-seeding with the same value reproduces the same sequence.
const replay = new Prando(blockHash);
replay.nextInt(1, 6); // === roll

Inside EffectStream

@effectstream/crypto is what the batcher uses to verify user-submitted input signatures before accepting them into a batch, and what the state machine uses to derive randomness from on-chain hashes (generateEffectstreamBlockHash). It depends only on @effectstream/utils.

Key exports

  • CryptoManager - chain-aware factory. CryptoManager.getCryptoManager(addressType) returns an IVerify. Per-chain accessors: CryptoManager.Evm(), .Cardano(), .Polkadot(), .Algorand(), .Mina(), .Midnight(), .Solana().
  • IVerify - common interface: verifyAddress, verifySignature, decodeAddress.
  • Prando - seeded deterministic RNG. next(), nextInt(lo, hi), nextString(n), reset().
  • generateEffectstreamBlockHash - block-hash helper used by the EffectStream runtime.

Examples

Runnable examples: src/Prando.test.ts and test/examples.test.ts. Both run as part of bun test ./packages.

For end-to-end signature flows, see e2e/evm/sync/batcher.test.ts.

Links

  • Docs: https://effectstream.github.io/docs/packages/sdk/crypto
  • Source: https://github.com/effectstream/effectstream/tree/main/packages/effectstream-sdk/crypto