def get_balance(self): balance = {} cur_token = Token() for token_id in self._tokens.keys(): token_str = self._tokens[token_id] cur_token.fromJSON(token_str) balance[token_id] = cur_token.get_amount() return balance
def strictly_get_token(self, token_id): if token_id not in self._tokens: return None else: token_str = self._tokens[token_id] del self._tokens[token_id] token = Token() token.fromJSON(token_str) return token
def _do_transfer(args, state): LOGGER.debug("_do_transfer ...") updated = {k: v for k, v in state.items()} try: from_addr = args['Name'] to_addr = args['to_addr'] num_bgt = float(args['num_bgt']) group_id = args['group_id'] except KeyError: msg = "_do_transfer not all args" LOGGER.debug(msg) return updated except ValueError as err: LOGGER.debug("args err=%s",err) return updated LOGGER.debug("SMART_BGT>processor>handler>_do_transfer" "\nfrom_addr=%s\nto_addr=%s\nnum_bgt=%s\ngroup_id=%s", from_addr, to_addr, num_bgt, group_id) if from_addr not in state: LOGGER.debug("Sending tokens - address %s not registered", from_addr) raise InvalidTransaction('Verb is "transfer" but name "{}" not in state'.format(from_addr)) from_wallet_str = state[from_addr] LOGGER.debug("SMART_BGT>processor>handler>_do_transfer" "\nfrom_wallet_str=%s", from_wallet_str) from_wallet = BGXwallet() from_wallet.fromJSON(from_wallet_str) from_token = from_wallet.get_token(group_id) to_token = Token() to_wallet = BGXwallet() if to_addr in state: LOGGER.debug("SMART_BGT>processor>handler>_do_transfer" "\nto_addr is in state") to_wallet_str = state[to_addr] to_wallet.fromJSON(to_wallet_str) to_token = to_wallet.get_token(group_id) to_token.copy(from_token) res = from_token.send(to_token, num_bgt) LOGGER.debug("Sending tokens - result = %s", str(res)) if not res: LOGGER.debug("Sending tokens - not enough money") raise InvalidTransaction('Unhandled action (not enough money)') else: from_wallet.append(from_token) to_wallet.append(to_token) updated[from_addr] = str(from_wallet.toJSON()) updated[to_addr] = str(to_wallet.toJSON()) LOGGER.debug("Transfer - ready! updated=%s", updated) return updated
def _do_transfer(args, state): LOGGER.debug("_do_transfer ...") try: from_addr = args['Name'] to_addr = args['to_addr'] num_bgt = float(args['num_bgt']) group_id = args['group_id'] except KeyError: msg = "_do_transfer not all args" LOGGER.debug(msg) raise InternalError(msg) updated = {k: v for k, v in state.items()} if from_addr not in state: # raise InvalidTransaction('Verb is "transfer" but name "{}" not in state'.format(from_addr)) LOGGER.debug("Sending tokens - address %s not registered", from_addr) return updated from_wallet_str = state[from_addr] from_wallet = BGXwallet() from_wallet.fromJSON(from_wallet_str) from_token = from_wallet.get_token(group_id) to_token = Token() to_wallet = BGXwallet() if to_addr in state: to_wallet_str = state[to_addr] to_wallet.fromJSON(to_wallet_str) to_token = to_wallet.get_token(group_id) to_token.copy(from_token) res = from_token.send(to_token, num_bgt) LOGGER.debug("Sending tokens - result = %s", str(res)) if not res: LOGGER.debug("Sending tokens - not enough money") else: from_wallet.append(from_token) to_wallet.append(to_token) updated[from_addr] = str(from_wallet.toJSON()) updated[to_addr] = str(to_wallet.toJSON()) LOGGER.debug("Transfer - ready! updated=%s", updated) return updated
def get_token(self, token_id): if token_id not in self._tokens: max_token = Token() cur_token = Token() for token_id in self._tokens.keys(): token_str = self._tokens[token_id] cur_token.fromJSON(token_str) if max_token.getBalance() < cur_token.getBalance(): max_token = cur_token return max_token else: token_str = self._tokens[token_id] del self._tokens[token_id] token = Token() token.fromJSON(token_str) return token