2016-03-02 18:15:27 +01:00

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)