# @ethereumjs/ethash 中文文档

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

版本：10\.0\.0
npm 元数据更新时间：2025-04-29T09:47:20.936Z
中文译文更新时间：2026-11-13T23:39:58.326Z
软件包许可：MPL-2\.0

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

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

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

- 包体积（解压后）：219 kB，25 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=18
- 运行依赖：5 个
- 首次发布：2020-10-22T09:54:37.989Z
- 最新版本发布：2025-04-29T09:47:20.582Z
- 近 30 天下载量：137873（2026-10-14 至 2026-11-12，npm 官方下载统计）
- 已发布版本数：24（近 12 个月 0 个）

## 中文简介

在 JavaScript 中执行 Ethash 共识算法

## 安装

```sh
npm install @ethereumjs/ethash
```

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

## README

# @ethereumjs/ethash (英语) `v10`

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

| [埃萨什](https://github.com/ethereum/wiki/wiki/Ethash) 在类型脚本中执行. |
| --- |

## 目录

-   [安装](https://npmcn.com/package/%40ethereumjs/ethash/#readme-installation)
-   [使用量](https://npmcn.com/package/%40ethereumjs/ethash/#readme-usage)
-   [API 密码](https://npmcn.com/package/%40ethereumjs/ethash/#readme-api)
-   [爱丽丝](https://npmcn.com/package/%40ethereumjs/ethash/#readme-ethereumjs)
-   [许可证](https://npmcn.com/package/%40ethereumjs/ethash/#readme-license)

## 安装

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

```shell
npm install @ethereumjs/ethash
```

## 使用量

### PoW 验证

```ts
// ./examples/powBlock.ts

import { createBlockFromRLP } from '@ethereumjs/block'
import { Ethash } from '@ethereumjs/ethash'
import { MapDB, hexToBytes } from '@ethereumjs/util'

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

const cacheDB = new MapDB<number, DBObject>()

const ethash = new Ethash(cacheDB)
const validblockRlp =
  '0xf90667f905fba0a8d5b7a4793baaede98b5236954f634a0051842df6a252f6a80492fd888678bda01dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347948888f1f195afa192cfee860698584c030f4c9db1a0f93c8db1e931daa2e22e39b5d2da6fb4074e3d544094857608536155e3521bc1a0bb7495628f9160ddbcf6354380ee32c300d594e833caec3a428041a66e7bade1a0c7778a7376099ee2e5c455791c1885b5c361b95713fddcbe32d97fd01334d296b90100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000400000000000000000000000000000000000000000000000000000008302000001832fefd882560b84559c17b9b9040001020304050607080910111213141516171819202122232410000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000100000000000000000002000000000000000000030000000000000000000400000000000000000005000000000000000000060000000000000000000700000000000000000008000000000000000000090000000000000000000100000000000000000001000000000000000000020000000000000000000300000000000000000004000000000000000000050000000000000000000600000000000000000007000000000000000000080000000000000000000900000000000000000001000000000000000000010000000000000000000200000000000000000003000000000000000000040000000000000000000500000000000000000006000000000000000000070000000000000000000800000000000000000009000000000000000000010000000000000000000a09c7b47112a3afb385c12924bf6280d273c106eea7caeaf5131d8776f61056c148876ae05d46b58d1fff866f864800a82c35094095e7baea6a6c7c4c2dfeb977efac326af552d8785012a05f200801ba01d2c92cfaeb04e53acdff2b5d42005ff6aacdb0105e64eb8c30c273f445d2782a01e7d50ffce57840360c57d94977b8cdebde614da23e8d1e77dc07928763cfe21c0'

const validBlock = createBlockFromRLP(hexToBytes(validblockRlp), {
  setHardfork: true,
  skipConsensusFormatValidation: true,
})

const result = await ethash.verifyPOW(validBlock)
console.log(result) // => true
```

### PoW Ethash CPU 矿工

里面有一个简单的CPU矿工 `Ethash` 用于测试目的的软件包.

参见下例如何使用新的 `Miner` 类 :

```ts
// ./examples/miner.ts

import { createBlock } from '@ethereumjs/block'
import { Ethash } from '@ethereumjs/ethash'
import { MapDB, bytesToHex } from '@ethereumjs/util'

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

const block = createBlock(
  {
    header: {
      difficulty: BigInt(100),
      number: BigInt(1),
    },
  },
  { setHardfork: true, skipConsensusFormatValidation: true },
)

const cacheDB = new MapDB<number, DBObject>()

const e = new Ethash(cacheDB)
const miner = e.getMiner(block.header)
const solution = await miner.iterate(-1) // iterate until solution is found
console.log(bytesToHex(solution!.mixHash)) // 0x892177e7bbb1f31ade0610707c96c6bf86e1415b26073d17b2da2dbd2daefd1e
```

## API 密码

### 文档

生成类型Doc API [文档](https://npmcn.com/package/%40ethereumjs/ethash/docs/README.md)

### 混合 CJS/ESM 构建

随着2023年夏季发行的中断,我们开始将我们的图书馆与两个共同JS(共同JS)一起运送`cjs` 和建立无害环境管理`esm` 文件夹,参见 `package.json` 为详细设置.

如果你使用ES6型的话 `import` 将在您来自无害环境管理架构的代码文件中使用:

```ts
import { EthereumJSClass } from '@ethereumjs/[PACKAGE_NAME]'
```

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

```ts
const { EthereumJSClass } = require('@ethereumjs/[PACKAGE_NAME]')
```

使用无害环境管理将比CJS给您更多的优势,超出浏览器的使用范围,如静态代码分析/树摇,CJS无法提供.

## 爱丽丝

看我们的组织 [文档](https://ethereumjs.readthedocs.io/) 介绍 `EthereumJS` 以及关于现行标准和最佳做法的资料。 如果你想参加工作或改进图书馆,请审查我们 [捐款准则](https://ethereumjs.readthedocs.io/en/latest/contributing.html) 先说.

## 许可证

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

## 常见问题

### @ethereumjs/ethash 是什么？

在 JavaScript 中执行 Ethash 共识算法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

