This project is a Python-based reference implementation of BBc-1, a trustable system of record keeping beyond blockchains.
The design paper (white paper) and the analysis paper are available here and here. BBc-1 is inspired from blockchain technologies like Bitcoin, Ethereum, Hyperledger projects, and so on. BBc-1 is a simple but reliable distributed ledger system in contrast with huge and complicated existing blockchain platforms. The heart of BBc-1 is the transaction data structure and the relationship among transactions, which forms a graph topology. A transaction should be signed by the players who are the stake holders of the deal. BBc-1 achieves data integrity and data transparency by the topology of transaction relationship and signatures on transactions. Simply put, BBc-1 does not have blocks, and therefore, requires neither mining nor native cryptocurrency. BBc-1 can be applied to both private/enterprise use and public use. BBc-1 has a concept of domain for determining a region of data management. Any networking implementation (like Kademlia for P2P topology management) can be applied for each domain. Although there are many TODOs in BBc-1, this reference implementation includes most of the concept of BBc-1 and would work in private/enterprise systems. When sophisticated P2P algorithms are ready, BBc-1 will be able to support public use cases.
The source codes in this repository is a platform of BBc-1 and bbc_core.py is the main process of a core node. The APIs of BBc-1 is defined in bbc_app.py and bbclib.py. So application developers should import them in your apps. For building a BBc-1 system, bbc1 package needs to be installed in the hosts and you need to run bbc_core.py on each host. In order to configure the BBc-1 network, the utilities in utils/ directory are available. They are a kind of BBc-1 application, so that you can develop your own management tools.
For the details, please read documents in docs/ directory. Not only documents but slide decks (PDF) explain the design of the BBc-1 and its implementation.
Some documents are available in docs/.
- Policy, design and analysis
- Usage
- Programing
- API reference (Coming soon. Currently, something wrong in building docs)
- https://bbc-1.readthedocs.io/en/latest/
- You can read API docs in your local host by the following command:
cd docs/api/_build/html pipenv run python -m http.server
-
Python
- Python 3.5.0 or later
- virtualenv is recommended
python -mvenv venv
- In some environment, pipenv does not work well.
- Some bugs seems to be in the installation scripts. So, please do not use pipenv now.
-
tools for macOS by Homebrew
brew install libtool automake python3 pipenv
-
tools for Linux (Ubuntu 16.04 LTS)
sudo apt-get install -y git tzdata openssh-server python3 python3-dev libffi-dev net-tools autoconf automake libtool libssl-dev make pip install pipenv
-
Install development tools (libtool, automake)
-
Install python and pip
-
Clone this project
-
Prepare OpenSSL-based library in the root directory
sh prepare.sh
-
Install dependencies by the following command (in the case of python 3.6)
python -mvenv venv source venv/bin/activate pip install -r requirements.txt
-
Start bbc_core.py on a terminal
cd core python bbc_core.py
-
Start a sample app in another terminal (should be initially at bbc1/ top directory)
pipenv shell cd examples python file_proof.py arg1 arg2..
- Install development tools (libtool, automake)
- Install python and pip
- Install BBc1 by pip
python -mvenv venv source venv/bin/activate pip install bbc1
- Install docker on your host
- Clone this project
- Build docker image
If you want source codes in your container,
or, if you just want to use BBc-1,
cd docker ./docker-bbc1.sh gitbuild
cd docker ./docker-bbc1.sh pipbuild
- Run a docker container
./docker-bbc1.sh start
- Log in to the container
or
./docker-bbc1.sh shell
The initial password is "bbc1".ssh -p 10022 root@localhost
The working directory of BBc-1 on the docker container is mounted on docker/data/.bbc1/. You will find a config file, ledger DB and file storage directory in the working directory.
- bbc1/core/
- core functions of BBc-1
- utils/
- BBc-1 system configuration utilities
- examples/
- sample applications on BBc-1
- docker/
- docker environments
- tests/
- test codes for pytest
- libs/
- some libraries used by BBc-1
- docs/
- docs about BBc-1 and its reference implementation
- somewhere/.bbc1/
- default working directory name of bbc_core.py
- requirements.txt
- python modules to be required
- setup.py
- MANIFEST.in
- prepare.py
- for creatign python modules
- prepare.sh
- setup script