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.
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:
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 setup.py.
- 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
Assumptions
- 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
Instructions
-
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 https://github.com/bitcoinx/ngcccbase.git
-
Change into your cloned copy of ngcccbase ex.
cd $YOUR_PROJECT_DIRECTORY/ngcccbase
-
Install ngcccbase for development ex.
python setup.py 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
Instead of bitcoind you can use Bitcoin-Qt in server mode.
cd /Applications/Bitcoin-Qt.app/Contents/MacOS
./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 https://github.com/richardkiss/pycoin
cd path/to/pycoin
sudo make install
bitcoind -testnet -txindex -daemon
python ngccc.py setval testnet true
python ngccc.py 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 ngccc.py 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 ngccc.py scan
python ngccc.py balance bitcoin
Should return 0.1
python ngccc.py 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)
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.