@ethereumjs/verkle (英语) v10 (警告)
| 执行 微声树 二. 说明 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 以及关于现行标准和最佳做法的资料。 如果你想参加工作或改进图书馆,请审查我们 捐款准则 先说.