Beispiel #1
0
def satoshi_to_currency(num, currency):
    """Converts a given number of satoshi to another currency as a formatted
    string rounded down to the proper number of decimal places.

    :param num: The number of satoshi.
    :type num: ``int``
    :param currency: One of the :ref:`supported currencies`.
    :type currency: ``str``
    :rtype: ``str``
    """
    return '{:f}'.format(
        Decimal(num / Decimal(EXCHANGE_RATES[currency]())).quantize(
            Decimal('0.' + '0' * CURRENCY_PRECISION[currency]),
            rounding=ROUND_DOWN).normalize())
Beispiel #2
0
def satoshi_to_currency_cached(num, currency):
    """Converts a given number of satoshi to another currency as a formatted
    string rounded down to the proper number of decimal places. Results are
    cached using a decorator for 60 seconds by default. See :ref:`cache times`.

    :param num: The number of satoshi.
    :type num: ``int``
    :param currency: One of the :ref:`supported currencies`.
    :type currency: ``str``
    :rtype: ``str``
    """
    return '{:f}'.format(
        Decimal(num /
                Decimal(currency_to_satoshi_cached(1, currency))).quantize(
                    Decimal('0.' + '0' * CURRENCY_PRECISION[currency]),
                    rounding=ROUND_DOWN).normalize())
Beispiel #3
0
    def wrapper(amount, currency):
        now = time()

        cached_rate = cached_rates[currency]

        if not cached_rate.satoshis or now - cached_rate.last_update > DEFAULT_CACHE_TIME:
            cached_rate.satoshis = EXCHANGE_RATES[currency]()
            cached_rate.last_update = now

        return int(cached_rate.satoshis * Decimal(amount))
Beispiel #4
0
def currency_to_satoshi(amount, currency):
    """Converts a given amount of currency to the equivalent number of
    satoshi. The amount can be either an int, float, or string as long as
    it is a valid input to :py:class:`decimal.Decimal`.

    :param amount: The quantity of currency.
    :param currency: One of the :ref:`supported currencies`.
    :type currency: ``str``
    :rtype: ``int``
    """
    satoshis = EXCHANGE_RATES[currency]()
    return int(satoshis * Decimal(amount))
Beispiel #5
0
 def test_zero_places(self):
     assert Decimal(satoshi_to_currency(100000,
                                        'jpy')).as_tuple().exponent == 0
Beispiel #6
0
 def currency_to_satoshi(cls, currency):
     headers = {"x-accept-version": "2.0.0", "Accept": "application/json"}
     r = requests.get(cls.SINGLE_RATE + currency, headers=headers)
     r.raise_for_status()
     rate = r.json()['data']['rate']
     return int(ONE / Decimal(rate) * BTC)
Beispiel #7
0
 def currency_to_satoshi(cls, currency):
     r = requests.get(cls.SINGLE_RATE.format(currency))
     r.raise_for_status()
     rate = r.text
     return int(Decimal(rate) * BTC)
Beispiel #8
0
def test_decimal():
    assert Decimal(0.8) == Decimal('0.8')
Beispiel #9
0
from collections import OrderedDict
from decimal import ROUND_DOWN
from functools import wraps
from time import time

import requests

from bit.constants import SATOSHI, uBTC, mBTC, BTC
from bit.utils import Decimal

DEFAULT_CACHE_TIME = 60

# Constant for use in deriving exchange
# rates when given in terms of 1 BTC.
ONE = Decimal(1)

SUPPORTED_CURRENCIES = OrderedDict([('satoshi', 'Satoshi'),
                                    ('ubtc', 'Microbitcoin'),
                                    ('mbtc', 'Millibitcoin'),
                                    ('btc', 'Bitcoin'),
                                    ('usd', 'United States Dollar'),
                                    ('eur', 'Eurozone Euro'),
                                    ('gbp', 'Pound Sterling'),
                                    ('jpy', 'Japanese Yen'),
                                    ('cny', 'Chinese Yuan'),
                                    ('cad', 'Canadian Dollar'),
                                    ('aud', 'Australian Dollar'),
                                    ('nzd', 'New Zealand Dollar'),
                                    ('rub', 'Russian Ruble'),
                                    ('brl', 'Brazilian Real'),
                                    ('chf', 'Swiss Franc'),
Beispiel #10
0
 def currency_to_satoshi(cls, currency):
     r = requests.get(cls.SINGLE_RATE + currency)
     r.raise_for_status()
     rate = r.json()['rate']
     return int(ONE / Decimal(rate) * BTC)
Beispiel #11
0
 def currency_to_satoshi(cls, currency: str) -> int:
     rate = requests.get(cls.SINGLE_RATE.format(currency)).json()["price"]
     return int(ONE / Decimal(rate) * PPC)
Beispiel #12
0
 def currency_to_satoshi(cls, currency):
     rate = requests.get(cls.SINGLE_RATE.format(currency)).json()
     return int(Decimal(rate) * BTC)
Beispiel #13
0
 def currency_to_satoshi(cls, currency):
     rate = requests.get(cls.SINGLE_RATE + currency).json()['rate']
     return int(ONE / Decimal(rate) * BTC)
Beispiel #14
0
 def currency_to_satoshi(cls, currency):
     headers = {"accept": "application/json"}
     r = requests.get(cls.SINGLE_RATE + currency, headers=headers)
     r.raise_for_status()
     rate = r.json()['sugarchain']['usd']
     return int(ONE / Decimal(rate) * SUGAR)