@ethereumjs/verkle

中文文档
10.0.0发布于 2025/04/29MITTypeScriptESM + CJS近 30 天下载 1.5万

实施伊特鲁姆地区所使用藤树.

中文使用文档
文档目录15 节
  1. 目录
  2. 安装
  3. 开始
  4. 初始化
  5. 获取和设定值
  6. 证据
  7. Verkle 证明
  8. 浏览器
  9. API 密码
  10. 文档
  11. 混合 CJS/ESM 构建
  12. 调试
  13. 参考资料
  14. 爱丽丝
  15. 许可证

@ethereumjs/verkle (英语) v10 (警告)

NPM Package GitHub Issues Actions Status Code Coverage Discord

执行 微声树 二. 说明 EIP-6800 (英语)

Verkle树是一种加密数据结构,建议在Ethereum使用以优化存储和交易核实. 它们结合了默克勒·帕特里夏·特里斯(Merkle Patricia Tries)和矢量承诺树(Vector Conduction Trees)的特性,以提供更小的证明尺寸的有效数据验证. 目标是提高伊特鲁姆网络业务的可扩展性和效率.

说明: 这个图书馆在 实验 并且不应该用于生产!

目录

安装

要获得最新版本,只需使用 npm数字 :

npm install @ethereumjs/verkle

开始

初始化

为了初始化一棵树,我们提供一种合成构造器 createVerkleTree 返回一个 VerkleTree 适当初始化的示例 VerkleCrypto 用于执行由Verkle树使用的必要密码原始的软件包.

// ./examples/simple.ts#L7-L7

const tree = await createVerkleTree()

注:当前 VerkleCrypto 我们内部使用的库是 verkle-cryptography-wasm 这是WASM汇编 rust-verkle 包含一些 Javascript 特定包装和帮助方法的库.

如果你更愿意直接将树苗树类进行即时切除, 你可以通过已经切除的即时切除 VerkleCrypto 对象,然后手动初始化根节点.

// ./examples/diyVerkle.ts

import { MapDB, bytesToHex } from '@ethereumjs/util'
import { VerkleTree } from '@ethereumjs/verkle'
import * as verkle from 'micro-eth-signer/verkle'

const main = async () => {
  const tree = new VerkleTree({
    cacheSize: 0,
    db: new MapDB<Uint8Array, Uint8Array>(),
    useRootPersistence: false,
    verkleCrypto: verkle,
  })
  await tree.createRootNode()
  console.log(bytesToHex(tree.root())) // 0x0000000000000000000000000000000000000000000000000000000000000000
}

void main()

获取和设定值

使用组合值存储 stem 通过 getVerkleStem 函数由 @ethereumjs/util在Ethereum方面,为了检索与某一特定地址的账户有关的数据,我们将首先计算该地址的活字干(bitchle strict)getVerkleStem(verkleCrypto, address)),然后通过后缀来获取我们感兴趣的特定数据片段,通过后缀与数据对应的后缀来获取干子.

树上设计的目标是允许高效读取和写出相互“相近”的多个值 get 财务报告和审定财务报表 put 方法将一个干子作为第一个参数,然后是用于访问一个值的密钥的"后缀"(第32字节).

获取值

当获取给定的值时 0xc5e561a64a0f52c2d038d827293b3deab99a886d41cc0667c938946dcad853 和后缀 [0, 1],则 get 方法将访问存储在 0x781f1e4238f9de8b4d0ede9932f5a4d08f15dae70000 财务报告和审定财务报表 0x781f1e4238f9de8b4d0ede9932f5a4d08f15dae70001。 。 。 .

设置值

当存储给定的值时 0xc5e561a64a0f52c2d038d827293b3deab99a886d41cc0667c938946dcad853后缀 [0, 1]和数值 ['test', 'test2'],则 put 方法将把数值存储在 0xc5e561a64a0f52c2d038d827293b3deab99a886d41cc0667c938946dcad85300 财务报告和审定财务报表 0xc5e561a64a0f52c2d038d827293b3deab99a886d41cc0667c938946dcad85301。 。 。 .

完整的例子见下文.

// ./examples/simple.ts

import { bytesToUtf8, createAddressFromString, getVerkleStem, utf8ToBytes } from '@ethereumjs/util'
import { createVerkleTree } from '@ethereumjs/verkle'

async function test() {
  const addrHex = '0x781f1e4238f9de8b4d0ede9932f5a4d08f15dae7'
  const address = createAddressFromString(addrHex)
  const tree = await createVerkleTree()
  const stem = getVerkleStem(tree['verkleCrypto'], address)
  await tree.put(stem, [0], [utf8ToBytes('test')])
  const value = await tree.get(stem, [0, 1])
  console.log(value[0] ? bytesToUtf8(value[0]) : 'not found') // 'test'
  console.log(value[1] ? bytesToUtf8(value[1]) : 'not found') // 'not found'
}

void test()

证据

Verkle 证明

EthereumJS Verkle软件包仍在开发中,verkle验证生成尚未被支持.

浏览器

我们为所有图书馆提供混合的无害环境管理/CJS。 随着从2025年春季开始的v10断开发行回合,所有的库都是默认的"纯-JS",我们已经取消了所有硬接通的WASM代码. 此外,我们还大幅度地降低了捆绑大小,减少了依赖性的数量,并切除了Node.js特定原始物的所有用法(如Node.js事件发射器).

在现代浏览器内使用所提供的无害环境管理架构运行一个EthereumJS图书馆的浏览器是很容易的。 关于设置的例子,见 ./例/浏览器.html。 。 。 .

API 密码

文档

生成类型Doc API 文档

混合 CJS/ESM 构建

Verkle包与共同JS和无害环境管理同时被运出.

若您使用无害环境管理 import 在代码中,导入如下:

import { createVerkleTree } from '@ethereumjs/verkle'

如果您使用 Node.js 特定 require,CJS建筑将使用:

const { createVerkleTree } = require('@ethereumjs/verkle')

调试

此库使用 调试 调试工具包 .

这个 Verkle 类特性可选调试日志。 单个调试选择可在 CL 上激活 DEBUG=ethjs,[Logger Selection]。 。 。 .

有以下备选方案:

锁定器说明
verkle:#已发生核心活字操作
verkle:#:put已执行 verkle 操作
verkle:#:get已发生 verkle 操作
verkle:#:del已发生 verkle del 操作
verkle:#:find_path正在搜索一个节点

观察不同级别的伐木情况:

最小记录运行 :

DEBUG=ethjs,verkle npx vitest test/verkle.spec.ts

运行 设置 方法记录 :

DEBUG=ethjs,verkle:put npx vitest test/verkle.spec.ts

运行 响起 + 键 设置编号 :起来编号 :三角形 日志 :

DEBUG=ethjs,verkle,verkle:put,verkle:get,verkle:del npx vitest test/verkle.spec.ts

使用最大记录运行 :

DEBUG=ethjs,verkle:* npx vitest test/verkle.spec.ts

ethjs 必须 列入 DEBUG 启用的环境变量 任意 木头. 附加的日志选择可以用逗号分隔列表来添加(没有空格). 带有扩展名的日志可以用冒号启用 :,以及 * 可用于包含所有扩展.

DEBUG=ethjs,verkle:#:put,verkle:#:find_path:* npx vitest test/interop.spec.ts

参考资料

爱丽丝

看我们的组织 文档 介绍 EthereumJS 以及关于现行标准和最佳做法的资料。 如果你想参加工作或改进图书馆,请审查我们 捐款准则 先说.

许可证

麻省理工学院

版本与发布记录

@ethereumjs/verkle 共发布 6 个版本,首次发布于 2024/02/09;过去 12 个月发布了 0 个版本。

版本发布日期距今
10.0.0latest2025/04/291.5 年前
10.0.0-dev-rc.1rc2025/03/251.6 年前
0.2.0-alpha.1alpha2024/10/172 年前
0.1.02024/08/152 年前
0.0.22024/03/182 年前
0.0.12024/02/092 年前

关于 @ethereumjs/verkle 的常见问题

@ethereumjs/verkle 是什么?

实施伊特鲁姆地区所使用藤树.

如何安装 @ethereumjs/verkle?

在项目目录运行 npm install @ethereumjs/verkle,或使用 pnpm add / yarn add / bun add。

@ethereumjs/verkle 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@ethereumjs/verkle 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@ethereumjs/verkle 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@ethereumjs/verkle 可以商用吗?

@ethereumjs/verkle 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@ethereumjs/verkle 的下载量有多少?

根据 npm 官方下载统计,@ethereumjs/verkle 在 2026/10/14 – 2026/11/12 这 30 天内被下载 14,994 次,日均约 500 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ethereumjs/verkle 还在维护吗?

最新版本 10.0.0 发布于 2025/04/29(1.5 年前);至今共发布 6 个版本,其中过去 12 个月发布了 0 个;首次发布于 2024/02/09。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。