How to Create a Wallet and Make Transactions with BitcoinJS Library: A Step-by-Step Guide

How to Create a Wallet and Make Transactions with BitcoinJS Library: A Step-by-Step Guide
Photo by Kanchanara / Unsplash

BitcoinJS is a popular JavaScript library that allows you to interact with the Bitcoin network. It's a powerful tool for developers who want to create Bitcoin wallets, send transactions, and more. In this blog post, we'll walk you through the process of creating a Bitcoin wallet and making transactions using BitcoinJS.

Before proceeding, make sure you have Node.js installed on your machine. You'll also need to install BitcoinJS using npm, the Node.js package manager. You can install it with the following command:

npm install bitcoinjs-lib

Creating a Bitcoin Wallet

A Bitcoin wallet is essentially a pair of cryptographic keys: one public, one private. The public key (or Bitcoin address) is what you share with others so they can send you bitcoins. The private key is used to sign transactions and access your funds.

Let's create a Bitcoin wallet:

const bitcoin = require('bitcoinjs-lib');

function createWallet(networkType) {
    let network = null;
    if (networkType === 'testnet') {
        network = bitcoin.networks.testnet;
    } else if (networkType === 'bitcoin') {
        network = bitcoin.networks.bitcoin;

    const keyPair = bitcoin.ECPair.makeRandom({ network: network });
    const { address } = bitcoin.payments.p2pkh({ pubkey: keyPair.publicKey, network: network });

    return {
        keyPair: keyPair,
        address: address

const myWallet = createWallet('testnet');

In the script above, we first import the BitcoinJS library. We then define a function createWallet that generates a random key pair and derives the corresponding Bitcoin address. We're using the Pay-to-Public-Key-Hash (P2PKH) payment method, which is the most common on the Bitcoin network.

Making a Transaction

With a Bitcoin wallet in place, you can now create transactions. In this example, let's say you want to send some bitcoins from your wallet to another address. Here's how you can do that:

async function sendBitcoin(sourceWallet, toAddress, amountSatoshis, feeSatoshis) {
    const psbt = new bitcoin.Psbt({ network: });

    // TODO: Fetch unspent transactions from sourceWallet.address and add as inputs
    // TODO: Calculate change and add output back to sourceWallet.address if needed

        address: toAddress,
        value: amountSatoshis,


    const transaction = psbt.extractTransaction();

    // TODO: Broadcast transaction to the Bitcoin network

    return transaction.toHex();

In this function, we create a new instance of the Psbt (Partially Signed Bitcoin Transaction) class. We then add an output to the transaction, which includes the recipient's address and the amount of bitcoins (in satoshis) we're sending.

Next, we sign the transaction with the private key from our source wallet, finalize all inputs, and extract the transaction. The function then returns the transaction in hexadecimal format.

Please note that this is a simplified example. In a real-world scenario, you'd need to fetch the unspent transactions (UTXOs) from the source wallet's address and add them as inputs to the transaction. You'd also need to calculate the change and add an output back to the source wallet if needed. Finally, you'd need to broadcast the signed transaction to the Bitcoin network.