mirror of
https://github.com/OpenBB-finance/OpenBB.git
synced 2026-11-04 08:22:26 +00:00
* removed get_coinpaprika_id from the view * reorganized a bit * removed unused functions * removed unused functions * removed unused imports * cleaning * cleaning * fix tests * fix template report * fix template report * fixing imports * fixing imports * fix report * fix report * fix report * fix tests * small fixes after merge * linting Co-authored-by: jose-donato <43375532+jose-donato@users.noreply.github.com>
This commit is contained in:
@@ -11,7 +11,6 @@ from openbb_terminal.custom_prompt_toolkit import NestedCompleter
|
||||
from openbb_terminal.cryptocurrency import cryptocurrency_helpers, pyth_model, pyth_view
|
||||
from openbb_terminal import feature_flags as obbff
|
||||
from openbb_terminal.cryptocurrency.cryptocurrency_helpers import (
|
||||
FIND_KEYS,
|
||||
display_all_coins,
|
||||
find,
|
||||
plot_chart,
|
||||
@@ -38,6 +37,8 @@ from openbb_terminal.rich_config import console, MenuText
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
FIND_KEYS = ["id", "symbol", "name"]
|
||||
|
||||
CRYPTO_SOURCES = {
|
||||
"Binance": "Binance",
|
||||
"CoingGecko": "CoinGecko",
|
||||
|
||||
@@ -6,14 +6,12 @@ from __future__ import annotations
|
||||
import os
|
||||
import json
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any
|
||||
import difflib
|
||||
import logging
|
||||
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
import ccxt
|
||||
from binance.client import Client
|
||||
import matplotlib.pyplot as plt
|
||||
from matplotlib.ticker import LogLocator, ScalarFormatter
|
||||
import yfinance as yf
|
||||
@@ -29,21 +27,14 @@ from openbb_terminal.helper_funcs import (
|
||||
is_valid_axes_count,
|
||||
)
|
||||
from openbb_terminal.config_plot import PLOT_DPI
|
||||
from openbb_terminal.cryptocurrency.due_diligence import (
|
||||
pycoingecko_model,
|
||||
coinpaprika_model,
|
||||
)
|
||||
from openbb_terminal.cryptocurrency.discovery.pycoingecko_model import get_coin_list
|
||||
from openbb_terminal.cryptocurrency.overview.coinpaprika_model import get_list_of_coins
|
||||
from openbb_terminal.cryptocurrency.due_diligence.binance_model import (
|
||||
check_valid_binance_str,
|
||||
show_available_pairs_for_given_symbol,
|
||||
)
|
||||
|
||||
from openbb_terminal.config_terminal import theme
|
||||
from openbb_terminal.cryptocurrency.due_diligence import coinbase_model
|
||||
import openbb_terminal.config_terminal as cfg
|
||||
from openbb_terminal.rich_config import console
|
||||
from openbb_terminal.cryptocurrency.due_diligence import coinpaprika_model
|
||||
from openbb_terminal.cryptocurrency.discovery import pycoingecko_model
|
||||
from openbb_terminal.cryptocurrency.due_diligence.pycoingecko_model import (
|
||||
get_ohlc,
|
||||
get_coin_tokenomics,
|
||||
)
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -329,15 +320,6 @@ def get_coingecko_id(symbol: str):
|
||||
return None
|
||||
|
||||
|
||||
def get_coinpaprika_id(symbol: str):
|
||||
paprika_coins = get_list_of_coins()
|
||||
paprika_coins_dict = dict(zip(paprika_coins.id, paprika_coins.symbol))
|
||||
coinpaprika_id, _ = coinpaprika_model.validate_coin(
|
||||
symbol.upper(), paprika_coins_dict
|
||||
)
|
||||
return coinpaprika_id
|
||||
|
||||
|
||||
def load_from_ccxt(
|
||||
symbol: str,
|
||||
start_date: datetime = (datetime.now() - timedelta(days=1100)),
|
||||
@@ -421,7 +403,7 @@ def load_from_coingecko(
|
||||
console.print(f"{symbol} not found in Coingecko\n")
|
||||
return df
|
||||
|
||||
df = pycoingecko_model.get_ohlc(coingecko_id, vs_currency, days)
|
||||
df = get_ohlc(coingecko_id, vs_currency, days)
|
||||
df_coin = yf.download(
|
||||
f"{symbol}-{vs_currency}",
|
||||
end=datetime.now(),
|
||||
@@ -607,7 +589,7 @@ def show_quick_performance(
|
||||
try:
|
||||
coingecko_id = get_coingecko_id(symbol)
|
||||
|
||||
coin_data_cg = pycoingecko_model.get_coin_tokenomics(coingecko_id)
|
||||
coin_data_cg = get_coin_tokenomics(coingecko_id)
|
||||
if not coin_data_cg.empty:
|
||||
df.insert(
|
||||
len(df.columns),
|
||||
@@ -632,363 +614,6 @@ def show_quick_performance(
|
||||
)
|
||||
|
||||
|
||||
# pylint: disable=R0912
|
||||
# TODO: verify vs, interval, days, depending on source
|
||||
def load_deprecated(
|
||||
coin: str,
|
||||
source: str = "CoinPaprika",
|
||||
days: int = 60,
|
||||
vs: str = "usd",
|
||||
interval: str = "1day",
|
||||
should_load_ta_data: bool = False,
|
||||
):
|
||||
"""Load cryptocurrency from given source. Available sources are: CoinGecko, CoinPaprika,
|
||||
Coinbase, Binance and Yahoo Finance
|
||||
|
||||
Loading coin from Binance and CoinPaprika means validation if given coins exists in chosen source,
|
||||
if yes then id of the coin is returned as a string.
|
||||
In case of CoinGecko load will return Coin object, if provided coin exists. Coin object has access to different coin
|
||||
information.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
coin: str
|
||||
Coin symbol or id which is checked if exists in chosen data source.
|
||||
source : str
|
||||
Source of the loaded data. CoinGecko, CoinPaprika, Yahoo Finance or Binance
|
||||
|
||||
Returns
|
||||
-------
|
||||
Tuple[Union[str, pycoingecko_model.Coin], str, str]
|
||||
- str or Coin object for provided coin
|
||||
- str with source of the loaded data. CoinGecko, CoinPaprika, Yahoo Finance or Binance
|
||||
- str with symbol
|
||||
- Dataframe with coin map to different sources
|
||||
"""
|
||||
if source in ("CoinGecko", "CoinPaprika"):
|
||||
if vs not in ("USD", "BTC", "usd", "btc"):
|
||||
console.print("You can only compare with usd or btc (e.g., --vs usd)\n")
|
||||
return None, None, None, None, None, None
|
||||
if interval != "1day":
|
||||
console.print(
|
||||
"Only daily data is supported for coingecko and coinpaprika (e.g., -i 1day)\n"
|
||||
)
|
||||
return None, None, None, None, None, None
|
||||
|
||||
current_coin: Any | None = ""
|
||||
|
||||
coins_map_df = prepare_all_coins_df().set_index("Symbol").dropna(thresh=2)
|
||||
|
||||
if source == "CoinGecko":
|
||||
coingecko = pycoingecko_model.Coin(coin.lower(), False)
|
||||
|
||||
if not coingecko.symbol:
|
||||
return None, None, None, None, None, None
|
||||
try:
|
||||
coin_map_df = coins_map_df.loc[coingecko.symbol].copy()
|
||||
if not isinstance(coin_map_df, pd.Series):
|
||||
pd.options.mode.chained_assignment = None
|
||||
coin_map_df["null_values"] = coin_map_df.isna().sum(axis=1)
|
||||
coin_map_df = coin_map_df[
|
||||
coin_map_df.null_values == coin_map_df.null_values.min()
|
||||
]
|
||||
try:
|
||||
coin_map_df = coin_map_df.iloc[0]
|
||||
except IndexError:
|
||||
return None, None, None, None, None, None
|
||||
|
||||
coin_map_df.fillna("")
|
||||
except KeyError:
|
||||
coin_map_df = pd.Series(
|
||||
{
|
||||
"CoinGecko": coingecko,
|
||||
"CoinPaprika": "",
|
||||
"Binance": "",
|
||||
"Coinbase": "",
|
||||
"YahooFinance": "",
|
||||
}
|
||||
)
|
||||
# if it is dataframe, it means that found more than 1 coin
|
||||
if should_load_ta_data:
|
||||
df_prices, currency = load_ta_data(
|
||||
coin_map_df=coin_map_df,
|
||||
source=source,
|
||||
currency=vs,
|
||||
days=days,
|
||||
limit=0,
|
||||
interval=interval,
|
||||
)
|
||||
return (
|
||||
coin_map_df["CoinGecko"],
|
||||
source,
|
||||
coingecko.symbol,
|
||||
coin_map_df,
|
||||
df_prices,
|
||||
currency,
|
||||
)
|
||||
return (
|
||||
str(coingecko),
|
||||
source,
|
||||
coingecko.symbol,
|
||||
coin_map_df,
|
||||
None,
|
||||
None,
|
||||
)
|
||||
if source == "CoinPaprika":
|
||||
paprika_coins = get_list_of_coins()
|
||||
paprika_coins_dict = dict(zip(paprika_coins.id, paprika_coins.symbol))
|
||||
current_coin, symbol = coinpaprika_model.validate_coin(
|
||||
coin.upper(), paprika_coins_dict
|
||||
)
|
||||
|
||||
if not symbol:
|
||||
return None, None, None, None, None, None
|
||||
|
||||
try:
|
||||
coin_map_df = coins_map_df.loc[
|
||||
coins_map_df.index == symbol.upper() if symbol is not None else symbol
|
||||
]
|
||||
|
||||
if not isinstance(coin_map_df, pd.Series):
|
||||
pd.options.mode.chained_assignment = None
|
||||
coin_map_df["null_values"] = coin_map_df.isnull().sum(axis=1)
|
||||
|
||||
coin_map_df = coin_map_df.loc[
|
||||
coin_map_df.null_values == coin_map_df.null_values.min()
|
||||
]
|
||||
|
||||
try:
|
||||
coin_map_df = coin_map_df.iloc[0]
|
||||
except IndexError:
|
||||
return None, None, None, None, None, None
|
||||
|
||||
coin_map_df.fillna("")
|
||||
except KeyError:
|
||||
coin_map_df = pd.Series(
|
||||
{
|
||||
"CoinGecko": "",
|
||||
"CoinPaprika": symbol,
|
||||
"Binance": "",
|
||||
"Coinbase": "",
|
||||
"YahooFinance": "",
|
||||
}
|
||||
)
|
||||
|
||||
if should_load_ta_data:
|
||||
df_prices, currency = load_ta_data(
|
||||
coin_map_df=coin_map_df,
|
||||
source=source,
|
||||
currency=vs,
|
||||
days=days,
|
||||
limit=0,
|
||||
interval=interval,
|
||||
)
|
||||
|
||||
if not df_prices.empty:
|
||||
return (current_coin, source, symbol, coin_map_df, df_prices, currency)
|
||||
return (current_coin, source, symbol, coin_map_df, None, None)
|
||||
if source == "Binance":
|
||||
if vs == "usd":
|
||||
vs = "USDT"
|
||||
if interval not in SOURCES_INTERVALS["Binance"]:
|
||||
console.print(
|
||||
"Interval not available on binance. Run command again with one supported (e.g., -i 1day):\n",
|
||||
SOURCES_INTERVALS["Binance"],
|
||||
)
|
||||
return None, None, None, None, None, None
|
||||
|
||||
# TODO: convert bitcoin to btc before searching pairs
|
||||
parsed_coin = coin.upper()
|
||||
current_coin, pairs = show_available_pairs_for_given_symbol(parsed_coin)
|
||||
if len(pairs) > 0:
|
||||
if vs not in pairs:
|
||||
console.print(
|
||||
"vs specified not supported by binance. Run command again with one supported (e.g., --vs USDT):\n",
|
||||
pairs,
|
||||
)
|
||||
return None, None, None, None, None, None
|
||||
try:
|
||||
coin_map_df = coins_map_df.loc[parsed_coin.lower()].copy()
|
||||
if not isinstance(coin_map_df, pd.Series):
|
||||
coin_map_df["null_values"] = coin_map_df.apply(
|
||||
lambda x: sum(x.isnull().values), axis=1
|
||||
)
|
||||
coin_map_df = coin_map_df[
|
||||
coin_map_df.null_values == coin_map_df.null_values.min()
|
||||
]
|
||||
coin_map_df = coin_map_df.iloc[0]
|
||||
coin_map_df.fillna("")
|
||||
except KeyError:
|
||||
coin_map_df = pd.Series(
|
||||
{
|
||||
"CoinGecko": "",
|
||||
"CoinPaprika": "",
|
||||
"Binance": parsed_coin.lower(),
|
||||
"Coinbase": "",
|
||||
"YahooFinance": "",
|
||||
}
|
||||
)
|
||||
# console.print(f"Coin found : {current_coin}\n")
|
||||
if should_load_ta_data:
|
||||
df_prices, currency = load_ta_data(
|
||||
coin_map_df=coin_map_df,
|
||||
source=source,
|
||||
currency=vs,
|
||||
days=0,
|
||||
limit=days,
|
||||
interval=interval,
|
||||
)
|
||||
return (
|
||||
current_coin,
|
||||
source,
|
||||
parsed_coin,
|
||||
coin_map_df,
|
||||
df_prices,
|
||||
currency,
|
||||
)
|
||||
return (current_coin, source, parsed_coin, coin_map_df, None, None)
|
||||
return None, None, None, None, None, None
|
||||
|
||||
if source == "Coinbase":
|
||||
if vs == "usd":
|
||||
vs = "USDT"
|
||||
if interval not in SOURCES_INTERVALS["Coinbase"]:
|
||||
console.print(
|
||||
"Interval not available on coinbase. Run command again with one supported (e.g., -i 1day):\n",
|
||||
SOURCES_INTERVALS["Coinbase"],
|
||||
)
|
||||
return None, None, None, None, None, None
|
||||
|
||||
# TODO: convert bitcoin to btc before searching pairs
|
||||
coinbase_coin = coin.upper()
|
||||
current_coin, pairs = coinbase_model.show_available_pairs_for_given_symbol(
|
||||
coinbase_coin
|
||||
)
|
||||
if vs not in pairs:
|
||||
if len(pairs) > 0:
|
||||
console.print(
|
||||
"vs specified not supported by coinbase. Run command again with one supported (e.g., --vs USDT):\n",
|
||||
pairs,
|
||||
)
|
||||
return None, None, None, None, None, None
|
||||
if len(pairs) > 0:
|
||||
# console.print(f"Coin found : {current_coin}\n")
|
||||
try:
|
||||
coin_map_df = coins_map_df.loc[coin].copy()
|
||||
if not isinstance(coin_map_df, pd.Series):
|
||||
coin_map_df["null_values"] = coin_map_df.apply(
|
||||
lambda x: sum(x.isnull().values), axis=1
|
||||
)
|
||||
coin_map_df = coin_map_df[
|
||||
coin_map_df.null_values == coin_map_df.null_values.min()
|
||||
]
|
||||
coin_map_df = coin_map_df.iloc[0]
|
||||
coin_map_df.fillna("")
|
||||
except KeyError:
|
||||
coin_map_df = pd.Series(
|
||||
{
|
||||
"CoinGecko": "",
|
||||
"CoinPaprika": "",
|
||||
"Binance": "",
|
||||
"Coinbase": coin,
|
||||
"YahooFinance": "",
|
||||
}
|
||||
)
|
||||
if should_load_ta_data:
|
||||
df_prices, currency = load_ta_data(
|
||||
coin_map_df=coin_map_df,
|
||||
source=source,
|
||||
currency=vs,
|
||||
days=0,
|
||||
limit=days,
|
||||
interval=interval,
|
||||
)
|
||||
return (current_coin, source, coin, coin_map_df, df_prices, currency)
|
||||
return (current_coin, source, coin, coin_map_df, None, None)
|
||||
return None, None, None, None, None, None
|
||||
|
||||
if source == "YahooFinance":
|
||||
if vs.upper() not in YF_CURRENCY:
|
||||
console.print(
|
||||
"vs specified not supported by Yahoo Finance. Run command again with one supported (e.g., --vs USD):\n",
|
||||
YF_CURRENCY,
|
||||
)
|
||||
return None, None, None, None, None, None
|
||||
|
||||
if interval not in SOURCES_INTERVALS["YahooFinance"]:
|
||||
console.print(
|
||||
"Interval not available on YahooFinance. Run command again with one supported (e.g., -i 1day):\n",
|
||||
SOURCES_INTERVALS["YahooFinance"],
|
||||
)
|
||||
return None, None, None, None, None, None
|
||||
|
||||
# Search coin using crypto symbol
|
||||
coin_map_df = coins_map_df.loc[coins_map_df.index == coin]
|
||||
# Search coin using yfinance id
|
||||
# coin_map_df_2 = coins_map_df.loc[
|
||||
# coins_map_df.YahooFinance == f"{coin.upper()}-{vs.upper()}"
|
||||
# ]
|
||||
# Search coin using crypto full name
|
||||
# coin_map_df_3 = coins_map_df.loc[coins_map_df.CoinGecko == coin]
|
||||
|
||||
# for _df in [coin_map_df_1, coin_map_df_2, coin_map_df_3]:
|
||||
# if not _df.empty:
|
||||
# coin_map_df = _df
|
||||
# break
|
||||
|
||||
if coin_map_df.empty or (coin_map_df["YahooFinance"]).isna().all():
|
||||
# console.print(
|
||||
# f"Cannot find {coin} against {vs} on Yahoo finance. Try another source or currency.\n"
|
||||
# )
|
||||
return None, None, None, None, None, None
|
||||
|
||||
# Filter for the currency
|
||||
try:
|
||||
coin_map_df = coin_map_df[
|
||||
coin_map_df["YahooFinance"].str.upper().str.contains(vs.upper())
|
||||
]
|
||||
|
||||
coin_map_df = (
|
||||
coin_map_df.dropna().iloc[0]
|
||||
if isinstance(coin_map_df, pd.DataFrame)
|
||||
else coin_map_df
|
||||
)
|
||||
except Exception:
|
||||
return None, None, None, None, None, None
|
||||
|
||||
if should_load_ta_data:
|
||||
df_prices, currency = load_ta_data(
|
||||
coin_map_df=coin_map_df,
|
||||
source=source,
|
||||
currency=vs,
|
||||
days=days,
|
||||
limit=0,
|
||||
interval=interval,
|
||||
)
|
||||
|
||||
return (
|
||||
coin_map_df["YahooFinance"],
|
||||
source,
|
||||
coin,
|
||||
coin_map_df,
|
||||
df_prices,
|
||||
currency,
|
||||
)
|
||||
|
||||
return (
|
||||
coin_map_df["YahooFinance"],
|
||||
source,
|
||||
coin,
|
||||
coin_map_df,
|
||||
None,
|
||||
None,
|
||||
)
|
||||
|
||||
return None, None, None, None, None, None
|
||||
|
||||
|
||||
FIND_KEYS = ["id", "symbol", "name"]
|
||||
|
||||
# TODO: Find better algorithm then difflib.get_close_matches to find most similar coins
|
||||
|
||||
|
||||
@@ -1025,7 +650,7 @@ def find(
|
||||
"""
|
||||
|
||||
if source == "CoinGecko":
|
||||
coins_df = get_coin_list()
|
||||
coins_df = pycoingecko_model.get_coin_list()
|
||||
coins_list = coins_df[key].to_list()
|
||||
if key in ["symbol", "id"]:
|
||||
query = query.lower()
|
||||
@@ -1037,7 +662,7 @@ def find(
|
||||
df = df.merge(coins_df, on=key)
|
||||
|
||||
elif source == "CoinPaprika":
|
||||
coins_df = get_list_of_coins()
|
||||
coins_df = coinpaprika_model.get_coin_list()
|
||||
coins_list = coins_df[key].to_list()
|
||||
keys = {"name": "title", "symbol": "upper", "id": "lower"}
|
||||
|
||||
@@ -1055,7 +680,7 @@ def find(
|
||||
if len(query) > 5:
|
||||
key = "id"
|
||||
|
||||
coins_df_gecko = get_coin_list()
|
||||
coins_df_gecko = pycoingecko_model.get_coin_list()
|
||||
coins_df_bin = load_binance_map()
|
||||
coins = pd.merge(
|
||||
coins_df_bin, coins_df_gecko[["id", "name"]], how="left", on="id"
|
||||
@@ -1071,7 +696,7 @@ def find(
|
||||
if len(query) > 5:
|
||||
key = "id"
|
||||
|
||||
coins_df_gecko = get_coin_list()
|
||||
coins_df_gecko = pycoingecko_model.get_coin_list()
|
||||
coins_df_bin = load_coinbase_map()
|
||||
coins = pd.merge(
|
||||
coins_df_bin, coins_df_gecko[["id", "name"]], how="left", on="id"
|
||||
@@ -1101,188 +726,6 @@ def find(
|
||||
)
|
||||
|
||||
|
||||
def load_ta_data(
|
||||
coin_map_df: pd.DataFrame, source: str, currency: str, **kwargs: Any
|
||||
) -> tuple[pd.DataFrame, str]:
|
||||
"""Load data for Technical Analysis
|
||||
|
||||
Parameters
|
||||
----------
|
||||
coin_map_df: pd.DataFrame
|
||||
Cryptocurrency
|
||||
source: str
|
||||
Source of data: CoinGecko, Binance, CoinPaprika, Yahoo Finance
|
||||
currency: str
|
||||
Quotes currency
|
||||
kwargs:
|
||||
days: int
|
||||
Days limit for coingecko, coinpaprika
|
||||
limit: int
|
||||
Limit for binance quotes
|
||||
interval: str
|
||||
Time interval for Binance
|
||||
Returns
|
||||
-------
|
||||
Tuple[pd.DataFrame, str]
|
||||
df with prices
|
||||
quoted currency
|
||||
"""
|
||||
|
||||
limit = kwargs.get("limit", 100)
|
||||
interval = kwargs.get("interval", "1day")
|
||||
days = kwargs.get("days", 30)
|
||||
|
||||
if source == "Binance":
|
||||
client = Client(cfg.API_BINANCE_KEY, cfg.API_BINANCE_SECRET)
|
||||
|
||||
interval_map = {
|
||||
"1day": client.KLINE_INTERVAL_1DAY,
|
||||
"3day": client.KLINE_INTERVAL_3DAY,
|
||||
"1hour": client.KLINE_INTERVAL_1HOUR,
|
||||
"2hour": client.KLINE_INTERVAL_2HOUR,
|
||||
"4hour": client.KLINE_INTERVAL_4HOUR,
|
||||
"6hour": client.KLINE_INTERVAL_6HOUR,
|
||||
"8hour": client.KLINE_INTERVAL_8HOUR,
|
||||
"12hour": client.KLINE_INTERVAL_12HOUR,
|
||||
"1week": client.KLINE_INTERVAL_1WEEK,
|
||||
"1min": client.KLINE_INTERVAL_1MINUTE,
|
||||
"3min": client.KLINE_INTERVAL_3MINUTE,
|
||||
"5min": client.KLINE_INTERVAL_5MINUTE,
|
||||
"15min": client.KLINE_INTERVAL_15MINUTE,
|
||||
"30min": client.KLINE_INTERVAL_30MINUTE,
|
||||
"1month": client.KLINE_INTERVAL_1MONTH,
|
||||
}
|
||||
|
||||
symbol_binance = coin_map_df["Binance"]
|
||||
|
||||
pair = symbol_binance.upper() + currency.upper()
|
||||
|
||||
if check_valid_binance_str(pair):
|
||||
# console.print(f"{symbol_binance} loaded vs {currency.upper()}")
|
||||
|
||||
candles = client.get_klines(
|
||||
symbol=pair,
|
||||
interval=interval_map[interval],
|
||||
limit=limit,
|
||||
)
|
||||
candles_df = pd.DataFrame(candles).astype(float).iloc[:, :6]
|
||||
candles_df.columns = [
|
||||
"date",
|
||||
"Open",
|
||||
"High",
|
||||
"Low",
|
||||
"Close",
|
||||
"Volume",
|
||||
]
|
||||
df_coin = candles_df.set_index(
|
||||
pd.to_datetime(candles_df["date"], unit="ms")
|
||||
).drop("date", axis=1)
|
||||
|
||||
return df_coin, currency
|
||||
return pd.DataFrame(), currency
|
||||
|
||||
if source == "CoinPaprika":
|
||||
symbol_coinpaprika = coin_map_df["CoinPaprika"]
|
||||
df = coinpaprika_model.get_ohlc_historical(
|
||||
symbol_coinpaprika, currency.upper(), days
|
||||
)
|
||||
|
||||
if df.empty:
|
||||
# console.print("No data found", "\n")
|
||||
return pd.DataFrame(), ""
|
||||
|
||||
df.drop(["time_close"], axis=1, inplace=True)
|
||||
|
||||
if "market_cap" in df.columns:
|
||||
df.drop(["market_cap"], axis=1, inplace=True)
|
||||
|
||||
df.columns = [
|
||||
"date",
|
||||
"Open",
|
||||
"High",
|
||||
"Low",
|
||||
"Close",
|
||||
"Volume",
|
||||
]
|
||||
df = df.set_index(pd.to_datetime(df["date"])).drop("date", axis=1)
|
||||
return df, currency
|
||||
|
||||
if source == "CoinGecko":
|
||||
if isinstance(coin_map_df["CoinGecko"], str):
|
||||
coin_id = coin_map_df["CoinGecko"]
|
||||
else:
|
||||
coin_id = coin_map_df["CoinGecko"].coin["id"]
|
||||
|
||||
# coin = pycoingecko_model.Coin(symbol_coingecko)
|
||||
df = pycoingecko_model.get_coin_market_chart(coin_id, currency, days)
|
||||
df = df["price"].resample("1D").ohlc().ffill()
|
||||
df.columns = [
|
||||
"Open",
|
||||
"High",
|
||||
"Low",
|
||||
"Close",
|
||||
]
|
||||
df.index.name = "date"
|
||||
return df, currency
|
||||
|
||||
if source == "Coinbase":
|
||||
symbol_coinbase = coin_map_df["Coinbase"]
|
||||
coin, currency = symbol_coinbase.upper(), currency.upper()
|
||||
pair = f"{coin}-{currency}"
|
||||
|
||||
if coinbase_model.check_validity_of_product(pair):
|
||||
# console.print(f"{coin} loaded vs {currency}")
|
||||
|
||||
df = coinbase_model.get_candles(
|
||||
symbol=pair,
|
||||
interval=interval or "24hour",
|
||||
).head(limit)
|
||||
|
||||
df_coin = df.set_index(pd.to_datetime(df["date"], unit="s")).drop(
|
||||
"date", axis=1
|
||||
)
|
||||
|
||||
return df_coin[::-1], currency
|
||||
|
||||
if source == "YahooFinance":
|
||||
|
||||
interval_map = {
|
||||
"1min": "1m",
|
||||
"2min": "2m",
|
||||
"5min": "5m",
|
||||
"15min": "15m",
|
||||
"30min": "30m",
|
||||
"60min": "60m",
|
||||
"90min": "90m",
|
||||
"1hour": "1h",
|
||||
"1day": "1d",
|
||||
"5day": "5d",
|
||||
"1week": "1wk",
|
||||
"1month": "1mo",
|
||||
"3month": "3mo",
|
||||
}
|
||||
|
||||
symbol_yf = coin_map_df["YahooFinance"]
|
||||
|
||||
df_coin = yf.download(
|
||||
symbol_yf,
|
||||
end=datetime.now(),
|
||||
start=datetime.now() - timedelta(days=days),
|
||||
progress=False,
|
||||
interval=interval_map[interval],
|
||||
).sort_index(ascending=False)
|
||||
|
||||
df_coin.index.names = ["date"]
|
||||
|
||||
if df_coin.empty:
|
||||
console.print(f"Could not download data for {symbol_yf} from Yahoo Finance")
|
||||
return pd.DataFrame(), currency
|
||||
|
||||
return df_coin[::-1], currency
|
||||
|
||||
return pd.DataFrame(), currency
|
||||
|
||||
|
||||
def load_yf_data(symbol: str, currency: str, interval: str, days: int):
|
||||
df_coin = yf.download(
|
||||
f"{symbol.upper()}-{currency.upper()}",
|
||||
@@ -1331,8 +774,8 @@ def display_all_coins(
|
||||
sources = ["CoinGecko", "CoinPaprika", "Binance", "Coinbase"]
|
||||
limit, cutoff = 30, 0.75
|
||||
coins_func_map = {
|
||||
"CoinGecko": get_coin_list,
|
||||
"CoinPaprika": get_list_of_coins,
|
||||
"CoinGecko": pycoingecko_model.get_coin_list,
|
||||
"CoinPaprika": coinpaprika_model.get_coin_list,
|
||||
"Binance": load_binance_map,
|
||||
"Coinbase": load_coinbase_map,
|
||||
}
|
||||
@@ -1356,17 +799,17 @@ def display_all_coins(
|
||||
else:
|
||||
|
||||
if source == "CoinGecko":
|
||||
coins_df = get_coin_list().drop("index", axis=1)
|
||||
coins_df = pycoingecko_model.get_coin_list().drop("index", axis=1)
|
||||
df = _create_closest_match_df(symbol.lower(), coins_df, limit, cutoff)
|
||||
df = df[["index", "id", "name"]]
|
||||
|
||||
elif source == "CoinPaprika":
|
||||
coins_df = get_list_of_coins()
|
||||
coins_df = coinpaprika_model.get_coin_list()
|
||||
df = _create_closest_match_df(symbol.lower(), coins_df, limit, cutoff)
|
||||
df = df[["index", "id", "name"]]
|
||||
|
||||
elif source == "Binance":
|
||||
coins_df_gecko = get_coin_list()
|
||||
coins_df_gecko = pycoingecko_model.get_coin_list()
|
||||
coins_df_bin = load_binance_map()
|
||||
coins_df_bin.columns = ["symbol", "id"]
|
||||
coins_df = pd.merge(
|
||||
@@ -1377,7 +820,7 @@ def display_all_coins(
|
||||
df.columns = ["index", "id", "name"]
|
||||
|
||||
elif source == "Coinbase":
|
||||
coins_df_gecko = get_coin_list()
|
||||
coins_df_gecko = pycoingecko_model.get_coin_list()
|
||||
coins_df_cb = load_coinbase_map()
|
||||
coins_df_cb.columns = ["symbol", "id"]
|
||||
coins_df = pd.merge(
|
||||
|
||||
@@ -43,13 +43,13 @@ def get_binance_currencies() -> List[str]:
|
||||
return [c["code"] for c in currencies.values()]
|
||||
|
||||
|
||||
def get_orderbook(exchange_id: str, symbol: str, to_symbol: str) -> Dict[str, Any]:
|
||||
def get_orderbook(exchange: str, symbol: str, to_symbol: str) -> Dict[str, Any]:
|
||||
"""Returns orderbook for a coin in a given exchange
|
||||
[Source: https://docs.ccxt.com/en/latest/manual.html]
|
||||
|
||||
Parameters
|
||||
----------
|
||||
exchange_id : str
|
||||
exchange : str
|
||||
exchange id
|
||||
symbol : str
|
||||
coin symbol
|
||||
@@ -61,9 +61,9 @@ def get_orderbook(exchange_id: str, symbol: str, to_symbol: str) -> Dict[str, An
|
||||
Dict[str, Any]
|
||||
With bids and asks
|
||||
"""
|
||||
exchange_class = getattr(ccxt, exchange_id)
|
||||
exchange = exchange_class()
|
||||
ob = exchange.fetch_order_book(f"{symbol.upper()}/{to_symbol.upper()}")
|
||||
exchange_class = getattr(ccxt, exchange)
|
||||
exchange_cls = exchange_class()
|
||||
ob = exchange_cls.fetch_order_book(f"{symbol.upper()}/{to_symbol.upper()}")
|
||||
return ob
|
||||
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ def display_order_book(
|
||||
Export dataframe data to csv,json,xlsx file
|
||||
"""
|
||||
market_book = ccxt_model.get_orderbook(
|
||||
exchange_id=exchange, symbol=symbol, to_symbol=to_symbol
|
||||
exchange=exchange, symbol=symbol, to_symbol=to_symbol
|
||||
)
|
||||
bids = np.asarray(market_book["bids"], dtype=float)
|
||||
asks = np.asarray(market_book["asks"], dtype=float)
|
||||
|
||||
@@ -3,8 +3,8 @@ __docformat__ = "numpy"
|
||||
|
||||
import logging
|
||||
import textwrap
|
||||
from typing import Tuple, Optional
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Any, Optional, Tuple
|
||||
|
||||
import pandas as pd
|
||||
from dateutil import parser
|
||||
@@ -19,35 +19,16 @@ logger = logging.getLogger(__name__)
|
||||
# pylint: disable=unsupported-assignment-operation
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_coin(symbol: str = "eth-ethereum") -> dict:
|
||||
"""Get coin by id [Source: CoinPaprika]
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol: str
|
||||
id of coin from coinpaprika e.g. Ethereum - > 'eth-ethereum'
|
||||
Returns
|
||||
-------
|
||||
dict
|
||||
Coin response
|
||||
"""
|
||||
|
||||
session = PaprikaSession()
|
||||
coin = session.make_request(session.ENDPOINTS["coin"].format(symbol))
|
||||
return coin
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_coin_twitter_timeline(
|
||||
symbol: str = "eth-ethereum", sortby: str = "date", ascend: bool = True
|
||||
symbol: str = "BTC", sortby: str = "date", ascend: bool = True
|
||||
) -> pd.DataFrame:
|
||||
"""Get twitter timeline for given coin id. Not more than last 50 tweets [Source: CoinPaprika]
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol: str
|
||||
id of coin from coinpaprika e.g. Ethereum - > 'eth-ethereum'
|
||||
Cryptocurrency symbol (e.g. BTC)
|
||||
sortby: str
|
||||
Key by which to sort data. Every column name is valid
|
||||
(see for possible values:
|
||||
@@ -61,9 +42,11 @@ def get_coin_twitter_timeline(
|
||||
Twitter timeline for given coin.
|
||||
Columns: date, user_name, status, retweet_count, like_count
|
||||
"""
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = get_coinpaprika_id(symbol)
|
||||
|
||||
session = PaprikaSession()
|
||||
res = session.make_request(session.ENDPOINTS["coin_tweeter"].format(symbol))
|
||||
res = session.make_request(session.ENDPOINTS["coin_tweeter"].format(cp_id))
|
||||
if "error" in res:
|
||||
console.print(res)
|
||||
return pd.DataFrame()
|
||||
@@ -89,7 +72,7 @@ def get_coin_twitter_timeline(
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_coin_events_by_id(
|
||||
symbol: str = "eth-ethereum", sortby="date", ascend: bool = False
|
||||
symbol: str = "BTC", sortby="date", ascend: bool = False
|
||||
) -> pd.DataFrame:
|
||||
"""Get all events related to given coin like conferences, start date of futures trading etc.
|
||||
[Source: CoinPaprika]
|
||||
@@ -112,7 +95,7 @@ def get_coin_events_by_id(
|
||||
Parameters
|
||||
----------
|
||||
symbol: str
|
||||
id of coin from coinpaprika e.g. Ethereum - > 'eth-ethereum'
|
||||
Cryptocurrency symbol (e.g. BTC)
|
||||
sortby: str
|
||||
Key by which to sort data. Every column name is valid
|
||||
(see for possible values:
|
||||
@@ -126,9 +109,11 @@ def get_coin_events_by_id(
|
||||
Events found for given coin
|
||||
Columns: id, date , date_to, name, description, is_conference, link, proof_image_link
|
||||
"""
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = get_coinpaprika_id(symbol)
|
||||
|
||||
session = PaprikaSession()
|
||||
res = session.make_request(session.ENDPOINTS["coin_events"].format(symbol))
|
||||
res = session.make_request(session.ENDPOINTS["coin_events"].format(cp_id))
|
||||
if not res or "error" in res:
|
||||
return pd.DataFrame()
|
||||
data = pd.DataFrame(res)
|
||||
@@ -150,7 +135,7 @@ def get_coin_events_by_id(
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_coin_exchanges_by_id(
|
||||
symbol: str = "eth-ethereum",
|
||||
symbol: str = "BTC",
|
||||
sortby: str = "adjusted_volume_24h_share",
|
||||
ascend: bool = True,
|
||||
) -> pd.DataFrame:
|
||||
@@ -159,7 +144,7 @@ def get_coin_exchanges_by_id(
|
||||
Parameters
|
||||
----------
|
||||
symbol: str
|
||||
Identifier of Coin from CoinPaprika
|
||||
Cryptocurrency symbol (e.g. BTC)
|
||||
sortby: str
|
||||
Key by which to sort data. Every column name is valid (see for possible values:
|
||||
https://api.coinpaprika.com/v1).
|
||||
@@ -172,9 +157,11 @@ def get_coin_exchanges_by_id(
|
||||
All exchanges for given coin
|
||||
Columns: id, name, adjusted_volume_24h_share, fiats
|
||||
"""
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = get_coinpaprika_id(symbol)
|
||||
|
||||
session = PaprikaSession()
|
||||
res = session.make_request(session.ENDPOINTS["coin_exchanges"].format(symbol))
|
||||
res = session.make_request(session.ENDPOINTS["coin_exchanges"].format(cp_id))
|
||||
df = pd.DataFrame(res)
|
||||
|
||||
if "fiats" in df.columns.tolist():
|
||||
@@ -187,7 +174,7 @@ def get_coin_exchanges_by_id(
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_coin_markets_by_id(
|
||||
symbol: str = "eth-ethereum",
|
||||
symbol: str = "BTC",
|
||||
quotes: str = "USD",
|
||||
sortby: str = "pct_volume_share",
|
||||
ascend: bool = True,
|
||||
@@ -197,7 +184,7 @@ def get_coin_markets_by_id(
|
||||
Parameters
|
||||
----------
|
||||
symbol: str
|
||||
Coin Parpika identifier of coin e.g. eth-ethereum
|
||||
Cryptocurrency symbol (e.g. BTC)
|
||||
quotes: str
|
||||
Comma separated list of quotes to return.
|
||||
Example: quotes=USD,BTC
|
||||
@@ -216,10 +203,15 @@ def get_coin_markets_by_id(
|
||||
pd.DataFrame
|
||||
All markets for given coin and currency
|
||||
"""
|
||||
if sortby in ["volume", "price"]:
|
||||
sortby = f"{str(symbol).lower()}_{sortby}"
|
||||
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = get_coinpaprika_id(symbol)
|
||||
|
||||
session = PaprikaSession()
|
||||
markets = session.make_request(
|
||||
session.ENDPOINTS["coin_markets"].format(symbol), quotes=quotes
|
||||
session.ENDPOINTS["coin_markets"].format(cp_id), quotes=quotes
|
||||
)
|
||||
if "error" in markets:
|
||||
console.print(markets)
|
||||
@@ -295,9 +287,7 @@ def get_ohlc_historical(
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_tickers_info_for_coin(
|
||||
symbol: str = "btc-bitcoin", quotes: str = "USD"
|
||||
) -> pd.DataFrame:
|
||||
def get_tickers_info_for_coin(symbol: str = "BTC", quotes: str = "USD") -> pd.DataFrame:
|
||||
"""Get all most important ticker related information for given coin id [Source: CoinPaprika]
|
||||
|
||||
.. code-block:: json
|
||||
@@ -339,7 +329,7 @@ def get_tickers_info_for_coin(
|
||||
Parameters
|
||||
----------
|
||||
symbol: str
|
||||
Id of coin from CoinPaprika
|
||||
Cryptocurrency symbol (e.g. BTC)
|
||||
quotes: str
|
||||
Comma separated quotes to return e.g quotes = USD, BTC
|
||||
|
||||
@@ -349,10 +339,12 @@ def get_tickers_info_for_coin(
|
||||
Most important ticker related information
|
||||
Columns: Metric, Value
|
||||
"""
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = get_coinpaprika_id(symbol)
|
||||
|
||||
session = PaprikaSession()
|
||||
tickers = session.make_request(
|
||||
session.ENDPOINTS["ticker_info"].format(symbol), quotes=quotes
|
||||
session.ENDPOINTS["ticker_info"].format(cp_id), quotes=quotes
|
||||
)
|
||||
|
||||
for key, date in tickers.items():
|
||||
@@ -384,44 +376,23 @@ def get_tickers_info_for_coin(
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def validate_coin(symbol: str, coins_dct: dict) -> Tuple[Optional[Any], Optional[Any]]:
|
||||
"""Helper method that validates if proper coin id or symbol was provided [Source: CoinPaprika]
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol: str
|
||||
id or symbol of coin for CoinPaprika
|
||||
coins_dct: dict
|
||||
dictionary of coins
|
||||
|
||||
Returns
|
||||
-------
|
||||
Tuple[Optional[Any], Optional[Any]]
|
||||
coin id, coin symbol
|
||||
"""
|
||||
|
||||
for key, value in coins_dct.items():
|
||||
if symbol == value:
|
||||
return key, value.lower()
|
||||
return None, None
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def basic_coin_info(symbol: str = "btc-bitcoin") -> pd.DataFrame:
|
||||
def basic_coin_info(symbol: str = "BTC") -> pd.DataFrame:
|
||||
"""Basic coin information [Source: CoinPaprika]
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol: str
|
||||
Coin id
|
||||
Cryptocurrency symbol (e.g. BTC)
|
||||
|
||||
Returns
|
||||
-------
|
||||
pd.DataFrame
|
||||
Metric, Value
|
||||
"""
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = get_coinpaprika_id(symbol)
|
||||
|
||||
coin = get_coin(symbol)
|
||||
coin = get_coin(cp_id)
|
||||
tags = coin.get("tags") or []
|
||||
keys = [
|
||||
"id",
|
||||
@@ -450,3 +421,70 @@ def basic_coin_info(symbol: str = "btc-bitcoin") -> pd.DataFrame:
|
||||
)
|
||||
df.dropna(subset=["Value"], inplace=True)
|
||||
return df
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_coin(symbol: str = "eth-ethereum") -> dict:
|
||||
"""Get coin by id [Source: CoinPaprika]
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol: str
|
||||
id of coin from coinpaprika e.g. Ethereum - > 'eth-ethereum'
|
||||
Returns
|
||||
-------
|
||||
dict
|
||||
Coin response
|
||||
"""
|
||||
|
||||
session = PaprikaSession()
|
||||
coin = session.make_request(session.ENDPOINTS["coin"].format(symbol))
|
||||
return coin
|
||||
|
||||
|
||||
def get_coinpaprika_id(symbol: str) -> Optional[str]:
|
||||
paprika_coins = get_coin_list()
|
||||
paprika_coins_dict = dict(zip(paprika_coins.id, paprika_coins.symbol))
|
||||
coinpaprika_id, _ = validate_coin(symbol.upper(), paprika_coins_dict)
|
||||
return coinpaprika_id
|
||||
|
||||
|
||||
def get_coin_list() -> pd.DataFrame:
|
||||
"""Get list of all available coins on CoinPaprika [Source: CoinPaprika]
|
||||
|
||||
Returns
|
||||
-------
|
||||
pandas.DataFrame
|
||||
Available coins on CoinPaprika
|
||||
rank, id, name, symbol, type
|
||||
"""
|
||||
|
||||
session = PaprikaSession()
|
||||
coins = session.make_request(session.ENDPOINTS["coins"])
|
||||
df = pd.DataFrame(coins)
|
||||
df = df[df["is_active"]]
|
||||
return df[["rank", "id", "name", "symbol", "type"]]
|
||||
|
||||
|
||||
def validate_coin(symbol: str, coins_dct: dict) -> Tuple[Optional[str], Optional[str]]:
|
||||
"""
|
||||
Helper method that validates if proper coin id or symbol was provided
|
||||
[Source: CoinPaprika]
|
||||
|
||||
Parameters
|
||||
----------
|
||||
symbol: str
|
||||
id or symbol of coin for CoinPaprika
|
||||
coins_dct: dict
|
||||
dictionary of coins
|
||||
|
||||
Returns
|
||||
-------
|
||||
Tuple[Optional[str], Optional[str]]
|
||||
coin id, coin symbol
|
||||
"""
|
||||
|
||||
for key, value in coins_dct.items():
|
||||
if symbol == value:
|
||||
return key, value.lower()
|
||||
return None, None
|
||||
|
||||
@@ -13,7 +13,6 @@ from openbb_terminal.cryptocurrency.due_diligence import coinpaprika_model
|
||||
from openbb_terminal.decorators import log_start_end
|
||||
from openbb_terminal.helper_funcs import export_data, print_rich_table
|
||||
from openbb_terminal.rich_config import console
|
||||
from openbb_terminal.cryptocurrency import cryptocurrency_helpers
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -108,11 +107,7 @@ def display_twitter(
|
||||
export : str
|
||||
Export dataframe data to csv,json,xlsx file
|
||||
"""
|
||||
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = cryptocurrency_helpers.get_coinpaprika_id(symbol)
|
||||
|
||||
df = coinpaprika_model.get_coin_twitter_timeline(cp_id, sortby, ascend)
|
||||
df = coinpaprika_model.get_coin_twitter_timeline(symbol, sortby, ascend)
|
||||
|
||||
if df.empty:
|
||||
console.print(f"Couldn't find any tweets for coin {symbol}", "\n")
|
||||
@@ -161,10 +156,7 @@ def display_events(
|
||||
export : str
|
||||
Export dataframe data to csv,json,xlsx file
|
||||
"""
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = cryptocurrency_helpers.get_coinpaprika_id(symbol)
|
||||
|
||||
df = coinpaprika_model.get_coin_events_by_id(cp_id, sortby, ascend)
|
||||
df = coinpaprika_model.get_coin_events_by_id(symbol, sortby, ascend)
|
||||
|
||||
if df.empty:
|
||||
console.print(f"Couldn't find any events for coin {symbol}\n")
|
||||
@@ -213,11 +205,7 @@ def display_exchanges(
|
||||
export : str
|
||||
Export dataframe data to csv,json,xlsx file
|
||||
"""
|
||||
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = cryptocurrency_helpers.get_coinpaprika_id(symbol)
|
||||
|
||||
df = coinpaprika_model.get_coin_exchanges_by_id(cp_id, sortby, ascend)
|
||||
df = coinpaprika_model.get_coin_exchanges_by_id(symbol, sortby, ascend)
|
||||
|
||||
if df.empty:
|
||||
console.print("No data found", "\n")
|
||||
@@ -268,14 +256,9 @@ def display_markets(
|
||||
export : str
|
||||
Export dataframe data to csv,json,xlsx file
|
||||
"""
|
||||
|
||||
if sortby in ["volume", "price"]:
|
||||
sortby = f"{str(to_symbol).lower()}_{sortby}"
|
||||
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = cryptocurrency_helpers.get_coinpaprika_id(from_symbol)
|
||||
|
||||
df = coinpaprika_model.get_coin_markets_by_id(cp_id, to_symbol, sortby, ascend)
|
||||
df = coinpaprika_model.get_coin_markets_by_id(
|
||||
from_symbol, to_symbol, sortby, ascend
|
||||
)
|
||||
|
||||
if df.empty:
|
||||
console.print("There is no data \n")
|
||||
@@ -318,10 +301,7 @@ def display_price_supply(
|
||||
Export dataframe data to csv,json,xlsx
|
||||
|
||||
"""
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = cryptocurrency_helpers.get_coinpaprika_id(from_symbol)
|
||||
|
||||
df = coinpaprika_model.get_tickers_info_for_coin(cp_id, to_symbol)
|
||||
df = coinpaprika_model.get_tickers_info_for_coin(from_symbol, to_symbol)
|
||||
|
||||
if df.empty:
|
||||
console.print("No data found", "\n")
|
||||
@@ -357,10 +337,7 @@ def display_basic(
|
||||
export: str
|
||||
Export dataframe data to csv,json,xlsx
|
||||
"""
|
||||
# get coinpaprika id using crypto symbol
|
||||
cp_id = cryptocurrency_helpers.get_coinpaprika_id(symbol)
|
||||
|
||||
df = coinpaprika_model.basic_coin_info(cp_id)
|
||||
df = coinpaprika_model.basic_coin_info(symbol)
|
||||
|
||||
if df.empty:
|
||||
console.print("No data available\n")
|
||||
|
||||
@@ -104,24 +104,6 @@ def get_global_market() -> pd.DataFrame:
|
||||
return df
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def get_list_of_coins() -> pd.DataFrame:
|
||||
"""Get list of all available coins on CoinPaprika [Source: CoinPaprika]
|
||||
|
||||
Returns
|
||||
-------
|
||||
pd.DataFrame
|
||||
Available coins on CoinPaprika
|
||||
rank, id, name, symbol, type
|
||||
"""
|
||||
|
||||
session = PaprikaSession()
|
||||
coins = session.make_request(session.ENDPOINTS["coins"])
|
||||
df = pd.DataFrame(coins)
|
||||
df = df[df["is_active"]]
|
||||
return df[["rank", "id", "name", "symbol", "type"]]
|
||||
|
||||
|
||||
@log_start_end(log=logger)
|
||||
def _get_coins_info_helper(symbols: str = "USD") -> pd.DataFrame:
|
||||
"""Helper method that call /tickers endpoint which returns for all coins quoted in provided currency/crypto
|
||||
|
||||
1115
openbb_terminal/miscellaneous/library/trail_map.csv
vendored
1115
openbb_terminal/miscellaneous/library/trail_map.csv
vendored
File diff suppressed because it is too large
Load Diff
44
openbb_terminal/reports/templates/crypto.ipynb
vendored
44
openbb_terminal/reports/templates/crypto.ipynb
vendored
@@ -115,10 +115,8 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# basic info\n",
|
||||
"from openbb_terminal.cryptocurrency.cryptocurrency_helpers import get_coinpaprika_id\n",
|
||||
"\n",
|
||||
"cp_id = get_coinpaprika_id(ticker)\n",
|
||||
"basic_info = openbb.crypto.dd.basic(cp_id)\n",
|
||||
"basic_info = openbb.crypto.dd.basic(ticker)\n",
|
||||
"if not basic_info.empty:\n",
|
||||
" basic_info = basic_info.set_index(\"Metric\")\n",
|
||||
" basic_info"
|
||||
@@ -131,8 +129,8 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"news = openbb.common.news(term=ticker).head(10)\n",
|
||||
"news = news.set_index(\"published\")\n",
|
||||
"news = openbb.crypto.dd.news(symbol=ticker).head(10)\n",
|
||||
"news = news.set_index(\"published_at\")\n",
|
||||
"news.sort_index()\n",
|
||||
"news[\"link\"] = news[\"link\"].apply(lambda x: f'<a href=\"{x}\">{x}</a>')\n",
|
||||
"news"
|
||||
@@ -510,10 +508,8 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# market stats about loaded coin\n",
|
||||
"from openbb_terminal.cryptocurrency.cryptocurrency_helpers import get_coinpaprika_id\n",
|
||||
"\n",
|
||||
"cp_id = get_coinpaprika_id(ticker)\n",
|
||||
"market = openbb.crypto.dd.mkt(cp_id)\n",
|
||||
"market = openbb.crypto.dd.mkt(ticker)\n",
|
||||
"\n",
|
||||
"if not market.empty:\n",
|
||||
" market = market.set_index(\"exchange\")\n",
|
||||
@@ -532,11 +528,9 @@
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from openbb_terminal.cryptocurrency.cryptocurrency_helpers import get_coinpaprika_id\n",
|
||||
"\n",
|
||||
"# all exchanges where loaded coin is listed\n",
|
||||
"cp_id = get_coinpaprika_id(ticker)\n",
|
||||
"ex = openbb.crypto.dd.ex(cp_id)\n",
|
||||
"\n",
|
||||
"ex = openbb.crypto.dd.ex(ticker)\n",
|
||||
"if not ex.empty:\n",
|
||||
" ex = ex.set_index(\"id\")\n",
|
||||
" ex"
|
||||
@@ -550,9 +544,9 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# last trades\n",
|
||||
"trades = openbb.crypto.dd.trades(symbol=f\"{ticker}-USDT\")\n",
|
||||
"trades = openbb.crypto.dd.trades(symbol=ticker, exchange_id=\"binance\", to_symbol=\"USDT\")\n",
|
||||
"if not trades.empty:\n",
|
||||
" trades = trades.set_index(\"time\")\n",
|
||||
" trades = trades.set_index(\"Date\")\n",
|
||||
" trades"
|
||||
]
|
||||
},
|
||||
@@ -566,12 +560,12 @@
|
||||
"# order book\n",
|
||||
"\n",
|
||||
"fig, ax = plt.subplots(figsize=(11, 5), dpi=150)\n",
|
||||
"openbb.crypto.dd.cbbook(symbol=f\"{ticker}-USDT\", external_axes=[ax], chart=True)\n",
|
||||
"openbb.crypto.dd.ob(symbol=ticker, exchange=\"binance\", to_symbol=\"USDT\", chart=True, external_axes=[ax])\n",
|
||||
"fig.tight_layout()\n",
|
||||
"f = io.BytesIO()\n",
|
||||
"fig.savefig(f, format=\"svg\")\n",
|
||||
"order_book = f.getvalue().decode(\"utf-8\")\n",
|
||||
"order_book_raw = openbb.crypto.dd.cbbook(symbol=f\"{ticker}-USDT\")"
|
||||
"order_book_raw = openbb.crypto.dd.ob(symbol=ticker, exchange=\"binance\", to_symbol=\"USDT\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -592,10 +586,8 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# price and supply related metrics for loaded coin\n",
|
||||
"from openbb_terminal.cryptocurrency.cryptocurrency_helpers import get_coinpaprika_id\n",
|
||||
"\n",
|
||||
"cp_id = get_coinpaprika_id(ticker)\n",
|
||||
"ps = openbb.crypto.dd.ps(cp_id)\n",
|
||||
"ps = openbb.crypto.dd.ps(ticker)\n",
|
||||
"if not ps.empty:\n",
|
||||
" ps = ps.set_index(\"Metric\")\n",
|
||||
" ps"
|
||||
@@ -609,10 +601,8 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# events\n",
|
||||
"from openbb_terminal.cryptocurrency.cryptocurrency_helpers import get_coinpaprika_id\n",
|
||||
"\n",
|
||||
"cp_id = get_coinpaprika_id(ticker)\n",
|
||||
"events = openbb.crypto.dd.events(cp_id)\n",
|
||||
"events = openbb.crypto.dd.events(ticker)\n",
|
||||
"\n",
|
||||
"if not events.empty:\n",
|
||||
" events = events.set_index(\"date\")\n",
|
||||
@@ -649,10 +639,8 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# tweets for loaded coin\n",
|
||||
"from openbb_terminal.cryptocurrency.cryptocurrency_helpers import get_coinpaprika_id\n",
|
||||
"\n",
|
||||
"cp_id = get_coinpaprika_id(ticker)\n",
|
||||
"tweets = openbb.crypto.dd.twitter(cp_id)\n",
|
||||
"tweets = openbb.crypto.dd.twitter(ticker)\n",
|
||||
"tweets"
|
||||
]
|
||||
},
|
||||
@@ -937,7 +925,7 @@
|
||||
"# f = io.BytesIO()\n",
|
||||
"# fig.savefig(f, format=\"svg\")\n",
|
||||
"\n",
|
||||
"normality = openbb.ta.normality(\n",
|
||||
"normality = openbb.qa.normality(\n",
|
||||
" data=ticker_data[\"Close\"],\n",
|
||||
")\n",
|
||||
"normality"
|
||||
@@ -977,7 +965,7 @@
|
||||
"# rolling mean and std deviation of prices\n",
|
||||
"\n",
|
||||
"fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(11, 5), dpi=150)\n",
|
||||
"openbb.ta.rolling(\n",
|
||||
"openbb.qa.rolling(\n",
|
||||
" symbol=ticker,\n",
|
||||
" data=ticker_data,\n",
|
||||
" target=\"Close\",\n",
|
||||
@@ -1000,7 +988,7 @@
|
||||
"# rolling kurtosis of distribution of prices\n",
|
||||
"\n",
|
||||
"fig, (ax1, ax2) = plt.subplots(nrows=2, ncols=1, figsize=(11, 5), dpi=150)\n",
|
||||
"openbb.ta.kurtosis(\n",
|
||||
"openbb.qa.kurtosis(\n",
|
||||
" symbol=ticker,\n",
|
||||
" data=ticker_data,\n",
|
||||
" target=\"Close\",\n",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -9,45 +9,45 @@ interactions:
|
||||
Connection:
|
||||
- keep-alive
|
||||
User-Agent:
|
||||
- python-requests/2.27.1
|
||||
- python-requests/2.28.1
|
||||
method: GET
|
||||
uri: https://api.coinpaprika.com/v1/coins/eth-ethereum/
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
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
|
||||
headers:
|
||||
Accept-Ranges:
|
||||
- bytes
|
||||
CF-Cache-Status:
|
||||
- MISS
|
||||
- EXPIRED
|
||||
CF-RAY:
|
||||
- 71e39a32dee99504-LIS
|
||||
- 76a9184d9a72da82-LIS
|
||||
Cache-Control:
|
||||
- public, max-age=60, s-maxage=60, stale-while-revalidate=10, stale-if-error=600
|
||||
Connection:
|
||||
@@ -55,15 +55,15 @@ interactions:
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Length:
|
||||
- '1478'
|
||||
- '1476'
|
||||
Content-Type:
|
||||
- application/json; charset=UTF-8
|
||||
Date:
|
||||
- Mon, 20 Jun 2022 09:50:48 GMT
|
||||
Expect-CT:
|
||||
- max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
|
||||
- Tue, 15 Nov 2022 15:42:07 GMT
|
||||
H-Hap:
|
||||
- '01'
|
||||
Last-Modified:
|
||||
- Mon, 20 Jun 2022 09:50:48 GMT
|
||||
- Tue, 15 Nov 2022 15:40:45 GMT
|
||||
Server:
|
||||
- cloudflare
|
||||
Vary:
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,51 +0,0 @@
|
||||
interactions:
|
||||
- request:
|
||||
body: null
|
||||
headers:
|
||||
Accept:
|
||||
- '*/*'
|
||||
Accept-Encoding:
|
||||
- gzip, deflate
|
||||
Connection:
|
||||
- keep-alive
|
||||
User-Agent:
|
||||
- python-requests/2.27.1
|
||||
method: GET
|
||||
uri: https://api.coinpaprika.com/v1/coins/eth-ethereum/ohlcv/historical/?end=mock_end"es=USD&start=mock_start
|
||||
response:
|
||||
body:
|
||||
string: !!binary |
|
||||
H4sIAAAAAAAA/xzGsWrDMBAG4Ff50VrsnmVUaq8e2qHQJcl+kZX4sKITkiBDyLsHsn0PE0rRYmaY
|
||||
n9CapCs2qU2LeI74//1bTli5Mc7hoiXAkrUdfXXDBJpmR7Ojfhid+x5Hiw8iIhwPC6QiaQPHqPew
|
||||
QhLaJhU5cuqxbMHvb1dogldJmXORnXuvt0/OYp6vAAAA//8bFEowmAAAAA==
|
||||
headers:
|
||||
Access-Control-Allow-Origin:
|
||||
- '*'
|
||||
CF-Cache-Status:
|
||||
- MISS
|
||||
CF-RAY:
|
||||
- 71e39a3b08cf03b2-LIS
|
||||
Cache-Control:
|
||||
- public, max-age=60, s-maxage=60, stale-while-revalidate=10, stale-if-error=600
|
||||
Connection:
|
||||
- keep-alive
|
||||
Content-Encoding:
|
||||
- gzip
|
||||
Content-Length:
|
||||
- '157'
|
||||
Content-Type:
|
||||
- application/json
|
||||
Date:
|
||||
- Mon, 20 Jun 2022 09:50:50 GMT
|
||||
Expect-CT:
|
||||
- max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
|
||||
Server:
|
||||
- cloudflare
|
||||
Vary:
|
||||
- Accept-Encoding
|
||||
alt-svc:
|
||||
- h3=":443"; ma=86400, h3-29=":443"; ma=86400
|
||||
status:
|
||||
code: 402
|
||||
message: Payment Required
|
||||
version: 1
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1,40 +1,22 @@
|
||||
,date,date_to,name,description,is_conference,link
|
||||
1,"2021-07-20
|
||||
00:00:00",,"Eth 2.0 and ""what will happen to your ETH""","Can we get a sticky regarding this
|
||||
topic? It'd clear up the daily convo on
|
||||
this sub a great deal. **What is ETH
|
||||
2.0?:** A series of upgrades to the
|
||||
Ethereum network explained
|
||||
[here](https://ethereum.org/en/eth2/).
|
||||
**Do I have to do anything?:** No. This
|
||||
is an update to the network itself,
|
||||
Ether held in your wallet or on an
|
||||
exchange or anywhere else is still the
|
||||
same after the merge. **What will
|
||||
happen to the price?:** Who knows.
|
||||
**When will it be released?:** At some
|
||||
point in the future. ETH2 is series of
|
||||
features/fixes with separate development
|
||||
work and release dates. PoS itself might
|
||||
see an accelerated release this year but
|
||||
there are no guarantees. You can follow
|
||||
the Ethereum dev teams work if you wish
|
||||
to keep closer tabs. **Answers to all
|
||||
of these questions can be found on the
|
||||
[ethereum.org](https://ethereum.org/)
|
||||
site.** * [Staking](https://ethereum.or
|
||||
g/en/eth2/staking/) * [Proof-of-Stake](h
|
||||
ttps://ethereum.org/en/developers/docs/c
|
||||
onsensus-mechanisms/pos/) * [ETH2 in
|
||||
general](https://ethereum.org/en/eth2/)
|
||||
* [_Ethereum
|
||||
itself_](https://ethereum.org/en/what-
|
||||
is-ethereum/) u/Tyra3l provided a link
|
||||
to https://ethmerge.com/, which does a
|
||||
great job of summing things up.",False,https://www.reddit.com/r/ethereum/comments/n71ai7/eth_20_and_what_will_happen_to_your_eth/
|
||||
0,"2019-05-09
|
||||
08:00:00","2019-05-09
|
||||
19:00:00",Fluidity Summit 2019,"Fluidity Summit brings the worlds of
|
||||
finance and technology together to shape
|
||||
the future of blockchain and capital
|
||||
markets.",False,https://fluiditysummit.com
|
||||
5,"2021-06-11
|
||||
00:00:00",,Ask El Salvador for advice: Cuba suspends dollar cash deposits in banks due to US sanctions,,False,https://www.rt.com/business/526265-cuba-suspends-dollars-us-sanctions/
|
||||
6,"2021-06-11
|
||||
00:00:00",,"One of the Richest Bitcoin Whales in History Bought $138,000,000 in BTC Amid Market Turmoil – AronBoss",,False,https://aronboss.com/one-of-the-richest-bitcoin-whales-in-history-bought-138000000-in-btc-amid-market-turmoil/9003/
|
||||
4,"2021-05-10
|
||||
00:00:00",,Bitcoin’s upcoming Taproot upgrade and why it matters for the network,,False,https://cointelegraph.com/news/bitcoin-s-upcoming-taproot-upgrade-and-why-it-matters-for-the-network
|
||||
3,"2021-03-24
|
||||
08:00:00","2021-03-26
|
||||
23:00:00",THE CRYPTO GATHERING,,False,https://www.realvision.com/refer?grsf=n66w9s
|
||||
2,"2018-10-09
|
||||
09:00:00","2018-10-09
|
||||
18:00:00",Blockchain & Bitcoin Conference Switzerland,"The second conference organized by
|
||||
Smile-Expo company in Geneva, the
|
||||
European fintech hub. The conference
|
||||
will also feature the demozone.",True,https://switzerland.bc.events/?utm_source=pr_LY&utm_medium=listing&utm_campaign=coinpaprika.com
|
||||
1,"2018-09-28
|
||||
20:00:00","2018-09-30
|
||||
16:00:00",Super Conference,"KWIC, Kitchener - Waterloo, ON, Canada.
|
||||
29 September, 2018",True,https://blockchainsuperconference.com/
|
||||
0,"2018-07-10
|
||||
12:00:00",,SEC- ETF VanEck decision,,False,https://www.criptonoticias.com/mercado-valores/etf-bitcoin-tratan-posibilidades-abiertas/
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,212 +1,139 @@
|
||||
,date,user_name,status,retweet_count,like_count
|
||||
49,"2022-04-30
|
||||
18:03:36",WeekInEthNews," Latest Week in Ethereum News! @parithosh_j mainnet shadow fork 2 smooth
|
||||
sailing @optimismPBC $OP governance token, first airdrop Q2 @ultrasoundmoney
|
||||
12 million ETH depositedhttps://t.co/LHT3rT6oF4Thanks to
|
||||
https://t.co/eRZA5qUJyP for making this issue possible ",68,0
|
||||
48,"2022-05-03
|
||||
17:42:14",JBSchweitzer,"The @Ethereum Foundation is hiring a People Operations Lead!If you're
|
||||
passionate about open source collaboration, decentralization, playing positive-
|
||||
sum games, and truly want to see Ethereum succeed, apply to join the EF team:
|
||||
https://t.co/pkykODJJiz",84,0
|
||||
47,"2022-05-04
|
||||
20:33:36",TimBeiko,"AllCoreDevs Update 011 out now Entirely focused on The Merge, I walk through
|
||||
what we're expecting across shadow forks, testing efforts, and testnet
|
||||
deployment...... in other words, everything we need to do before we're ready
|
||||
for mainnet! Enjoy https://t.co/UKU4ELVniY",145,0
|
||||
46,"2022-05-06
|
||||
06:55:07",yAcademyDAO,"Dearest shadowy super coders, builders, and degens:With our 3rd block slated
|
||||
for June, we'd like to formally introduce yAcademy: https://t.co/t4IJBCUbNb
|
||||
Let's learn, teach, and protect our ecosystem together ",65,0
|
||||
45,"2022-05-08
|
||||
04:21:27",benjaminion_xyz,"It's been a minute frens.But https://t.co/LeRPRKrtQP is back, and it's a
|
||||
mahousive edition!So plan a nice long coffee break over the weekend and clear
|
||||
out some browser tabs ready to get up to speed with all the latest in the run-up
|
||||
to the Merge.#Ethereum #Eth2",87,0
|
||||
44,"2022-05-08
|
||||
20:04:50",WeekInEthNews," Latest Week in Ethereum News! @parithosh_j mainnet shadow fork 3 almost
|
||||
perfect @ensdomains one million names created @gakonst Foundry Anvil local
|
||||
testnet nodehttps://t.co/6GRBRdAOqxThanks to @StarbloomVent for making this
|
||||
issue possible ",68,0
|
||||
43,"2022-05-10
|
||||
23:40:35",_SamWilsn_,"Tentatively scheduled the first AllWalletDevs call for May 11th!If you aren't
|
||||
in the Discord, but think you should be, let me know.See you then!",43,0
|
||||
42,"2022-05-11
|
||||
05:55:46",TimBeiko,"With the @nethermindeth snap sync support announcement, now's a good time to
|
||||
remind folks that, post-merge, EL client diversity matters just as much as CL,
|
||||
and is currently much worse. If a supermajority client on the EL has a bug, it
|
||||
*will* lead to a massive slashing event! https://t.co/gwT22lc7U8",109,0
|
||||
41,"2022-05-11
|
||||
06:10:46",_D4nie1_,"Beta version of Snap Sync in @nethermindeth is ready ! Reducing #Ethereum
|
||||
mainnet state sync even to 2h on a very fast machine https://t.co/16eewqnA47
|
||||
https://t.co/k67CGTXe43",73,0
|
||||
40,"2022-05-12
|
||||
16:48:49",parithosh_j,"Mainnet-Shadow-Fork-4 looks perfect! All clients went through the transition
|
||||
without a hitch. Only erigon missing (unrelated sync issues, we'll know in a bit
|
||||
if its synced to head as expected)We finalized and just keep chugging!
|
||||
#TestingTheMerge",125,0
|
||||
39,"2022-05-13
|
||||
19:01:19",sproulM_,"I *think* this is a more accurate picture of Ethereum consensus client diversity
|
||||
recently https://t.co/0QsocORx1y",94,0
|
||||
38,"2022-05-14
|
||||
00:05:38",TimBeiko,"Better late than never, another @ethereum #AllCoreDevs recap. Tons of Merge
|
||||
updates on today's call! Agenda: https://t.co/RsvLHQQXHu Stream: Recap below
|
||||
https://t.co/Vhod0Jx8wr",88,0
|
||||
37,"2022-05-14
|
||||
19:09:14",WeekInEthNews," Latest Week in Ethereum News! @trent_vanepps Ropsten testnet to upgrade to
|
||||
PoS around June 8 @parithosh_j mainnet shadow fork 4 looked perfect
|
||||
@nethermindeth beta snap synchttps://t.co/8toHchsDJuThanks to @clrfund for
|
||||
making this issue possible ",66,0
|
||||
36,"2022-05-16
|
||||
00:43:09",SomerEsat,"Please to share my first guide in the series of migration guides ""Migrating from
|
||||
Prysm toNimbus"" is complete! https://t.co/FNEYpgvAiLcc:@dannyryan
|
||||
@ethereum @ethStaker @ethnimbus @Teku_ConsenSys @sigp_io @ChainSafeth @prylabs
|
||||
@superphiz",86,0
|
||||
35,"2022-05-16
|
||||
16:45:11",fredriksvantes,"Secured #4 is out with major Bug Bounty Program updates! One highlight: a
|
||||
*substantial* reward increase of up to $250,000, and doubled to $500,000(!) for
|
||||
mainnet-targeted upgrades that are live on public testnets. Happy bug hunting!
|
||||
https://t.co/fkt23FmarF",315,0
|
||||
34,"2022-05-18
|
||||
03:21:04",0xPARC,"[New Post] zkPairing: zkSNARKs for Elliptic Curve Pairings@jonathanpwang,
|
||||
@vvhuang_, and @theyisun present elliptic curve pairings in circom--unlocking
|
||||
BLS signatures, recursive verification, polynomial commitment verification, and
|
||||
more in groth16 (1/n)https://t.co/3ho1HvjAjb",204,0
|
||||
33,"2022-05-18
|
||||
06:26:28",gballet,What does using the Condrieu #verkle testnet look like? A thread.,45,0
|
||||
32,"2022-05-19
|
||||
01:08:03",dannyryan,"EF Data Availability Sampling (DAS) RFP just releasedhttps://t.co/N5Mq1XnvjB
|
||||
DAS is a hard but critical problem to solve in order to take us from EIP 4844 to
|
||||
our fully scalable future.$1.5M in funding earmarked for proposals!We're
|
||||
happy to chat to help get you up to speed",171,0
|
||||
31,"2022-05-19
|
||||
15:56:44",dannyryan,Finalized no. 35https://t.co/676ZgSZquQtl;dr below,80,0
|
||||
30,"2022-05-21
|
||||
20:47:21",superphiz,"Today is the day to turn up the volume on the clr fund matching round hosted by
|
||||
@ethStaker, the EF, and @clrfund! What can you do to get this opportunity in
|
||||
front of the right eyes? https://t.co/z9v3K4aMyO https://t.co/TQdmdAoMUR",61,0
|
||||
29,"2022-05-21
|
||||
20:47:43",benjaminion_xyz,"Get your #EthereumMerge alpha here!https://t.co/BsoMObHv9pAll your regular
|
||||
updates on What's New in #Eth2 in one handy place.Bullish Merge! ",96,0
|
||||
28,"2022-05-23
|
||||
15:44:30",WeekInEthNews," Latest Week in Ethereum News! @Cloudflare to stake their $ETH to support
|
||||
the Merge @dannyryan mainnet-shadow-fork-5 went exceedingly well
|
||||
@fredriksvantes client bug bounties now $250khttps://t.co/R7pG1B1gLYThanks
|
||||
to @NexusMutual for making this issue possible ",84,0
|
||||
27,"2022-05-27
|
||||
15:16:18",jon_charb,"This is THE definitive deep dive on Ethereums ambitious roadmap.Special
|
||||
thanks to @dankrad for your insights and review!AND we made an exception to
|
||||
open-source this Give me an hour of your time, and Ill save you months of
|
||||
work Enjoyhttps://t.co/qwR2iRltwp",730,0
|
||||
26,"2022-05-27
|
||||
19:11:03",JBSchweitzer,"The @Ethereum Foundation is searching for a Hiring Coordinator to help find
|
||||
great people for our community of teams & projects.Ready to support hiring
|
||||
efforts, and to add value to the Ethereum ecosystem? Find a full description
|
||||
below, and apply today!https://t.co/UqyGZf2NwN",55,0
|
||||
25,"2022-05-27
|
||||
19:40:51",TimBeiko,"Another merge-heavy @ethereum #allcoredevs today TTD, beacon chains, Ropsten,
|
||||
difficulty bomb, we covered it all!Agenda: https://t.co/ei00nskBFg Stream:
|
||||
Recap below https://t.co/yeGVLIuhX4",135,0
|
||||
24,"2022-05-28
|
||||
20:30:25",WeekInEthNews," Latest Week in Ethereum News! @Uniswap $1 trillion cumulative trading
|
||||
volume @jon_charb Ethereum roadmap deep dive @GameStop L1 &
|
||||
@loopringorg L2 wallethttps://t.co/2c16LLpEiyThanks to
|
||||
https://t.co/eRZA5rcSMX for making this issue possible ",94,0
|
||||
23,"2022-05-30
|
||||
20:19:28",TimBeiko," Ropsten Merge Announcement Ethereum's longest lived PoW testnet is moving
|
||||
to Proof of Stake! A new beacon chain has been launched today, and The Merge is
|
||||
expected around June 8th on the network. Node Operators: this is the first
|
||||
dress rehearsalhttps://t.co/0fDHObLOmn",999,0
|
||||
22,"2022-05-31
|
||||
00:04:17",sreeramkannan,"This is a post in appreciation of the Ethereum PoS protocol, in the context of
|
||||
recently raised questions. @VitalikButerin @dannyryan@drakefjustin @dankrad
|
||||
@casparschwa @zmanian @barnabemonnot https://t.co/NDeb6TQ65v",271,0
|
||||
21,"2022-05-31
|
||||
16:36:57",PrivacyScaling,"Quadratic Funding is coming to a hackathon near youhttps://t.co/AQd48XiZQd
|
||||
@EthPrague attendees will vote in person on how funds are distributed among
|
||||
local public goods projects. If you're working on public goods in or around
|
||||
Prague, sign up as a recipient by Monday 6/6!",47,0
|
||||
20,"2022-06-02
|
||||
01:43:25",EF_ESP,"Our latest Grantee Roundup is out!https://t.co/ABRbv82x3SFeaturing
|
||||
@ethnimbus for their Fluffy client and Portal Network development, and
|
||||
@paulmillr for improvements to the ethereum-cryptography library ",65,0
|
||||
19,"2022-06-03
|
||||
13:44:00",TimBeiko," Ropsten Merge Update As mentioned in the Ropsten Merge Announcement, the
|
||||
terminal total difficulty (TTD) at which The Merge happens on Ropsten must be
|
||||
overridden by node operators & stakers. The correct TTD value is
|
||||
50000000000000000 https://t.co/aPAWNJfDYh",146,0
|
||||
18,"2022-06-03
|
||||
18:59:02",skiffprivacy,"End-to-end encrypted, private email - powered by your @ethereum wallet.10 GB
|
||||
storage, fast + free search, @ensdomains integration, and optional decentralized
|
||||
storage with @IPFS https://t.co/W4cXpW4DvN https://t.co/EQMT0hEcJe",72,0
|
||||
17,"2022-06-04
|
||||
16:28:22",benjaminion_xyz,"The latest What's New in Eth2 is out!Reorgs, Ropsten, research, regular
|
||||
recordings - and lots of other stuff that doesn't alliterate, all in the usual
|
||||
place: https://t.co/97X85jdCzM#Ethereum",102,0
|
||||
16,"2022-06-05
|
||||
21:15:54",WeekInEthNews,"Latest Week in Ethereum News @TimBeiko Ropsten testnet to Merge
|
||||
@skiffprivacy e2e encrypted email using Eth wallet & @ensdomains
|
||||
@dannyryan liquid staking derivatives dangerous at 25%https://t.co/VdFuCRPgfg
|
||||
Thanks to @StarbloomVent for making this issue possible",52,0
|
||||
15,"2022-06-06
|
||||
12:46:07",EthereumOnARM,"If you are joining the #Ethereum Ropsten fork don't forget to update the clients
|
||||
TTD to 50000000000000000.",40,0
|
||||
14,"2022-06-06
|
||||
19:42:43",EFDevcon," Ready, set and GO: We have embarked on the #RoadToDevcon! Applications
|
||||
are open TODAY Apply as a Builder Student Speaker Supporter
|
||||
VolunteerPS: Ticket sales begin soonCheck the #Devcon blog for exact
|
||||
dates, forms & more:https://t.co/95Ec05OcK1",210,0
|
||||
13,"2022-06-07
|
||||
04:54:01",peter_szilagyi,"This is your periodic reminder that post-merge, #Ethereum execution clients will
|
||||
not guarantee the availability of all the chain history indefinitely.
|
||||
Practically, nothing will change in the short term, but consider the invariant
|
||||
broken long term.https://t.co/yYv3j1XvG6",130,0
|
||||
12,"2022-06-07
|
||||
20:40:54",ethdotorg,"Calling all Ethereum wallets - we need your help updating your product
|
||||
information & features!We're shipping updates to our wallet listing tools,
|
||||
so in order to be fully visible on feature filters, please add you information /
|
||||
confirm it's accurate! https://t.co/qLEv007Jf3",50,0
|
||||
11,"2022-06-07
|
||||
20:41:09",TimBeiko,"Reminder - well be hitting TTD on Ropsten later this week. If you run a node or
|
||||
validator on the network, you must override it The blog post quoted here
|
||||
explains how to do so https://t.co/4CyxHxIgBm",61,0
|
||||
10,"2022-06-07
|
||||
22:01:01",chuycepeda,"Our identities hold immense power. At @oscitylatam, we are working to onboard
|
||||
#government services into the world of #web3. As an @Ethereum Foundation fellow,
|
||||
here are my thoughts on #digitalidentity:https://t.co/yJIcpMXwuq",54,0
|
||||
9,"2022-06-08
|
||||
16:13:11",lightclients,Ropsten has activated proof-of-stake! https://t.co/TKQ8LSJGt6,849,0
|
||||
8,"2022-06-09
|
||||
00:42:38",parithosh_j,Summary of the Ropsten testnet merge: https://t.co/xHBManCuru,314,0
|
||||
7,"2022-06-10
|
||||
22:55:26",TimBeiko,"We just wrapped up a *very* eventful @ethereum #AllCoreDevs Agenda:
|
||||
https://t.co/NFEtHndQg3 Stream: Will recap here, but IMO if you only listen to
|
||||
a handful of calls per year, this one should be on your list
|
||||
https://t.co/imJBjEYeXE",180,0
|
||||
6,"2022-06-11
|
||||
19:52:20",WeekInEthNews,"Latest Week in Ethereum News Ropsten testnet merged successfully!
|
||||
Difficulty bomb to be delayed several monthshttps://t.co/SbiGqoVXcxThanks to
|
||||
@showkarma_xyzfor making this issue possible ",57,0
|
||||
5,"2022-06-14
|
||||
10:30:53",ethdotorg,"Lots of very exciting changes after deploying v4.2.0 of https://t.co/v9gxnNcrx7
|
||||
https://t.co/FUibj8wJUk",80,0
|
||||
4,"2022-06-15
|
||||
20:38:54",ETHGlobal,"We've got a special announcement... #ETHNewYork is already set to be our
|
||||
largest in-person event, but we found a little more space!If you're on the
|
||||
waitlist, check your emailsbut if you haven't applied, Friday is your last
|
||||
chance!https://t.co/0MiCarFqjg",58,0
|
||||
3,"2022-06-16
|
||||
21:34:12",TimBeiko," Gray Glacier Upgrade Announcement At block 15,050,000, the Ethereum network
|
||||
will undergo the Gray Glacier fork to push back the difficulty bomb, *hopefully*
|
||||
for the last time ever If you run a node or validator, make sure to upgrade
|
||||
!https://t.co/wmPqzQSgL7",223,0
|
||||
2,"2022-06-17
|
||||
15:50:00",evan_van_ness,"Something that has long irked me:People asking for ""official"" news about
|
||||
Ethereum.There is no such thing.",40,0
|
||||
1,"2022-06-18
|
||||
20:26:57",benjaminion_xyz,"Amidst all the reckage and misery, here's your little ray of sunshiny good news
|
||||
for the weekend: What's New in #Eth2.All your #Ethereum Merge updates and
|
||||
everything else right here: https://t.co/97X85jvdrk Enjoy! ",85,0
|
||||
0,"2022-06-19
|
||||
20:09:57",WeekInEthNews,"Latest Week in Ethereum News Update your nodes for the Gray Glacier upgrade
|
||||
https://t.co/KjaMV4U5rSThanks to @NexusMutual for making this issue possible ",45,0
|
||||
45,"2017-02-13
|
||||
10:23:12",bitcoincoreorg,"An Interview with Bitcoin Core contributor, Eric Lombrozo @eric_lombrozo by
|
||||
@creationlayer https://t.co/fWKYkJLtdt",30,65
|
||||
44,"2017-02-20
|
||||
11:46:00",bitcoincoreorg,"Interview with Bitcoin Core contributor and maintainer, Jonas Schnelli
|
||||
@_jonasschnelli_ by @creationlayer https://t.co/tw97iUBx1j",47,91
|
||||
43,"2017-03-06
|
||||
13:42:01",bitcoincoreorg,"Fascinating interview with applied cryptographer, cypherpunk and Bitcoin
|
||||
protocol researcher, Dr. Adam Back @adam3us https://t.co/xBfthopQg1",71,139
|
||||
42,"2017-03-08
|
||||
10:11:00",bitcoincoreorg,"Bitcoin Core 0.14.0 released with huge performance boost and many new features
|
||||
and bugfixeshttps://t.co/1kiuVFzPki @orionwl https://t.co/FgJRgfbNvf",178,216
|
||||
41,"2017-03-13
|
||||
16:02:59",bitcoincoreorg,"On-chain scaling - a review of historical performance optimization made to
|
||||
Bitcoins reference software. Part 1 https://t.co/StwC3O6Wlc
|
||||
https://t.co/vED9A9Y8pq",85,117
|
||||
40,"2017-03-15
|
||||
10:22:15",_jonasschnelli_,"Reviewing, testing and maintenance are the most important duties to be done by a
|
||||
blockchain developer team. A slide from a recent talk: https://t.co/CSkIexgHsd",46,0
|
||||
39,"2017-03-15
|
||||
12:45:00",bitcoincoreorg,"What's new in Bitcoin Core 0.14, by Jonas Schnelli - Bitcoin Core Developer
|
||||
@_jonasschnelli_",51,75
|
||||
38,"2017-03-20
|
||||
11:51:00",bitcoincoreorg,Bitcoin Core 0.14.0 Whats New? @BitcoinMagazine https://t.co/Pzy90ey8Wj,48,79
|
||||
37,"2017-03-23
|
||||
13:24:46",bitcoincoreorg,"Technology Roadmap - Schnorr Signatures and Signature Aggregation!
|
||||
https://t.co/syYhPMP8uT https://t.co/AApCeT6D6M",143,258
|
||||
36,"2017-04-03
|
||||
12:35:51",bitcoincoreorg,"Watch this amazing presentation by Pieter Wuille on his research into BCH/Bech32
|
||||
addresses for SegWit #mbga @pwuille",58,117
|
||||
35,"2017-04-23
|
||||
08:21:12",bitcoincoreorg,Bitcoin Core 0.14.1 Released https://t.co/MBJ9JnVVFN,82,144
|
||||
34,"2017-06-17
|
||||
13:02:56",bitcoincoreorg,Bitcoin Core 0.14.2 Released! https://t.co/PuCEz3yNds,127,231
|
||||
33,"2017-08-09
|
||||
01:20:26",eric_lombrozo,"A toast to the man who made a concrete proposal for #SegWit and then implemented
|
||||
most of it. https://t.co/hm0bm17ILo",324,0
|
||||
32,"2017-08-28
|
||||
13:37:02",bitcoincoreorg,"The Bitcoin Core project rejected the pull request for NYA ""segwit2x""
|
||||
https://t.co/t8d8BHFSCX",231,470
|
||||
31,"2017-08-30
|
||||
13:37:00",bitcoincoreorg,"Correcting misleading statements about btc1 and ""segwit2x""
|
||||
https://t.co/S7AhfflyRZ",98,194
|
||||
30,"2017-09-15
|
||||
01:20:16",bitcoincoreorg,"Bitcoin Core 0.15.0 has been released. Read all about it!
|
||||
https://t.co/zbHC41U5TB",172,372
|
||||
29,"2017-10-12
|
||||
06:44:20",bitcoincoreorg,"Please be aware of accounts trying to pass them self off as Bitcoin Core
|
||||
project's twitter account @bitcoincoreorg https://t.co/C53A5b4nVZ",92,179
|
||||
28,"2017-10-13
|
||||
00:43:45",bitcoincoreorg,"Thank you to @Twitter for verifying the Bitcoin Core project @bitcoincoreorg
|
||||
twitter account. https://t.co/C53A5b4nVZ",128,549
|
||||
27,"2018-01-10
|
||||
20:49:35",_jonasschnelli_,"Bitcoin Core Git Stats 2017:- Total pull requests created: 1'843 (~5 per day)
|
||||
- Merged pull requests: 1'195 (~3.27 per day)- GitHub comments/reviews: 21'153
|
||||
(~57.95 per day)- Commits: 3'277 (~8.98 per day)- Git contributors (merged
|
||||
code): 161- GitHub contributors: 713",492,0
|
||||
26,"2018-02-26
|
||||
11:00:14",bitcoincoreorg,Bitcoin Core 0.16.0 Released https://t.co/slIfNyPIVZ,713,1700
|
||||
25,"2018-06-15
|
||||
17:15:17",bitcoincoreorg,Bitcoin Core 0.16.1 Released https://t.co/HoP1IT3wkq,188,484
|
||||
24,"2018-06-16
|
||||
14:04:52",hrdng,"The @bitcoincoreorg download page now provides instructions to help you verify
|
||||
your Bitcoin Core download.https://t.co/msXZHlDCRMThanks to @kallerosenbaum
|
||||
for suggesting an improvement, and to PR reviewers @kallerosenbaum, @bitstein,
|
||||
@MarcoFalke, BlockchainBilly, & @orionwl. https://t.co/1TUdCXn8Vu",72,0
|
||||
23,"2018-07-29
|
||||
17:11:39",bitcoincoreorg,Bitcoin Core 0.16.2 Released https://t.co/EfMhZ7GINx,230,693
|
||||
22,"2018-09-18
|
||||
21:26:20",bitcoincoreorg,"Bitcoin Core 0.16.3 was released: https://t.co/SsbsJsqSTo Upgrade recommended
|
||||
due to vulnerability fix",369,833
|
||||
21,"2018-09-29
|
||||
05:46:14",bitcoincoreorg,"Bitcoin Core 0.14.3 was released https://t.co/Fwl1mccqBA This is a backport
|
||||
release with CVE-2018-17144 vulnerability fix",42,112
|
||||
20,"2018-09-29
|
||||
05:46:36",bitcoincoreorg,"Bitcoin Core 0.15.2 was released https://t.co/Hppk5ZD9D5 This is a backport
|
||||
release with CVE-2018-17144 vulnerability fix",54,154
|
||||
19,"2018-10-03
|
||||
11:48:19",bitcoincoreorg,Bitcoin Core 0.17.0 Released https://t.co/ciwCREngon,261,654
|
||||
18,"2018-12-25
|
||||
09:48:34",bitcoincoreorg,Bitcoin Core 0.17.1 Released https://t.co/afp0glUdkD Happy holidays!,269,980
|
||||
17,"2019-05-02
|
||||
10:55:03",bitcoincoreorg,Bitcoin Core 0.18.0 Released! https://t.co/T2UPgqK9ga,431,1083
|
||||
16,"2019-08-09
|
||||
11:02:03",bitcoincoreorg,Bitcoin Core 0.18.1 Released! https://t.co/uSV3Mxfk6G,274,831
|
||||
15,"2019-11-24
|
||||
11:10:17",bitcoincoreorg,"Bitcoin Core 0.19.0(.1) was released! https://t.co/iE3Bd0H5pO Release notes:
|
||||
https://t.co/741TxACPay",276,710
|
||||
14,"2020-03-09
|
||||
13:15:54",bitcoincoreorg,Bitcoin Core 0.19.1 was released! https://t.co/h0iR4Oqrps,225,713
|
||||
13,"2020-03-16
|
||||
11:10:26",bitcoincoreorg,"Translations for the upcoming 0.20 release have opened, please help with
|
||||
localization of Bitcoin Core in your language: https://t.co/pzfvaYOMdZ",46,122
|
||||
12,"2020-06-03
|
||||
11:15:32",bitcoincoreorg,"Bitcoin Core 0.20.0 was released! It is available from https://t.co/WpMuMaejz1
|
||||
Release mail: https://t.co/Q9X9tLIoFX",326,836
|
||||
11,"2020-08-01
|
||||
13:15:33",bitcoincoreorg,"Bitcoin Core 0.20.1 was released It is available from https://t.co/Uy9NJ11mih
|
||||
(main website update pending) Release mail: https://t.co/95MXgRvN7Z",208,529
|
||||
10,"2021-01-14
|
||||
14:09:31",bitcoincoreorg,"Bitcoin Core 0.21.0 was released It is available from https://t.co/jnWN8LRX75
|
||||
Release mail: https://t.co/6dFNUj3K4d",282,892
|
||||
9,"2021-01-19
|
||||
20:59:02",achow101,"I'm launching a Bitcoin Core usage survey: https://t.co/O3mbn4vnCPThe survey
|
||||
will help us learn about who, how, and why people use Bitcoin Core so that we
|
||||
can improve it in the future. If you have any feedback about the software you
|
||||
want to leave, this is the place to do it.",100,0
|
||||
8,"2021-04-19
|
||||
04:59:28",bitcoincoreorg,"Bitcoin Core 0.21.1 release candidate 1 available https://t.co/BSQjJiRuHw
|
||||
https://t.co/KQMiZFHnZy",56,218
|
||||
7,"2021-05-02
|
||||
07:21:00",bitcoincoreorg,"Bitcoin Core 0.21.1 was released! It is available from https://t.co/WpMuMaejz1
|
||||
Release mail: https://t.co/TuFxSkQABE",154,568
|
||||
6,"2021-06-03
|
||||
17:16:25",pwuille,"In version 0.21 @bitcoincoreorg added support for Tor V3:
|
||||
https://t.co/yIUqYjqQnGFor the next major release we're dropping V2 support.
|
||||
Their usability will rapidly diminish the next few months, as they're deprecated
|
||||
and @torproject will soon remove support. https://t.co/XEUbSnVmCe",71,0
|
||||
5,"2021-07-03
|
||||
08:25:13",bitcoincoreorg,"A reminder that Bitcoin Core is available for download worldwide through
|
||||
https://t.co/WpMuMaejz1 . It is also available through BitTorrent.",191,567
|
||||
4,"2021-07-20
|
||||
21:51:31",LukeDashjr,"PSA: @BitcoinCoreOrg (#Bitcoin Core) is NOT soliciting or performing closed
|
||||
testing of any beta or other software.If you get an email inviting you, be
|
||||
aware it is spam and their ""testing version"" is almost certainly malware.Note:
|
||||
the ""From"" on emails is NOT secure and faked.",94,0
|
||||
3,"2021-09-13
|
||||
22:01:09",bitcoincoreorg,"Bitcoin Core 22.0 was released! It is available from https://t.co/WpMuMaejz1
|
||||
Release mail: https://t.co/ZvZKXZ0iLD",348,1042
|
||||
2,"2021-10-27
|
||||
10:55:48",bitcoincoreorg,"Bitcoin Core 0.20.2 (backports) was released It is available from
|
||||
https://t.co/ea0sMBjrp2 Release mail: https://t.co/KahVJFcZ9d",86,181
|
||||
1,"2022-04-25
|
||||
14:31:08",bitcoincoreorg,"Bitcoin Core 23.0 was released! It is available from https://t.co/hP6wtyct16
|
||||
Release mail: https://t.co/4Nmle1Fwcx",292,828
|
||||
0,"2022-06-09
|
||||
17:38:58",jonatack,"if you run a bitcoin node, do you change the default logging settings?(i.e.
|
||||
with the -debug= config option or the logging rpc)",21,0
|
||||
|
||||
|
@@ -0,0 +1,28 @@
|
||||
,Metric,Value
|
||||
0,id,btc-bitcoin
|
||||
1,name,Bitcoin
|
||||
2,symbol,BTC
|
||||
3,rank,1
|
||||
4,circulating_supply,19208125
|
||||
5,total_supply,19208094
|
||||
6,max_supply,21000000
|
||||
7,beta_value,0.962273
|
||||
8,first_data_at,2010-07-17 00:00:00
|
||||
9,last_updated,2022-11-15 15:39:48
|
||||
10,usd_price,16968.618849118702
|
||||
11,usd_volume_24h,31302292110.73687
|
||||
12,usd_volume_24h_change_24h,-22.39
|
||||
13,usd_market_cap,325934825904
|
||||
14,usd_market_cap_change_24h,3.61
|
||||
15,usd_percent_change_15m,0.14
|
||||
16,usd_percent_change_30m,0.22
|
||||
17,usd_percent_change_1h,0.13
|
||||
18,usd_percent_change_6h,0.97
|
||||
19,usd_percent_change_12h,0.56
|
||||
20,usd_percent_change_24h,3.61
|
||||
21,usd_percent_change_7d,-17
|
||||
22,usd_percent_change_30d,-13.23
|
||||
23,usd_percent_change_1y,-72.27
|
||||
24,usd_ath_price,68692.137036932
|
||||
25,usd_ath_date,2021-11-10 16:51:15
|
||||
26,usd_percent_from_price_ath,-75.3
|
||||
|
@@ -3,26 +3,26 @@
|
||||
1,name,Bitcoin
|
||||
2,symbol,BTC
|
||||
3,rank,1
|
||||
4,circulating_supply,19072244
|
||||
5,total_supply,19072219
|
||||
4,circulating_supply,19208125
|
||||
5,total_supply,19208094
|
||||
6,max_supply,21000000
|
||||
7,beta_value,0.953483
|
||||
7,beta_value,0.962273
|
||||
8,first_data_at,2010-07-17 00:00:00
|
||||
9,last_updated,2022-06-20 09:49:01
|
||||
10,usd_price,20681.83977297302
|
||||
11,usd_volume_24h,36598415711.10757
|
||||
12,usd_volume_24h_change_24h,-15.86
|
||||
13,usd_market_cap,394449094519
|
||||
14,usd_market_cap_change_24h,5.17
|
||||
15,usd_percent_change_15m,-0.7
|
||||
16,usd_percent_change_30m,0.45
|
||||
17,usd_percent_change_1h,0.93
|
||||
18,usd_percent_change_6h,3.43
|
||||
19,usd_percent_change_12h,1.38
|
||||
20,usd_percent_change_24h,5.16
|
||||
21,usd_percent_change_7d,-14.39
|
||||
22,usd_percent_change_30d,-30.47
|
||||
23,usd_percent_change_1y,-37.85
|
||||
9,last_updated,2022-11-15 15:39:48
|
||||
10,usd_price,16968.618849118702
|
||||
11,usd_volume_24h,31302292110.73687
|
||||
12,usd_volume_24h_change_24h,-22.39
|
||||
13,usd_market_cap,325934825904
|
||||
14,usd_market_cap_change_24h,3.61
|
||||
15,usd_percent_change_15m,0.14
|
||||
16,usd_percent_change_30m,0.22
|
||||
17,usd_percent_change_1h,0.13
|
||||
18,usd_percent_change_6h,0.97
|
||||
19,usd_percent_change_12h,0.56
|
||||
20,usd_percent_change_24h,3.61
|
||||
21,usd_percent_change_7d,-17
|
||||
22,usd_percent_change_30d,-13.23
|
||||
23,usd_percent_change_1y,-72.27
|
||||
24,usd_ath_price,68692.137036932
|
||||
25,usd_ath_date,2021-11-10 16:51:15
|
||||
26,usd_percent_from_price_ath,-69.89
|
||||
26,usd_percent_from_price_ath,-75.3
|
||||
|
||||
|
@@ -1 +1 @@
|
||||
{"id": "eth-ethereum", "name": "Ethereum", "symbol": "ETH", "rank": 2, "is_new": false, "is_active": true, "type": "coin", "tags": [{"id": "token-issuance", "name": "Token Issuance", "coin_counter": 55, "ico_counter": 25}, {"id": "decentralized-applications", "name": "Decentralized Applications", "coin_counter": 87, "ico_counter": 39}, {"id": "proof-of-work", "name": "Proof Of Work", "coin_counter": 423, "ico_counter": 14}, {"id": "smart-contracts", "name": "Smart Contracts", "coin_counter": 428, "ico_counter": 305}, {"id": "cryptocurrency", "name": "Cryptocurrency", "coin_counter": 852, "ico_counter": 40}, {"id": "premine", "name": "Premine", "coin_counter": 200, "ico_counter": 4}, {"id": "ethash", "name": "Ethash", "coin_counter": 13, "ico_counter": 3}], "team": [{"id": "vitalik-buterin", "name": "Vitalik Buterin", "position": "Author"}, {"id": "jeffrey-wylcke", "name": "Jeffrey Wylcke", "position": "Go-Ethereum Lead"}, {"id": "virgil-griffith", "name": "Virgil Griffith", "position": "Researcher"}, {"id": "alexandre-van-de-sande", "name": "Alexandre Van de Sande", "position": "UX Design"}, {"id": "alex-leverington", "name": "Alex Leverington", "position": "Core Developer"}, {"id": "aya-miyaguchi", "name": "Aya Miyaguchi", "position": "Executive Director"}, {"id": "vlad-zamfir", "name": "Vlad Zamfir", "position": "Researcher"}, {"id": "zach-lebeau", "name": "Zach Lebeau", "position": "Conceptualist"}, {"id": "justin-drake", "name": "Justin Drake", "position": "Researcher"}, {"id": "yoichi-hirai", "name": "Yoichi Hirai", "position": "Formal Verification Engineer"}, {"id": "iuri-matias", "name": "Iuri Matias", "position": "Developer"}, {"id": "karl-floersch", "name": "Karl Floersch", "position": "Researcher"}], "description": "Ethereum is a decentralized platform for applications. Applications build on it can use smart contracts - computer algorithms which execute themselves when data is supplied to the platform. There is no need for any human operators.", "message": "", "open_source": true, "started_at": "2015-07-30T00:00:00Z", "development_status": "Working product", "hardware_wallet": true, "proof_type": "Ethereum consensus (currently proof of work, will be proof of stake later on)", "org_structure": "Semi-centralized", "hash_algorithm": "Ethash", "links": {"explorer": ["https://etherscan.io/", "https://ethplorer.io/", "https://etherchain.org/", "https://blockchair.com/ethereum", "https://live.blockcypher.com/eth/", "https://enjinx.io/eth/transactions"], "facebook": ["https://www.facebook.com/ethereumproject/"], "reddit": ["https://www.reddit.com/r/ethereum"], "source_code": ["https://github.com/ethereum/go-ethereum"], "website": ["https://www.ethereum.org/"], "youtube": ["https://www.youtube.com/watch?v=TDGq4aeevgY"]}, "links_extended": [{"url": "https://bitcointalk.org/index.php?topic=428589.0", "type": "announcement"}, {"url": "https://blog.ethereum.org/", "type": "blog"}, {"url": "https://gitter.im/orgs/ethereum/rooms", "type": "chat"}, {"url": "https://etherscan.io/", "type": "explorer"}, {"url": "https://ethplorer.io/", "type": "explorer"}, {"url": "https://etherchain.org/", "type": "explorer"}, {"url": "https://blockchair.com/ethereum", "type": "explorer"}, {"url": "https://live.blockcypher.com/eth/", "type": "explorer"}, {"url": "https://enjinx.io/eth/transactions", "type": "explorer"}, {"url": "https://www.facebook.com/ethereumproject/", "type": "facebook"}, {"url": "https://forum.ethereum.org/", "type": "message_board"}, {"url": "https://www.reddit.com/r/ethereum", "type": "reddit", "stats": {"subscribers": 1316994}}, {"url": "https://github.com/ethereum/go-ethereum", "type": "source_code", "stats": {"contributors": 732, "stars": 37968}}, {"url": "https://twitter.com/ethereum", "type": "twitter", "stats": {"followers": 2630889}}, {"url": "https://github.com/ethereum/mist/releases", "type": "wallet"}, {"url": "https://www.ethereum.org/", "type": "website"}, {"url": "https://www.youtube.com/watch?v=TDGq4aeevgY", "type": "youtube"}], "whitepaper": {"link": "https://github.com/ethereum/wiki/wiki/White-Paper", "thumbnail": "https://static.coinpaprika.com/storage/cdn/whitepapers/1689.jpg"}, "first_data_at": "2015-08-07T00:00:00Z", "last_data_at": "2022-06-20T09:50:00Z"}
|
||||
{"id": "eth-ethereum", "name": "Ethereum", "symbol": "ETH", "rank": 2, "is_new": false, "is_active": true, "type": "coin", "logo": "https://static.coinpaprika.com/coin/eth-ethereum/logo.png", "tags": [{"id": "token-issuance", "name": "Token Issuance", "coin_counter": 55, "ico_counter": 25}, {"id": "decentralized-applications", "name": "Decentralized Applications", "coin_counter": 87, "ico_counter": 39}, {"id": "smart-contracts", "name": "Smart Contracts", "coin_counter": 428, "ico_counter": 305}, {"id": "cryptocurrency", "name": "Cryptocurrency", "coin_counter": 894, "ico_counter": 40}, {"id": "premine", "name": "Premine", "coin_counter": 217, "ico_counter": 4}, {"id": "ethash", "name": "Ethash", "coin_counter": 12, "ico_counter": 3}, {"id": "proof-of-stake", "name": "Proof Of Stake", "coin_counter": 341, "ico_counter": 5}], "team": [{"id": "vitalik-buterin", "name": "Vitalik Buterin", "position": "Author"}, {"id": "jeffrey-wylcke", "name": "Jeffrey Wylcke", "position": "Go-Ethereum Lead"}, {"id": "virgil-griffith", "name": "Virgil Griffith", "position": "Researcher"}, {"id": "alexandre-van-de-sande", "name": "Alexandre Van de Sande", "position": "UX Design"}, {"id": "alex-leverington", "name": "Alex Leverington", "position": "Core Developer"}, {"id": "prima", "name": "prima", "position": "11"}, {"id": "aya-miyaguchi", "name": "Aya Miyaguchi", "position": "Executive Director"}, {"id": "vlad-zamfir", "name": "Vlad Zamfir", "position": "Researcher"}, {"id": "zach-lebeau", "name": "Zach Lebeau", "position": "Conceptualist"}, {"id": "justin-drake", "name": "Justin Drake", "position": "Researcher"}, {"id": "yoichi-hirai", "name": "Yoichi Hirai", "position": "Formal Verification Engineer"}, {"id": "iuri-matias", "name": "Iuri Matias", "position": "Developer"}, {"id": "karl-floersch", "name": "Karl Floersch", "position": "Researcher"}], "description": "Ethereum is a decentralized platform for applications. Applications build on it can use smart contracts - computer algorithms which execute themselves when data is supplied to the platform. There is no need for any human operators.", "message": "", "open_source": true, "started_at": "2015-07-30T00:00:00Z", "development_status": "Working product", "hardware_wallet": true, "proof_type": "Proof of Stake", "org_structure": "Semi-centralized", "hash_algorithm": "Ethash", "links": {"explorer": ["https://etherscan.io/", "https://ethplorer.io/", "https://etherchain.org/", "https://blockchair.com/ethereum", "https://live.blockcypher.com/eth/", "https://enjinx.io/eth/transactions"], "facebook": ["https://www.facebook.com/ethereumproject/"], "reddit": ["https://www.reddit.com/r/ethereum"], "source_code": ["https://github.com/ethereum/go-ethereum"], "website": ["https://www.ethereum.org/"], "youtube": ["https://www.youtube.com/watch?v=TDGq4aeevgY"]}, "links_extended": [{"url": "https://bitcointalk.org/index.php?topic=428589.0", "type": "announcement"}, {"url": "https://blog.ethereum.org/", "type": "blog"}, {"url": "https://gitter.im/orgs/ethereum/rooms", "type": "chat"}, {"url": "https://etherscan.io/", "type": "explorer"}, {"url": "https://ethplorer.io/", "type": "explorer"}, {"url": "https://etherchain.org/", "type": "explorer"}, {"url": "https://blockchair.com/ethereum", "type": "explorer"}, {"url": "https://live.blockcypher.com/eth/", "type": "explorer"}, {"url": "https://enjinx.io/eth/transactions", "type": "explorer"}, {"url": "https://www.facebook.com/ethereumproject/", "type": "facebook"}, {"url": "https://forum.ethereum.org/", "type": "message_board"}, {"url": "https://www.reddit.com/r/ethereum", "type": "reddit", "stats": {"subscribers": 1551057}}, {"url": "https://github.com/ethereum/go-ethereum", "type": "source_code", "stats": {"contributors": 785, "stars": 40158}}, {"url": "https://twitter.com/ethereum", "type": "twitter", "stats": {"followers": 3006234}}, {"url": "https://github.com/ethereum/mist/releases", "type": "wallet"}, {"url": "https://www.ethereum.org/", "type": "website"}, {"url": "https://www.youtube.com/watch?v=TDGq4aeevgY", "type": "youtube"}], "whitepaper": {"link": "https://github.com/ethereum/wiki/wiki/White-Paper", "thumbnail": "https://static.coinpaprika.com/storage/cdn/whitepapers/1689.jpg"}, "first_data_at": "2015-08-07T00:00:00Z", "last_data_at": "2022-11-15T15:40:00Z"}
|
||||
@@ -24,9 +24,7 @@ def vcr_config():
|
||||
("get_coin", dict()),
|
||||
("get_coin_twitter_timeline", dict()),
|
||||
("get_coin_events_by_id", dict()),
|
||||
# ("get_coin_exchanges_by_id", dict()),
|
||||
("get_coin_markets_by_id", dict()),
|
||||
("get_ohlc_historical", dict()),
|
||||
("get_tickers_info_for_coin", dict()),
|
||||
("validate_coin", dict(symbol="btc", coins_dct={"btc-bitcoin": "btc"})),
|
||||
("basic_coin_info", dict()),
|
||||
|
||||
@@ -543,11 +543,6 @@ def test_call_func(
|
||||
target=f"{path_controller}.ccxt_model.get_binance_currencies",
|
||||
return_value=["BITCOIN"],
|
||||
)
|
||||
# MOCK GET_COINPAPRIKA_ID
|
||||
mocker.patch(
|
||||
target=f"{path_controller}.cryptocurrency_helpers.get_coinpaprika_id",
|
||||
return_value=True,
|
||||
)
|
||||
|
||||
# MOCK SHOW_AVAILABLE_PAIRS_FOR_GIVEN_SYMBOL
|
||||
mocker.patch(
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
btc-bitcoin
|
||||
@@ -0,0 +1 @@
|
||||
btc
|
||||
Reference in New Issue
Block a user