# @alexbosworth/blockchain 中文文档

规范地址：https://npmcn.com/package/%40alexbosworth/blockchain/

版本：4\.12\.0
npm 元数据更新时间：2026-10-17T03:25:43.173Z
中文译文更新时间：2026-11-05T20:00:41.157Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40alexbosworth/blockchain
原文对照：https://npmcn.com/package/%40alexbosworth/blockchain/?lang=original
项目主页：https://github.com/alexbosworth/blockchain#readme
源码仓库：https://github.com/alexbosworth/blockchain

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

- 包体积（解压后）：112 kB，57 个文件
- TypeScript 类型：未声明
- Node.js 要求：\>=22
- 运行依赖：0 个
- 首次发布：2023-05-14T02:10:14.480Z
- 最新版本发布：2026-10-17T03:25:42.994Z
- 近 30 天下载量：32572（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：32（近 12 个月 22 个）

## 中文简介

区链数据实用方法

## 安装

```sh
npm install @alexbosworth/blockchain
```

也可以使用：`pnpm add @alexbosworth/blockchain`、`yarn add @alexbosworth/blockchain`、`bun add @alexbosworth/blockchain`

## README

# 区链

与区块链数据合作的通用方法

## 方法

-   [压缩输入数](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-compactintasnumber)
-   [交易组件](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-componentsoftransaction)
-   [解码Base58](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-decodebase58)
-   [解码Base58 地址](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-decodebase58address)
-   [解码Bech32 地址](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-decodebech32address)
-   [解码Wif](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-decodewif)
-   [编码Base58 地址](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-encodebase58address)
-   [编码Bech32 地址](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-encodebech32address)
-   [hashForP2pkh 维基百科中的相关条目: 花生花](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-hashforp2pkh)
-   [hashForP2wpkh 页面存档备份,存于互联网档案馆](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-hashforp2wpkh)
-   [idForBlock 数据](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-idforblock)
-   [用于交易](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-idfortransaction)
-   [idFor 交易组件](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-idfortransactioncomponents)
-   [无锁定时间Id用于交易](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-nolocktimeidfortransaction)
-   [非WitnessHashto 签名](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-nonwitnesshashtosign)
-   [数字AsCompactInt](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-numberascompactint)
-   [输出脚本格式](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-outputscriptforaddress)
-   [p2ms 脚本](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-p2msscript)
-   [p2pkh 输出脚本](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-p2pkhoutputscript)
-   [p2sh 输出脚本](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-p2shoutputscript)
-   [p2tr 输出脚本](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-p2troutputscript)
-   [p2wpkh 输出脚本](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-p2wpkhoutputscript)
-   [p2wsh 输出脚本](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-p2wshoutputscript)
-   [上一个块](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-previousblockid)
-   [查询](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-querytransactions)
-   [脚本脚本元素](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-scriptasscriptelements)
-   [脚本元素](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-scriptelementsasscript)
-   [交易大小](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-sizeoftransaction)
-   [来自组件的交易](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-transactionfromcomponents)
-   [未签名的Tx 从 Psbt](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-unsignedtxfrompsbt)
-   [v0Hashto 签名](https://npmcn.com/package/%40alexbosworth/blockchain/#readme-v0hashtosign)

### 压缩输入数

将整数转换为正则数

```
{
  encoded: <Compact Integer Encoded Number Buffer Object>
  [start]: <Buffer Offset Start Index Number>
}

@returns
{
  bytes: <Byte Count Number>
  number: <Integer Number>
}
```

示例

```node
const {compactIntAsNumber} = require('@alexbosworth/blockchain');

// Decode the plain number from the encoded compact int bytes
const {number} = compactIntAsNumber({encoded: Buffer.from('fdfd00', 'hex')});
```

### 交易组件

获取十六进制编码交易的组件

```
{
  transaction: <Hex Encoded Transaction String>
}

@throws
<Error>

@returns
{
  inputs: [{
    id: <Spending Transaction Id Hex String>
    script: <ScriptSig Script Hex String>
    sequence: <Sequence Number>
    vout: <Spending Transaction Output Index Number>
    [witness]: [<Script Stack Element Hex String>]
  }]
  locktime: <Timelock nLockTime Number>
  outputs: [{
    script: <ScriptPub Script Hex String>
    tokens: <Tokens Count Number>
  }]
  version: <Version Number>
}
```

### 解码Base58

解码一个已编码的字符串进入其有效载荷

```
{
  encoded: <Base58Check Encoded String>
}

@throws
<Error> when the string has invalid characters or a bad checksum

@returns
{
  payload: <Decoded Payload Buffer Object>
}
```

### 解码Base58 地址

来自基数58地址字符串的衍生输出散列和版本数据

```
{
  address: <Base58 Encoded Address String>
}

@throws
<Error>

@returns
{
  hash: <Output Hash Buffer Object>
  version: <Script Version Byte Number>
}
```

### 解码Bech32 地址

解码 Bech32 地址字符串以获取地址细节

```
{
  address: <Bech32 Encoded Address String>
}

@throws
<Error>

@returns
{
  prefix: <Human Readable Prefix String>
  program: <Output Data Buffer Object>
  version: <Witness Version Number>
}
```

### 解码Wif

解码 WIF 编码的私钥

以压缩形式生成公钥 `is_compressed` 真实

未指定网络时, 接受任何已知网络的WIF

所支持的网络: btc, btcregtest, btcsignet, btctestnet4

```
{
  [network]: <Network Name String>
  wif: <WIF Encoded Private Key String>
}

@throws
<Error>

@returns
{
  is_compressed: <Public Key Is Compressed Bool>
  private_key: <Private Key Buffer Object>
}
```

示例

```node
const {createECDH} = require('node:crypto');

const {decodeWif} = require('@alexbosworth/blockchain');

// Decode the private key and the public key compression from a mainnet WIF
const {is_compressed, private_key} = decodeWif({
  network: 'btc',
  wif: 'KwdMAjGmerYanjeui5SHS7JkmpZvVipYvB2LJGU1ZxJwYvP98617',
});

// The WIF signals if the public key is compressed or uncompressed
const format = is_compressed ? 'compressed' : 'uncompressed';

const ecdh = createECDH('secp256k1');

// Derive the public key from the private key
ecdh.setPrivateKey(private_key);

const publicKey = ecdh.getPublicKey(null, format);
```

### 编码Base58 地址

将输出散列和版本数据编码为基数58地址字符串

```
{
  hash: <Output Hash Buffer Object>
  version: <Script Version Byte Number>
}

@throws
<Error>

@returns
{
  address: <Base58 Encoded Address String>
}
```

示例

```node
const {encodeBase58Address, hashForP2pkh} = require('@alexbosworth/blockchain');

// The P2PKH output hash is the hash160 of the compressed public key
const {hash} = hashForP2pkh({key: publicKey});

// Encode the P2PKH address paying to the public key hash
const {address} = encodeBase58Address({hash, version: 0});
```

### 编码Bech32 地址

作为 Bech32 地址字符串编码地址细节

```
{
  prefix: <Human Readable Prefix String>
  program: <Output Data Buffer Object>
  version: <Witness Version Number>
}

@throws
<Error>

@returns
{
  address: <Bech32 Encoded Address String>
}
```

示例

```node
const {encodeBech32Address, hashForP2wpkh} = require('@alexbosworth/blockchain');

// The P2WPKH witness program is the hash160 of the compressed public key
const {hash} = hashForP2wpkh({key: publicKey});

// Encode the P2WPKH address paying to the public key hash
const {address} = encodeBech32Address({
  prefix: 'bc',
  program: hash,
  version: 0,
});
```

### hashForP2pkh 维基百科中的相关条目: 花生花

通过 P2PKH 获得公用钥匙的散列160

使用 `hash` 与 `p2pkhOutputScript` p2PKH 输出脚本

```
{
  key: <Public Key Buffer Object>
}

@throws
<Error>

@returns
{
  hash: <Public Key Hash160 Buffer Object>
}
```

### hashForP2wpkh 页面存档备份,存于互联网档案馆

通过 P2WPKH 获得公用钥匙的大麻花序160

使用 `hash` 与 `p2wpkhOutputScript` p2WPKH 输出脚本

```
{
  key: <Public Key Buffer Object>
}

@throws
<Error>

@returns
{
  hash: <Public Key Hash160 Buffer Object>
}
```

### idForBlock 数据

获得一个区块的ID:区块头的双沙256散列

```
{
  block: <Hex Encoded Block Data String>
}

@throws
<Error>

@returns
{
  id: <Block Id Hex Encoded String>
}
```

### 用于交易

为生序式 tx 设定标准交易ID

```
{
  transaction: <Hex Encoded Transaction String>
}

@throws
<Error>

@returns
{
  id: <Transaction Id Hex Encoded String>
}
```

### idFor 交易组件

从交易组件中确定交易编号

注意: 记住输入的散列是正常 tx id 的倒转字节顺序

```
{
  inputs: [{
    hash: <Spending Internal Byte Order Transaction Id Buffer Object>
    script: <Script Buffer Object>
    sequence: <Sequence Number>
    vout: <Spending Transaction Output Index Number>
  }]
  locktime: <Timelock nLockTime Number>
  outputs: [{
    script: <Output Script Buffer Object>
    tokens: <Tokens Count Number>
  }]
  version: <Version Number>
}

@throws
<Error>

@returns
{
  id: <Transaction Id Hex String>
}
```

### 无锁定时间Id用于交易

获取有目击数据的交易的ID, 以及未包含的时间

```
{
  buffer: <Data Buffer Object>
  [start]: <Starting Offset Index Number>
}

@throws
<Error>

@returns
{
  id: <No nLockTime Transaction Id Hex String>
}
```

### 非WitnessHashto 签名

计算要签名的 SegWit 交易散列

对于 P2PK, P2PKH, 或赤色多相格, 脚本是正在花费的输出脚本

P2SH 的脚本是将脚本混入输出脚本的赎回脚本

当代码分隔符被执行时, 只通过它后面的脚本, 任何 散开前从脚本中去除剩余的代码分隔符

单一输出的签名需要匹配输入索引的输出

```
{
  script: <Signing Input Script Hex String>
  [sighash]: <Signature Hash Type Number>
  transaction: <Raw Transaction Hex String>
  vin: <Signing Transaction Input Index Number>
}

@throws
<Error>

@returns
{
  hash: <Hash to Sign Hex String>
}
```

### 数字AsCompactInt

将数字转换为紧凑的大小整数序列化

```
{
  number: <Amount to Convert to Compact Integer Serialization Number>
}

@throws
<Error>

@returns
{
  encoded: <Serialized Compact Integer Buffer Object>
}
```

### 输出脚本格式

获取地址的输出脚本

支持地址: P2PKH, P2SH, P2WPKH, P2WSH, P2TR, 未来 segwit 版本

所支持的网络: btc, btcregtest, btcsignet, btctestnet4

```
{
  address: <Address String>
  network: <Network Name String>
}

@throws
<Error>

@returns
{
  script: <Output Script Hex String>
}
```

示例

```node
const {outputScriptForAddress} = require('@alexbosworth/blockchain');

// Get the output script to pay to an address
const {script} = outputScriptForAddress({
  address: 'bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4',
  network: 'btc',
});
```

### p2ms 脚本

获取多相脚本和脚本散列来支付脚本

使用 `hash` 与 `p2wshOutputScript` p2WSH 输出脚本

```
{
  keys: [<Public Key Buffer Object>]
  required: <Signatures Required Count Number>
}

@throws
<Error>

@returns
{
  hash: <Witness Script SHA256 Hash Buffer Object>
  script: <Multisig Script Buffer Object>
}
```

示例

```node
const {p2msScript, p2wshOutputScript} = require('@alexbosworth/blockchain');

// Derive the 2-of-3 multisig script and its witness script hash
const {hash} = p2msScript({keys: publicKeys, required: 2});

// Get the P2WSH output script paying to the multisig script
const {script} = p2wshOutputScript({hash});
```

### p2pkh 输出脚本

获得公钥 Hash 输出脚本

```
{
  hash: <Public Key Hash Buffer Object>
}

@throws
<Error>

@returns
{
  script: <Output Script Buffer Object>
}
```

### p2sh 输出脚本

获取对脚本的付费 Hash 输出脚本

```
{
  hash: <Script Hash Buffer Object>
}

@throws
<Error>

@returns
{
  script: <Output Script Buffer Object>
}
```

### p2tr 输出脚本

获取报酬到磁带输出脚本

```
{
  hash: <Taproot Hash Buffer Object>
}

@throws
<Error>

@returns
{
  script: <Output Script Buffer Object>
}
```

### p2wpkh 输出脚本

获取给目击公钥 Hash 输出脚本

```
{
  hash: <Witness Public Key Hash Buffer Object>
}

@throws
<Error>

@returns
{
  script: <Output Script Buffer Object>
}
```

### p2wsh 输出脚本

获取给目击脚本 Hash 输出脚本

```
{
  hash: <Witness Script Hash Buffer Object>
}

@throws
<Error>

@returns
{
  script: <Output Script Buffer Object>
}
```

### 上一个块

鉴于一个生块, 返回上一个块 ID

```
{
  block: <Hex Encoded Block String>
}

@throws
<Error>

@returns
{
  previous: <Previous Block Id Hex String>
}
```

### 查询

在块内查找匹配的交易

```
{
  block: <Hex Encoded Raw Block String>
  [ids]: [<Transaction Id Hex String>]
  [outputs]: [<Output Script Hex String>]
}

@throws
<Error>

@returns
{
  outputs: [{
    script: <Output Script Hex String>
    tokens: <Output Value Number>
    transaction_id: <Transaction Id Hex String>
    transaction_vout: <Transaction Output Index Number>
  }]
  transactions: [{
    id: <Transaction Id Hex String>
    transaction: <Hex Encoded Raw Transaction String>
  }]
}
```

### 脚本脚本元素

将序列化的脚本映射到脚本元素阵列

```
{
  script: <Script Hex String>
}

@throws
<Error>

@returns
{
  [elements]: [<Data Buffer>, <Script OP_CODE Number>]
}
```

### 脚本元素

将脚本缓冲元素的阵列映射到一个完全成形的脚本

```
{
  elements: [<Data Buffer>, <Script OP_CODE Number>]
}

@throws
<Error>

@returns
{
  script: <Script Hex String>
}
```

### 交易大小

获取六进制编码交易的重量和虚拟大小

```
{
  transaction: <Hex Encoded Transaction String>
}

@throws
<Error>

@returns
{
  vsize: <Transaction Virtual Size Number>
  weight: <Transaction Weight Units Number>
}
```

### 来自组件的交易

从其组成部分中形成六进制编码交易

```
{
  inputs: [{
    id: <Spending Transaction Id Hex String>
    script: <ScriptSig Script Hex String>
    sequence: <Sequence Number>
    vout: <Spending Transaction Output Index Number>
    [witness]: [<Script Stack Element Hex String>]
  }]
  locktime: <Timelock nLockTime Number>
  outputs: [{
    script: <ScriptPub Script Hex String>
    tokens: <Tokens Count Number>
  }]
  version: <Version Number>
}

@throws
<Error>

@returns
{
  transaction: <Hex Encoded Transaction String>
}
```

### 未签名的Tx 从 Psbt

从 PSBT 获取未签名的交易

```
{
  psbt: <PSBT Hex String>
}

@throws
<Error>

@returns
{
  transaction: <Unsigned Transaction Buffer Object>
}
```

### v0Hashto 签名

计算要签名的 v0 证人交易散列

脚本是用于输出的 BIP 143 脚本代码

P2WPKH的脚本代码是公钥散列的P2PKH脚本h

P2WSH 的脚本代码是目击脚本

```
{
  script: <Signing Input Script Hex String>
  [sighash]: <Signature Hash Type Number>
  tokens: <Spending Output Tokens Number>
  transaction: <Raw Transaction Hex String>
  vin: <Signing Transaction Input Index Number>
}

@throws
<Error>

@returns
{
  hash: <Hash to Sign Hex String>
}
```

## 常见问题

### @alexbosworth/blockchain 是什么？

区链数据实用方法

### 如何安装 @alexbosworth/blockchain？

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

### @alexbosworth/blockchain 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/alexbosworth\_\_blockchain 是否存在。

### @alexbosworth/blockchain 需要什么版本的 Node\.js？

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

### @alexbosworth/blockchain 可以商用吗？

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

### @alexbosworth/blockchain 的下载量有多少？

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

### @alexbosworth/blockchain 还在维护吗？

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

