def post_addresses_transactions(addresses_hash): # Start must be declared None, in case that start doesn't # exist in the post body start = None if not check_if_address_post_key_is_valid(addresses_hash): return "Bad post request", 400 addresses_hash_no_json = addresses_hash['addresses'] for address_hash in addresses_hash_no_json: if not validate_address(address_hash): return "Invalid address hash", 400 if 'start' in addresses_hash: start = addresses_hash['start'] if start and (not isinstance(start, int)): return "Start too large", 400 trs = db.post_addresses_transactions(addresses_hash_no_json, start, limit=50) if len(trs) == 50: last_transaction = trs[len(trs) - 1] return { "transactions": [TransactionSerializer.to_web(tr) for tr in trs], "next": last_transaction['blocktime'] } else: return { "transactions": [TransactionSerializer.to_web(tr) for tr in trs], "next": None }
def get_transaction_by_txid(txid): if not validate_sha256_hash(txid): return "Invalid transaction ID", 400 try: return TransactionSerializer.to_web(db.get_transaction_by_txid(txid)) except KeyError: return "Transaction with given ID not found", 404
def get_transactions_by_blockhash(blockhash): if not validate_sha256_hash(blockhash): return "Invalid block hash", 400 try: return [ TransactionSerializer.to_web(tr) for tr in db.get_transactions_by_blockhash(blockhash) ] except KeyError: return []
def get_address_transactions(address_hash, start=None): if start and (not isinstance(start, int)): return "Start too large", 400 if not validate_address(address_hash): return "Invalid address hash", 400 trs = db.get_address_transactions(address_hash, start, limit=51) if len(trs) == 51: last_transaction = trs[len(trs) - 1] return { "transactions": [TransactionSerializer.to_web(tr) for tr in trs], "next": "/addresses/%s?start=%s" % (address_hash, last_transaction['blocktime']) } else: return { "transactions": [TransactionSerializer.to_web(tr) for tr in trs], "next": None }
def get_latest_transactions(limit, offset): if not isinstance(offset, int): return "Offset too large", 400 transactions = db.get_latest_transactions(limit, offset) return [TransactionSerializer.to_web(tr) for tr in transactions]