def return_all_addresses(self): addresses = [] address_state = qrl_pb2.AddressState() for k, v in self.db.RangeIter(b'Q', b'Qz'): address_state.ParseFromString(v) addresses.append([k, Decimal(address_state.balance)]) return addresses
def return_all_addresses(self): addresses = [] for key, data in self._db.RangeIter(b'Q', b'Qz'): pbdata = qrl_pb2.AddressState() pbdata.ParseFromString(bytes(data)) address_state = AddressState(pbdata) addresses.append(address_state) return addresses
def total_coin_supply(self): # FIXME: This is temporary code. NOT SCALABLE. It is easy to keep a global count coins = Decimal(0) address_state = qrl_pb2.AddressState() for k, v in self.db.RangeIter(b'Q', b'Qz'): address_state.ParseFromString(v) coins = coins + Decimal(address_state.balance) # FIXME: decimal math? return coins
def _get_address_state(self, address: bytes) -> AddressState: data = self._db.get_raw(address) if data is None: raise KeyError("{} not found".format(address)) pbdata = qrl_pb2.AddressState() pbdata.ParseFromString(bytes(data)) address_state = AddressState(pbdata) return address_state
def __init__(self, protobuf_block=None): self._data = protobuf_block self.tokens = defaultdict(int) if protobuf_block is None: self._data = qrl_pb2.AddressState() else: for key in self._data.tokens: self.tokens[str(key).encode()] = deepcopy(self._data.tokens[key])
def get_address_state(self, address: bytes) -> AddressState: try: data = self._db.get_raw(address) pbdata = qrl_pb2.AddressState() pbdata.ParseFromString(bytes(data)) address_state = AddressState(pbdata) return address_state except KeyError: return AddressState.get_default(address)
def return_all_addresses(state: State) -> list: addresses = [] for key, data in state._db.db: if key[0] != b'Q': continue pbdata = qrl_pb2.AddressState() pbdata.ParseFromString(bytes(data)) address_state = AddressState(pbdata) addresses.append(address_state) return addresses
def _save_address_state(self, address, state): # FIXME: internally keep data in byte form address_state = qrl_pb2.AddressState() address_state.address = address address_state.nonce = state[0] address_state.balance = state[1] # FIXME: Keep internally all hashes as bytearrays address_state.pubhashes.extend([ bytes(b) for b in state[2] ]) self.db.put_raw(address.encode(), address_state.SerializeToString())
def get_address_state(self, address): # FIXME: Refactor. nonce, balance, pubhash_list = self.db_state.state_get_address(address) transactions = [] address_state = qrl_pb2.AddressState(address=address, balance=balance, nonce=nonce, transactions=transactions) return address_state
def get_address_state(self, address): # FIXME: Refactor. Define concerns, etc. # FIXME: Unnecessary double conversion nonce, balance, pubhash_list = self.db_state.state_get_address(address) transactions = [] address_state = qrl_pb2.AddressState(address=address, balance=balance, nonce=nonce, transactions=transactions) return address_state
def get_address(self, address: bytes) -> Optional[AddressState]: modified_address = self.state_code + address try: data = self._db.get_raw(modified_address) if data is None: raise KeyError( "{} not found modified address".format(modified_address)) pbdata = qrl_pb2.AddressState() pbdata.ParseFromString(bytes(data)) address_state = AddressState(pbdata) return address_state except KeyError: return None
def _get_address_state(self, address): address_state = qrl_pb2.AddressState() data = self.db.get_raw(address.encode()) if data is None: raise KeyError("{} not found".format(address)) address_state.ParseFromString(bytes(data)) # FIXME: pubhashes is deserialized as a pb container but some methods want to make changes. Workaround tmp = [ h for h in address_state.pubhashes] return [address_state.nonce, address_state.balance, tmp]
def get_address_state(self, address: bytes) -> qrl_pb2.AddressState: if not self.address_is_valid(address): raise ValueError("Invalid Address") tmp_address_state = self.db_state.get_address(address) transaction_hashes = self.db_state.get_address_tx_hashes(address) address_state = qrl_pb2.AddressState( address=tmp_address_state.address, balance=tmp_address_state.balance, nonce=tmp_address_state.nonce, pubhashes=tmp_address_state.pubhashes, transaction_hashes=transaction_hashes) return address_state
def get_address(self, address): address_state = self._current_state.get_address(address) if address_state: return address_state for state_loader in self._state_loaders[-1::-1]: address_state = state_loader.get_address(address) if address_state: return address_state try: data = self._db.get_raw(address) pbdata = qrl_pb2.AddressState() pbdata.ParseFromString(bytes(data)) address_state = AddressState(pbdata) return address_state except KeyError: return AddressState.get_default(address)
def __init__(self, protobuf_block=None): self._data = protobuf_block if protobuf_block is None: self._data = qrl_pb2.AddressState()