mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
only multisig changes
This commit is contained in:
parent
dca74116ab
commit
f42f79e3f1
36
README.md
36
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.
|
A scalable blockchain database. [The whitepaper](https://www.bigchaindb.com/whitepaper/) explains what that means.
|
||||||
|
|
||||||
[](https://gitter.im/bigchaindb/bigchaindb?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
[](https://gitter.im/bigchaindb/bigchaindb?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||||
[](https://travis-ci.org/diminator/bigchaindb)
|
[](https://pypi.python.org/pypi/BigchainDB)
|
||||||
[](https://codecov.io/github/diminator/bigchaindb?branch=develop)
|
[](https://travis-ci.org/bigchaindb/bigchaindb)
|
||||||
|
[](https://codecov.io/github/bigchaindb/bigchaindb?branch=develop)
|
||||||
|
[](http://bigchaindb.readthedocs.org/en/develop/?badge=develop)
|
||||||
|
|
||||||
## Interledger
|
## Quick Start
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
## <a name="gettingstarted"></a>Quick Start
|
|
||||||
|
|
||||||
### [Install & Run BigchainDB](http://bigchaindb.readthedocs.org/en/develop/installing.html)
|
### [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)
|
### [Run BigchainDB with Docker](http://bigchaindb.readthedocs.org/en/develop/installing.html#run-bigchaindb-with-docker)
|
||||||
|
|||||||
@ -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)
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"database": {"host": "localhost", "name": "bigchain", "port": 28015}, "keyring": [], "keypair": {"public": "jhpCiHPiMmHGFQvjqn1LdLddYhYFd63ywUbi3tFCW31f", "private": "5vbka7oLMf2UTNV1sq3nyKJXTERCPWvD8Pf4KnGYNBtA"}}
|
|
||||||
@ -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)
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"keyring": [], "database": {"host": "localhost", "port": 28015, "name": "megachain"}, "keypair": {"private": "DGKiLSdLsZofmzZMv3B9KZVj79wrq4PZ3PsMmk8Hu8KK", "public": "gMGJ9j15qyBVC1t8ceiDgJLLaRBgvrFchyzB1GgWk3Fa"}}
|
|
||||||
@ -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)
|
|
||||||
Loading…
x
Reference in New Issue
Block a user