Coder Social home page Coder Social logo

ngcccbase's Introduction

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.

Goals

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.

Components

  • 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.

Dependencies

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 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

Development

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

Mac notes

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

Testnet Example

  • 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.

Contributors

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

License

MIT (see LICENSE file)

Donations

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

Sponsors

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

ngcccbase's People

Contributors

killerstorm avatar jimmysong avatar fanatid avatar maraoz avatar ademan avatar arichnad avatar uwecerron avatar amidvidy avatar anderssonfilip avatar

Watchers

 avatar James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.