@bopen-io/templates

中文文档
2.1.0发布于 2026/10/22SEE LICENSE IN LICENSE.txtTypeScriptESM + CJS零依赖近 30 天下载 5514

在 bsv-block chain/ts-stack 41a6edb43 (#1243: @bsv/sdk 4.0, BRC-207 彩色模块)临时重新包装 @bsv/templades

中文使用文档
文档目录10 节
  1. 概览
  2. 使用
  3. 当前模板
  4. 签名信任边界
  5. BRC-162 令牌 : Bsv21Binary
  6. 严格的 CBOR 有效载荷
  7. R1-K1 硬件钱包
  8. 贡献准则
  9. 支持联系人( C)
  10. 许可证

BSV 脚本模板

BSV BLOCKCHAIN QQ 脚本模板

用于官方 BSV 类型SDK 的脚本模板集

概览

这个寄存器的目标是提供一个位置,让来自生态系统周围的开发者可以发布各种脚本模板,而无需更新核心库. 我们一般对人们的贡献是中立的,没有偏见的,所以可以自由地贡献,看看人们用你的酷点子做什么!

使用

你可以这样写代码:

import { Transaction } from '@bsv/sdk'
import { OpReturn } from '@bsv/templates'

// Then, just use your template with the SDK!
const instance = new OpReturn()
const tx = new Transaction()
tx.addOutput({
  lockingScript: OpReturn.lock(...),
  satoshis: ...
})

当前模板

名称说明
Bsv21 纸币锁定并解码 BRC-162( BSV- 21 二进制) 符号输出
选择返回在非消耗性脚本中标记数据
梅达特创建遵循 Metanet 协议的交易
多笔创建多个可信任所有者的数据令牌
P2MSKH (英语)使用M-of-N公用钥匙阈值
R1K1 钱包正常使用 P-256 硬件和 K1 恢复键

签名信任边界

签名模板验证源交易 ID, 输出索引, satoshi 数量、锁定脚本、序列和签名范围,然后请求 钱包签名。 当一个完整的源交易和明确的源 元数据是提供的,它们必须完全一致。 将验证失败视为一种 源验证或交易构建错误; 不丢弃重试 一种相互矛盾的价值观.

MultiPushDrop 仅标出完整的合同形状和支持 最多120个不同的压缩锁键。 其记录的可信任拥有者 模式仍然适用:任何一位拥有者都可以花去或摧毁该令牌.

P2MSKH 只在命令的公用钥匙列表中将承诺排入 源代码锁定脚本和钱包生成的签名密钥属于此 列表中选择一个选项。 在收集递增签名时,保留同样订购的清单; 地址、密钥列表或部分解锁未信任方的脚本 已核实,但本身并不证明打算付款的政策是安全的.

BRC-162 令牌 : Bsv21Binary

OneColor 是 BRC-162 1 Color 模板。 它读和写相同的产出 作为 Bsv21Binary 以及首次部署于 非零输出时的BRC-161(<txid>_<vout>);一个36字节的代号 有vout 0是 拒绝. Bsv21Binary 不变,仍然只接受32字节的id.

Bsv21Binary 构建和阅读 BRC-162号卫星 (BSV-21二进制) 符号输出。 符号输出是普通锁定脚本上的固定前缀 :

<token id | OP_0> <amount> OP_2DROP [<payload> OP_DROP] OP_DUP OP_HASH160 <pkh> OP_EQUALVERIFY OP_CHECKSIG
import { PrivateKey } from '@bsv/sdk'
import { Bsv21Binary, encodeStrictCbor, tokenIdFromString, tokenIdToString } from '@bsv/templates'

const owner = PrivateKey.fromRandom()
const pubKeyHash = owner.toPublicKey().toHash() as number[]

// A deploy output has a null token id; its payload is a strict-CBOR map.
const template = new Bsv21Binary()
const deployScript = template.lock(null, 0n, pubKeyHash, encodeStrictCbor({ sym: 'USD', dec: 2n }))
console.log(Bsv21Binary.decode(deployScript).role) // 'deploy'

// Later outputs name the token by `<deploy txid, 64 lowercase hex>_0`.
const tokenId = `${'ab'.repeat(32)}_0`
const lockingScript = template.lock(tokenId, 1_000_000n, pubKeyHash) // amounts are bigint

const decoded = Bsv21Binary.decode(lockingScript)
console.log(decoded.role) // 'value' ('authority' when the amount is 0n)
console.log(decoded.amount) // 1000000n
console.log(decoded.tokenId !== undefined && tokenIdToString(decoded.tokenId) === tokenId) // true
console.log(tokenIdFromString(tokenId).length) // 32 wire bytes, natural order

每个值都有一个被接受的编码 所以每个读取 相同的字节读取相同的同义输出 :

  • 托肯编号 : 直接推出32个字节(在自然情况下部署 txid) 字节顺序),或 OP_0 在部署. OP_PUSHDATA* 不接受.
  • 数额 : bigint, (中文(简体) ), 0 改为 2^64 - 1。 。 。 . 0 实值 OP_0, (中文(简体) ), 1 改为 16 为: OP_1 改为 OP_16,任何更大的 是一个直接的推动(0x01 改为 0x09页:1 最小的小endian脚本号。 以下政策上限 2^64 - 1总计 各种投入和产出的算术和养护属于呼叫者.
  • 角色 : deploy (无编号), authority (id,数额) 0)或(或) value。 。 。 .
  • 无效的对非符号 : isTokenShaped(script) 告诉剧本 开始 <push> <push> OP_2DROP 从任何其他脚本. Bsv21Binary.decode 掷出 Bsv21BinaryError 对于一个非空想的符号形状的脚本 (例如数额) 5 被推为 01 05因此,它从来没有默默地读作 "不是一个标志".

严格的 CBOR 有效载荷

有效载荷属性从一个小的无依赖子集读取 DAG- 边境保护局,因此两个解码器不能 从同一个字节读取不同的属性. encodeStrictCbor 写下来, decodeStrictCbor 掷出 StrictCborError 财务报告和审定财务报表 tryDecodeStrictCbor 返回时 undefined 对于它之外的一切:

  • 顶级是带有文本密钥的地图,严格通过编码字节增加 (无重复);
  • 值是无符号整数,最多为 2^64 - 1 (单位:千美元)bigint),字节字符串 (单位:千美元)Uint8Array),严格的UTF-8文本, null、布林图和嵌入图;
  • 信头有确定和最小长度;
  • 筑巢深度最多 STRICT_CBOR_MAX_DEPTH (4) 编码最多 STRICT_CBOR_MAX_BYTES (4096年),没有后行字节.

浮点、标记(包括42个)、负整数、阵列和无限期长度 拒绝.

2.0.0版本删除 MandalaToken, (中文(简体) ), MandalaAdmin 财务报告和审定财务报表 ADMIN_PROTOCOL· ; BRC-162号卫星 Bsv21Binary 产出取而代之,与电线兼容.

R1-K1 硬件钱包

R1K1Wallet 承诺 HASH160(compressedR1PublicKey || privateSalt) (单位:千美元) 分离的secp256k1公用钥匙散列。 盐会隐藏 PIV 公钥的再利用 直至R1支出显示两种值。 保持每32字节盐的备份 钱包元数据; 丢失它会禁用输出的 R1 路径而不是 K1 复原.

import { Hash, type PrivateKey, Utils } from '@bsv/sdk'
import { R1K1Wallet } from '@bsv/templates'

declare const compressedP256PublicKeyHex: string
declare const k1RecoveryPrivateKey: PrivateKey
declare const signWithYubiKeyPiv: (digest: Uint8Array) => Promise<Uint8Array>

const template = new R1K1Wallet()
const r1PublicKey = Utils.toArray(compressedP256PublicKeyHex, 'hex')
const salt = crypto.getRandomValues(new Uint8Array(32))
const lockingScript = await template.lock(
  Hash.hash160([...r1PublicKey, ...salt]),
  Hash.hash160(k1RecoveryPrivateKey.toPublicKey().encode(true) as number[])
)

const normalSpend = template.unlock({
  path: 'r1',
  publicKey: r1PublicKey,
  salt,
  // Submit this 32-byte digest unchanged to PIV GENERAL AUTHENTICATE.
  // Return the YubiKey DER ECDSA signature (or raw 64-byte r || s).
  signDigest: digest => signWithYubiKeyPiv(digest)
})

const recoverySpend = template.unlock({
  path: 'k1',
  privateKey: k1RecoveryPrivateKey
})

被合成的P-256验证器在959,632字节后生成了959,632字节锁定脚本 建筑师的承诺被烤熟。 这超过了普通的500KB矿工政策; 在为某项产出提供资金之前确认目标矿工的限额.

R1解锁脚本也会推出BIP-143的预告片,其出品人: scriptCode 合同中约960 KB OP_CODESEPARATOR。R1路径 因此,涉及大约2 MB的锁定加解锁脚本材料,以及 仅证人一人就为支出交易增加了大约960 KB。 账户 由此产生的费用,并确认任何最大交易政策; estimateLength 包括这个预想推. K1 解锁脚本仍然很小.

PIV证明硬件密钥在所供应的文摘上签了名,但有一个YubiKey 不显示或独立验证比特币交易。 一个PIN或 触摸策略保护关键用途,而不是交易意图;审查交易 在批准之前,他是受信任的东道主.

贡献准则

我们总是寻找贡献者 添加最酷的新模板。 不管你想出什么样的剧本 - 所有的贡献都是受欢迎的.

  1. 叉和克隆( C):叉出此寄存器并克隆到您的本地机器上.
  2. 设置运行 npm i 以安装所有依赖.
  3. 更改: 创建新的分支并进行修改.
  4. 测试: 确保所有测试通过运行 npm test。 。 。 .
  5. 提交: 提交修改并按到叉上.
  6. 拉请求: 打开从您叉到此寄存器的拉取请求 . 详情请查看 储存库贡献准则。 。 。 .

关于过去释放的信息,请查看 更改日志对于今后的计划,请检查 路线图来啊!

支持联系人( C)

项目所有人: Ty Everett

发展小组组长:蒂·埃弗雷特

对于问题,错误报告或特性请求,请在 GitHub 上打开一个问题或直接与我们联系.

许可证

当前 TS Stack 更改根据 Open BSV 许可证版本 6 获得许可; 参见 LICENSE.txt (英语)。该软件包还保留了统一前代码 在开放BSV许可证版本4下. 补给者必须保留 第三次议会 NoTICES.md 和适用的文本在 LICENSES/。 。 。 .

感谢您参与BSV Blockchain脚本模板项目. 让我们一起打造BSV区块链的未来!

版本与发布记录

@bopen-io/templates 共发布 13 个版本,首次发布于 2025/12/29;过去 12 个月发布了 13 个版本。

版本发布日期距今
2.1.0latest2026/10/2217 天前
1.2.32026/03/137 个月前
1.2.22026/03/117 个月前
1.2.12026/03/117 个月前
1.2.02026/03/117 个月前
1.1.92026/02/258 个月前

关于 @bopen-io/templates 的常见问题

@bopen-io/templates 是什么?

在 bsv-block chain/ts-stack 41a6edb43 (#1243: @bsv/sdk 4.0, BRC-207 彩色模块)临时重新包装 @bsv/templades

如何安装 @bopen-io/templates?

在项目目录运行 npm install @bopen-io/templates,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@bsv/sdk(^2.1.6 || ^3.0.0 || ^4.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@bopen-io/templates 支持 TypeScript 吗?

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

@bopen-io/templates 支持 ESM 还是 CommonJS?

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

@bopen-io/templates 需要什么版本的 Node.js?

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

@bopen-io/templates 可以商用吗?

@bopen-io/templates 使用 SEE LICENSE IN LICENSE.txt 许可。许可条款写在包内的独立文件中,请阅读该文件确认可否商用。以上为概括,不构成法律意见,请以许可原文为准。

@bopen-io/templates 的下载量有多少?

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

@bopen-io/templates 还在维护吗?

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