# @ethereumjs/block 中文文档

规范地址：https://npmcn.com/package/%40ethereumjs/block/

版本：10\.1\.3
npm 元数据更新时间：2026-08-21T12:54:05.208Z
中文译文更新时间：2026-11-13T23:38:32.613Z
软件包许可：MPL-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40ethereumjs/block
原文对照：https://npmcn.com/package/%40ethereumjs/block/?lang=original
项目主页：https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/block#readme
源码仓库：https://github.com/ethereumjs/ethereumjs-monorepo

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：638 kB，133 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=20
- 运行依赖：7 个
- 首次发布：2020-10-22T09:34:37.667Z
- 最新版本发布：2026-08-21T12:54:05.025Z
- 近 30 天下载量：512783（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：78（近 12 个月 5 个）

## 中文简介

提供块序列化和帮助函数

## 安装

```sh
npm install @ethereumjs/block
```

也可以使用：`pnpm add @ethereumjs/block`、`yarn add @ethereumjs/block`、`bun add @ethereumjs/block`

## README

# @ethereumjs/块 `v10`

[![NPM Package](https://img.shields.io/npm/v/@ethereumjs/block.svg)](https://www.npmjs.com/package/@ethereumjs/block) [![GitHub Issues](https://img.shields.io/github/issues/ethereumjs/ethereumjs-monorepo/package:%20block?label=issues)](https://github.com/ethereumjs/ethereumjs-monorepo/issues?q=is%3Aopen+is%3Aissue+label%3A%22package%3A+block%22) [![Actions Status](https://github.com/ethereumjs/ethereumjs-monorepo/workflows/Block/badge.svg)](https://github.com/ethereumjs/ethereumjs-monorepo/actions?query=workflow%3A%22Block%22) [![Code Coverage](https://codecov.io/gh/ethereumjs/ethereumjs-monorepo/branch/master/graph/badge.svg?flag=block)](https://codecov.io/gh/ethereumjs/ethereumjs-monorepo/tree/master/packages/block) [![Discord](https://img.shields.io/static/v1?logo=discord&label=discord&message=Join&color=blue)](https://discord.gg/TNwARpR)

| 执行与Ethereum区块有关的计划和功能. |
| --- |

-   所有块特性直到 **大阪( 大阪)**
-   \*
-   受控制依赖的一组(4个外部+) `@noble` 密码)
-   🔮 `EIP-4844` 硬块 Txs
-   🔮 `EIP-7594` PerDAS 集团交易
-   💸 `EIP-4895` 灯塔链退出
-   📨 `EIP-7685` 协商一致层请求
-   📋 `EIP-7928` 区块级访问列表 Hash(阿姆斯特丹,实验性)
-   🕐 `EIP-7843` Slot 编号页眉字段( Amsterdam, 实验)
-   QQ324KB 捆绑大小( 81KB gziped)
-   QQ 无 WASM 默认 + 完整浏览器已准备好

可运行的示例 [`examples/`](https://npmcn.com/package/%40ethereumjs/block/examples/)。 。 。 .

## 目录

-   [安装](https://npmcn.com/package/%40ethereumjs/block/#readme-installation)
-   [开始](https://npmcn.com/package/%40ethereumjs/block/#readme-getting-started)
-   [创建块](https://npmcn.com/package/%40ethereumjs/block/#readme-creating-blocks)
-   [EIP-1559 基费](https://npmcn.com/package/%40ethereumjs/block/#readme-eip-1559-base-fee)
-   [EIP-4895 退出](https://npmcn.com/package/%40ethereumjs/block/#readme-eip-4895-withdrawals)
-   [EIP-4844 块块](https://npmcn.com/package/%40ethereumjs/block/#readme-eip-4844-blob-blocks)
-   [EIP-7685 CL 请求](https://npmcn.com/package/%40ethereumjs/block/#readme-eip-7685-cl-requests)
-   [EIP-7928 屏蔽出入列表 Hash](https://npmcn.com/package/%40ethereumjs/block/#readme-eip-7928-block-access-list-hash)
-   [EIP-7843 槽数](https://npmcn.com/package/%40ethereumjs/block/#readme-eip-7843-slot-number)
-   [协商一致类型](https://npmcn.com/package/%40ethereumjs/block/#readme-consensus-types)
-   [浏览器](https://npmcn.com/package/%40ethereumjs/block/#readme-browser)
-   [API 密码](https://npmcn.com/package/%40ethereumjs/block/#readme-api)
-   [测试](https://npmcn.com/package/%40ethereumjs/block/#readme-testing)
-   [爱丽丝](https://npmcn.com/package/%40ethereumjs/block/#readme-ethereumjs)
-   [许可证](https://npmcn.com/package/%40ethereumjs/block/#readme-license)

## 安装

```shell
npm install @ethereumjs/block
```

**说明:** 对于 `EIP-4844` 需要设置 KZG 块 `Common` 看到了吗 [@ethereumjs/tx KZG 设置](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/tx#kzg-setup)。 。 。 .

## 开始

`Block` 财务报告和审定财务报表 `BlockHeader` 对象通过独立的工厂函数创建( 不) `new Block()`) (中文(简体) ). 属性默认被冻结( E)`freeze: false` 页:1.

```ts
// ./examples/createBlockHeader.ts

import { createBlockHeader } from '@ethereumjs/block'
import { bytesToHex } from '@ethereumjs/util'

import type { HeaderData } from '@ethereumjs/block'

const headerData: HeaderData = {
  number: 15,
  parentHash: '0x6bfee7294bf44572b7266358e627f3c35105e1c3851f3de09e6d646f955725a7',
  gasLimit: 8000000,
  timestamp: 1562422144,
}
const header = createBlockHeader(headerData)
console.log(`Created block header with hash=${bytesToHex(header.hash())}`)
```

主构造器 :

| 工厂 | 目的 |
| --- | --- |
| `createBlock()` | 完整块从 `BlockData` |
| `createEmptyBlock()` | 仅用页眉块块 |
| `createBlockFromRLP()` | 解码序列化块字节 |
| `createBlockFromRPC()` 编号 : `createBlockFromJSONRPCProvider()` | 从 JSON- RPC 块对象 |
| `createBlockFromExecutionPayload()` 编号 : `createBlockFromBeaconPayloadJSON()` | 从 CL 执行有效载荷 |
| `createBlockHeader()` | 以上仅标头的变体 |

三次帮助 : `genTransactionsTrieRoot()`, (中文(简体) ), `genWithdrawalsTrieRoot()`, (中文(简体) ), `genRequestsRoot()`。 。 。 .

## 创建块

### 与交易

```ts
// ./examples/createBlockWithTxs.ts

import { createBlock, genTransactionsTrieRoot } from '@ethereumjs/block'
import { Common, Mainnet } from '@ethereumjs/common'
import { createFeeMarket1559Tx } from '@ethereumjs/tx'
import { bytesToHex, createAddressFromString, hexToBytes } from '@ethereumjs/util'

const main = async () => {
  const common = new Common({ chain: Mainnet })
  const privateKey = hexToBytes('0xe331b6d69882b4cb4ea581d88e0b604039a3de5967688d3dcffdd2270c0fd109')

  const tx = createFeeMarket1559Tx(
    {
      type: 2,
      nonce: 0n,
      gasLimit: 21_000n,
      maxFeePerGas: 100n,
      maxPriorityFeePerGas: 1n,
      to: createAddressFromString('0xcccccccccccccccccccccccccccccccccccccccc'),
      value: 1n,
    },
    { common },
  ).sign(privateKey)

  const block = createBlock({ transactions: [tx] }, { common, skipConsensusFormatValidation: true })
  const transactionsRoot = await genTransactionsTrieRoot(block.transactions)

  console.log(`Block with ${block.transactions.length} transaction(s)`)
  console.log(`Transactions root: ${bytesToHex(transactionsRoot)}`)
}

void main()
```

### RLP 往返

```ts
// ./examples/blockFromRLP.ts

import { createBlock, createBlockFromRLP } from '@ethereumjs/block'
import { Common, Mainnet } from '@ethereumjs/common'
import { bytesToHex } from '@ethereumjs/util'

const common = new Common({ chain: Mainnet })

const block = createBlock(
  {
    header: {
      number: 1n,
      gasLimit: 30_000_000n,
    },
  },
  { common, skipConsensusFormatValidation: true },
)

const serialized = block.serialize()
const decoded = createBlockFromRLP(serialized, { common })

console.log(`Serialized ${serialized.length} bytes`)
console.log(`Round-trip hash match: ${bytesToHex(decoded.hash()) === bytesToHex(block.hash())}`)
```

打电话 `await block.validateData()` 进行协商一致和交易核对。 使用 `skipConsensusFormatValidation: true` 当标题字段故意不完整时,在示例和测试中.

## EIP-1559 基费

用默认主网创建块 `Common` 为: [EIP-1559 (中文(简体) )](https://eips.ethereum.org/EIPS/eip-1559) 兼容. `BlockHeader.calcNextBaseFee()` 计算儿童区的基本费用.

```ts
// ./examples/1559.ts

import { createBlock } from '@ethereumjs/block'
import { Common, Mainnet } from '@ethereumjs/common'
import { createTx } from '@ethereumjs/tx'
const common = new Common({ chain: Mainnet })

const block = createBlock(
  {
    header: {
      baseFeePerGas: BigInt(10),
      gasLimit: BigInt(100),
      gasUsed: BigInt(60),
    },
  },
  { common },
)

// Base fee will increase for next block since the
// gas used is greater than half the gas limit
console.log(Number(block.header.calcNextBaseFee())) // 11

// So for creating a block with a matching base fee in a certain
// chain context you can do:
const blockWithMatchingBaseFee = createBlock(
  {
    header: {
      baseFeePerGas: block.header.calcNextBaseFee(),
      gasLimit: BigInt(100),
      gasUsed: BigInt(60),
    },
  },
  { common },
)

console.log(Number(blockWithMatchingBaseFee.header.baseFeePerGas)) // 11

// successful validation does not throw error
await blockWithMatchingBaseFee.validateData()

// failed validation throws error
const tx = createTx(
  { type: 2, maxFeePerGas: BigInt(20) },
  { common: new Common({ chain: Mainnet }) },
)
blockWithMatchingBaseFee.transactions.push(tx)
console.log(blockWithMatchingBaseFee.getTransactionsValidationErrors()) // invalid transaction added to block
try {
  await blockWithMatchingBaseFee.validateData()
} catch (err) {
  console.log(`Expected validation failure: ${(err as Error).message.split('\n')[0]}`)
}
```

## EIP-4895 退出

上海+区块携带信标链退出. 提供 `withdrawals` 和一个匹配 `withdrawalsRoot`数字 :

```ts
// ./examples/withdrawals.ts

import { createBlock } from '@ethereumjs/block'
import { Common, Mainnet } from '@ethereumjs/common'
import { Address, hexToBytes } from '@ethereumjs/util'

import type { WithdrawalData } from '@ethereumjs/util'

const common = new Common({ chain: Mainnet })

const withdrawal: WithdrawalData = {
  index: BigInt(0),
  validatorIndex: BigInt(0),
  address: new Address(hexToBytes(`0x${'20'.repeat(20)}`)),
  amount: BigInt(1000),
}

const block = createBlock(
  {
    header: {
      withdrawalsRoot: hexToBytes(
        '0x69f28913c562b0d38f8dc81e72eb0d99052444d301bf8158dc1f3f94a4526357',
      ),
    },
    withdrawals: [withdrawal],
  },
  {
    common,
  },
)

console.log(`Block with ${block.withdrawals!.length} withdrawal(s) created`)
```

验证提取程序 `await block.withdrawalsTrieIsValid()`。 。 。 .

## EIP-4844 块块

坎昆+区块包括: `excessBlobGas` 财务报告和审定财务报表 `blobGasUsed`Blob txs 需要 KZG 打开 `Common`数字 :

```ts
// ./examples/eip4844Block.ts

import { createBlock } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'
import { createBlob4844Tx } from '@ethereumjs/tx'
import { createAddressFromPrivateKey } from '@ethereumjs/util'
import { randomBytes } from '@noble/hashes/utils.js'
import { trustedSetup } from '@paulmillr/trusted-setups/fast-peerdas.js'
import { KZG as microEthKZG } from 'micro-eth-signer/kzg.js'

const main = async () => {
  const kzg = new microEthKZG(trustedSetup)

  const common = new Common({
    chain: Mainnet,
    customCrypto: {
      kzg,
    },
    hardfork: Hardfork.Cancun,
  })
  const blobTx = createBlob4844Tx(
    { blobsData: ['myFirstBlob'], to: createAddressFromPrivateKey(randomBytes(32)) },
    { common },
  )

  const block = createBlock(
    {
      header: {
        excessBlobGas: 0n,
      },
      transactions: [blobTx],
    },
    {
      common,
      skipConsensusFormatValidation: true,
    },
  )

  console.log(
    `4844 block header with excessBlobGas=${block.header.excessBlobGas} created and ${
      block.transactions.filter((tx) => tx.type === 3).length
    } blob transactions`,
  )
}

void main()
```

标题中的 blob 气体定价 :

```ts
// ./examples/blobGasPrice.ts

import { createBlockHeader } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'

const common = new Common({ chain: Mainnet, hardfork: Hardfork.Cancun })
const header = createBlockHeader({ excessBlobGas: 1_000_000n }, { common })

console.log(`Blob gas price at excessBlobGas=1_000_000: ${header.getBlobGasPrice()}`)
```

## EIP-7685 CL 请求

布拉格+区块 `requestsHash` 超度排序的共识层请求。 使用 `genRequestsRoot()` 财务报告和审定财务报表 `@ethereumjs/util` 请求类型 :

```ts
// ./examples/clrequests.ts

import { createBlock, genRequestsRoot } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'
import { bytesToHex, createCLRequest, hexToBytes } from '@ethereumjs/util'
import { sha256 } from '@noble/hashes/sha2.js'

const common = new Common({ chain: Mainnet, hardfork: Hardfork.Prague })

const depositData = hexToBytes(
  '0x00ac842878bb70009552a4cfcad801d6e659c50bd50d7d03306790cb455ce7363c5b6972f0159d170f625a99b2064dbefc010000000000000000000000818ccb1c4eda80270b04d6df822b1e72dd83c3030040597307000000a747f75c72d0cf0d2b52504c7385b516f0523e2f0842416399f42b4aee5c6384a5674f6426b1cc3d0827886fa9b909e616f5c9f61f986013ed2b9bf37071cbae951136265b549f44e3c8e26233c0433e9124b7fd0dc86e82f9fedfc0a179d7690000000000000000',
)
const withdrawalData = hexToBytes(
  '0x01000000000000000000000000000000000000000001000000000000000000000de0b6b3a7640000',
)
const consolidationData = hexToBytes('0x020000000100000000000000000000000000000000000001')

// Requests must be sorted by type (Deposit=0, Withdrawal=1, Consolidation=2)
const requests = [
  createCLRequest(depositData),
  createCLRequest(withdrawalData),
  createCLRequest(consolidationData),
]

const requestsHash = genRequestsRoot(requests, sha256)
const block = createBlock({ header: { requestsHash } }, { common })

console.log(`Created ${requests.length} CL requests`)
console.log(`requestsHash: ${bytesToHex(requestsHash)}`)
console.log(`Block hash: ${bytesToHex(block.hash())}`)
```

## EIP-7928 屏蔽出入列表 Hash

见 [阿姆斯特丹州概况](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/vm#amsterdam-hardfork-experimental) 内 `@ethereumjs/vm` 用于发布qq光谱跟踪.

何时 [EIP-7928 (中文(简体) )](https://eips.ethereum.org/EIPS/eip-7928) 活动( e)`Hardfork.Amsterdam`,实验性),区块携带a `blockAccessListHash` 头字段. 用这个计算 `@ethereumjs/util` 或从 `runBlock({ generate: true })` 在越战中.

```ts
// ./examples/blockAccessListHash.ts

import { createBlock } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'
import { bytesToHex, createBlockLevelAccessListFromJSON } from '@ethereumjs/util'

const main = () => {
  const common = new Common({ chain: Mainnet, hardfork: Hardfork.Amsterdam })

  const balJson = [
    {
      address: '0x0000000000000000000000000000000000000001',
      storageChanges: [],
      storageReads: [],
      balanceChanges: [{ blockAccessIndex: '0x01', postBalance: '0x03e8' }],
      nonceChanges: [],
      codeChanges: [],
    },
  ]

  const bal = createBlockLevelAccessListFromJSON(balJson)
  const block = createBlock(
    {
      header: {
        blockAccessListHash: bal.hash(),
      },
    },
    { common, skipConsensusFormatValidation: true },
  )

  console.log(`blockAccessListHash: ${bytesToHex(block.header.blockAccessListHash!)}`)
  console.log(`matches BAL hash: ${bytesToHex(bal.hash())}`)
  console.log(`hash length: ${block.header.blockAccessListHash!.length} bytes`)
}

void main()
```

## EIP-7843 槽数

何时 [EIP-7843](https://eips.ethereum.org/EIPS/eip-7843) 活动( e)`Hardfork.Amsterdam`,实验性),区块携带a `slotNumber` 头字段. 明确设定,当构建块,或让 `buildBlock()` 默认从 `parent.slotNumber + 1`。 。 。 . `runBlock({ generate: true })` 不创造协商一致的时间档。 欧洲议会 `SLOTNUM` 操作码( o)`0x4b`阅读这个字段——见 [`@ethereumjs/evm` 斯洛文尼亚](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/evm#eip-7843-slotnum-opcode-amsterdam)。 。 。 .

```ts
// ./examples/blockSlotNumber.ts

import { createBlock } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'

const main = () => {
  const common = new Common({ chain: Mainnet, hardfork: Hardfork.Amsterdam })

  const block = createBlock(
    {
      header: {
        slotNumber: 42n,
      },
    },
    { common, skipConsensusFormatValidation: true },
  )

  console.log(`slotNumber: ${block.header.slotNumber}`)
}

void main()
```

## 协商一致类型

### 证据( 默认)

发生后区块(`Hardfork.Paris` ) 使用 PoS 页眉规则——困难 `0`,无微粒,以及相关 [EIP-3675 (单位:千美元)](https://eips.ethereum.org/EIPS/eip-3675) 变化 :

```ts
// ./examples/pos.ts

import { createBlock } from '@ethereumjs/block'
import { Common, Mainnet } from '@ethereumjs/common'

const common = new Common({ chain: Mainnet })

const block = createBlock(
  {
    // Provide your block data here or use default values
  },
  { common },
)

console.log(`Proof-of-Stake (default) block created with hardfork=${block.common.hardfork()}`)
```

### 埃塔什/波瓦

预先出现或专用的扑克链:

```ts
// ./examples/pow.ts

import { createBlock } from '@ethereumjs/block'
import { Common, Hardfork, Mainnet } from '@ethereumjs/common'

const common = new Common({ chain: Mainnet, hardfork: Hardfork.Chainstart })

console.log(common.consensusType()) // 'pow'
console.log(common.consensusAlgorithm()) // 'ethash'

createBlock({}, { common })
console.log(`Old Proof-of-Work block created`)
```

过 `calcDifficultyFromHeader` 与父标题一起自动计算难度.

### Clique / 行动纲领

为历史PoA测试网块(如:Goerli). 使用 `createSealedCliqueBlock()` 带有 `cliqueSigner` 即时封存的密钥 :

```ts
// ./examples/clique.ts

import { createBlock } from '@ethereumjs/block'
import { Common, Hardfork } from '@ethereumjs/common'
import { goerliChainConfig } from '@ethereumjs/testdata'

const common = new Common({ chain: goerliChainConfig, hardfork: Hardfork.Chainstart })

console.log(common.consensusType()) // 'poa'
console.log(common.consensusAlgorithm()) // 'clique'

createBlock({ header: { extraData: new Uint8Array(97) } }, { common })
console.log(`Old Clique Proof-of-Authority block created`)
```

Clique 公用功能( E)`cliqueSigner`, (中文(简体) ), `cliqueVerifySignature`,.)在《行动纲领》背景之外抛出.

## 浏览器

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

在现代浏览器内使用所提供的无害环境管理架构运行一个EthereumJS图书馆的浏览器是很容易的。 关于设置的例子,见 [./例/浏览器.html](https://npmcn.com/package/%40ethereumjs/block/examples/browser.html)。 。 。 .

## API 密码

生成类型文件 [文档](https://npmcn.com/package/%40ethereumjs/block/docs/README.md)。 。 。 .

每个 `Block` 编号 : `BlockHeader` 以 `Common` 实例,可决定活动硬叉、EIP集和验证规则。 见 [@ethereumjs/常见](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/common) 用于链式配置.

WASM 加密后端可以通过 `Common.customCrypto` ——见: [普通读取器](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/common#custom-cryptography-wasm--kzg)。 。 。 .

## 测试

测试 `tests` 目录部分过时;主要报道来自 `BlockchainTests` 内 [@ ethereumjs/vm (英语)](https://github.com/ethereumjs/ethereumjs-monorepo/tree/master/packages/vm)。 。 。 .

包装 [乙醇/测试](https://github.com/ethereum/tests) 当地JSON装置,使用 [包装测试](https://npmcn.com/package/%40ethereumjs/block/scripts/wrap-ethereum-test.sh)。 。 。 .

## 爱丽丝

这个 `EthereumJS` GitHub组织及其寄存器由原Ethereum基金会JavaScript团队和更广泛的Ethereum社区的成员管理. 如果您想参加工作或改进图书馆,请查看 [开发者文件](https://npmcn.com/package/DEVELOPER.md) \* 概述现行标准和工具,并审查 [行为守则](https://npmcn.com/package/CODE_OF_CONDUCT.md)。 。 。 .

## 许可证

[MPL - 2.0 导弹](https://tldrlegal.com/license/mozilla-public-license-2.0-\(mpl-2\))

## 常见问题

### @ethereumjs/block 是什么？

提供块序列化和帮助函数

### 如何安装 @ethereumjs/block？

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

### @ethereumjs/block 支持 TypeScript 吗？

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

### @ethereumjs/block 支持 ESM 还是 CommonJS？

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

### @ethereumjs/block 需要什么版本的 Node\.js？

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

### @ethereumjs/block 可以商用吗？

@ethereumjs/block 使用 MPL-2\.0 许可。弱 Copyleft：可以商用，也可以和闭源代码一起使用；但如果分发时修改了 MPL 授权的文件，这些文件的修改需以 MPL 开源。以上为概括，不构成法律意见，请以许可原文为准。

### @ethereumjs/block 的下载量有多少？

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

### @ethereumjs/block 还在维护吗？

最新版本 10\.1\.3 发布于 2026/08/21（2 个月前）；至今共发布 78 个版本，其中过去 12 个月发布了 5 个；首次发布于 2020/10/22。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

