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

背景

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

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

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

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

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 - 区块链浏览器用户接口。

什么是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 可以支援多币种、多帐户等。

猜你喜欢

转载自blog.csdn.net/inthat/article/details/141393435