Esempio n. 1
0
def estimate_fee(exchange: str, is_maker: bool) -> TradeFee:
    """
    Estimate the fee of a transaction on any blockchain.
    exchange is the name of the exchange to query.
    is_maker if true look at fee from maker side, otherwise from taker side.
    """
    if exchange not in CONNECTOR_SETTINGS:
        raise Exception(
            f"Invalid connector. {exchange} does not exist in CONNECTOR_SETTINGS"
        )
    fee_type = CONNECTOR_SETTINGS[exchange].fee_type
    fee_token = CONNECTOR_SETTINGS[exchange].fee_token
    default_fees = CONNECTOR_SETTINGS[exchange].default_fees
    fee_side = "maker" if is_maker else "taker"
    override_key = f"{exchange}_{fee_side}"
    if fee_type is TradeFeeType.FlatFee:
        override_key += "_fee_amount"
    elif fee_type is TradeFeeType.Percent:
        override_key += "_fee"
    fee = default_fees[0] if is_maker else default_fees[1]
    fee_config = fee_overrides_config_map.get(override_key)
    if fee_config is not None and fee_config.value is not None:
        fee = fee_config.value
    fee = Decimal(str(fee))
    if fee_type is TradeFeeType.Percent:
        return TradeFee(percent=fee / Decimal("100"), flat_fees=[])
    elif fee_type is TradeFeeType.FlatFee:
        return TradeFee(percent=0, flat_fees=[(fee_token, fee)])
Esempio n. 2
0
def estimate_fee(exchange: str, is_maker: bool) -> TradeFee:
    if exchange not in CONNECTOR_SETTINGS:
        raise Exception(f"Invalid connector. {exchange} does not exist in CONNECTOR_SETTINGS")
    use_gas = CONNECTOR_SETTINGS[exchange].use_eth_gas_lookup
    if use_gas:
        gas_amount = get_gas_price(in_gwei=False) * CONNECTOR_SETTINGS[exchange].gas_limit
        return TradeFee(percent=0, flat_fees=[("ETH", gas_amount)])
    fee_type = CONNECTOR_SETTINGS[exchange].fee_type
    fee_token = CONNECTOR_SETTINGS[exchange].fee_token
    default_fees = CONNECTOR_SETTINGS[exchange].default_fees
    fee_side = "maker" if is_maker else "taker"
    override_key = f"{exchange}_{fee_side}"
    if fee_type is TradeFeeType.FlatFee:
        override_key += "_fee_amount"
    elif fee_type is TradeFeeType.Percent:
        override_key += "_fee"
    fee = default_fees[0] if is_maker else default_fees[1]
    fee_config = fee_overrides_config_map.get(override_key)
    if fee_config is not None and fee_config.value is not None:
        fee = fee_config.value
    fee = Decimal(str(fee))
    if fee_type is TradeFeeType.Percent:
        return TradeFee(percent=fee / Decimal("100"), flat_fees=[])
    elif fee_type is TradeFeeType.FlatFee:
        return TradeFee(percent=0, flat_fees=[(fee_token, fee)])
 def _superimpose_overrides(cls, exchange: str,
                            trade_fee_schema: TradeFeeSchema):
     trade_fee_schema.percent_fee_token = (
         fee_overrides_config_map.get(f"{exchange}_percent_fee_token").value
         or trade_fee_schema.percent_fee_token)
     trade_fee_schema.maker_percent_fee_decimal = (
         fee_overrides_config_map.get(f"{exchange}_maker_percent_fee").value
         / Decimal("100") if
         fee_overrides_config_map.get(f"{exchange}_maker_percent_fee").value
         is not None else trade_fee_schema.maker_percent_fee_decimal)
     trade_fee_schema.taker_percent_fee_decimal = (
         fee_overrides_config_map.get(f"{exchange}_taker_percent_fee").value
         / Decimal("100") if
         fee_overrides_config_map.get(f"{exchange}_taker_percent_fee").value
         is not None else trade_fee_schema.taker_percent_fee_decimal)
     trade_fee_schema.buy_percent_fee_deducted_from_returns = (
         fee_overrides_config_map.get(
             f"{exchange}_buy_percent_fee_deducted_from_returns").value
         if fee_overrides_config_map.get(
             f"{exchange}_buy_percent_fee_deducted_from_returns").value
         is not None else
         trade_fee_schema.buy_percent_fee_deducted_from_returns)
     trade_fee_schema.maker_fixed_fees = (
         fee_overrides_config_map.get(f"{exchange}_maker_fixed_fees").value
         or trade_fee_schema.maker_fixed_fees)
     trade_fee_schema.maker_fixed_fees = [
         TokenAmount(*maker_fixed_fee)
         for maker_fixed_fee in trade_fee_schema.maker_fixed_fees
     ]
     trade_fee_schema.taker_fixed_fees = (
         fee_overrides_config_map.get(f"{exchange}_taker_fixed_fees").value
         or trade_fee_schema.taker_fixed_fees)
     trade_fee_schema.taker_fixed_fees = [
         TokenAmount(*taker_fixed_fee)
         for taker_fixed_fee in trade_fee_schema.taker_fixed_fees
     ]
     trade_fee_schema.validate_schema()
     return trade_fee_schema