diff --git a/README.md b/README.md index 99c0952f..86a198e0 100644 --- a/README.md +++ b/README.md @@ -1,38 +1,14 @@ -# BigchainDB - Integration Examples +# BigchainDB A scalable blockchain database. [The whitepaper](https://www.bigchaindb.com/whitepaper/) explains what that means. [![Join the chat at https://gitter.im/bigchaindb/bigchaindb](https://badges.gitter.im/bigchaindb/bigchaindb.svg)](https://gitter.im/bigchaindb/bigchaindb?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -[![Travis branch](https://img.shields.io/travis/diminator/bigchaindb/develop.svg)](https://travis-ci.org/diminator/bigchaindb) -[![Codecov branch](https://img.shields.io/codecov/c/github/diminator/bigchaindb/develop.svg)](https://codecov.io/github/diminator/bigchaindb?branch=develop) +[![PyPI](https://img.shields.io/pypi/v/bigchaindb.svg)](https://pypi.python.org/pypi/BigchainDB) +[![Travis branch](https://img.shields.io/travis/bigchaindb/bigchaindb/develop.svg)](https://travis-ci.org/bigchaindb/bigchaindb) +[![Codecov branch](https://img.shields.io/codecov/c/github/bigchaindb/bigchaindb/develop.svg)](https://codecov.io/github/bigchaindb/bigchaindb?branch=develop) +[![Documentation Status](https://readthedocs.org/projects/bigchaindb/badge/?version=develop)](http://bigchaindb.readthedocs.org/en/develop/?badge=develop) -## Interledger - -This fork provides basic functionality for supporting the interledger protocol, see http://interledger.org/ - -The edits are found under interledger/core.py and interledger/tests/test_connector.py -To run the interledger test, [install bigchaindb](#gettingstarted) -``` -$0> rethinkdb & - -$1> bigchaindb -c examples/interledger/bigchain.json start -$2> bigchaindb -c examples/interledger/megachain.json start - -$3> cd examples/interledger -$3> python3 run_cross_ledger_payment_simple.py -``` - -- [x] multisig -- [x] escrow -- [x] connectors -- [ ] signed receipts -- [ ] receipt propagation and listeners -- [ ] proper asset conversion -- [ ] RESTful API wrapper -- [ ] multi-(big)chain(db) instantiation + network path optimization - - -## Quick Start +## Quick Start ### [Install & Run BigchainDB](http://bigchaindb.readthedocs.org/en/develop/installing.html) ### [Run BigchainDB with Docker](http://bigchaindb.readthedocs.org/en/develop/installing.html#run-bigchaindb-with-docker) diff --git a/examples/__init__.py b/examples/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/examples/accounts.py b/examples/accounts.py deleted file mode 100644 index daebb006..00000000 --- a/examples/accounts.py +++ /dev/null @@ -1,45 +0,0 @@ - - -class User: - def __init__(self, ledger): - self.ledger = ledger - self.private, self.public = ledger.generate_keys() - self.assets = [] - - def create_asset(self): - tx = self.ledger.create_transaction(self.ledger.me, self.public, None, 'CREATE') - tx_signed = self.ledger.sign_transaction(tx, self.ledger.me_private) - self.ledger.validate_transaction(tx_signed) - self.ledger.write_transaction(tx_signed) - self.assets.append(tx_signed) - - def create_assets(self, amount=1): - for i in range(amount): - self.create_asset() - - -class Escrow(User): - def __init__(self, ledger=None, current_owner=None, new_owner=None, - asset_id=None, condition_func=None, payload=None): - User.__init__(self, ledger) - self.condition_func = condition_func if condition_func else lambda proof: True - self.new_owner = new_owner - tx = self.ledger.create_transaction(current_owner, - [current_owner, self.public], - asset_id, - 'TRANSFER', - payload) - self.assets = tx - - def release(self, receipt=None): - if not self.validate(receipt): - raise Exception - tx = self.ledger.create_transaction(self.assets['transaction']['new_owners'], - self.new_owner, - self.assets['id'], - 'TRANSFER', - self.assets['transaction']['data']['payload']) - return self.ledger.sign_transaction(tx, self.private, self.public) - - def validate(self, receipt): - return self.condition_func(receipt) diff --git a/examples/interledger/__init__.py b/examples/interledger/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/examples/interledger/bigchain.json b/examples/interledger/bigchain.json deleted file mode 100644 index 0ed6b50a..00000000 --- a/examples/interledger/bigchain.json +++ /dev/null @@ -1 +0,0 @@ -{"database": {"host": "localhost", "name": "bigchain", "port": 28015}, "keyring": [], "keypair": {"public": "jhpCiHPiMmHGFQvjqn1LdLddYhYFd63ywUbi3tFCW31f", "private": "5vbka7oLMf2UTNV1sq3nyKJXTERCPWvD8Pf4KnGYNBtA"}} \ No newline at end of file diff --git a/examples/interledger/connector.py b/examples/interledger/connector.py deleted file mode 100644 index 5d26a6b6..00000000 --- a/examples/interledger/connector.py +++ /dev/null @@ -1,76 +0,0 @@ -from examples.accounts import User, Escrow - - -class LedgerConnection(User): - def __init__(self, ledger): - self._escrow = None - User.__init__(self, ledger) - - def escrow(self, current_owner=None, new_owner=None, condition_func=None, asset_id=None, payload=None): - self._escrow = Escrow(ledger=self.ledger, - current_owner=current_owner if current_owner else self.public, - new_owner=new_owner if new_owner else self.public, - asset_id=asset_id if asset_id else self.assets[0]['id'], - condition_func=condition_func, - payload=payload) - if not current_owner: - tx_connector_signed = self.ledger.sign_transaction(self._escrow.assets, self.private) - self.ledger.validate_transaction(tx_connector_signed) - self._escrow.assets = tx_connector_signed - self.ledger.write_transaction(tx_connector_signed) - - def release(self, condition): - return self._escrow.release(condition) - - -class Connector: - def __init__(self, ledger=None): - self.ledger_connections = [] - if ledger: - self.add_ledger(ledger) - - def public(self, ledger=None): - return self.get_ledger_connection(ledger).public if self.get_ledger_connection(ledger) else None - - def private(self, ledger=None): - return self.get_ledger_connection(ledger).private if self.get_ledger_connection(ledger) else None - - def get_assets(self, ledger=None): - ledger_connection = self.get_ledger_connection(ledger) - return ledger_connection.assets if ledger_connection else None - - def create_assets(self, amount=1, ledger=None): - ledger_connection = self.get_ledger_connection(ledger) - if ledger_connection: - ledger_connection.create_assets(amount) - - def get_ledger_connection(self, ledger=None): - if not ledger: - return self.ledger_connections[0] - # TODO: yield - ledger_connection = [l for l in self.ledger_connections if l.ledger == ledger] - return ledger_connection[0] if ledger_connection else None - - def add_ledger(self, ledger): - if self.can_add_ledger_connection(ledger): - self.ledger_connections.append(LedgerConnection(ledger)) - - def can_add_ledger_connection(self, ledger): - return False if self.get_ledger_connection(ledger) else True - - def connect(self, user_from=None, ledger_from=None, user_to=None, ledger_to=None, - condition_func=None, asset_id=None, payload=None): - connection_from = self.get_ledger_connection(ledger_from) - connection_to = self.get_ledger_connection(ledger_to) - connection_from.escrow(current_owner=user_from, - condition_func=condition_func, - asset_id=asset_id, - payload=payload) - connection_to.escrow(new_owner=user_to, - condition_func=condition_func, - payload=payload) - return connection_from._escrow.assets - - def release(self, ledger=None, receipt=None): - connection = self.get_ledger_connection(ledger) - return connection.release(receipt) \ No newline at end of file diff --git a/examples/interledger/megachain.json b/examples/interledger/megachain.json deleted file mode 100644 index fe0c6a4d..00000000 --- a/examples/interledger/megachain.json +++ /dev/null @@ -1 +0,0 @@ -{"keyring": [], "database": {"host": "localhost", "port": 28015, "name": "megachain"}, "keypair": {"private": "DGKiLSdLsZofmzZMv3B9KZVj79wrq4PZ3PsMmk8Hu8KK", "public": "gMGJ9j15qyBVC1t8ceiDgJLLaRBgvrFchyzB1GgWk3Fa"}} \ No newline at end of file diff --git a/examples/interledger/run_cross_ledger_payment_simple.py b/examples/interledger/run_cross_ledger_payment_simple.py deleted file mode 100644 index 701f8b8b..00000000 --- a/examples/interledger/run_cross_ledger_payment_simple.py +++ /dev/null @@ -1,54 +0,0 @@ -import json -from time import sleep - -from bigchaindb import Bigchain -from examples.accounts import User -from examples.interledger.connector import Connector - -config_bigchain = json.load(open('bigchain.json', 'r')) -config_megachain = json.load(open('megachain.json', 'r')) - -bigchain = Bigchain(dbname=config_bigchain['database']['name'], - public_key=config_bigchain['keypair']['public'], - private_key=config_bigchain['keypair']['private']) - -megachain = Bigchain(dbname=config_megachain['database']['name'], - public_key=config_megachain['keypair']['public'], - private_key=config_megachain['keypair']['private']) - -alice = User(bigchain) -bob = User(megachain) - -connector = Connector(bigchain) -connector.add_ledger(megachain) - -# create assets -alice.create_assets(amount=2) -connector.create_assets(amount=2, ledger=bigchain) -connector.create_assets(amount=2, ledger=megachain) - -sleep(6) -# transfer asset to escrow -tx_alice = connector.connect(user_from=alice.public, - ledger_from=alice.ledger, - user_to=bob.public, - ledger_to=bob.ledger, - condition_func=lambda proof: True, - asset_id=alice.assets[0]['id'], - payload={'what': 'ever'}) - -tx_alice_signed = alice.ledger.sign_transaction(tx_alice, alice.private) -alice.ledger.validate_transaction(tx_alice_signed) -alice.ledger.write_transaction(tx_alice_signed) - -sleep(6) -# release asset from escrow -tx_bob = connector.release(ledger=bob.ledger, receipt=None) -tx_bob_signed = bob.ledger.sign_transaction(tx_bob, connector.private(bob.ledger), connector.public(bob.ledger)) -bob.ledger.validate_transaction(tx_bob_signed) -bob.ledger.write_transaction(tx_bob_signed) - -tx_connector = connector.release(ledger=alice.ledger, receipt=None) -tx_connector_signed = alice.ledger.sign_transaction(tx_connector, alice.private, alice.public) -alice.ledger.validate_transaction(tx_connector_signed) -alice.ledger.write_transaction(tx_connector_signed) diff --git a/examples/interledger/tests/__init__.py b/examples/interledger/tests/__init__.py deleted file mode 100644 index e69de29b..00000000