Esempio n. 1
0
    def setUp(self):
        # Object creation
        tick = Tick(OrderId(TraderId('0'), OrderNumber(1)),
                    Price(63400, 'BTC'), Quantity(30, 'MC'),
                    Timeout(float("inf")), Timestamp(float("inf")), True)
        tick2 = Tick(OrderId(TraderId('0'), OrderNumber(2)), Price(30, 'MC'),
                     Quantity(30, 'BTC'), Timeout(float("inf")),
                     Timestamp(float("inf")), True)

        self.price_level = PriceLevel('MC')
        self.tick_entry1 = TickEntry(tick, self.price_level)
        self.tick_entry2 = TickEntry(tick, self.price_level)
        self.tick_entry3 = TickEntry(tick, self.price_level)
        self.tick_entry4 = TickEntry(tick, self.price_level)
        self.tick_entry5 = TickEntry(tick2, self.price_level)
Esempio n. 2
0
 def setUp(self):
     # Object creation
     self.timestamp_now = Timestamp.now()
     self.tick = Tick(OrderId(TraderId('0'), OrderNumber(1)),
                      Price(63400, 'BTC'), Quantity(30, 'MC'), Timeout(30),
                      self.timestamp_now, True)
     self.tick2 = Tick(OrderId(TraderId('0'), OrderNumber(2)),
                       Price(63400, 'BTC'), Quantity(30, 'MC'),
                       Timeout(0.0), Timestamp(0.0), False)
     self.order_ask = Order(OrderId(TraderId('0'), OrderNumber(2)),
                            Price(63400, 'BTC'), Quantity(30, 'MC'),
                            Timeout(0.0), Timestamp(0.0), True)
     self.order_bid = Order(OrderId(TraderId('0'), OrderNumber(2)),
                            Price(63400, 'BTC'), Quantity(30, 'MC'),
                            Timeout(0.0), Timestamp(0.0), False)
Esempio n. 3
0
    def setUp(self, annotate=True):
        yield super(TickEntryTestSuite, self).setUp(annotate=annotate)

        # Object creation
        tick = Tick(OrderId(TraderId('0'), OrderNumber(1)),
                    AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB')),
                    Timeout(0), Timestamp(0.0), True)
        tick2 = Tick(
            OrderId(TraderId('0'), OrderNumber(2)),
            AssetPair(AssetAmount(63400, 'BTC'), AssetAmount(30, 'MB')),
            Timeout(100), Timestamp.now(), True)

        self.price_level = PriceLevel(Price(100, 'MB', 'BTC'))
        self.tick_entry = TickEntry(tick, self.price_level)
        self.tick_entry2 = TickEntry(tick2, self.price_level)
Esempio n. 4
0
 def test_to_network(self):
     # Test for to network
     self.assertEquals(
         (MessageId(TraderId('0'), MessageNumber(1)), self.tick.timestamp,
          OrderNumber(1), Price(63400, 'BTC'), Quantity(
              30, 'MC'), self.tick.timeout),
         self.tick.to_network(MessageId(TraderId('0'), MessageNumber(1))))
Esempio n. 5
0
 def setUp(self):
     # Object creation
     self.offer_payload = OfferPayload.Implementation(
         MetaObject(), TraderId('0'), MessageNumber('message_number'),
         OrderNumber(1), Price(63400, 'BTC'), Quantity(30, 'MC'),
         Timeout(1470004447.117), Timestamp(1462224447.117), 'a', 'b',
         Ttl(2), "1.1.1.1", 1)
Esempio n. 6
0
    def render_POST(self, request):
        """
        .. http:get:: /market/orders/(string:order_number)/cancel

        A POST request to this endpoint will cancel a specific order.

            **Example request**:

            .. sourcecode:: none

                curl -X GET http://localhost:8085/market/orders/3/cancel

            **Example response**:

            .. sourcecode:: javascript

                {
                    "cancelled": True
                }
        """
        market_community = self.get_market_community()
        order_id = OrderId(TraderId(market_community.mid), OrderNumber(int(self.order_number)))
        order = market_community.order_manager.order_repository.find_by_id(order_id)

        if not order:
            request.setResponseCode(http.NOT_FOUND)
            return json.dumps({"error": "order not found"})

        if order.status != "open" and order.status != "unverified":
            request.setResponseCode(http.BAD_REQUEST)
            return json.dumps({"error": "only open and unverified orders can be cancelled"})

        market_community.cancel_order(order_id)

        return json.dumps({"cancelled": True})
Esempio n. 7
0
    def test_from_network(self):
        # Test for from network
        now = Timestamp.now()
        data = Bid.from_network(
            type(
                'Data', (object, ), {
                    "trader_id": TraderId('0'),
                    "order_number": OrderNumber(2),
                    "message_number": MessageNumber('message_number'),
                    "price": Price(63400, 'BTC'),
                    "quantity": Quantity(40, 'MC'),
                    "timeout": Timeout(30),
                    "timestamp": now,
                    "public_key": 'a',
                    "signature": 'b'
                }))

        self.assertEquals(
            MessageId(TraderId('0'), MessageNumber('message_number')),
            data.message_id)
        self.assertEquals(Price(63400, 'BTC'), data.price)
        self.assertEquals(Quantity(40, 'MC'), data.quantity)
        self.assertEquals(float(Timeout(30)), float(data.timeout))
        self.assertEquals(now, data.timestamp)
        self.assertEquals('a', data._public_key)
        self.assertEquals('b', data._signature)
Esempio n. 8
0
 def test_to_network(self):
     # Test for to network
     self.assertEquals(
         (TraderId('0'), MessageNumber('message_number'), OrderNumber(1),
          Price(63400, 'BTC'), Quantity(
              30, 'MC'), self.tick.timeout, self.tick.timestamp, 'a', 'b'),
         self.tick.to_network())
Esempio n. 9
0
 def test_properties(self):
     # Test for properties
     self.assertEquals(MessageNumber('message_number'),
                       self.declined_trade_payload.message_number)
     self.assertEquals(OrderNumber(1),
                       self.declined_trade_payload.order_number)
     self.assertEquals(OrderNumber(2),
                       self.declined_trade_payload.recipient_order_number)
     self.assertEquals(TraderId('1'),
                       self.declined_trade_payload.recipient_trader_id)
     self.assertEquals(Timestamp(1462224447.117),
                       self.declined_trade_payload.timestamp)
     self.assertEquals(1234, self.declined_trade_payload.proposal_id)
     self.assertEquals(TraderId('0'), self.declined_trade_payload.trader_id)
     self.assertEquals(DeclinedTradeReason.ORDER_COMPLETED,
                       self.declined_trade_payload.decline_reason)
Esempio n. 10
0
    def test_has_acceptable_price(self):
        """
        Test the acceptable price method
        """
        order = Order(OrderId(TraderId("0"), OrderNumber(3)),
                      AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB')),
                      Timeout(5000), self.order_timestamp, True)

        pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB'))
        self.assertTrue(order.has_acceptable_price(pair))

        pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(15, 'MB'))
        self.assertFalse(order.has_acceptable_price(pair))

        pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(60, 'MB'))
        self.assertTrue(order.has_acceptable_price(pair))

        order._is_ask = False

        pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB'))
        self.assertTrue(order.has_acceptable_price(pair))

        pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(15, 'MB'))
        self.assertTrue(order.has_acceptable_price(pair))

        pair = AssetPair(AssetAmount(60, 'BTC'), AssetAmount(60, 'MB'))
        self.assertFalse(order.has_acceptable_price(pair))
Esempio n. 11
0
    def setUp(self):
        yield super(TestMarketBlock, self).setUp()

        self.ask = Ask(OrderId(TraderId(b'0' * 40), OrderNumber(1)),
                       AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp(0.0), True)
        self.bid = Ask(OrderId(TraderId(b'1' * 40), OrderNumber(1)),
                       AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp(0.0), False)
        self.transaction = Transaction(TransactionId(TraderId(b'0' * 40), TransactionNumber(1)),
                                       AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')),
                                       OrderId(TraderId(b'0' * 40), OrderNumber(1)),
                                       OrderId(TraderId(b'1' * 40), OrderNumber(1)), Timestamp(0.0))

        ask_tx = self.ask.to_block_dict()
        bid_tx = self.bid.to_block_dict()

        self.tick_block = MarketBlock()
        self.tick_block.type = 'ask'
        self.tick_block.transaction = {'tick': ask_tx}

        self.cancel_block = MarketBlock()
        self.cancel_block.type = 'cancel_order'
        self.cancel_block.transaction = {'trader_id': 'a' * 40, 'order_number': 1}

        self.tx_block = MarketBlock()
        self.tx_block.type = 'tx_init'
        self.tx_block.transaction = {
            'ask': ask_tx,
            'bid': bid_tx,
            'tx': self.transaction.to_dictionary()
        }

        payment = {
            'trader_id': 'a' * 40,
            'transaction_number': 3,
            'transferred': {
                'amount': 3,
                'type': 'BTC'
            },
            'payment_id': 'a',
            'address_from': 'a',
            'address_to': 'b',
            'timestamp': 1234.3,
            'success': True
        }
        self.payment_block = MarketBlock()
        self.payment_block.type = 'tx_payment'
        self.payment_block.transaction = {'payment': payment}
Esempio n. 12
0
 def test_get_specific_order(self):
     """
     Test the retrieval of a specific order
     """
     order_id = OrderId(TraderId(b'3'), OrderNumber(4))
     self.assertIsNone(self.database.get_order(order_id))
     self.database.add_order(self.order1)
     self.assertIsNotNone(self.database.get_order(order_id))
Esempio n. 13
0
 def create_ask(self, amount1, amount2):
     """
     Create an ask with a specific price and quantity
     """
     new_ask = Ask(OrderId(TraderId(b'2'), OrderNumber(self.ask_count)),
                   AssetPair(AssetAmount(amount1, 'BTC'), AssetAmount(amount2, 'MB')), Timeout(30), Timestamp.now())
     self.ask_count += 1
     return new_ask
Esempio n. 14
0
 def create_bid(self, amount1, amount2):
     """
     Create a bid with a specific price and quantity
     """
     new_bid = Bid(OrderId(TraderId(b'3'), OrderNumber(self.bid_count)),
                   AssetPair(AssetAmount(amount1, 'BTC'), AssetAmount(amount2, 'MB')), Timeout(30), Timestamp.now())
     self.bid_count += 1
     return new_bid
Esempio n. 15
0
    def test_add_trade(self):
        """
        Test the add trade method of an order
        """
        self.order.reserve_quantity_for_tick(
            OrderId(TraderId('5'), OrderNumber(1)), Quantity(10, 'MC'))
        self.assertEquals(self.order.traded_quantity, Quantity(0, 'MC'))
        self.order.add_trade(OrderId(TraderId('5'), OrderNumber(1)),
                             Quantity(10, 'MC'))
        self.assertEquals(self.order.traded_quantity, Quantity(10, 'MC'))

        self.order.reserve_quantity_for_tick(
            OrderId(TraderId('6'), OrderNumber(1)), Quantity(20, 'MC'))
        self.order.add_trade(OrderId(TraderId('6'), OrderNumber(1)),
                             Quantity(20, 'MC'))
        self.assertTrue(self.order.is_complete())
        self.assertFalse(self.order.cancelled)
Esempio n. 16
0
 def setUp(self):
     # Object creation
     self.memory_order_repository = MemoryOrderRepository("0")
     self.order_id = OrderId(TraderId(b"0"), OrderNumber(1))
     self.order = Order(self.order_id, AssetPair(AssetAmount(100, 'BTC'), AssetAmount(30, 'MC')),
                        Timeout(0), Timestamp(10.0), False)
     self.order2 = Order(self.order_id, AssetPair(AssetAmount(1000, 'BTC'), AssetAmount(30, 'MC')),
                         Timeout(0), Timestamp(10.0), False)
Esempio n. 17
0
    def from_database(cls, data):
        trader_id, order_number, price, price_type, quantity, quantity_type, timeout, timestamp,\
        is_ask, block_hash = data

        tick_cls = Ask if is_ask else Bid
        order_id = OrderId(TraderId(str(trader_id)), OrderNumber(order_number))
        return tick_cls(order_id, Price(price, str(price_type)), Quantity(quantity, str(quantity_type)),
                        Timeout(timeout), Timestamp(timestamp), block_hash=str(block_hash))
Esempio n. 18
0
    def add_transaction_and_payment(self):
        """
        Add a transaction and a payment to the market
        """
        proposed_trade = Trade.propose(MessageId(TraderId('0'), MessageNumber('message_number')),
                                       OrderId(TraderId('0'), OrderNumber(1)),
                                       OrderId(TraderId('1'), OrderNumber(2)),
                                       Price(63400, 'BTC'), Quantity(30, 'MC'), Timestamp(1462224447.117))
        transaction = self.session.lm.market_community.transaction_manager.create_from_proposed_trade(proposed_trade)

        payment = Payment(MessageId(TraderId("0"), MessageNumber("1")), transaction.transaction_id,
                          Quantity(0, 'MC'), Price(20, 'BTC'), WalletAddress('a'), WalletAddress('b'),
                          PaymentId('aaa'), Timestamp(4.0), True)
        transaction.add_payment(payment)
        self.session.lm.market_community.transaction_manager.transaction_repository.update(transaction)

        return transaction
Esempio n. 19
0
 def from_unpack_list(cls, trader_id, timestamp, order_number,
                      asset1_amount, asset1_type, asset2_amount,
                      asset2_type, timeout, traded, identifier):
     return OrderStatusResponsePayload(
         TraderId(trader_id), Timestamp(timestamp),
         OrderNumber(order_number),
         AssetPair(AssetAmount(asset1_amount, asset1_type),
                   AssetAmount(asset2_amount, asset2_type)),
         Timeout(timeout), traded, identifier)
Esempio n. 20
0
    def setUp(self):
        yield super(MatchingEngineTestSuite, self).setUp()
        # Object creation
        self.ask = Ask(OrderId(TraderId(b'2'), OrderNumber(1)),
                       AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp.now())
        self.bid = Bid(OrderId(TraderId(b'4'), OrderNumber(2)),
                       AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')), Timeout(30), Timestamp.now())
        self.ask_order = Order(OrderId(TraderId(b'5'), OrderNumber(3)),
                               AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')),
                               Timeout(30), Timestamp.now(), True)
        self.bid_order = Order(OrderId(TraderId(b'6'), OrderNumber(4)),
                               AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')),
                               Timeout(30), Timestamp.now(), False)
        self.order_book = OrderBook()
        self.matching_engine = MatchingEngine(PriceTimeStrategy(self.order_book))

        self.ask_count = 2
        self.bid_count = 2
Esempio n. 21
0
 def get_tick_block(return_ask, pair):
     tick_cls = Ask if return_ask else Bid
     ask = tick_cls(OrderId(TraderId('0' * 40), OrderNumber(1)), pair, Timeout(3600), Timestamp.now(), return_ask)
     ask_tx = ask.to_block_dict()
     ask_tx["address"], ask_tx["port"] = "127.0.0.1", 1337
     tick_block = MarketBlock()
     tick_block.type = 'ask' if return_ask else 'bid'
     tick_block.transaction = {'tick': ask_tx, 'version': MarketCommunity.PROTOCOL_VERSION}
     return tick_block
Esempio n. 22
0
    def test_encode_decode_cancel_order(self):
        """
        Test encoding and decoding of a cancel order
        """
        message = MockObject()
        meta_msg = self.market_community.get_meta_message(u"cancel-order")

        cancel_order_payload = CancelOrderPayload.Implementation(meta_msg, TraderId('abc'), MessageNumber('3'),
                                                                 Timestamp.now(), OrderNumber(4), Ttl(2))
        message.payload = cancel_order_payload
        packet, = self.conversion._encode_cancel_order(message)
        self.assertTrue(packet)

        _, decoded = self.conversion._decode_cancel_order(self.get_placeholder_msg(u"cancel-order"), 0, packet)

        self.assertTrue(decoded)
        self.assertEqual(decoded.order_number, OrderNumber(4))
        self.assertEqual(int(decoded.ttl), 2)
Esempio n. 23
0
 def get_reserved_ticks(self, order_id):
     """
     Get all reserved ticks for a specific order.
     """
     db_results = self.execute(
         u"SELECT * FROM orders_reserved_ticks WHERE trader_id = ? AND order_number = ?",
         (unicode(order_id.trader_id), unicode(order_id.order_number)))
     return [(OrderId(TraderId(str(data[2])), OrderNumber(data[3])),
              Quantity(data[4], str(data[5]))) for data in db_results]
Esempio n. 24
0
 def setUp(self):
     # Object creation
     self.transaction_id = TransactionId(TraderId("0"),
                                         TransactionNumber(1))
     self.transaction = Transaction(
         self.transaction_id,
         AssetPair(AssetAmount(100, 'BTC'), AssetAmount(100, 'MB')),
         OrderId(TraderId('3'), OrderNumber(2)),
         OrderId(TraderId('2'), OrderNumber(1)), Timestamp(0.0))
     self.proposed_trade = Trade.propose(
         TraderId('0'), OrderId(TraderId('0'), OrderNumber(2)),
         OrderId(TraderId('1'), OrderNumber(3)),
         AssetPair(AssetAmount(100, 'BTC'), AssetAmount(100, 'MB')),
         Timestamp(0.0))
     self.payment = Payment(
         TraderId("0"), TransactionId(TraderId('2'), TransactionNumber(2)),
         AssetAmount(3, 'MB'), WalletAddress('a'), WalletAddress('b'),
         PaymentId('aaa'), Timestamp(4.0), True)
Esempio n. 25
0
 def test_create_bid_order(self):
     # Test for create bid order
     bid_order = self.order_manager.create_bid_order(
         AssetPair(AssetAmount(100, 'BTC'), AssetAmount(10, 'MC')), Timeout(0))
     self.assertFalse(bid_order.is_ask())
     self.assertEquals(OrderId(TraderId("0"), OrderNumber(1)), bid_order.order_id)
     self.assertEquals(AssetPair(AssetAmount(100, 'BTC'), AssetAmount(10, 'MC')), bid_order.assets)
     self.assertEquals(100, bid_order.total_quantity)
     self.assertEquals(0, int(bid_order.timeout))
Esempio n. 26
0
 def create_bid(self, price, quantity):
     """
     Create a bid with a specific price and quantity
     """
     new_bid = Bid(OrderId(TraderId('2'), OrderNumber(self.bid_count)),
                   Price(price, 'BTC'), Quantity(quantity, 'MC'),
                   Timeout(30), Timestamp.now())
     self.bid_count += 1
     return new_bid
Esempio n. 27
0
 def setUp(self, annotate=True):
     yield super(MatchingEngineTestSuite, self).setUp(annotate=annotate)
     # Object creation
     self.ask = Ask(OrderId(TraderId('2'), OrderNumber(1)),
                    Price(100, 'BTC'), Quantity(30, 'MC'), Timeout(30),
                    Timestamp.now())
     self.bid = Bid(OrderId(TraderId('4'), OrderNumber(2)),
                    Price(100, 'BTC'), Quantity(30, 'MC'), Timeout(30),
                    Timestamp.now())
     self.ask_order = Order(OrderId(TraderId('5'), OrderNumber(3)),
                            Price(100, 'BTC'), Quantity(30, 'MC'),
                            Timeout(30), Timestamp.now(), True)
     self.bid_order = Order(OrderId(TraderId('6'), OrderNumber(4)),
                            Price(100, 'BTC'), Quantity(30, 'MC'),
                            Timeout(30), Timestamp.now(), False)
     self.order_book = OrderBook()
     self.matching_engine = MatchingEngine(
         PriceTimeStrategy(self.order_book))
Esempio n. 28
0
 def test_properties(self):
     # Test for properties
     self.assertEquals(Price(63400, 'BTC'),
                       self.proposed_trade_payload.price)
     self.assertEquals(Quantity(30, 'MC'),
                       self.proposed_trade_payload.quantity)
     self.assertEquals(MessageNumber('message_number'),
                       self.proposed_trade_payload.message_number)
     self.assertEquals(OrderNumber(1),
                       self.proposed_trade_payload.order_number)
     self.assertEquals(OrderNumber(2),
                       self.proposed_trade_payload.recipient_order_number)
     self.assertEquals(TraderId('1'),
                       self.proposed_trade_payload.recipient_trader_id)
     self.assertEquals(1235, self.proposed_trade_payload.proposal_id)
     self.assertEquals(Timestamp(1462224447.117),
                       self.proposed_trade_payload.timestamp)
     self.assertEquals(TraderId('0'), self.proposed_trade_payload.trader_id)
Esempio n. 29
0
 def test_send_counter_trade(self):
     """
     Test sending a counter trade
     """
     self.market_community.update_ip(TraderId('b'), ('127.0.0.1', 1234))
     counter_trade = CounterTrade(
         MessageId(TraderId('a'), MessageNumber('2')), self.order.order_id,
         OrderId(TraderId('b'), OrderNumber(3)), 1235, Price(3, 'MC'),
         Quantity(4, 'BTC'), Timestamp.now())
     self.market_community.send_counter_trade(counter_trade)
Esempio n. 30
0
 def setUp(self):
     # Object creation
     self.timestamp_now = Timestamp.now()
     self.tick = Tick(
         OrderId(TraderId('0'), OrderNumber(1)),
         AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')),
         Timeout(30), Timestamp(0.0), True)
     self.tick2 = Tick(
         OrderId(TraderId('0'), OrderNumber(2)),
         AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')),
         Timeout(0), Timestamp(0.0), False)
     self.order_ask = Order(
         OrderId(TraderId('0'), OrderNumber(2)),
         AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')),
         Timeout(0), Timestamp(0.0), True)
     self.order_bid = Order(
         OrderId(TraderId('0'), OrderNumber(2)),
         AssetPair(AssetAmount(30, 'BTC'), AssetAmount(30, 'MB')),
         Timeout(0), Timestamp(0.0), False)
Esempio n. 31
0
class OrderNumberTestSuite(unittest.TestCase):
    """Order number test cases."""

    def setUp(self):
        # Object creation
        self.order_number = OrderNumber(1)
        self.order_number2 = OrderNumber(1)
        self.order_number3 = OrderNumber(3)

    def test_init(self):
        # Test for init validation
        with self.assertRaises(ValueError):
            OrderNumber(1.0)

    def test_equality(self):
        # Test for equality
        self.assertEquals(self.order_number, self.order_number)
        self.assertEquals(self.order_number, self.order_number2)
        self.assertFalse(self.order_number == self.order_number3)
        self.assertEquals(NotImplemented, self.order_number.__eq__(""))

    def test_non_equality(self):
        # Test for non equality
        self.assertNotEquals(self.order_number, self.order_number3)

    def test_hashes(self):
        # Test for hashes
        self.assertEquals(self.order_number.__hash__(), self.order_number2.__hash__())
        self.assertNotEqual(self.order_number.__hash__(), self.order_number3.__hash__())

    def test_str(self):
        # Test for string representation
        self.assertEquals('1', str(self.order_number))

    def test_int(self):
        # Test for integer representation
        self.assertEquals(1, int(self.order_number))
Esempio n. 32
0
 def setUp(self):
     # Object creation
     self.order_number = OrderNumber(1)
     self.order_number2 = OrderNumber(1)
     self.order_number3 = OrderNumber(3)