如何使用 BitcoinJS (bitcoinjs-lib) 在测试网构建和广播比特币交易

  • Jemimah
  • 更新于 2024-09-26 17:14
  • 阅读 824

如何使用 BitcoinJS (bitcoinjs-lib) 在测试网构建和广播比特币交易

创建比特币交易可能会让人感到望而生畏。然而,bitcoin-js 库 是一个出色的 Node.js 库,专为各种比特币操作设计,包括构建交易。这个开源库使开发人员能够通过 JavaScript/Typescript 与比特币区块链交互,使其成为一个用于编程创建和操作交易的多功能工具。在本指南中,我们将探讨使用这个流行的 JavaScript 库构建简单交易的过程。

重要: 本指南在测试网比特币网络上操作。这意味着在此过程中进行的任何币和交易都没有现实世界的价值。

前提条件

  1. NodeJS
  2. 配置为在测试网上运行的 Bitcoin Core 节点

创建一个未花费交易输出 (UTXO) 以供花费

UTXO 是指尚未在后续交易中花费或使用的交易输出。在比特币中创建交易意味着你正在花费之前的交易。要在测试网上创建 UTXO,你需要创建一个钱包,地址并使用水龙头向该地址发送测试网资金

创建此 UTXO 后,将以下信息存储在安全的 .env 文件中

privateKeyWIF = 'your_private_key_in_wallet_import_format'  
previousTxid = 'transaction_id'  
previousHex ='transaction_hex'

创建并广播一个简单的交易

  1. 设置你的环境:
    首先在你的项目中安装 bitcoinjs-lib。你可以使用 npm (Node Package Manager) 来完成:
    npm install bitcoinjs-lib

为了管理 SECP256k1 密钥对,你还需要安装 ecpair 和 tiny-secp256k1 模块。

ECPair 代表椭圆曲线对。在比特币中,它通常用于表示 ECDSA (椭圆曲线数字签名算法) 密钥对。这个库提供了创建、导入和操作椭圆曲线密钥对的方法,这对于数字签名和公钥加密等加密操作至关重要。

tiny-secp256k1 是一个轻量级库,由 BitcoinJS 用于低级别的椭圆曲线操作,特别是在 secp256k1 曲线上。这包括密钥对生成、签名生成和验证、公钥恢复等。

要在你的项目中安装这些库,请使用以下 node package manager 命令。

npm install ecpair  

npm install tiny-secp256k1

2. 将库导入到你的项目中:

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

3. 设置网络和 ECPair:

const ECPair = ECPairFactory(ecc);
const network = bitcoin.networks.testnet

4. 创建一个交易

// 创建一个简单的交易  
async function createTransaction(  
privateKeyWIF,   
previousTxid,   
receiverAddress,   
previousHex  
) {  

// 使用 WIF 编码的私钥 (privateKeyWIF) 和网络信息   
// 创建一个我们将用于签署交易的 keyPair  
    const keyPair = ECPair.fromWIF(privateKeyWIF, network);  

// 创建一个交易构建器并传递网络。bitcoin-js   
// Psbt 类用于此操作。   
    const txb = new bitcoin.Psbt({ network });  

// 虽然这些是默认的版本和锁定时间值,但你可以根据交易设置   
// 自定义值  
    txb.setVersion(2);  
    txb.setLocktime(0);  

// 添加输入: 之前的交易 ID,资金交易的输出索引  
// 由于这是一个非 segwit 输入,我们还必须传递完整的之前   
// 交易 hex 作为缓冲区   
    txb.addInput({  
        hash: previousTxid,  
        index: 0,  
        nonWitnessUtxo: Buffer.from(previousHex, 'hex'),  
    });  

// 添加输出作为接收者地址的缓冲区和你发送的聪数量  
    txb.addOutput({  
        script: Buffer.from(receiverAddress, 'hex'),  
        value: 20000,  
    }); // 发送 0.0002 BTC  

// 使用生成的 keyPair 签名并完成交易   
    txb.signInput(0, keyPair);  
    txb.finalizeAllInputs();  

// 提取交易并获取原始 hex 序列化  
    const tx = txb.extractTransaction();  
    return tx.toHex();  
}  

// 调用并执行上述函数,然后打印   
// 交易 hex  
createTransaction(privateKeyWIF, previousTxid, previousHex, myAddress)  
    .then((transactionHex) => {  
        console.log('Transaction Hex:', transactionHex);  
    })  
    .catch((error) => {  
        console.error('Error:', error.message);  
    });

你的交易现在可以广播到比特币网络了!

5. 广播交易

广播交易是指将签名的交易传播到网络的过程,以便矿工可以将其包含在下一个区块中。广播对于使交易对去中心化的节点网络可见至关重要,允许矿工验证并将其包含在区块链中。

要在比特币测试网上广播交易,我们将使用 bitcoin-cli 命令行工具,这是 Bitcoin Core 软件的一部分。确保你的 Bitcoin Core 节点配置为在测试网上运行,并且已与测试网区块链完全同步。

在你的 bitcoin core 节点运行后,打开终端并运行以下命令;

bitcoin-cli -testnet sendrawtransaction <transactionHex>

上面使用的 transactionHex 是我们在创建交易的第 4 步中获得的。如果交易成功广播,命令将返回一个交易 ID (TxID)。你还可以使用各种测试网区块链浏览器检查交易状态。

广播交易是比特币网络去中心化性质的重要组成部分,确保所有参与者都能看到网络上发生的交易,并促进共识驱动的不可变账本的创建。

结论

使用 bitcoinjs-lib 构建交易提供了一个理解比特币交易复杂性的实践经验。随着你进一步探索和尝试不同的输入、输出和交易结构,你会发现这个库所提供的强大功能和灵活性。

资源:

GitHub - bitcoinjs/bitcoinjs-lib

Bitcoin Programming with BitcoinJS, Bitcoin Core and LND

构建你自己的加密钱包:开发者的泥潭指南

比特币基础:使用bitcoinjs-lib编程

我是 AI 翻译官,为大家转译优秀英文文章,如有翻译不通的地方,在这里修改,还请包涵~

点赞 0
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

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