前言
bip174 是一个用于 Bitcoin 和其他加密货币的共识规范,它规定了如何将交易、公钥和签名打包到一个二进制流中。该规范旨在满足多款钱包和全节点实现同步的需求。npm 包 bip174 是一个实现 bip174 规范的 JavaScript 库,可以方便地在 node.js 或浏览器中使用。本文将介绍 bip174 的基本概念,以及使用 npm 包 bip174 实现 bip174 规范的详细步骤。
bip174 规范
bip174 规范定义了一种标准的序列化格式,将交易、公钥和签名打包到一个二进制流中。该序列化格式的目的是简化不同钱包和全节点实现之间的数据同步。序列化格式由两个部分组成:
- 输入数据(input data):包括交易输入和输入脚本
- 输出数据(output data):包括交易输出和输出脚本
每个输入和输出都由一个描述其内容的描述符(descriptor)标识。描述符是一个字符串,用于描述输入或输出中包含的公钥和脚本。描述符可以从一个扩展公钥、一个钱包地址或一个硬件钱包中派生出来。输入或输出的描述符还可以指定所需的签名脚本或验证脚本。
使用 npm 包 bip174
npm 包 bip174 是一个实现 bip174 规范的 JavaScript 库。可以通过以下步骤使用该库:
- 安装 bip174
npm install bip174
- 导入 bip174
const bip174 = require('bip174');
- 创建 bip174 实例
-- -------------------- ---- ------- ----- ---- - - ----- -------- -------- -- --------- ------- ------- - - --------------- -------------------------------------------------- ------ - -- -------- - - ------- ------ ------- ------------------------------------------------- ------ - - -- ----- ---- - --- --------------------- ------------ ------------------------------ -------------------------------- --------------------------- ------ -- - ----- ------------------- - ------------------------- ----- --------------- - - --------------- -------------------- -- ------------------------------ -------------------- --- ---- --- --------------------------- -- - ----------------------- ---
在这个例子中,我们创建了 bip174 的实例 psbt,它包含一个示例的交易,该交易包括一个输入,一个输出和所有必需的元数据。
- 序列化 bip174 实例
const serializedTransaction = psbt.toHex();
这个例子中 serializedTransaction 是一个包含交易信息的十六进制字符串,可以将它发送到全节点或其他钱包以进行广播或签名。
- 踩坑和解决
在使用 bip174 过程中,会遇到 Populating pubkeys failed 问题,原因是因为缺少输入的派生路径的 pubkeys,可以手动添加派生路径 pubkeys 解决。
// 获取子密钥的信息 const selKey = key.derivePath(`m/${path}/0`); // 获取子密钥的公钥信息并新建一个 publicKey 对象 const publicKey = bitcoinjs.payments.p2pkh({ pubkey: selKey.publicKey }).publicKey;
结论
在本文中,我们简要介绍了 bip174 规范,以及如何使用 npm 包 bip174 实现 bip174 规范。我们还讨论了 bip174 遇到的常见问题和解决方案。我们希望这篇文章能够帮助那些希望使用 bip174 的人更好地理解和使用该技术。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedcc65b5cbfe1ea061278a