mirror of
https://github.com/bigchaindb/bigchaindb.git
synced 2024-10-13 13:34:05 +00:00
76 lines
3.2 KiB
Python
76 lines
3.2 KiB
Python
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) |