def test_tracking(self): address1 = create_unique_address(get_exchange_account_id()) address2 = create_unique_address("lykke-test") addr2s = split_unique_address(address2) self.storage.track_address(address1) self.assertRaises(AddressAlreadyTrackedException, self.storage.track_address, address1) self.storage.track_address(address2) filled_operation = self.get_completed_op() filled_operation["to"] = addr2s["account_id"] filled_operation["customer_id"] = addr2s["customer_id"] filled_operation["amount_asset_id"] = "1.3.4123" filled_operation["amount_value"] = 1234 self.storage.insert_operation(filled_operation) balances = self.storage.get_balances(2) assert address1 not in balances.keys() assert address2 in balances.keys() assert balances[address2]["1.3.4123"] == 1234 self.storage.untrack_address(address1) self.assertRaises(AddressNotTrackedException, self.storage.untrack_address, address1)
def test_split_address(self): unique_wallet = create_unique_address( utils.get_exchange_account_id(), lambda: "9ed8c906-d6ab-4fb8-a314-0516a175717a") address = split_unique_address(unique_wallet) assert address["account_id"] == utils.get_exchange_account_id()
def test_wallet(self): response = self.client.post(url_for('Blockchain.SignService.wallets')) response = response.json if Config.get("bitshares", "keep_keys_private", True): self.assertEqual(response["privateKey"], "keep_keys_private") else: self.assertEqual( response["privateKey"], Config.get("bitshares", "exchange_account_active_key")) addrs = split_unique_address(response["publicAddress"]) self.assertEqual(addrs["account_id"], Config.get("bitshares", "exchange_account_id")) self.assertEqual(len(addrs["customer_id"]), 36)
def test_get_balance(self): address = create_unique_address(get_exchange_account_id()) addrs = split_unique_address(address) asset = "1.3.131" self.storage.track_address(address) filled_operation = self.get_completed_op() filled_operation["to"] = addrs["account_id"] filled_operation["amount_asset_id"] = asset filled_operation["customer_id"] = addrs["customer_id"] filled_operation["incident_id"] = "some_operation_id_1" filled_operation["chain_identifier"] = "some_chain_identifier_1" filled_operation["amount_value"] = 10 self.storage.insert_operation(filled_operation) filled_operation["incident_id"] = "some_operation_id_2" filled_operation["chain_identifier"] = "some_chain_identifier_2" filled_operation["amount_value"] = 20 self.storage.insert_operation(filled_operation) filled_operation["incident_id"] = "some_operation_id_3" filled_operation["chain_identifier"] = "some_chain_identifier_3" filled_operation["amount_value"] = -5 self.storage.insert_operation(filled_operation) filled_operation["from"] = addrs["account_id"] filled_operation["to"] = get_exchange_account_id() filled_operation["incident_id"] = "some_operation_id_4" filled_operation["chain_identifier"] = "some_chain_identifier_4" filled_operation["amount_value"] = 7 self.storage.insert_operation(filled_operation) balances = self.storage.get_balances(2) assert balances[address][asset] == 18 self.assertRaises(InputInvalidException, self.storage.get_balances, 2, "§=)$") self.assertRaises(InputInvalidException, self.storage.get_balances, 2, "069548")
def test_track_balance(self, bitshares_instance=None): store = factory.get_operation_storage(purge=True) addressDW = self.client.post( url_for('Blockchain.SignService.wallets')).json["publicAddress"] addressEW = create_unique_address(self.get_customer_id(), "") addressHW = self.client.post( url_for('Blockchain.SignService.wallets')).json["publicAddress"] # customer_id = split_unique_address(addressDW)["customer_id"] response = self.client.get( url_for('Blockchain.Api.address_validity', address=addressDW)) assert response.status_code == 200 response = self.client.post( url_for('Blockchain.Api.observe_address', address=addressDW)) assert response.status_code == 200 response = self.client.post( url_for('Blockchain.Api.observe_address', address=addressHW)) assert response.status_code == 200 def build_sign_and_broadcast(op, memo_key, active_key): op["fromAddressContext"] = memo_key transaction = self.client.post( url_for('Blockchain.Api.build_transaction'), data=json.dumps(op)) assert transaction.status_code == 200 sign_transaction = { "transactionContext": transaction.json["transactionContext"], "privateKeys": [active_key] } signed_transaction = self.client.post( url_for('Blockchain.SignService.sign'), data=json.dumps(sign_transaction)) broadcast_transaction = { "operationId": op["operationId"], "signedTransaction": signed_transaction.json["signedTransaction"] } broadcast = self.client.post( url_for('Blockchain.Api.broadcast_transaction'), data=json.dumps(broadcast_transaction)) assert broadcast.status_code == 200 print(broadcast_transaction) return broadcast.json["block"] def flag_completed(block_num): network = Config.get("network_type") connection = Config.get("bitshares", "connection", network) # connection["keys"] = key instance = BitShares(**connection) irr = instance.rpc.get_dynamic_global_properties().get( "last_irreversible_block_num") head = instance.rpc.get_dynamic_global_properties().get( "head_block_number") print("Blockchain Monitor: Looking for block " + str(block_num), ", current head=" + str(head) + ", irreversible=" + str(irr)) monitor = BlockchainMonitor(storage=store, bitshares_instance=instance) monitor.start_block = block_num - 1 monitor.stop_block = block_num + 1 monitor.listen() block_num = build_sign_and_broadcast( { "operationId": "cbeea30e-2218-4405-9089-86d003e4df60", "fromAddress": addressEW, "toAddress": addressDW, "assetId": "1.3.0", "amount": 110000, "includeFee": False }, self.get_customer_memo_key(), self.get_customer_active_key()) flag_completed(block_num) response = self.client.get( url_for('Blockchain.Api.get_balances') + "?take=2") assert response.status_code == 200 self.assertEqual(response.json["items"], [{ 'address': addressDW, 'assetId': '1.3.0', 'balance': 110000, 'block': block_num * 10 }]) block_num = build_sign_and_broadcast( { "operationId": "cbeea30e-2218-4405-9089-86d003e4df61", "fromAddress": addressDW, "toAddress": addressHW, "assetId": "1.3.0", "amount": 100000, "includeFee": True }, utils.get_exchange_memo_key(), utils.get_exchange_active_key()) response = self.client.get( url_for('Blockchain.Api.get_balances') + "?take=2") assert response.status_code == 200 self.assertEqual(response.json["items"][0]["balance"], 10000) assert block_num > 0 balance_block_num = block_num response = self.client.get( url_for('Blockchain.Api.get_broadcasted_transaction', operationId="cbeea30e-2218-4405-9089-86d003e4df61")) self.assertEqual(response.json["block"], block_num * 10) WW = create_unique_address(self.get_customer_id(), "some_user_memo") block_num = build_sign_and_broadcast( { "operationId": "cbeea30e-2218-4405-9089-86d003e4df62", "fromAddress": addressHW, "toAddress": WW, "assetId": "1.3.0", "amount": 100000, "includeFee": True }, utils.get_exchange_memo_key(), utils.get_exchange_active_key()) flag_completed(block_num) response = self.client.get( url_for('Blockchain.Api.get_balances') + "?take=2") assert response.status_code == 200 self.assertEqual(response.json["items"], [{ 'address': addressDW, 'assetId': '1.3.0', 'balance': 10000, 'block': balance_block_num * 10 }]) self.maxDiff = None toDW = self.client.get( url_for('Blockchain.Api.get_address_history_to', address=addressDW) + "?take=3") assert toDW.status_code == 200 self.assertEqual(toDW.json, [{ 'amount': '110000', 'assetId': '1.3.0', 'fromAddress': addressEW, 'hash': toDW.json[0]['hash'], 'timestamp': toDW.json[0]['timestamp'], 'toAddress': addressDW }]) fromDW = self.client.get( url_for('Blockchain.Api.get_address_history_from', address=addressDW) + "?take=3") assert fromDW.status_code == 200 self.assertEqual(fromDW.json, [{ 'amount': '100000', 'assetId': '1.3.0', 'fromAddress': addressDW, 'hash': fromDW.json[0]['hash'], 'timestamp': fromDW.json[0]['timestamp'], 'toAddress': 'lykke-test' }]) toHW = self.client.get( url_for('Blockchain.Api.get_address_history_to', address=addressHW) + "?take=3") assert toHW.status_code == 200 assert toHW.json == [] fromHW = self.client.get( url_for('Blockchain.Api.get_address_history_from', address=split_unique_address(addressHW)["account_id"]) + "?take=3") assert fromHW.status_code == 200 self.assertEqual(fromHW.json, [{ 'amount': '99900', 'assetId': '1.3.0', 'fromAddress': get_exchange_account_name(), 'hash': fromHW.json[0]['hash'], 'timestamp': fromHW.json[0]['timestamp'], 'toAddress': WW }]) response = self.client.get( url_for('Blockchain.Api.get_broadcasted_transaction', operationId="cbeea30e-2218-4405-9089-86d003e4df60")) assert response.status_code == 200 self.assertEqual(response.json['operationId'], 'cbeea30e-2218-4405-9089-86d003e4df60') response = self.client.get( url_for('Blockchain.Api.get_broadcasted_transaction', operationId="cbeea30e-2218-4405-9089-86d003e4df61")) assert response.status_code == 200 self.assertEqual(response.json['operationId'], 'cbeea30e-2218-4405-9089-86d003e4df61') response = self.client.get( url_for('Blockchain.Api.get_broadcasted_transaction', operationId="cbeea30e-2218-4405-9089-86d003e4df62")) assert response.status_code == 200 self.assertEqual(response.json['operationId'], 'cbeea30e-2218-4405-9089-86d003e4df62') response = self.client.delete( url_for('Blockchain.Api.unobserve_address', address=addressDW)) assert response.status_code == 200 response = self.client.delete( url_for('Blockchain.Api.unobserve_address', address=addressHW)) assert response.status_code == 200 response = self.client.get( url_for('Blockchain.Api.get_balances') + "?take=2") assert response.status_code == 200 self.assertEqual(response.json["items"], [])