如何使用 BitcoinJS (bitcoinjs-lib) 在测试网构建和广播比特币交易
创建比特币交易可能会让人感到望而生畏。然而,bitcoin-js 库 是一个出色的 Node.js 库,专为各种比特币操作设计,包括构建交易。这个开源库使开发人员能够通过 JavaScript/Typescript 与比特币区块链交互,使其成为一个用于编程创建和操作交易的多功能工具。在本指南中,我们将探讨使用这个流行的 JavaScript 库构建简单交易的过程。
重要: 本指南在测试网比特币网络上操作。这意味着在此过程中进行的任何币和交易都没有现实世界的价值。
UTXO 是指尚未在后续交易中花费或使用的交易输出。在比特币中创建交易意味着你正在花费之前的交易。要在测试网上创建 UTXO,你需要创建一个钱包,地址并使用水龙头向该地址发送测试网资金
创建此 UTXO 后,将以下信息存储在安全的 .env 文件中
privateKeyWIF = 'your_private_key_in_wallet_import_format'
previousTxid = 'transaction_id'
previousHex ='transaction_hex'
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
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!