Example #1
0
class BtcWallet(object):
    """
    Attributes:
        masterkeys (ItemSet):
        private_keys (ItemSet):
        outpoints (ItemSet):
    """
    def __init__(self, masterkeys=None, 
                       private_keys=None, 
                       outpoints=None):
        self.masterkeys = masterkeys or ItemSet()
        self.private_keys = private_keys or ItemSet()
        self.outpoints = outpoints or ItemSet()
        self.ON_STARTING_TX = Event()
        self.ON_ENDING_TX = Event()
        
    def begin_transaction(self):
        self.ON_STARTING_TX.fire()
        self.tx = Transaction()
        self.private_keys.begin_transaction(self.tx)
        self.outpoints.begin_transaction(self.tx)
    
    def commit_transaction(self):
        self.ON_ENDING_TX.fire()
        self.tx.commit()
Example #2
0
 def __init__(self, masterkeys=None, 
                    private_keys=None, 
                    outpoints=None):
     self.masterkeys = masterkeys or ItemSet()
     self.private_keys = private_keys or ItemSet()
     self.outpoints = outpoints or ItemSet()
     self.ON_STARTING_TX = Event()
     self.ON_ENDING_TX = Event()
Example #3
0
class BtcWallet(object):
    """
    Attributes:
        masterkeys (ItemSet):
        private_keys (ItemSet):
        outpoints (ItemSet):
    """
    def __init__(self, masterkeys=None, private_keys=None, outpoints=None):
        self.masterkeys = masterkeys or ItemSet()
        self.private_keys = private_keys or ItemSet()
        self.outpoints = outpoints or ItemSet()
        self.ON_STARTING_TX = Event()
        self.ON_ENDING_TX = Event()

    def begin_transaction(self):
        self.ON_STARTING_TX.fire()
        self.tx = Transaction()
        self.private_keys.begin_transaction(self.tx)
        self.outpoints.begin_transaction(self.tx)

    def commit_transaction(self):
        self.ON_ENDING_TX.fire()
        self.tx.commit()
Example #4
0
class LogIndex(object):
    """
    Attributes:
        tocommit (collections.deque)
    """
    def __init__(self, tocommit=None):
        self.tocommit = tocommit or deque()
        self.ON_COMMITING = Event()
        self.ON_LOG = Event()
        self.ON_REVERTLOG = Event()
        self.ON_COMMITED = Event()

    def commit_step(self):
        assert self.tocommit
        logidx = self.tocommit.popleft()
        if logidx.command == LogIndexEntry.WRITE:
            self.ON_COMMITING.fire(logindex=logidx)
        logidx.needs_commit = False
        self.ON_COMMITED.fire(logindex=logidx)

    def commit(self):
        while self.tocommit:
            self.commit_step()

    def log(self, logindex):
        logindex.needs_commit = True
        self.tocommit.append(logindex)
        self.ON_LOG.fire(logindex=logindex)

    def revertlog(self):
        logidx = self.tocommit.pop()
        self.ON_REVERTLOG.fire(logindex=logidx)

    def recover(self):
        # Remove not entirely written logindex transactions at the end.
        idx = rindex(self.tocommit, lambda i: i.is_tx_command())
        if idx is not None and self.tocommit[
                idx].command == LogIndexEntry.BEGIN_TX:
            for i in range(len(self.tocommit) - idx):
                self.revertlog()
        # Commit at least the first transaction
        idx = lindex(self.tocommit, lambda i: i.is_tx_command())
        if idx is not None and self.tocommit[
                idx].command == LogIndexEntry.END_TX:
            for i in range(idx):
                self.commit_step()
Example #5
0
class LogIndex(object):
    """
    Attributes:
        tocommit (collections.deque)
    """
    def __init__(self, tocommit=None):
        self.tocommit = tocommit or deque()
        self.ON_COMMITING = Event()
        self.ON_LOG = Event()
        self.ON_REVERTLOG = Event()
        self.ON_COMMITED = Event()
        
    def commit_step(self):
        assert self.tocommit
        logidx = self.tocommit.popleft()
        if logidx.command == LogIndexEntry.WRITE:
            self.ON_COMMITING.fire(logindex=logidx)
        logidx.needs_commit = False    
        self.ON_COMMITED.fire(logindex=logidx)

    def commit(self):
        while self.tocommit:
            self.commit_step()

    def log(self, logindex):
        logindex.needs_commit = True
        self.tocommit.append(logindex)
        self.ON_LOG.fire(logindex=logindex)

    def revertlog(self):
        logidx = self.tocommit.pop()
        self.ON_REVERTLOG.fire(logindex=logidx)

    def recover(self):
        # Remove not entirely written logindex transactions at the end.
        idx = rindex(self.tocommit, lambda i: i.is_tx_command())
        if idx is not None and self.tocommit[idx].command == LogIndexEntry.BEGIN_TX:
            for i in range(len(self.tocommit) - idx):
                self.revertlog()
        # Commit at least the first transaction
        idx = lindex(self.tocommit, lambda i: i.is_tx_command())
        if idx is not None and self.tocommit[idx].command == LogIndexEntry.END_TX:
            for i in range(idx):
                self.commit_step()
Example #6
0
 def __init__(self, tocommit=None):
     self.tocommit = tocommit or deque()
     self.ON_COMMITING = Event()
     self.ON_LOG = Event()
     self.ON_REVERTLOG = Event()
     self.ON_COMMITED = Event()
Example #7
0
 def __init__(self, tocommit=None):
     self.tocommit = tocommit or deque()
     self.ON_COMMITING = Event()
     self.ON_LOG = Event()
     self.ON_REVERTLOG = Event()
     self.ON_COMMITED = Event()
Example #8
0
 def __init__(self, masterkeys=None, private_keys=None, outpoints=None):
     self.masterkeys = masterkeys or ItemSet()
     self.private_keys = private_keys or ItemSet()
     self.outpoints = outpoints or ItemSet()
     self.ON_STARTING_TX = Event()
     self.ON_ENDING_TX = Event()
Example #9
0
 def __init__(self, items_by_key=None):
     self.items_by_key = items_by_key or {}
     self.ON_CHANGING = Event()
     self.ON_CHANGED = Event()
     self.tx = None