Ejemplo n.º 1
0
def _split_pair(pair: TradePair) -> Tuple[str, str]:
    assets = pair.split('_')
    if len(assets) != 2:
        # Could not split the pair
        raise UnprocessableTradePair(pair)

    if len(assets[0]) == 0 or len(assets[1]) == 0:
        # no base or no quote asset
        raise UnprocessableTradePair(pair)

    return assets[0], assets[1]
Ejemplo n.º 2
0
def kraken_to_world_pair(pair: str) -> TradePair:
    """Turns a pair from kraken to our pair type

    Can throw:
        - UknownAsset if one of the assets of the pair are not known
        - UnprocessableKrakenPair if the pair can't be processed and
          split into its base/quote assets
"""
    # handle dark pool pairs
    if pair[-2:] == '.d':
        pair = pair[:-2]

    if pair[0:3] in KRAKEN_ASSETS:
        base_asset_str = pair[0:3]
        quote_asset_str = pair[3:]
    elif pair[0:4] in KRAKEN_ASSETS:
        base_asset_str = pair[0:4]
        quote_asset_str = pair[4:]
    else:
        raise UnprocessableTradePair(pair)

    base_asset = asset_from_kraken(base_asset_str)
    quote_asset = asset_from_kraken(quote_asset_str)

    return trade_pair_from_assets(base_asset, quote_asset)
Ejemplo n.º 3
0
def gemini_symbol_to_base_quote(symbol: str) -> Tuple[Asset, Asset]:
    """Turns a gemini symbol product into a base/quote asset tuple

    - Can raise UnprocessableTradePair if symbol is in unexpected format
    - Case raise UnknownAsset if any of the pair assets are not known to rotki
    """
    five_letter_assets = ('sushi', '1inch', 'storj', 'matic', 'audio')
    if len(symbol) == 5:
        base_asset = asset_from_gemini(symbol[:2].upper())
        quote_asset = asset_from_gemini(symbol[2:].upper())
    elif len(symbol) == 6:
        base_asset = asset_from_gemini(symbol[:3].upper())
        quote_asset = asset_from_gemini(symbol[3:].upper())
    elif len(symbol) == 7:
        try:
            base_asset = asset_from_gemini(symbol[:4].upper())
            quote_asset = asset_from_gemini(symbol[4:].upper())
        except UnknownAsset:
            base_asset = asset_from_gemini(symbol[:3].upper())
            quote_asset = asset_from_gemini(symbol[3:].upper())
    elif len(symbol) == 8:
        if any([asset in symbol for asset in five_letter_assets]):
            base_asset = asset_from_gemini(symbol[:5].upper())
            quote_asset = asset_from_gemini(symbol[5:].upper())
        else:
            base_asset = asset_from_gemini(symbol[:4].upper())
            quote_asset = asset_from_gemini(symbol[4:].upper())
    else:
        raise UnprocessableTradePair(symbol)

    return base_asset, quote_asset
Ejemplo n.º 4
0
def gemini_symbol_to_pair(symbol: str) -> TradePair:
    """Turns a gemini symbol product into our trade pair format

    - Can raise UnprocessableTradePair if symbol is in unexpected format
    - Case raise UnknownAsset if any of the pair assets are not known to Rotki
    """
    if len(symbol) == 6:
        base_asset = Asset(symbol[:3].upper())
        quote_asset = Asset(symbol[3:].upper())
    elif len(symbol) == 7:
        try:
            base_asset = Asset(symbol[:4].upper())
            quote_asset = Asset(symbol[4:].upper())
        except UnknownAsset:
            base_asset = Asset(symbol[:3].upper())
            quote_asset = Asset(symbol[3:].upper())
    elif len(symbol) == 8:
        if 'storj' in symbol:
            base_asset = Asset(symbol[:5].upper())
            quote_asset = Asset(symbol[5:].upper())
        else:
            base_asset = Asset(symbol[:4].upper())
            quote_asset = Asset(symbol[4:].upper())
    else:
        raise UnprocessableTradePair(symbol)

    return TradePair(f'{base_asset.identifier}_{quote_asset.identifier}')
Ejemplo n.º 5
0
def gemini_symbol_to_base_quote(symbol: str) -> Tuple[Asset, Asset]:
    """Turns a gemini symbol product into a base/quote asset tuple

    - Can raise UnprocessableTradePair if symbol is in unexpected format
    - Case raise UnknownAsset if any of the pair assets are not known to Rotki
    """
    if len(symbol) == 6:
        base_asset = asset_from_gemini(symbol[:3].upper())
        quote_asset = asset_from_gemini(symbol[3:].upper())
    elif len(symbol) == 7:
        try:
            base_asset = asset_from_gemini(symbol[:4].upper())
            quote_asset = asset_from_gemini(symbol[4:].upper())
        except UnknownAsset:
            base_asset = asset_from_gemini(symbol[:3].upper())
            quote_asset = asset_from_gemini(symbol[3:].upper())
    elif len(symbol) == 8:
        if 'storj' in symbol or '1inch' in symbol:
            base_asset = asset_from_gemini(symbol[:5].upper())
            quote_asset = asset_from_gemini(symbol[5:].upper())
        else:
            base_asset = asset_from_gemini(symbol[:4].upper())
            quote_asset = asset_from_gemini(symbol[4:].upper())
    else:
        raise UnprocessableTradePair(symbol)

    return base_asset, quote_asset
Ejemplo n.º 6
0
def coinbasepro_to_worldpair(product: str) -> TradePair:
    """Turns a coinbasepro product into our trade pair format

    - Can raise UnprocessableTradePair if product is in unexpected format
    - Case raise UnknownAsset if any of the pair assets are not known to Rotki
    """
    parts = product.split('-')
    if len(parts) != 2:
        raise UnprocessableTradePair(product)

    base_asset = Asset(parts[0])
    quote_asset = Asset(parts[1])

    return TradePair(f'{base_asset.identifier}_{quote_asset.identifier}')
Ejemplo n.º 7
0
def coinbasepro_to_worldpair(product: str) -> Tuple[Asset, Asset]:
    """Turns a coinbasepro product into our base/quote assets

    - Can raise UnprocessableTradePair if product is in unexpected format
    - Case raise UnknownAsset if any of the pair assets are not known to Rotki
    """
    parts = product.split('-')
    if len(parts) != 2:
        raise UnprocessableTradePair(product)

    base_asset = asset_from_coinbasepro(parts[0])
    quote_asset = asset_from_coinbasepro(parts[1])

    return base_asset, quote_asset
Ejemplo n.º 8
0
def deserialize_trade_pair(trade_pair_symbol: str) -> Tuple[Asset, Asset]:
    """May raise:
    - UnprocessableTradePair
    - UnknownAsset
    - UnsupportedAsset
    """
    try:
        base_asset_symbol, quote_asset_symbol = trade_pair_symbol.split('-')
    except ValueError as e:
        raise UnprocessableTradePair(trade_pair_symbol) from e

    base_asset = asset_from_kucoin(base_asset_symbol)
    quote_asset = asset_from_kucoin(quote_asset_symbol)

    return base_asset, quote_asset
Ejemplo n.º 9
0
def kraken_to_world_pair(pair: str) -> Tuple[Asset, Asset]:
    """Turns a pair from kraken to our base/quote asset tuple

    Can throw:
        - UknownAsset if one of the assets of the pair are not known
        - DeserializationError if one of the assets is not a sting
        - UnprocessableTradePair if the pair can't be processed and
          split into its base/quote assets
"""
    # handle dark pool pairs
    if pair[-2:] == '.d':
        pair = pair[:-2]

    if len(pair) == 6 and pair[0:3] in ('EUR', 'USD', 'AUD'):
        # This is for the FIAT to FIAT pairs that kraken introduced
        base_asset_str = pair[0:3]
        quote_asset_str = pair[3:]
    elif pair == 'ETHDAI':
        return A_ETH, A_DAI
    elif pair == 'ETH2.SETH':
        return A_ETH2, A_ETH
    elif pair[0:2] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:2]
        quote_asset_str = pair[2:]
    elif pair[0:3] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:3]
        quote_asset_str = pair[3:]
    elif pair[0:3] in ('XBT', 'ETH', 'XDG', 'LTC', 'XRP'):
        # Some assets can have the 'X' prefix omitted for some pairs
        base_asset_str = pair[0:3]
        quote_asset_str = pair[3:]
    elif pair[0:4] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:4]
        quote_asset_str = pair[4:]
    elif pair[0:5] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:5]
        quote_asset_str = pair[5:]
    elif pair[0:6] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:6]
        quote_asset_str = pair[6:]
    else:
        raise UnprocessableTradePair(pair)

    base_asset = asset_from_kraken(base_asset_str)
    quote_asset = asset_from_kraken(quote_asset_str)
    return base_asset, quote_asset
Ejemplo n.º 10
0
def kraken_to_world_pair(pair: str) -> TradePair:
    """Turns a pair from kraken to our pair type

    Can throw:
        - UknownAsset if one of the assets of the pair are not known
        - UnprocessableKrakenPair if the pair can't be processed and
          split into its base/quote assets
"""
    # handle dark pool pairs
    if pair[-2:] == '.d':
        pair = pair[:-2]

    if len(pair) == 6 and pair[0:3] in ('EUR', 'USD', 'AUD'):
        # This is for the FIAT to FIAT pairs that kraken introduced
        base_asset_str = pair[0:3]
        quote_asset_str = pair[3:]
    elif pair == 'ETHDAI':
        return trade_pair_from_assets(base=Asset('ETH'),
                                      quote=EthereumToken('DAI'))
    elif pair[0:2] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:2]
        quote_asset_str = pair[2:]
    elif pair[0:3] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:3]
        quote_asset_str = pair[3:]
    elif pair[0:3] in ('XBT', 'ETH', 'XDG', 'LTC', 'XRP'):
        # Some assets can have the 'X' prefix omitted for some pairs
        base_asset_str = pair[0:3]
        quote_asset_str = pair[3:]
    elif pair[0:4] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:4]
        quote_asset_str = pair[4:]
    elif pair[0:5] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:5]
        quote_asset_str = pair[5:]
    else:
        raise UnprocessableTradePair(pair)

    base_asset = asset_from_kraken(base_asset_str)
    quote_asset = asset_from_kraken(quote_asset_str)

    return trade_pair_from_assets(base_asset, quote_asset)
Ejemplo n.º 11
0
def kraken_to_world_pair(pair: str) -> TradePair:
    """Turns a pair from kraken to our pair type

    Can throw:
        - UknownAsset if one of the assets of the pair are not known
        - UnprocessableKrakenPair if the pair can't be processed and
          split into its base/quote assets
"""
    # handle dark pool pairs
    if pair[-2:] == '.d':
        pair = pair[:-2]

    if pair == 'ETHDAI':
        return trade_pair_from_assets(base=A_ETH, quote=A_DAI)
    elif pair[0:2] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:2]
        quote_asset_str = pair[2:]
    elif pair[0:3] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:3]
        quote_asset_str = pair[3:]
    elif pair[0:3] in ('XBT', 'ETH', 'XDG'):
        # Some assets can have the 'X' prefix omitted for some pairs
        base_asset_str = pair[0:3]
        quote_asset_str = pair[3:]
    elif pair[0:4] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:4]
        quote_asset_str = pair[4:]
    elif pair[0:5] in KRAKEN_TO_WORLD:
        base_asset_str = pair[0:5]
        quote_asset_str = pair[5:]
    else:
        raise UnprocessableTradePair(pair)

    base_asset = asset_from_kraken(base_asset_str)
    quote_asset = asset_from_kraken(quote_asset_str)

    return trade_pair_from_assets(base_asset, quote_asset)