如何使用 bitcoinjs-lib 创建比特币地址

本文介绍了如何使用 bitcoinjs-lib 创建比特币地址,并使用 QuickNode 获取地址余额。

概述

比特币的用户和开发者可能会发现他们需要多个密钥对地址来开发和测试代码。在本指南中,我们将讨论目前可用的不同比特币地址,展示如何使用 bitcoinjs-lib 创建比特币地址,并演示使用 QuickNode 获取比特币地址余额的过程。

你将做什么

你将需要什么

  • 对比特币和编程概念的基本理解
  • 已安装 Node.js
依赖项 版本
bitcoinjs-lib ^6.1.5
ecpair ^2.1.0
tiny-secp256k1 ^2.2.3

什么是 bitcoinjs-lib?

bitcoinjs-lib 是一个 JavaScript 库,用于通过 Node.js 和你的浏览器与比特币区块链进行交互。该库提供了广泛的功能,如创建比特币钱包(即地址)和多重签名,以及创建、获取和广播交易。

现在我们对用于创建比特币地址的库有了更多的了解,让我们继续了解可用的类型以及它们的不同之处。

比特币地址的类型

在本节中,我们将深入探讨不同类型的比特币钱包以及它们的不同之处。

如果你看过 bitcoinjs-lib 的 文档,你会注意到一个不同的地址类型列表,如 SegWit 地址、SegWit P2SH 地址、SegWit P2PKH、SegWit 3-of-4 多重签名地址等等。这些都是托管钱包(即用户使用私钥托管资产,而不是像中心化交易所这样的第三方),你可以使用这个库创建。现在,让我们介绍一下每一种:

info

SegWit (隔离见证) 是一个已实现的软分叉提案 (BIP141),它调整了比特币上使用的交易格式

  • SegWit 地址: 以 bc1 开头,SegWit 地址是通过将签名数据从交易数据中分离出来的过程生成的。由于费用较低,它们非常适合频繁的小额交易,并且不易发生交易延展性。
  • SegWit P2SH: 这些地址以 3 开头,并将 SegWit 与 Pay-to-Script-Hash 结合在一起。它们是通过将 SegWit 地址包装在 P2SH 格式中创建的,这使得它们适合需要与不支持原生 SegWit 地址的系统向后兼容的用户,同时仍然受益于 SegWit 功能。
  • SegWit P2PKH (Legacy): 以 1 开头,这些地址将传统的 Pay-to-Public-Key-Hash 格式与 SegWit 的效率相结合。它们的生成方式与传统的比特币地址类似,但通过 SegWit 的较低费用和减小的交易规模得到了增强。这种类型非常适合在传统比特币地址的熟悉性和 SegWit 的优势之间寻求平衡的用户。
  • SegWit 3-of-4 Multi-Sig: 这种钱包类型的特点是通过涉及多个密钥和一个定义多重签名参数的脚本的过程生成的地址,专为高安全性和冗余而设计。 它需要四个可能的私钥中的三个来授权交易,使其成为需要多个交易批准的企业或团体的理想选择,例如公司和 DAO。

每种钱包类型都满足比特币生态系统中的特定需求,从寻求效率的个人用户到优先考虑通过多重签名协议来保证安全的组织。

在 QuickNode 上创建一个比特币节点端点

欢迎使用公共节点或部署和管理自己的基础设施;但是,如果你想要快 8 倍的响应时间,你可以将繁重的工作交给我们。 在 这里 注册一个帐户。 登录后,单击 创建端点 按钮,然后选择要部署的区块链和网络。 就本指南而言,我们将选择 比特币测试网 区块链。 创建端点后,请保存好 HTTP Provider URL,因为我们将在本指南的编程部分中需要它。

Bitcoin testnet node QuickNode endpoint

创建了我们的比特币节点端点后,现在让我们继续创建一个新的比特币钱包地址。

使用 bitcoinjs-lib 创建一个新的比特币地址

创建了我们的比特币节点端点后,让我们继续创建新的比特币地址。 在本指南中,我们将演示如何使用以下库创建一个比特币地址

步骤 1. 首先,打开终端或命令提示符窗口,然后运行以下命令来启动一个新的项目文件夹和 npm 项目。

mkdir BitcoinAddress && cd BitcoinAddress
npm init -y

步骤 2. 你的代码需要 bitcoinjs-lib 库。 通过运行以下命令来安装它:

npm install bitcoinjs-lib ecpair tiny-secp256k1

步骤 3. 在你的项目目录中创建一个新的 JavaScript 文件,例如,index.js。 之后,将下面提供的代码复制到这个文件中:

const bitcoin = require('bitcoinjs-lib');
const ECPairFactory = require('ecpair').default;
const ecc = require('tiny-secp256k1');
const fs = require('fs');

const ECPair = ECPairFactory(ecc);
const network = bitcoin.networks.testnet; // Otherwise, bitcoin = mainnet and regnet = local

async function createP2PKHwallet() {
    try {
        const keyPair = ECPair.makeRandom({ network: network });
        const { address } = bitcoin.payments.p2pkh({
          pubkey: keyPair.publicKey,
          network: network,
        });
        const privateKey = keyPair.toWIF()

        console.log(`| Public Address | ${address} |`)
        console.log(`| Private Key | ${privateKey} |`)

        const wallet = {
            address: address,
            privateKey: privateKey
        };

        const walletJSON = JSON.stringify(wallet, null, 4);

        fs.writeFileSync('wallet.json', walletJSON);

        console.log(`Wallet created and saved to wallet.json`);
    } catch (error) {
        console.log(error)
    }
}

createP2PKHwallet();

现在,让我们回顾一下代码。

首先,我们首先导入所需的库,bitcoinjs-lib 用于配置网络,ecpair + tiny-secp256k1 用于辅助密钥对创建。 我们还导入 fs 以访问我们具有读/写权限的文件系统。 接下来,我们声明一个 ECPair 实例以帮助辅助密钥对创建,并定义一个 network 常量来切换我们将为哪个网络配置我们的地址。 稍后,我们定义一个 createP2PKHwallet 异步函数,它将尝试执行以下操作:

  1. 通过在 ECPair 库中调用 makeRandom 方法来创建一个随机密钥对
  2. 给定在上一步中创建的密钥对和定义的网络(例如,比特币、测试网、regtest),以 P2PKH 格式(例如,bitcoin.payments.p2pkh)生成一个公共地址
  3. 将私钥转换为 WIF(钱包导入格式)
  4. 在控制台中记录公钥和私钥(或捕获出现的任何错误)
  5. 创建一个包含密钥对的对象,将其转换为 JSON 格式并将其保存在名为 wallet.json 的文件中

步骤 4. 通过运行以下命令来执行脚本:

node index.js

你将看到类似于下面的输出:

Bitcoin output image

你应该会在终端窗口中看到你新创建的地址,并将其保存在 wallet.json 文件中。 请记住,这些密钥不应共享,建议在测试期间使用(而不是在生产中使用)。 在下一节中,我们将使用我们的 QuickNode 比特币节点端点来获取我们新创建的地址的余额。

(可选)获取比特币地址的余额

现在我们有了一个新创建的比特币地址,我们可以从比特币区块链读取以获取详细信息,例如我们的余额。 目前,比特币 JSON-RPC 客户端不容易获取余额等数据,因此我们将使用 QuickNode Marketplace 中的 Blockbook 插件 等便捷工具。 Blockbook 插件提供通过 JSON-RPC 访问地址或 xpub 的余额、交易和 UTXO。 你可以在 此处 查看支持的方法和定价的完整列表。

要了解如何使用该插件,请查看此处的完整指南:如何构建实时比特币钱包分析应用程序。 如果你按照本指南进行操作,你应该能够看到地址的余额和交易历史记录以及图表可视化。

额外资源

如果你想了解有关比特币和 bitcoinjs-lib 的更多信息,请查看以下内容:

最后的想法

就这样! 我希望本指南教会了你一些新东西! 如果你想了解更多关于比特币的信息或一般的特定主题,请在下面留下一些反馈!

如果你有任何疑问,请查看我们的 Discord 服务器或使用下面的表格提供反馈以获得帮助。 通过在 Twitter (@QuickNode) 和 Telegram 公告频道 上关注我们来了解最新信息。

我们 ❤️ 反馈!

如果你对新主题有任何反馈或要求,请 告诉我们。 我们很乐意听取你的意见。

  • 原文链接: quicknode.com/guides/bit...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
QuickNode
QuickNode
江湖只有他的大名,没有他的介绍。