Convert Figma logo to code with AI

bcoin-org logobcoin

Javascript bitcoin library for node.js and browsers

3,010
811
3,010
203

Top Related Projects

78,874

Bitcoin Core integration/staging tree

6,222

An alternative full node bitcoin implementation written in Go (golang)

Bitcoin Cross-Platform C++ Development Toolkit

A library for working with Bitcoin

4,854

A full stack for bitcoin and blockchain-based applications

Quick Overview

Bcoin is a full node Bitcoin implementation and wallet system written in JavaScript. It aims to be efficient, modular, and easily extensible, making it suitable for both desktop and server environments. Bcoin provides a complete Bitcoin stack, including networking, consensus rules, and wallet management.

Pros

  • Written in JavaScript, making it accessible to a large developer community
  • Modular architecture allows for easy customization and extension
  • Supports both full node and SPV (Simplified Payment Verification) modes
  • Includes a built-in wallet system with support for various key types

Cons

  • May have lower performance compared to C++ implementations like Bitcoin Core
  • Relatively smaller community and ecosystem compared to more established implementations
  • JavaScript's single-threaded nature might limit scalability in certain scenarios
  • Potential security concerns due to the use of a higher-level language for cryptocurrency implementation

Code Examples

  1. Creating a new wallet:
const {WalletClient} = require('bcoin');

const client = new WalletClient({
  network: 'testnet',
  port: 18332
});

(async () => {
  const wallet = await client.createWallet('mywallet');
  console.log('New wallet created:', wallet.id);
})();
  1. Sending a transaction:
const {Amount} = require('bcoin');

(async () => {
  const wallet = await client.getWallet('mywallet');
  const tx = await wallet.send({
    address: 'tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx',
    value: Amount.fromBTC(0.1).toValue()
  });
  console.log('Transaction sent:', tx.hash);
})();
  1. Listening for new blocks:
const {NodeClient} = require('bcoin');

const node = new NodeClient({
  network: 'main',
  port: 8332
});

node.on('block', (block) => {
  console.log('New block received:', block.hash);
});

node.open();

Getting Started

To get started with Bcoin, follow these steps:

  1. Install Bcoin:
npm install bcoin
  1. Create a new Node.js file (e.g., index.js) and add the following code:
const {FullNode} = require('bcoin');

const node = new FullNode({
  network: 'testnet',
  memory: true
});

(async () => {
  await node.open();
  await node.connect();
  
  node.on('block', (block) => {
    console.log('New block:', block.hash);
  });

  node.startSync();
})();
  1. Run the script:
node index.js

This will start a full node on the testnet network and log new blocks as they are received.

Competitor Comparisons

78,874

Bitcoin Core integration/staging tree

Pros of Bitcoin

  • Larger community and more extensive development history
  • More comprehensive documentation and resources
  • Wider adoption and integration with existing cryptocurrency infrastructure

Cons of Bitcoin

  • Heavier codebase with more legacy components
  • Slower development cycle and more conservative approach to changes
  • Steeper learning curve for new contributors

Code Comparison

Bitcoin:

CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
    int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
    // Force block reward to zero when right shift is undefined.
    if (halvings >= 64)
        return 0;

    CAmount nSubsidy = 50 * COIN;
    // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
    nSubsidy >>= halvings;
    return nSubsidy;
}

Bcoin:

function getReward(height, interval) {
  const halvings = Math.floor(height / interval);
  if (halvings >= 64)
    return 0;

  let reward = 50 * 1e8;
  reward >>>= halvings;
  return reward;
}

The code snippets show similar block reward calculation logic, with Bitcoin implemented in C++ and Bcoin in JavaScript. Both handle halving intervals and maximum halvings, but Bcoin's implementation is more concise due to JavaScript's syntax.

6,222

An alternative full node bitcoin implementation written in Go (golang)

Pros of btcd

  • Written in Go, offering better performance and easier deployment
  • More mature project with a longer development history
  • Extensive documentation and well-maintained codebase

Cons of btcd

  • Less flexible for customization compared to bcoin
  • Slower development cycle and fewer updates
  • Limited support for alternative consensus rules

Code Comparison

btcd (Go):

func (b *BlockChain) connectBlock(node *blockNode, block *btcutil.Block, view *UtxoViewpoint) error {
    // Block connection logic
}

bcoin (JavaScript):

async connectBlock(block, view) {
  // Block connection logic
}

Both implementations handle block connection, but btcd uses Go's static typing and error handling, while bcoin leverages JavaScript's async/await for asynchronous operations.

Additional Notes

  • btcd is part of the btcsuite project, offering a complete set of Bitcoin tools
  • bcoin provides a more modular architecture, allowing easier integration into JavaScript projects
  • btcd is often used for Bitcoin network analysis and research
  • bcoin is favored for its extensibility and customization options in web-based applications

Both projects are actively maintained and contribute significantly to the Bitcoin ecosystem, each with its own strengths and use cases.

Bitcoin Cross-Platform C++ Development Toolkit

Pros of libbitcoin-system

  • More comprehensive and feature-rich Bitcoin development toolkit
  • Highly modular architecture allowing for flexible integration
  • Strong focus on security and cryptographic primitives

Cons of libbitcoin-system

  • Steeper learning curve due to its complexity and extensive API
  • Less active development and community support compared to bcoin
  • Requires more setup and configuration for basic usage

Code Comparison

libbitcoin-system:

#include <bitcoin/system.hpp>
using namespace bc;

// Create a new HD private key
auto seed = data_chunk(16);
pseudo_random_fill(seed);
wallet::hd_private master(seed);

bcoin:

const bcoin = require('bcoin');
const HD = bcoin.hd;

// Create a new HD private key
const master = HD.PrivateKey.generate();

Both libraries provide functionality for creating HD private keys, but libbitcoin-system offers more low-level control over the process, while bcoin provides a simpler, more abstracted API. libbitcoin-system's approach may be preferred for advanced users seeking granular control, while bcoin's simplicity could be advantageous for rapid development and ease of use.

A library for working with Bitcoin

Pros of bitcoinj

  • Written in Java, offering better integration with Android and Java-based applications
  • More mature project with a longer history and larger community
  • Extensive documentation and examples available

Cons of bitcoinj

  • Less flexible for non-Java environments
  • May have performance limitations compared to lower-level implementations
  • Slower development cycle and less frequent updates

Code Comparison

bitcoinj:

Address address = Address.fromBase58(params, "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa");
Coin amount = Coin.parseCoin("0.5");
Transaction tx = new Transaction(params);
tx.addOutput(amount, address);

bcoin:

const address = Address.fromString('1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa');
const amount = Amount.fromBTC(0.5);
const tx = new MTX();
tx.addOutput(address, amount);

Both examples demonstrate creating a transaction with an output to a specific address. bitcoinj uses Java's object-oriented approach, while bcoin utilizes JavaScript's more flexible syntax. bcoin's code appears more concise, but bitcoinj's strongly-typed nature may provide better compile-time safety.

4,854

A full stack for bitcoin and blockchain-based applications

Pros of Bitcore

  • More comprehensive documentation and guides
  • Wider adoption and community support
  • Extensive API for blockchain data and wallet management

Cons of Bitcore

  • Slower development pace and less frequent updates
  • Heavier and more complex codebase
  • Limited support for newer Bitcoin features

Code Comparison

Bitcore

const bitcore = require('bitcore-lib');
const address = new bitcore.Address('1NaTVwXDDUJaXDQajoa9MqHhz4uTxtgK14');
console.log(address.isValid());

Bcoin

const bcoin = require('bcoin');
const address = bcoin.Address.fromString('1NaTVwXDDUJaXDQajoa9MqHhz4uTxtgK14');
console.log(address.isValid());

Both libraries provide similar functionality for basic Bitcoin operations, but Bcoin's API is generally more streamlined and modern. Bitcore offers a more extensive set of features out of the box, while Bcoin focuses on a modular approach, allowing developers to include only the components they need.

Bcoin tends to have better performance and a smaller footprint, making it suitable for resource-constrained environments. However, Bitcore's larger ecosystem and established presence in the industry make it a popular choice for many developers, especially those working on enterprise-level projects.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Bcoin

Build Status Coverage Status

Bcoin is an alternative implementation of the Bitcoin protocol, written in JavaScript and C/C++ for Node.js.

Bcoin is well tested and aware of all known consensus rules. It is currently used in production as the consensus backend and wallet system for purse.io.

Uses

  • Full Node
  • SPV Node
  • Wallet Backend
  • Mining Backend (getblocktemplate support)
  • Layer 2 Backend (lightning)
  • General Purpose Bitcoin Library

Install

$ git clone https://github.com/bcoin-org/bcoin
$ cd bcoin
$ npm rebuild
$ ./bin/bcoin

See the Getting started guide for more in-depth installation instructions, including verifying releases. If you're upgrading, see the latest changes via the Changelog.

Documentation

Support

Join us on freenode in the #bcoin channel.

Disclaimer

Bcoin does not guarantee you against theft or lost funds due to bugs, mishaps, or your own incompetence. You and you alone are responsible for securing your money.

Contribution and License Agreement

If you contribute code to this project, you are implicitly allowing your code to be distributed under the MIT license. You are also implicitly verifying that all code is your original work. </legalese>

License

  • Copyright (c) 2014-2015, Fedor Indutny (MIT License).
  • Copyright (c) 2014-2017, Christopher Jeffrey (MIT License).

See LICENSE for more info.

NPM DownloadsLast 30 Days