A bitcoin library in C, SPV wallet & more.
C Other
Switch branches/tags
Nothing to show
Clone or download
jgarzik Merge pull request #106 from hubslave/master
Update build on OpenBSD
Latest commit eba4b3c Feb 20, 2018



GitHub license Build Status Coverage Status

Tiny bitcoin library, with lightweight client and utils.

This contains several pieces of interest:

  • libccoin - C library for building bitcoin applications
  • picocoin - (WIP) Bitcoin HD wallet
  • brd - (WIP) Bitcoin network full node ("block relay daemon")
  • Comprehensive test suite.

libccoin library dependencies: GMP

picocoin client dependencies: GMP libevent 2.x jansson 2.x (2.1 used for development)

block relay daemon (brd) dependencies: GMP libevent 2.x

Command line and configuration file usage

The picocoin wallet is operated via command line, in a similar style to "git sub-command". To obtain a list of commands, run

$ ./picocoin --help

The program stores settings in a key/value map. These key=value parameters may be specified on the command line via --set, or in a configuration file. To view these settings, run

$ ./picocoin settings

Recognized parameters


Format: address SPACE port

Manually add P2P node to peer manager.

config (alias "c")

Specify a pathname to the configuration file.

wallet (alias "w")

Specify a pathname to the wallet data file. Default "picocoin.wallet"

AES encryption is applied to the wallet. Passphrase is specified via environment variable PICOCOIN_PASSPHRASE.


Enable additional debug output.


TCP connect(2) timeout.

Recognized commands


Select blockchain and network. Reads the "chain" settings variable. Acceptable values are "chain=bitcoin" and "chain=testnet3". Updates internal parameters (pchMessageStart / network magic, genesis block, ...)


Query and display bitcoin DNS seeds, for P2P node addresses.


Display settings map.


Generate a new bitcoin address (ECDSA keypair). Store it in the current wallet,


Initialize a new wallet. Refuses to initialize, if the filename already exists.


Create new HD account.


Synchronize with network: send any pending payments, and check for new incoming payments.


List all legacy non-HD bitcoin addresses in wallet.


Dump entire wallet contents, including all private keys.


Informational summary of wallet data.