next-gen colored coin client base
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Next-gen colored coin client base

The NGCCC project is a colored coin client written from scratch in Python. Previous attempts involved writing in colored coin concepts into existing clients. This project grew out of those efforts as it was clear that making a new client written from scratch would be more flexible, easier to change and have lower overhead.

Overview of colored coins

Colored coins is a concept which allows the exchange of assets over the internet through the use of the bitcoin blockchain. Each bitcoin unit (aka "Satoshi") can be "colored" by the use of a protocol for issuing, sending and receiving such coins. This can be useful for securities like stocks and bonds as ownership of such securities can be associated with a particular color. The convenience of bitcoin transactions are then brought to these securities while maintaining their own separate chain of ownership apart from bitcoins.

The original white paper is here. A more accessible introduction can be found here.

To date, there have been several working implementations of this concept, but they were all proofs-of-concept. We are seeking here to implement a client that can actually be used by real users for the issuance of securities and other applications.


The goals of this project are as follows:

  • Create a flexible and versatile client that can be extended and modified.
  • Allow for a stand-alone configuration.
  • Allow for optimizations through use of other bitcoin servers.
  • Be safe, stable and secure
  • Have high performance with relatively little overhead.


  • Colored Coin Store (coloredcoinlib) - Stores colored transaction outputs
  • Transaction Parsing (utxodb/txcons/blockchain/electrum) - Grab and parse unspent transaction outputs
  • JSON-RPC API (ngccc-server/rpc_interface) - Expose functions via JSON-RPC
  • Command-line (ngccc/console_interface) - Expose functions via command-line
  • Wallet (pwallet/wallet_interface/wallet_model) - Maintain public/private addresses and sign transactions
  • Graphical UI (ngccc-gui/ui) - Expose functions via QT GUI.
  • Person-to-person trade (p2ptrade) - Allow users to trade assets directly.


These dependencies must be installed on your machine for the QT client:

  • PyQt4 is used to make the GUI.
  • SIP is a dependency for PyQT4.

The two can be installed by running sudo apt-get install python-qt4 python-sip on a linux machine.

These dependencies are automatically retrieved by

  • pycoin is used to work with transactions. (Particularly, sign them.)
  • python-bitcoinlib is used to connect to local bitcoind.
  • python-jsonrpc is used to create a JSON-RPC API server.
  • bunch is used by python-jsonrpc



  • The following instructions assume you are using a sh-like shell like bash.
  • The following instructions assume the environment variable YOUR_PROJECT_DIRECTORY contains the path to a directory where you will keep your projects
  • The following instructions assume that the path "$YOUR_PROJECT_DIRECTORY/env" exists and is a directory


  • Install bitcoind ex. sudo apt-get install bitcoind (or use whatever package manager for your linux distro)

  • Create a python virtualenv to work in ex. cd $YOUR_PROJECT_DIRECTORY/env/ && virtualenv ngcccbase

  • Activate the virtualenv ex. source $YOUR_PROJECT_DIRECTORY/env/ngcccbase/bin/activate

  • Change to your project directory ex. cd $YOUR_PROJECT_DIRECTORY

  • Clone ngcccbase ex. git clone

  • Change into your cloned copy of ngcccbase ex. cd $YOUR_PROJECT_DIRECTORY/ngcccbase

  • Install ngcccbase for development ex. python develop

If you want to play with the QT client there are two more steps:

  • Install PyQt4 and SIP ex. sudo apt-get install python-qt4 python-sip (or use whatever package manager for your linux distro).

  • Copy PyQT4 and sip to your virtualenv. On ubuntu/debian:

    cp -r /usr/lib/python2.7/dist-packages/PyQt4 $YOUR_PROJECT_DIRECTORY/env/ngcccbase/lib/python2.7/site-packages

    cp -r /usr/lib/python2.7/dist-packages/sip* $YOUR_PROJECT_DIRECTORY/env/ngcccbase/lib/python2.7/site-packages

    mkdir $YOUR_PROJECT_DIRECTORY/env/ngcccbase/share

    mkdir $YOUR_PROJECT_DIRECTORY/env/ngcccbase/share/pyshared

    cp -r /usr/share/pyshared/PyQt4 $YOUR_PROJECT_DIRECTORY/env/ngcccbase/share/pyshared

Mac notes

Instead of bitcoind you can use Bitcoin-Qt in server mode.

cd /Applications/

./Bitcoin-Qt -server -testnet -txindex

You need to configure a bitcoin.conf with rpcuser and rpcpassword in ~/Library/Application Support/Bitcoin/

An easy way to install a python, PyQt4 and sip is with homebrew, brew install python pyqt

Make sure to install the pycoin library through github.

git clone

cd path/to/pycoin

sudo make install

Testnet Example

  • bitcoind -testnet -txindex -daemon
  • python setval testnet true
  • python newaddr bitcoin

The output of this last command is your testnet address, which we'll denote here as {address}. You should see {address} when running this command:

  • python alladdresses bitcoin

Send money to this address using a testnet faucet or using this command if you already have money in your testnet wallet.

  • bitcoind sendtoaddress {address} .1
  • python scan
  • python balance bitcoin

Should return 0.1

  • python issue assetName obc 10000 1

Should return a large hash.


  • Alex "killerstorm" Mizrahi
  • Jimmy Song
  • Thor "Plazmotech" Correia
  • Victor Knyazhin (coloredcoinlib)
  • Daniel "Ademan" Roberts
  • Adrian Porter
  • Manuel Araoz (coloredcoinlib)
  • Fabian Barkhau


MIT (see LICENSE file)


To financially support this project you can donate to this Bitcoin address: 1uEfNJF2Diz9ADQ3sQ16JyZpZ6qMPKxRk


A big thank you to the following sponsors of this project. They can be seen at the colored coins home page.