Пример #1
0
    def __init__(self, order, HLD_instance=None, **kwargs):

        self.HLD = HLD_instance or shared_HLD_instance()

        if isinstance(order, dict) and "price" in order:
            super(FilledOrder, self).__init__(
                order.get("price"),
                base=kwargs.get("base"),
                quote=kwargs.get("quote"),
            )
            self["time"] = formatTimeString(order["date"])
            self["side1_account_id"] = order["side1_account_id"]
            self["side2_account_id"] = order["side2_account_id"]

        elif isinstance(order, dict):
            # filled orders from account history
            if "op" in order:
                order = order["op"]
            base_asset = kwargs.get("base_asset", order["receives"]["asset_id"])
            super(FilledOrder, self).__init__(
                order,
                base_asset=base_asset,
            )
            if "time" in order:
                self["time"] = formatTimeString(order["time"])
            if "account_id" in order:
                self["account_id"] = order["account_id"]

        else:
            raise ValueError("Couldn't parse 'Price'.")
Пример #2
0
 def __init__(self, tx={}, proposer=None, HLD_instance=None):
     self.HLD = HLD_instance or shared_HLD_instance()
     self.clear()
     if not isinstance(tx, dict):
         raise ValueError("Invalid TransactionBuilder Format")
     super(TransactionBuilder, self).__init__(tx)
     # Do we need to reconstruct the tx from self.ops?
     self._require_reconstruction = True
Пример #3
0
    def __init__(self, HLD_instance=None):
        self.HLD = HLD_instance or shared_HLD_instance()
        self.schedule = self.HLD.rpc.get_object("2.12.0").get(
            "current_shuffled_witnesses", [])

        super(Witnesses, self).__init__([
            Witness(x, lazy=True, HLD_instance=self.HLD) for x in self.schedule
        ])
Пример #4
0
    def __init__(self, account_name=None, HLD_instance=None):
        self.HLD = HLD_instance or shared_HLD_instance()
        if account_name:
            account = Account(account_name, HLD_instance=self.HLD)
            self.workers = self.HLD.rpc.get_workers_by_account(account["id"])
        else:
            self.workers = self.HLD.rpc.get_all_workers()

        super(Workers, self).__init__([
            Worker(x, lazy=True, HLD_instance=self.HLD) for x in self.workers
        ])
Пример #5
0
    def __init__(
        self,
        accounts=[],
        markets=[],
        objects=[],
        on_tx=None,
        on_object=None,
        on_block=None,
        on_account=None,
        on_market=None,
        HLD_instance=None,
    ):
        # Events
        super(Notify, self).__init__()
        self.events = Events()

        # HLD instance
        self.HLD = HLD_instance or shared_HLD_instance()

        # Markets
        market_ids = []
        for market_name in markets:
            market = Market(market_name, HLD_instance=self.HLD)
            market_ids.append([
                market["base"]["id"],
                market["quote"]["id"],
            ])

        # Callbacks
        if on_tx:
            self.on_tx += on_tx
        if on_object:
            self.on_object += on_object
        if on_block:
            self.on_block += on_block
        if on_account:
            self.on_account += on_account
        if on_market:
            self.on_market += on_market

        # Open the websocket
        self.websocket = HLDWebsocket(
            urls=self.HLD.rpc.urls,
            user=self.HLD.rpc.user,
            password=self.HLD.rpc.password,
            accounts=accounts,
            markets=market_ids,
            objects=objects,
            on_tx=on_tx,
            on_object=on_object,
            on_block=on_block,
            on_account=self.process_account,
            on_market=self.process_market,
        )
Пример #6
0
    def __init__(
        self,
        from_account=None,
        to_account=None,
        HLD_instance=None
    ):

        self.HLD = HLD_instance or shared_HLD_instance()

        if to_account:
            self.to_account = Account(to_account, HLD_instance=self.HLD)
        if from_account:
            self.from_account = Account(from_account, HLD_instance=self.HLD)
Пример #7
0
    def __init__(self, call, HLD_instance=None, **kwargs):

        self.HLD = HLD_instance or shared_HLD_instance()

        if isinstance(call, dict) and "call_price" in call:
            super(UpdateCallOrder, self).__init__(
                call.get("call_price"),
                base=call["call_price"].get("base"),
                quote=call["call_price"].get("quote"),
            )

        else:
            raise ValueError("Couldn't parse 'Call'.")
Пример #8
0
    def __init__(self,
                 proposer,
                 proposal_expiration=None,
                 proposal_review=None,
                 parent=None,
                 HLD_instance=None,
                 *args,
                 **kwargs):
        self.HLD = HLD_instance or shared_HLD_instance()

        self.set_expiration(proposal_expiration or 2 * 24 * 60 * 60)
        self.set_review(proposal_review)
        self.set_parent(parent)
        self.set_proposer(proposer)
        self.ops = list()
Пример #9
0
    def __init__(
        self,
        data,
        HLD_instance=None
    ):
        self.HLD = HLD_instance or shared_HLD_instance()

        if isinstance(data, dict):
            super(AccountUpdate, self).__init__(data)
        else:
            account = Account(data, HLD_instance=self.HLD)
            update = self.HLD.rpc.get_objects([
                "2.6.%s" % (account["id"].split(".")[2])
            ])[0]
            super(AccountUpdate, self).__init__(update)
Пример #10
0
    def __init__(self,
                 data,
                 klass=None,
                 space_id=1,
                 object_id=None,
                 lazy=False,
                 use_cache=True,
                 HLD_instance=None,
                 *args,
                 **kwargs):
        self.HLD = HLD_instance or shared_HLD_instance()
        self.cached = False
        self.identifier = None

        # We don't read lists, sets, or tuples
        if isinstance(data, (list, set, tuple)):
            raise ValueError(
                "Cannot interpret lists! Please load elements individually!")

        if klass and isinstance(data, klass):
            self.identifier = data.get("id")
            super().__init__(data)
        elif isinstance(data, dict):
            self.identifier = data.get("id")
            super().__init__(data)
        elif isinstance(data, int):
            # This is only for block number bascially
            self.identifier = data
            if not lazy and not self.cached:
                self.refresh()
            # make sure to store the blocknumber for caching
            self["id"] = str(data)
            # Set identifier again as it is overwritten in super() in refresh()
            self.identifier = data
        else:
            self.identifier = data
            if self.test_valid_objectid(self.identifier):
                # Here we assume we deal with an id
                self.testid(self.identifier)
            if self.iscached(data):
                super().__init__(self.getcache(data))
            elif not lazy and not self.cached:
                self.refresh()

        if use_cache and not lazy:
            self.cache()
            self.cached = True
Пример #11
0
    def __init__(self,
                 *args,
                 base=None,
                 quote=None,
                 HLD_instance=None,
                 **kwargs):
        self.HLD = HLD_instance or shared_HLD_instance()

        if len(args) == 1 and isinstance(args[0], str):
            quote_symbol, base_symbol = assets_from_string(args[0])
            quote = Asset(quote_symbol, HLD_instance=self.HLD)
            base = Asset(base_symbol, HLD_instance=self.HLD)
            super(Market, self).__init__({"base": base, "quote": quote})
        elif len(args) == 0 and base and quote:
            super(Market, self).__init__({"base": base, "quote": quote})
        elif len(args) == 2 and not base and not quote:
            super(Market, self).__init__({"base": args[1], "quote": args[0]})
        else:
            raise ValueError("Unknown Market Format: %s" % str(args))
Пример #12
0
    def __init__(self, *args, HLD_instance=None, **kwargs):

        self.HLD = HLD_instance or shared_HLD_instance()

        if (
            len(args) == 1 and
            isinstance(args[0], str)
        ):
            order = self.HLD.rpc.get_objects([args[0]])[0]
            if order:
                super(Order, self).__init__(order["sell_price"])
                self["seller"] = order["seller"]
                self["id"] = order.get("id")
                self["deleted"] = False
            else:
                self["id"] = args[0]
                self["deleted"] = True
                self["quote"] = None
                self["base"] = None
                self["price"] = None
                self["seller"] = None
        elif (
            isinstance(args[0], dict) and
            "sell_price" in args[0]
        ):
            super(Order, self).__init__(args[0]["sell_price"])
            self["id"] = args[0].get("id")
        elif (
            isinstance(args[0], dict) and
            "min_to_receive" in args[0] and
            "amount_to_sell" in args[0]
        ):
            super(Order, self).__init__(
                Amount(args[0]["min_to_receive"], HLD_instance=self.HLD),
                Amount(args[0]["amount_to_sell"], HLD_instance=self.HLD),
            )
            self["id"] = args[0].get("id")
        elif isinstance(args[0], Amount) and isinstance(args[1], Amount):
            super(Order, self).__init__(*args, **kwargs)
        else:
            raise ValueError("Unkown format to load Order")
Пример #13
0
 def __init__(self, feed, HLD_instance=None):
     self.HLD = HLD_instance or shared_HLD_instance()
     if len(feed) == 2:
         super(PriceFeed, self).__init__({
             "producer": Account(
                 feed[0],
                 lazy=True,
                 HLD_instance=self.HLD
             ),
             "date": parse_time(feed[1][0]),
             "maintenance_collateral_ratio": feed[1][1]["maintenance_collateral_ratio"],
             "maximum_short_squeeze_ratio": feed[1][1]["maximum_short_squeeze_ratio"],
             "settlement_price": Price(feed[1][1]["settlement_price"]),
             "core_exchange_rate": Price(feed[1][1]["core_exchange_rate"])
         })
     else:
         super(PriceFeed, self).__init__({
             "maintenance_collateral_ratio": feed["maintenance_collateral_ratio"],
             "maximum_short_squeeze_ratio": feed["maximum_short_squeeze_ratio"],
             "settlement_price": Price(feed["settlement_price"]),
             "core_exchange_rate": Price(feed["core_exchange_rate"])
         })
Пример #14
0
 def __init__(self, message, HLD_instance=None):
     self.HLD = HLD_instance or shared_HLD_instance()
     self.message = message
Пример #15
0
 def __init__(self, HLD_instance=None):
     self.HLD = HLD_instance or shared_HLD_instance()
Пример #16
0
    def __init__(self, *args, amount=None, asset=None, HLD_instance=None):
        self["asset"] = {}

        self.HLD = HLD_instance or shared_HLD_instance()

        if len(args) == 1 and isinstance(args[0], Amount):
            # Copy Asset object
            self["amount"] = args[0]["amount"]
            self["symbol"] = args[0]["symbol"]
            self["asset"] = args[0]["asset"]

        elif len(args) == 1 and isinstance(args[0], str):
            self["amount"], self["symbol"] = args[0].split(" ")
            self["asset"] = Asset(self["symbol"], HLD_instance=self.HLD)

        elif (len(args) == 1 and isinstance(args[0], dict)
              and "amount" in args[0] and "asset_id" in args[0]):
            self["asset"] = Asset(args[0]["asset_id"], HLD_instance=self.HLD)
            self["symbol"] = self["asset"]["symbol"]
            self["amount"] = int(
                args[0]["amount"]) / 10**self["asset"]["precision"]

        elif (len(args) == 1 and isinstance(args[0], dict)
              and "amount" in args[0] and "asset" in args[0]):
            self["asset"] = Asset(args[0]["asset"], HLD_instance=self.HLD)
            self["symbol"] = self["asset"]["symbol"]
            self["amount"] = int(
                args[0]["amount"]) / 10**self["asset"]["precision"]

        elif len(args) == 2 and isinstance(args[1], Asset):
            self["amount"] = args[0]
            self["symbol"] = args[1]["symbol"]
            self["asset"] = args[1]

        elif len(args) == 2 and isinstance(args[1], str):
            self["amount"] = args[0]
            self["asset"] = Asset(args[1], HLD_instance=self.HLD)
            self["symbol"] = self["asset"]["symbol"]

        elif isinstance(amount,
                        (int, float)) and asset and isinstance(asset, Asset):
            self["amount"] = amount
            self["asset"] = asset
            self["symbol"] = self["asset"]["symbol"]

        elif isinstance(amount,
                        (int, float)) and asset and isinstance(asset, dict):
            self["amount"] = amount
            self["asset"] = asset
            self["symbol"] = self["asset"]["symbol"]

        elif isinstance(amount,
                        (int, float)) and asset and isinstance(asset, str):
            self["amount"] = amount
            self["asset"] = Asset(asset, HLD_instance=self.HLD)
            self["symbol"] = asset

        else:
            raise ValueError

        # make sure amount is a float
        self["amount"] = float(self["amount"])
Пример #17
0
    def __init__(
        self,
        *args,
        base=None,
        quote=None,
        base_asset=None,  # to identify sell/buy
        HLD_instance=None
    ):

        self.HLD = HLD_instance or shared_HLD_instance()

        if (len(args) == 1 and isinstance(args[0], str) and not base and not quote):
            import re
            price, assets = args[0].split(" ")
            base_symbol, quote_symbol = assets_from_string(assets)
            base = Asset(base_symbol, HLD_instance=self.HLD)
            quote = Asset(quote_symbol, HLD_instance=self.HLD)
            frac = Fraction(float(price)).limit_denominator(10 ** base["precision"])
            self["quote"] = Amount(amount=frac.denominator, asset=quote, HLD_instance=self.HLD)
            self["base"] = Amount(amount=frac.numerator, asset=base, HLD_instance=self.HLD)

        elif (len(args) == 1 and isinstance(args[0], dict) and
                "base" in args[0] and
                "quote" in args[0]):
            assert "price" not in args[0], "You cannot provide a 'price' this way"
            # Regular 'price' objects according to HLD-core
            base_id = args[0]["base"]["asset_id"]
            if args[0]["base"]["asset_id"] == base_id:
                self["base"] = Amount(args[0]["base"], HLD_instance=self.HLD)
                self["quote"] = Amount(args[0]["quote"], HLD_instance=self.HLD)
            else:
                self["quote"] = Amount(args[0]["base"], HLD_instance=self.HLD)
                self["base"] = Amount(args[0]["quote"], HLD_instance=self.HLD)

        elif len(args) == 1 and isinstance(args[0], dict) and "receives" in args[0]:
            # Filled order
            assert base_asset, "Need a 'base_asset' asset"
            base_asset = Asset(base_asset, HLD_instance=self.HLD)
            if args[0]["receives"]["asset_id"] == base_asset["id"]:
                # If the seller received "base" in a quote_base market, than
                # it has been a sell order of quote
                self["base"] = Amount(args[0]["receives"], HLD_instance=self.HLD)
                self["quote"] = Amount(args[0]["pays"], HLD_instance=self.HLD)
                self["type"] = "sell"
            else:
                # buy order
                self["base"] = Amount(args[0]["pays"], HLD_instance=self.HLD)
                self["quote"] = Amount(args[0]["receives"], HLD_instance=self.HLD)
                self["type"] = "buy"

        elif len(args) == 1 and (isinstance(base, Asset) and isinstance(quote, Asset)):
            price = args[0]
            frac = Fraction(float(price)).limit_denominator(10 ** base["precision"])
            self["quote"] = Amount(amount=frac.denominator, asset=quote, HLD_instance=self.HLD)
            self["base"] = Amount(amount=frac.numerator, asset=base, HLD_instance=self.HLD)

        elif (len(args) == 1 and isinstance(base, str) and isinstance(quote, str)):
            price = args[0]
            base = Asset(base, HLD_instance=self.HLD)
            quote = Asset(quote, HLD_instance=self.HLD)
            frac = Fraction(float(price)).limit_denominator(10 ** base["precision"])
            self["quote"] = Amount(amount=frac.denominator, asset=quote, HLD_instance=self.HLD)
            self["base"] = Amount(amount=frac.numerator, asset=base, HLD_instance=self.HLD)

        elif (len(args) == 0 and isinstance(base, str) and isinstance(quote, str)):
            self["quote"] = Amount(quote, HLD_instance=self.HLD)
            self["base"] = Amount(base, HLD_instance=self.HLD)

        # len(args) > 1
        elif len(args) == 2 and isinstance(args[0], str) and isinstance(args[1], str):
            self["base"] = Amount(args[1], HLD_instance=self.HLD)
            self["quote"] = Amount(args[0], HLD_instance=self.HLD)

        elif len(args) == 2 and isinstance(args[0], Amount) and isinstance(args[1], Amount):
            self["quote"], self["base"] = args[0], args[1]

        # len(args) == 0
        elif (isinstance(base, Amount) and isinstance(quote, Amount)):
            self["quote"] = quote
            self["base"] = base

        elif (len(args) == 2 and
                (isinstance(args[0], float) or isinstance(args[0], int)) and
                isinstance(args[1], str)):
            import re
            price = args[0]
            base_symbol, quote_symbol = assets_from_string(args[1])
            base = Asset(base_symbol, HLD_instance=self.HLD)
            quote = Asset(quote_symbol, HLD_instance=self.HLD)
            frac = Fraction(float(price)).limit_denominator(10 ** base["precision"])
            self["quote"] = Amount(amount=frac.denominator, asset=quote, HLD_instance=self.HLD)
            self["base"] = Amount(amount=frac.numerator, asset=base, HLD_instance=self.HLD)

        else:
            raise ValueError("Couldn't parse 'Price'.")