Beispiel #1
0
 def setUp(self):
     # Object creation
     self.proposed_trade = Trade.propose(
         TraderId(b'0' * 20), OrderId(TraderId(b'0' * 20), OrderNumber(1)),
         OrderId(TraderId(b'1' * 20), OrderNumber(2)),
         AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB')),
         Timestamp(1462224447117))
Beispiel #2
0
    def test_from_network(self):
        # Test for from network
        data = Payment.from_network(
            type(
                'Data', (object, ), {
                    "trader_id":
                    TraderId(b'0' * 20),
                    "transaction_id":
                    TransactionId(TraderId(b'2' * 20), TransactionNumber(2)),
                    "transferred_assets":
                    AssetAmount(3, 'BTC'),
                    "address_from":
                    WalletAddress('a'),
                    "address_to":
                    WalletAddress('b'),
                    "payment_id":
                    PaymentId('aaa'),
                    "timestamp":
                    Timestamp(4000),
                    "success":
                    True
                }))

        self.assertEquals(TraderId(b'0' * 20), data.trader_id)
        self.assertEquals(
            TransactionId(TraderId(b'2' * 20), TransactionNumber(2)),
            data.transaction_id)
        self.assertEquals(AssetAmount(3, 'BTC'), data.transferred_assets)
        self.assertEquals(Timestamp(4000), data.timestamp)
        self.assertTrue(data.success)
Beispiel #3
0
    def test_from_network(self):
        # Test for from network
        data = ProposedTrade.from_network(
            type(
                'Data', (object, ), {
                    "trader_id":
                    TraderId(b'0' * 20),
                    "order_number":
                    OrderNumber(1),
                    "recipient_order_id":
                    OrderId(TraderId(b'1' * 20), OrderNumber(2)),
                    "proposal_id":
                    1234,
                    "timestamp":
                    Timestamp(1462224447117),
                    "assets":
                    AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB'))
                }))

        self.assertEquals(TraderId(b'0' * 20), data.trader_id)
        self.assertEquals(OrderId(TraderId(b'0' * 20), OrderNumber(1)),
                          data.order_id)
        self.assertEquals(OrderId(TraderId(b'1' * 20), OrderNumber(2)),
                          data.recipient_order_id)
        self.assertEquals(1234, data.proposal_id)
        self.assertEquals(
            AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB')),
            data.assets)
        self.assertEquals(Timestamp(1462224447117), data.timestamp)
Beispiel #4
0
 def from_unpack_list(cls, trader_id, timestamp, order_number,
                      other_trader_id, other_order_number, decline_reason):
     return DeclineMatchPayload(
         TraderId(trader_id), Timestamp(timestamp),
         OrderNumber(order_number),
         OrderId(TraderId(other_trader_id),
                 OrderNumber(other_order_number)), decline_reason)
Beispiel #5
0
 def from_unpack_list(cls, trader_id, timestamp, order_number, asset1_amount, asset1_type, asset2_amount,
                      asset2_type, timeout, traded, recipient_order_number, match_trader_id, matchmaker_trader_id):
     return MatchPayload(TraderId(trader_id), Timestamp(timestamp), OrderNumber(order_number),
                         AssetPair(AssetAmount(asset1_amount, asset1_type.decode('utf-8')),
                                   AssetAmount(asset2_amount, asset2_type.decode('utf-8'))),
                         Timeout(timeout), traded, OrderNumber(recipient_order_number),
                         TraderId(match_trader_id), TraderId(matchmaker_trader_id))
Beispiel #6
0
    def test_e2e_trade_dht(self):
        """
        Test a full trade with (dummy assets), where both traders are not connected to each other
        """
        yield self.introduce_nodes()

        for node in self.nodes:
            for other in self.nodes:
                if other != node:
                    node.dht.walk_to(other.endpoint.wan_address)
        yield self.deliver_messages()

        # Remove the address from the mid registry from the trading peers
        self.nodes[0].overlay.mid_register.pop(
            TraderId(self.nodes[1].overlay.mid))
        self.nodes[1].overlay.mid_register.pop(
            TraderId(self.nodes[0].overlay.mid))

        for node in self.nodes:
            node.dht.store_peer()
        yield self.deliver_messages()

        yield self.nodes[0].overlay.create_ask(
            AssetPair(AssetAmount(10, 'DUM1'), AssetAmount(10, 'DUM2')), 3600)
        yield self.nodes[1].overlay.create_bid(
            AssetPair(AssetAmount(10, 'DUM1'), AssetAmount(10, 'DUM2')), 3600)

        yield self.sleep(0.5)

        # Verify that the trade has been made
        self.assertTrue(
            list(self.nodes[0].overlay.transaction_manager.find_all()))
        self.assertTrue(
            list(self.nodes[1].overlay.transaction_manager.find_all()))
Beispiel #7
0
 def from_unpack_list(cls, trader_id, timestamp, transaction_trader_id, transaction_number,
                      transferred_amount, transferred_type, address_from, address_to, payment_id, success):
     return PaymentPayload(TraderId(trader_id), Timestamp(timestamp),
                           TransactionId(TraderId(transaction_trader_id), TransactionNumber(transaction_number)),
                           AssetAmount(transferred_amount, transferred_type.decode('utf-8')),
                           WalletAddress(address_from.decode('utf-8')),
                           WalletAddress(address_to.decode('utf-8')), PaymentId(payment_id.decode('utf-8')), success)
Beispiel #8
0
 def get_tx_done_block(ask_amount, bid_amount, traded_amount,
                       ask_total_traded, bid_total_traded):
     ask_pair = AssetPair(AssetAmount(ask_amount, 'BTC'),
                          AssetAmount(ask_amount, 'MB'))
     bid_pair = AssetPair(AssetAmount(bid_amount, 'BTC'),
                          AssetAmount(bid_amount, 'MB'))
     ask = Order(OrderId(TraderId(b'0' * 20), OrderNumber(1)), ask_pair,
                 Timeout(3600), Timestamp.now(), True)
     ask._traded_quantity = ask_total_traded
     bid = Order(OrderId(TraderId(b'1' * 20), OrderNumber(1)), bid_pair,
                 Timeout(3600), Timestamp.now(), False)
     bid._traded_quantity = bid_total_traded
     tx = Transaction(
         TransactionId(TraderId(b'0' * 20), TransactionNumber(1)),
         AssetPair(AssetAmount(traded_amount, 'BTC'),
                   AssetAmount(traded_amount, 'MB')),
         OrderId(TraderId(b'0' * 20), OrderNumber(1)),
         OrderId(TraderId(b'1' * 20), OrderNumber(1)), Timestamp(0))
     tx.transferred_assets.first += AssetAmount(traded_amount, 'BTC')
     tx.transferred_assets.second += AssetAmount(traded_amount, 'MB')
     tx_done_block = MarketBlock()
     tx_done_block.type = b'tx_done'
     tx_done_block.transaction = {
         'ask': ask.to_status_dictionary(),
         'bid': bid.to_status_dictionary(),
         'tx': tx.to_dictionary(),
         'version': MarketCommunity.PROTOCOL_VERSION
     }
     tx_done_block.transaction['ask']['address'], tx_done_block.transaction[
         'ask']['port'] = "1.1.1.1", 1234
     tx_done_block.transaction['bid']['address'], tx_done_block.transaction[
         'bid']['port'] = "1.1.1.1", 1234
     return tx_done_block
Beispiel #9
0
    def setUp(self):
        yield super(MatchingEngineTestSuite, self).setUp()
        # Object creation
        self.ask = Ask(
            OrderId(TraderId(b'2' * 20), OrderNumber(1)),
            AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')),
            Timeout(30), Timestamp.now())
        self.bid = Bid(
            OrderId(TraderId(b'4' * 20), OrderNumber(2)),
            AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')),
            Timeout(30), Timestamp.now())
        self.ask_order = Order(
            OrderId(TraderId(b'5' * 20), OrderNumber(3)),
            AssetPair(AssetAmount(3000, 'BTC'), AssetAmount(30, 'MB')),
            Timeout(30), Timestamp.now(), True)
        self.bid_order = Order(
            OrderId(TraderId(b'6' * 20), 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
Beispiel #10
0
class TraderIdTestSuite(unittest.TestCase):
    """Trader ID test cases."""

    def setUp(self):
        # Object creation
        self.trader_id = TraderId(b'0' * 20)
        self.trader_id2 = TraderId(b'0' * 20)
        self.trader_id3 = TraderId(b'1' * 20)

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

    def test_conversion(self):
        # Test for conversions
        self.assertEqual(b'0' * 20, bytes(self.trader_id))

    def test_equality(self):
        # Test for equality
        self.assertTrue(self.trader_id == self.trader_id2)
        self.assertTrue(self.trader_id != self.trader_id3)
        self.assertFalse(self.trader_id == 6)

    def test_hash(self):
        # Test for hashes
        self.assertEqual(self.trader_id.__hash__(), self.trader_id2.__hash__())
        self.assertNotEqual(self.trader_id.__hash__(), self.trader_id3.__hash__())
Beispiel #11
0
    def from_database(cls, data, payments):
        """
        Create a Transaction object based on information in the database.
        """
        (trader_id, transaction_id, order_number, partner_trader_id, partner_order_number,
         asset1_amount, asset1_type, asset1_transferred, asset2_amount, asset2_type, asset2_transferred,
         transaction_timestamp, sent_wallet_info, received_wallet_info, incoming_address, outgoing_address,
         partner_incoming_address, partner_outgoing_address) = data

        transaction_id = TransactionId(bytes(transaction_id))
        transaction = cls(transaction_id,
                          AssetPair(AssetAmount(asset1_amount, str(asset1_type)),
                                    AssetAmount(asset2_amount, str(asset2_type))),
                          OrderId(TraderId(bytes(trader_id)), OrderNumber(order_number)),
                          OrderId(TraderId(bytes(partner_trader_id)), OrderNumber(partner_order_number)),
                          Timestamp(transaction_timestamp))

        transaction._transferred_assets = AssetPair(AssetAmount(asset1_transferred, str(asset1_type)),
                                                    AssetAmount(asset2_transferred, str(asset2_type)))
        transaction.sent_wallet_info = sent_wallet_info
        transaction.received_wallet_info = received_wallet_info
        transaction.incoming_address = WalletAddress(str(incoming_address))
        transaction.outgoing_address = WalletAddress(str(outgoing_address))
        transaction.partner_incoming_address = WalletAddress(str(partner_incoming_address))
        transaction.partner_outgoing_address = WalletAddress(str(partner_outgoing_address))
        transaction._payments = payments

        return transaction
Beispiel #12
0
 def setUp(self):
     # Object creation
     self.payment = Payment(
         TraderId(b'0' * 20),
         TransactionId(TraderId(b'2' * 20), TransactionNumber(2)),
         AssetAmount(3, 'BTC'), WalletAddress('a'), WalletAddress('b'),
         PaymentId('aaa'), Timestamp(4000), True)
Beispiel #13
0
 def setUp(self):
     # Object creation
     self.transaction_id = TransactionId(TraderId(b'0' * 20),
                                         TransactionNumber(1))
     self.transaction_id2 = TransactionId(TraderId(b'0' * 20),
                                          TransactionNumber(1))
     self.transaction_id3 = TransactionId(TraderId(b'0' * 20),
                                          TransactionNumber(2))
 def test_next_identity(self):
     # Test for next identity
     self.assertEquals(
         TransactionId(TraderId(b'0' * 20), TransactionNumber(1)),
         self.memory_transaction_repository.next_identity())
     self.assertEquals(
         TransactionId(TraderId(b'0' * 20), TransactionNumber(2)),
         self.memory_transaction_repository.next_identity())
Beispiel #15
0
def order2():
    order_id2 = OrderId(TraderId(b'4' * 20), OrderNumber(5))
    order2 = Order(order_id2,
                   AssetPair(AssetAmount(5, 'BTC'), AssetAmount(6, 'EUR')),
                   Timeout(3600), Timestamp.now(), False)
    order2.reserve_quantity_for_tick(
        OrderId(TraderId(b'3' * 20), OrderNumber(4)), 3)
    return order2
Beispiel #16
0
 def test_to_network(self):
     # Test for to network
     self.assertEquals(
         (TraderId(b'0' * 20), Timestamp(1462224447117), OrderNumber(1),
          OrderId(TraderId(b'1' * 20),
                  OrderNumber(2)), self.proposed_trade.proposal_id,
          AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB'))),
         self.proposed_trade.to_network())
Beispiel #17
0
    def test_to_network(self):
        # Test for to network
        data = self.declined_trade.to_network()

        self.assertEqual(data[0], TraderId(b'0' * 20))
        self.assertEqual(data[1], Timestamp(1462224447117))
        self.assertEqual(data[2], OrderNumber(2))
        self.assertEqual(data[3], OrderId(TraderId(b'0' * 20), OrderNumber(1)))
        self.assertEqual(data[4], self.proposed_trade.proposal_id)
Beispiel #18
0
 def from_unpack_list(cls, trader_id, timestamp, tx_trader_id, transaction_number,
                      order_trader_id, order_number, recipient_trader_id, recipient_order_number, proposal_id,
                      asset1_amount, asset1_type, asset2_amount, asset2_type):
     return StartTransactionPayload(TraderId(trader_id), Timestamp(timestamp),
                                    TransactionId(TraderId(tx_trader_id), TransactionNumber(transaction_number)),
                                    OrderId(TraderId(order_trader_id), OrderNumber(order_number)),
                                    OrderId(TraderId(recipient_trader_id), OrderNumber(recipient_order_number)),
                                    proposal_id, AssetPair(AssetAmount(asset1_amount, asset1_type.decode('utf-8')),
                                                           AssetAmount(asset2_amount, asset2_type.decode('utf-8'))))
Beispiel #19
0
 def from_unpack_list(cls, trader_id, timestamp, order_number,
                      recipient_trader_id, recipient_order_number,
                      proposal_id, decline_reason):
     return DeclineTradePayload(
         TraderId(trader_id), Timestamp(timestamp),
         OrderNumber(order_number),
         OrderId(TraderId(recipient_trader_id),
                 OrderNumber(recipient_order_number)), proposal_id,
         decline_reason)
Beispiel #20
0
 def setUp(self):
     # Object creation
     self.start_transaction = StartTransaction(
         TraderId(b'0' * 20),
         TransactionId(TraderId(b'0' * 20), TransactionNumber(1)),
         OrderId(TraderId(b'0' * 20), OrderNumber(1)),
         OrderId(TraderId(b'1' * 20), OrderNumber(1)), 1234,
         AssetPair(AssetAmount(30, 'BTC'), AssetAmount(40, 'MC')),
         Timestamp(0))
Beispiel #21
0
    def test_remove_tick(self):
        # Test remove tick
        self.side.insert_tick(self.tick)
        self.side.insert_tick(self.tick2)

        self.side.remove_tick(OrderId(TraderId(b'0' * 20), OrderNumber(1)))
        self.assertEqual(1, len(self.side))
        self.side.remove_tick(OrderId(TraderId(b'1' * 20), OrderNumber(2)))
        self.assertEqual(0, len(self.side))
Beispiel #22
0
def test_block_for_matching(tick_entry):
    """
    Test blocking of a match
    """
    tick_entry.block_for_matching(OrderId(TraderId(b'a' * 20), OrderNumber(3)))
    assert len(tick_entry._blocked_for_matching) == 1

    # Try to add it again - should be ignored
    tick_entry.block_for_matching(OrderId(TraderId(b'a' * 20), OrderNumber(3)))
    assert len(tick_entry._blocked_for_matching) == 1
Beispiel #23
0
    def test_block_for_matching(self):
        """
        Test blocking of a match
        """
        self.tick_entry.block_for_matching(OrderId(TraderId(b'a' * 20), OrderNumber(3)))
        self.assertEqual(len(self.tick_entry._blocked_for_matching), 1)

        # Try to add it again - should be ignored
        self.tick_entry.block_for_matching(OrderId(TraderId(b'a' * 20), OrderNumber(3)))
        self.assertEqual(len(self.tick_entry._blocked_for_matching), 1)
Beispiel #24
0
def transaction(payment):
    transaction_id = TransactionId(b'a' * 32)
    transaction = Transaction(
        transaction_id,
        AssetPair(AssetAmount(100, 'BTC'), AssetAmount(30, 'MB')),
        OrderId(TraderId(b'0' * 20), OrderNumber(1)),
        OrderId(TraderId(b'1' * 20), OrderNumber(2)), Timestamp(20000))

    transaction.add_payment(payment)
    return transaction
 def setUp(self):
     # Object creation
     self.memory_transaction_repository = MemoryTransactionRepository(b'0' *
                                                                      20)
     self.transaction_id = TransactionId(b'a' * 32)
     self.transaction = Transaction(
         self.transaction_id,
         AssetPair(AssetAmount(10, 'BTC'), AssetAmount(10, 'MB')),
         OrderId(TraderId(b'0' * 20), OrderNumber(1)),
         OrderId(TraderId(b'2' * 20), OrderNumber(2)), Timestamp(0))
Beispiel #26
0
 def setUp(self):
     # Object creation
     self.proposed_trade = Trade.propose(
         TraderId(b'0' * 20), OrderId(TraderId(b'0' * 20), OrderNumber(1)),
         OrderId(TraderId(b'1' * 20), OrderNumber(2)),
         AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB')),
         Timestamp(1462224447117))
     self.declined_trade = Trade.decline(
         TraderId(b'0' * 20), Timestamp(1462224447117), self.proposed_trade,
         DeclinedTradeReason.ORDER_COMPLETED)
Beispiel #27
0
    def setUp(self):
        # Object creation

        self.tick = Tick(OrderId(TraderId(b'0' * 20), OrderNumber(1)),
                         AssetPair(AssetAmount(60, 'BTC'), AssetAmount(30, 'MB')),
                         Timeout(100), Timestamp.now(), True)
        self.tick2 = Tick(OrderId(TraderId(b'1' * 20), OrderNumber(2)),
                          AssetPair(AssetAmount(120, 'BTC'), AssetAmount(30, 'MB')),
                          Timeout(100), Timestamp.now(), True)
        self.side = Side()
Beispiel #28
0
    def test_insert_tick(self):
        # Test insert tick
        self.assertEqual(0, len(self.side))
        self.assertFalse(self.side.tick_exists(OrderId(TraderId(b'0' * 20), OrderNumber(1))))

        self.side.insert_tick(self.tick)
        self.side.insert_tick(self.tick2)

        self.assertEqual(2, len(self.side))
        self.assertTrue(self.side.tick_exists(OrderId(TraderId(b'0' * 20), OrderNumber(1))))
Beispiel #29
0
    def setUp(self):
        BaseTestCase.setUp(self)

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

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

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

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

        self.tx_block = MarketBlock()
        self.tx_block.type = b'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,
            'success': True
        }
        self.payment_block = MarketBlock()
        self.payment_block.type = b'tx_payment'
        self.payment_block.transaction = {'payment': payment}
 async def setUp(self):
     super(AbstractTestOrderBook, self).setUp()
     # Object creation
     self.ask = Ask(
         OrderId(TraderId(b'0' * 20), OrderNumber(1)),
         AssetPair(AssetAmount(100, 'BTC'), AssetAmount(30, 'MB')),
         Timeout(100), Timestamp.now())
     self.invalid_ask = Ask(
         OrderId(TraderId(b'0' * 20), OrderNumber(1)),
         AssetPair(AssetAmount(100, 'BTC'), AssetAmount(30, 'MB')),
         Timeout(0), Timestamp(0))
     self.ask2 = Ask(
         OrderId(TraderId(b'1' * 20), OrderNumber(1)),
         AssetPair(AssetAmount(400, 'BTC'), AssetAmount(30, 'MB')),
         Timeout(100), Timestamp.now())
     self.bid = Bid(
         OrderId(TraderId(b'2' * 20), OrderNumber(1)),
         AssetPair(AssetAmount(200, 'BTC'), AssetAmount(30, 'MB')),
         Timeout(100), Timestamp.now())
     self.invalid_bid = Bid(
         OrderId(TraderId(b'0' * 20), OrderNumber(1)),
         AssetPair(AssetAmount(100, 'BTC'), AssetAmount(30, 'MB')),
         Timeout(0), Timestamp(0))
     self.bid2 = Bid(
         OrderId(TraderId(b'3' * 20), OrderNumber(1)),
         AssetPair(AssetAmount(300, 'BTC'), AssetAmount(30, 'MB')),
         Timeout(100), Timestamp.now())
     self.trade = Trade.propose(
         TraderId(b'0' * 20), OrderId(TraderId(b'0' * 20), OrderNumber(1)),
         OrderId(TraderId(b'0' * 20), OrderNumber(1)),
         AssetPair(AssetAmount(100, 'BTC'), AssetAmount(30, 'MB')),
         Timestamp(1462224447117))
     self.order_book = OrderBook()