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

@ethereumjs/binarytree

v10.1.3

Published

Implementation of binary trees as used in Ethereum.

Readme

@ethereumjs/binarytree v10 (EXPERIMENTAL)

NPM Package GitHub Issues Actions Status Code Coverage Discord

| Implementation of Binary Trees as specified in EIP-7864 | | -------------------------------------------------------------------------------------------------- |

Binary Trees are a novel cryptographic data structure proposed for Ethereum state storage with smaller proof sizes than Merkle Patricia Tries. Keys map to a stem (first 31 bytes) and index (last byte) within a stem node.

This library is experimental — APIs are not stable and it must not be used in production.

Runnable examples live in examples/.

Table of Contents

Installation

npm install @ethereumjs/binarytree

Getting Started

Use createBinaryTree() to instantiate a tree. By default an in-memory MapDB is used; pass db for persistence.

// ./examples/basicUsage.ts

import { createBinaryTree } from '@ethereumjs/binarytree'
import { bytesToHex, hexToBytes } from '@ethereumjs/util'

const main = async () => {
  const tree = await createBinaryTree()

  const key = hexToBytes(`0x${'00'.repeat(32)}`)
  const value = hexToBytes(`0x${'01'.repeat(32)}`)
  const stem = key.slice(0, 31)
  const index = key[31]

  await tree.put(stem, [index], [value])
  const [retrieved] = await tree.get(stem, [index])

  console.log(`Root: ${bytesToHex(tree.root())}`)
  console.log(`Value match: ${bytesToHex(retrieved!)}`)
}

void main()

put(stem, indices, values) accepts parallel arrays of slot indices and 32-byte values within one stem. get(stem, indices) returns values in the same order.

Options (BinaryTreeOpts): db, useRootPersistence, cacheSize, hashFunction (defaults to BLAKE3).

Proofs

Create inclusion proofs with tree.createBinaryProof(key), verify with verifyBinaryProof(), and rebuild a sparse tree from proof nodes with binaryTreeFromProof():

// ./examples/binaryProof.ts

import { binaryTreeFromProof, createBinaryTree, verifyBinaryProof } from '@ethereumjs/binarytree'
import { bytesToHex, hexToBytes } from '@ethereumjs/util'
import { blake3 } from '@noble/hashes/blake3.js'

const main = async () => {
  const tree = await createBinaryTree()

  const key = hexToBytes(`0x${'00'.repeat(31)}01`)
  const hashedKey = blake3(key)
  const value = hexToBytes(`0x${'02'.repeat(32)}`)
  const stem = hashedKey.slice(0, 31)
  const index = hashedKey[31]

  await tree.put(stem, [index], [value])

  const proof = await tree.createBinaryProof(hashedKey)
  const verified = await verifyBinaryProof(tree.root(), hashedKey, proof)
  const sparse = await binaryTreeFromProof(proof)

  console.log(`Proof length: ${proof.length} nodes`)
  console.log(`Verified value: ${bytesToHex(verified!)}`)
  console.log(`Sparse tree root match: ${bytesToHex(sparse.root()) === bytesToHex(tree.root())}`)
}

void main()

Proof keys are typically blake3(address || treeIndex || subIndex) as used by the Verkle/binary-tree state layer. A valid proof of non-existence returns null / undefined from verifyBinaryProof().

Browser

Hybrid ESM/CJS builds are provided. For a browser setup see ./examples/browser.html (build the package, then npx vite from the package root).

API

Generated TypeDoc documentation.

Main exports: BinaryTree, createBinaryTree, binaryTreeFromProof, verifyBinaryProof, CheckpointDB, node types under ./node.

Used by StatefulBinaryTreeStateManager in @ethereumjs/statemanager when EIP-7864 is activated on Common.

EthereumJS

The EthereumJS GitHub organization and its repositories are managed by members of the former Ethereum Foundation JavaScript team and the broader Ethereum community. If you want to join for work or carry out improvements on the libraries see the developer docs for an overview of current standards and tools and review our code of conduct.

License

MIT