def display_dex_trades( trade_amount_currency: str = "USD", kind: str = "dex", top: int = 20, days: int = 90, sortby: str = "tradeAmount", descend: bool = False, export: str = "", ) -> None: """Trades on Decentralized Exchanges aggregated by DEX or Month [Source: https://graphql.bitquery.io/] Parameters ---------- kind: str Aggregate trades by dex or time trade_amount_currency: str Currency of displayed trade amount. Default: USD top: int Number of records to display sortby: str Key by which to sort data descend: bool Flag to sort data descending days: int Last n days to query data. Maximum 365 (bigger numbers can cause timeouts on server side) export : str Export dataframe data to csv,json,xlsx file """ if kind == "time": df = bitquery_model.get_dex_trades_monthly(trade_amount_currency, days) df = df.sort_values(by="date", ascending=descend) else: df = bitquery_model.get_dex_trades_by_exchange(trade_amount_currency, days) df = df.sort_values(by=sortby, ascending=descend) df_data = df.copy() df[["tradeAmount", "trades"]] = df[["tradeAmount", "trades" ]].applymap(lambda x: very_long_number_formatter(x)) df.columns = prettify_column_names(df.columns) print_rich_table( df.head(top), headers=list(df.columns), show_index=False, title="Trades on Decentralized Exchanges", ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "lt", df_data, )
def display_spread_for_crypto_pair( token="ETH", vs="USDC", days: int = 10, sortby: str = "date", descend: bool = False, export: str = "", ) -> None: """Display an average bid and ask prices, average spread for given crypto pair for chosen time period. [Source: https://graphql.bitquery.io/] Parameters ---------- days: int Last n days to query data token: str ERC20 token symbol vs: str Quoted currency. sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file Returns ------- pd.DataFrame Average bid and ask prices, spread for given crypto pair for chosen time period """ df = bitquery_model.get_spread_for_crypto_pair(token=token, vs=vs, limit=days).sort_values( by=sortby, ascending=descend) df.columns = prettify_column_names(df.columns) if gtff.USE_TABULATE_DF: print( tabulate( df, headers=df.columns, floatfmt=".2f", showindex=False, tablefmt="fancy_grid", ), "\n", ) else: print(df.to_string, "\n") export_data( export, os.path.dirname(os.path.abspath(__file__)), "baas", df, )
def display_most_traded_pairs( exchange="Uniswap", days: int = 10, top: int = 10, sortby: str = "tradeAmount", descend: bool = False, export: str = "", ) -> None: """Display most traded crypto pairs on given decentralized exchange in chosen time period. [Source: https://graphql.bitquery.io/] Parameters ---------- exchange: Decentralized exchange name days: Number of days taken into calculation account. sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file Returns ------- pd.DataFrame Most traded crypto pairs on given decentralized exchange in chosen time period. """ df = bitquery_model.get_most_traded_pairs( exchange=exchange, limit=days).sort_values(by=sortby, ascending=descend) df_data = df.copy() df[["tradeAmount", "trades"]] = df[["tradeAmount", "trades" ]].applymap(lambda x: very_long_number_formatter(x)) df.columns = prettify_column_names(df.columns) if gtff.USE_TABULATE_DF: print( tabulate( df.head(top), headers=df.columns, floatfmt=".2f", showindex=False, tablefmt="fancy_grid", ), "\n", ) else: print(df.to_string, "\n") export_data( export, os.path.dirname(os.path.abspath(__file__)), "ttcp", df_data, )
def display_ethereum_unique_senders( interval: str = "days", limit: int = 10, sortby: str = "date", descend: bool = False, export: str = "", ) -> None: """Display number of unique ethereum addresses which made a transaction in given time interval [Source: https://graphql.bitquery.io/] Parameters ---------- interval: str Time interval in which ethereum address made transaction. month, week or day limit: int Number of records to display. It's calculated base on provided interval. If interval is month then calculation is made in the way: limit * 30 = time period, in case if interval is set to week, then time period is calculated as limit * 7. For better user experience maximum time period in days is equal to 90. sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file Returns ------- pd.DataFrame Number of unique ethereum addresses which made a transaction in given time interval """ df = bitquery_model.get_ethereum_unique_senders(interval, limit) if not df.empty: df = df.sort_values(by=sortby, ascending=descend) df[["uniqueSenders", "transactions", "maximumGasPrice"]] = df[[ "uniqueSenders", "transactions", "maximumGasPrice" ]].applymap(lambda x: lambda_very_long_number_formatter(x)) df_data = df.copy() df.columns = prettify_column_names(df.columns) print_rich_table( df, headers=list(df.columns), show_index=False, title="Unique Ethereum Addresses", ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "ueat", df_data, )
def display_dex_volume_for_token( token: str = "WBTC", trade_amount_currency: str = "USD", top: int = 10, sortby: str = "tradeAmount", descend: bool = False, export: str = "", ) -> None: """Display token volume on different Decentralized Exchanges. [Source: https://graphql.bitquery.io/] Parameters ---------- token: str ERC20 token symbol or address trade_amount_currency: str Currency of displayed trade amount. Default: USD top: int Number of records to display sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file Returns ------- pd.DataFrame Token volume on different decentralized exchanges """ df = bitquery_model.get_token_volume_on_dexes( token=token, trade_amount_currency=trade_amount_currency) if not df.empty: df = df.sort_values(by=sortby, ascending=descend) df_data = df.copy() df[["tradeAmount", "trades"]] = df[[ "tradeAmount", "trades" ]].applymap(lambda x: lambda_very_long_number_formatter(x)) df.columns = prettify_column_names(df.columns) print_rich_table( df.head(top), headers=list(df.columns), show_index=False, title="Token Volume on Exchanges", ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "tv", df_data, )
def display_spread_for_crypto_pair( token="ETH", vs="USDC", days: int = 10, sortby: str = "date", descend: bool = False, export: str = "", ) -> None: """Display an average bid and ask prices, average spread for given crypto pair for chosen time period. [Source: https://graphql.bitquery.io/] Parameters ---------- days: int Last n days to query data token: str ERC20 token symbol vs: str Quoted currency. sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file Returns ------- pd.DataFrame Average bid and ask prices, spread for given crypto pair for chosen time period """ df = bitquery_model.get_spread_for_crypto_pair(token=token, vs=vs, limit=days) if not df.empty: df = df.sort_values(by=sortby, ascending=descend) df.columns = prettify_column_names(df.columns) print_rich_table( df, headers=list(df.columns), show_index=False, title="Average Spread for Given Crypto", ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "baas", df, )
def display_most_traded_pairs( exchange="Uniswap", days: int = 10, top: int = 10, sortby: str = "tradeAmount", descend: bool = False, export: str = "", ) -> None: """Display most traded crypto pairs on given decentralized exchange in chosen time period. [Source: https://graphql.bitquery.io/] Parameters ---------- exchange: Decentralized exchange name days: Number of days taken into calculation account. sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file Returns ------- pd.DataFrame Most traded crypto pairs on given decentralized exchange in chosen time period. """ df = bitquery_model.get_most_traded_pairs(exchange=exchange, limit=days) if not df.empty: df = df.sort_values(by=sortby, ascending=descend) df_data = df.copy() df[["tradeAmount", "trades"]] = df[[ "tradeAmount", "trades" ]].applymap(lambda x: lambda_very_long_number_formatter(x)) df.columns = prettify_column_names(df.columns) print_rich_table( df.head(top), headers=list(df.columns), show_index=False, title="Most Traded Crypto Pairs", ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "ttcp", df_data, )
def get_staking_account_info(address: str = "") -> Tuple[pd.DataFrame, str]: """Get staking info for provided terra account [Source: https://fcd.terra.dev/swagger] Parameters ---------- address: str terra blockchain address e.g. terra1jvwelvs7rdk6j3mqdztq5tya99w8lxk6l9hcqg Returns ------- Tuple[pd.DataFrame, str]: luna delegations and summary report for given address """ response = _make_request(f"staking/{address}") results: Dict[str, Any] = {"myDelegations": []} for field in ["availableLuna", "delegationTotal"]: results[field] = denominate_number(response.get(field, 0)) my_delegations = response.get("myDelegations") if my_delegations: for delegation in my_delegations: validator = _adjust_delegation_info(delegation) results["myDelegations"].append(validator) df = pd.DataFrame(results["myDelegations"]) try: df["validatorName"] = df["validatorName"].apply( lambda x: lambda_replace_unicode(x)) df.columns = prettify_column_names(list(df.columns)) except KeyError: df = pd.DataFrame() results["totalRewards"] = denominate_number( response.get("rewards", {}).get("total", 0)) report = f"""Overview: Address: {address} Available Luna: {results['availableLuna']} Delegated Luna: {results['delegationTotal']} Total Rewards: {results['totalRewards']}\n""" report += "\nDelegations: " if not df.empty else "\nNo delegations found\n" return df, report
def display_validators(top: int = 10, sortby: str = "votingPower", descend: bool = False, export: str = "") -> None: """Display information about terra validators [Source: https://fcd.terra.dev/swagger] Parameters ---------- top: int Number of records to display sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file """ df = terramoney_fcd_model.get_validators() df_data = df.copy() df = df.sort_values(by=sortby, ascending=descend) df["tokensAmount"] = df["tokensAmount"].apply( lambda x: lambda_very_long_number_formatter(x)) df.columns = [ x if x not in ["Voting power", "Commission rate", "Uptime"] else f"{x} %" for x in prettify_column_names(df.columns) ] print_rich_table( df.head(top), headers=list(df.columns), floatfmt=".2f", show_index=False, ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "validators", df_data, )
def display_gov_proposals( top: int = 10, status: str = "all", sortby: str = "id", descend: bool = False, export: str = "", ) -> None: """Display terra blockchain governance proposals list [Source: https://fcd.terra.dev/swagger] Parameters ---------- top: int Number of records to display status: str status of proposal, one from list: ['Voting','Deposit','Passed','Rejected'] sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file """ df = terramoney_fcd_model.get_proposals(status) df_data = df.copy() df = df.sort_values(by=sortby, ascending=descend).head(top) df.columns = prettify_column_names(df.columns) print_rich_table( df, headers=list(df.columns), floatfmt=".2f", show_index=False, ) console.print("") export_data( export, os.path.dirname(os.path.abspath(__file__)), "govp", df_data, )
def display_daily_volume_for_given_pair( token: str = "WBTC", vs: str = "USDT", top: int = 20, sortby: str = "date", descend: bool = False, export: str = "", ) -> None: """Display daily volume for given pair [Source: https://graphql.bitquery.io/] Parameters ---------- token: str ERC20 token symbol or address vs: str Quote currency. top: int Number of records to display sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file Returns ------- pd.DataFrame Token volume on different decentralized exchanges """ df = bitquery_model.get_daily_dex_volume_for_given_pair( token=token, vs=vs, limit=top, ) if df.empty: return df = df.sort_values(by=sortby, ascending=descend) df_data = df.copy() df[["tradeAmount", "trades"]] = df[["tradeAmount", "trades" ]].applymap(lambda x: very_long_number_formatter(x)) df.columns = prettify_column_names(df.columns) if gtff.USE_TABULATE_DF: print( tabulate( df.head(top), headers=df.columns, floatfmt=".2f", showindex=False, tablefmt="fancy_grid", ), "\n", ) else: print(df.to_string, "\n") export_data( export, os.path.dirname(os.path.abspath(__file__)), "dvcp", df_data, )
def display_dex_volume_for_token( token: str = "WBTC", trade_amount_currency: str = "USD", top: int = 10, sortby: str = "tradeAmount", descend: bool = False, export: str = "", ) -> None: """Display token volume on different Decentralized Exchanges. [Source: https://graphql.bitquery.io/] Parameters ---------- token: str ERC20 token symbol or address trade_amount_currency: str Currency of displayed trade amount. Default: USD top: int Number of records to display sortby: str Key by which to sort data descend: bool Flag to sort data descending export : str Export dataframe data to csv,json,xlsx file Returns ------- pd.DataFrame Token volume on different decentralized exchanges """ df = bitquery_model.get_token_volume_on_dexes( token=token, trade_amount_currency=trade_amount_currency, ).sort_values(by=sortby, ascending=descend) df_data = df.copy() df[["tradeAmount", "trades"]] = df[["tradeAmount", "trades" ]].applymap(lambda x: very_long_number_formatter(x)) df.columns = prettify_column_names(df.columns) if gtff.USE_TABULATE_DF: print( tabulate( df.head(top), headers=df.columns, floatfmt=".2f", showindex=False, tablefmt="fancy_grid", ), "\n", ) else: print(df.to_string, "\n") export_data( export, os.path.dirname(os.path.abspath(__file__)), "tv", df_data, )