比特币生态常用库之bitcoinjs-lib

devtools/2024/10/20 3:41:52/

文章目录

    • 背景
    • bitcoinjs-lib 和bitcore-lib
    • 什么是bitcore-lib
    • 什么是bitcoinjs-lib
    • 安装
    • 使用
      • demo:返回一对随机地址和私钥
    • 比特币的主流地址类型
    • BIP32, BIP39, BIP44

背景

熟悉以太坊生态的开发者朋友应该都知道,以太坊常用的库有 Ethersjs、Web3js 和 Viem 。

随着去年比特币生态的崛起,比特币开发者生态也有了一些开发需求。比如有很多网站已经支持比特币钱包的连接,然后用脚本去实现铭文的铭刻。还有几个比较新的比特币 Layer2,交互都是依靠比特币钱包进行的。

  • bitcoinjs-lib 本身没有在比特币网络进行签名和验证的能力,所以开发者又提供了 bitcoinjs-message 这个库,用来对消息进行签名和验证,扩展了 bitcoinjs-lib 的能力。
  • tiny-secp256k1 是一个专注于比特币曲线 Secp256k1 的库,主要是用来加密操作,比如生成密钥对、签名等等。
  • ecpair 是一个用来管理比特币密钥对的库,可以从私钥获取公钥,通常会和 tiny-secp256k1 一起使用。
  • bip32 是一个比特币提案的实现,BIP32 提案定义了如何使用一颗树状结构来生成和管理密钥,它允许通过一个主密钥来派生很多子密钥。
  • bip39 是也是一个比特币提案的实现,BIP39 定义了如何从随机数中生成助记词,以及同构助记词转换成一个种子。通过这些助记词可以恢复比特币钱包。

BitcoinJ是一个流行的Java库,它提供了比特币网络通信、地址生成、交易处理等功能。BitcoinJS和Bitcore是JavaScript库,提供了类似的功能。

bitcoinjslib_bitcorelib_23">bitcoinjs-lib 和bitcore-lib

  1. 使用场景不同
    bitcore:是由 BitPay 开发的,主要用于构建更复杂的比特币应用和服务,特别是涉及支付处理和比特币钱包的应用。它通常适合大型项目或企业级解决方案。
    bitcoinjs-lib:更轻量,适合单个开发者或小型项目,专注于比特币的核心功能,如地址生成、交易构造等。

  2. 社区和生态系统
    社区支持:bitcoinjs-lib 和 ethers.js、web3.js 等库有着更广泛的社区支持,文档和示例较为丰富,适合初学者和快速开发。
    bitcore:虽然功能强大,但相对较少的社区支持和文档使得它在新项目中的使用率较低。

虽然 bitcore 是一个非常强大的工具,但在快速开发、社区支持和易用性方面,bitcoinjs-lib 更受欢迎,在众多比特币工具库中使用人数比较多。 在Android中, 一般是使用bitcoinj这个库基本上可以完成所有操作

什么是bitcore-lib

官网:https://bitcore.io/
官方github:https://github.com/bitpay/bitcore

bitcore宣称为创建基于Bitcoin/区块链基础的应用程序提供基础设施,目前Bitpay钱包使用bitcore内置的功能。

bitcore-node - 标准API接口用来与多个区块链网络交互。
bitcore-wallet - 支持命令行的基础钱包客户端。
bitcore-wallet-client - 访问钱包服务的客户端。
bitcore-wallet-service - 提供钱包多签名服务
insight - 区块链浏览器用户接口。

bitcoinjslib_48">什么是bitcoinjs-lib

官方github:https://github.com/bitcoinjs/bitcoinjs-lib

安装

npm install bitcoinjs-lib

使用

demo:返回一对随机地址和私钥

import * as bitcoin from 'bitcoinjs-lib';
import * as ecc from 'tiny-secp256k1';
import ECPairFactory from 'ecpair';const ECPair = ECPairFactory(ecc);export async function generateWallet() {try {console.log('ECPair:', ECPair);// 生成随机密钥对const keyPair = ECPair.makeRandom();if (!keyPair) {throw new Error('Key pair generation failed');}console.log('Key pair generated:', keyPair); // 打印 keyPair// 获取私钥并转换为十六进制字符串const privateKey = keyPair.privateKey ? keyPair.privateKey.toString('hex') : undefined;if (!privateKey) {throw new Error('Private key generation failed');}console.log('Private key:', privateKey);const { address } = bitcoin.payments.p2wpkh({ pubkey: keyPair.publicKey });if (!address) {throw new Error('Address generation failed');}console.log('Wallet created:', { address, privateKey });return {address,privateKey,};} catch (error) {console.error('Error creating wallet:', error);throw new Error('Wallet generation failed: ' + error.message);}
}

比特币的主流地址类型

  1. P2PKH(Pay to Public Key Hash):
    地址以 1 开头。
    这是比特币最早的地址类型,适合使用传统的比特币钱包。
    P2SH(Pay to Script Hash):

  2. 地址以 3 开头。
    这种地址类型支持多重签名和其他复杂的脚本。

  3. P2WPKH(Pay to Witness Public Key Hash):
    地址以 bc1 开头,属于比特币的隔离见证(SegWit)地址。
    这种地址类型可以减少交易费用,提高交易效率。

总结,P2WPKH 地址类型是目前的趋势,特别是在希望使用 SegWit 优势的情况下。如果你在开发中,建议优先选择 P2WPKH 地址。

BIP32, BIP39, BIP44

BIP32:定义 Hierarchical Deterministic wallet (简称 “HD Wallet”),是一个系统可以从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥)。好处是可以方便的备份、转移到其他相容装置(因为都只需要 seed),以及分层的权限控制等。
BIP39:将 seed 用方便记忆和书写的单字表示。一般由 12 个单字组成,称为 mnemonic code(phrase),中文称为助记词或助记码。

BIP44:基于 BIP32 的系统,赋予树状结构中的各层特殊的意义。让同一个 seed 可以支援多币种、多帐户等。


http://www.ppmy.cn/devtools/100386.html

相关文章

【系统安全】Kernel Streaming WOW Thunk 服务驱动程序特权提升漏洞(CVE-2024-38054)

文章目录 前言一、漏洞概述二、影响范围三、漏洞复现四、修复方法前言 安全研究员 “Frost” 发布了CVE-2024-38054漏洞的概念验证漏洞利用代码,这加剧了人们对最近修补的 Windows 安全漏洞的担忧。内核流 WOW Thunk 服务驱动程序中的这个高严重性漏洞可能使本地攻击者能够通…

web前端之选项卡集合、动态添加类名、动态移除类名、动态添加样式、激活、间距、节流、tabBar

MENU input的checked属性(HtmlStyle)伪元素(HtmlStyleJavaScript)激活类(HtmlStyleJavaScript)Vue伪元素 input的checked属性(HtmlStyle) 前言 代码段创建一个使用HTML和CSS实现的标签式内容切换组件。通过选择不同的标签,可以展示相应的内容。 代码段实现一个简洁…

git命令大全及实操

git实操 相关网站git基本命令命令 git flow基本命令命令 相关网站 官网 菜鸟教程 github官网 阮一峰git教程 git 基本命令 命令命令介绍具体用法安装安装具体用法工作区、暂存区、版本库、远程仓库工作区、暂存区、版本库、远程仓库具体用法git init初始化git仓库进入具体文…

伪共享问题如何解决?

伪共享问题是多核处理器环境下常见的性能瓶颈之一,特别是在多线程编程中。想要解决它,就必须先了解缓存行的概念。 缓存行 缓存行是指在 CPU 缓存中最小的数据单位,通常包含一定数量的字节(例如,常见的缓存行大小为 …

linux发邮件的操作流程和注意事项有哪些?

linux发邮件服务配置方法?linux怎么用命令发送邮件? 在Linux系统中,邮件发送是一个常见且重要的功能,无论是用于系统监控通知还是日常通信。AokSend将详细介绍在Linux环境下如何进行邮件发送,并提供一些关键的注意事项…

搭建自己的金融数据源和量化分析平台(七):定时更新上市公司所属行业门类及大类

0x00 前言 由于此前从深交所下载的股票信息中只有行业门类信息,没有行业大类信息,导致后续解析三大报表和量化选股的时候无法进行: 可以看到深交所的股票是没有大类信息的。 再看看上交所的保险股: 因此需要将深交所股票的所属…

位数问题c++

题目描述 在所有的N位数中,有多少个数中有偶数个数字3,由于结果可能很大,你只需要输出这个答案对12345取余的值。 输入 读入一个数N(N≤1000) 输出 输出有多少个数中有偶数个数字3。 样例输入 2 样例输出 73样例解释: 1…

Spring Boot与桥接模式:构建灵活的产品分类体系

在当今的软件开发领域,特别是在构建大型应用时,模块化和灵活性成为了至关重要的设计原则。Spring Boot,以其便捷的开发体验和强大的生态支持,成为许多开发者首选的Java开发框架之一。本文将探讨如何利用Spring Boot结合桥接模式来…