def test_build_transaction(self): from_id = utils.get_exchange_account_id() from_memo_key = utils.get_exchange_memo_key() tx = implementations.build_transaction( "cbeea30e-2218-4405-9089-86d003e4df88", from_id + DELIMITER + "from_customer_id", from_memo_key, self.get_customer_id() + DELIMITER + "to_customer_id", "1.3.0", 10000, False) tx = json.loads(tx["transactionContext"]) self.assertEqual(len(tx["operations"]), 1) self.assertEqual( tx["operations"][0][0], 0 # transfer ) op = tx["operations"][0][1] self.assertEqual( op["from"], from_id, # lykkee account id "1.2.397770", # blockchainbv account ) self.assertEqual(op["amount"]["asset_id"], "1.3.0") self.assertEqual(op["amount"]["amount"], 10000) self.assertGreater(op["fee"]["amount"], 0)
def test_broadcast_transaction(self): from_id = utils.get_exchange_account_id() from_memo_key = utils.get_exchange_memo_key() tx = manage_service.implementations.build_transaction( "cbeea30e-2218-4405-9089-86d003e4df84", from_id + DELIMITER + "from_customer_id", from_memo_key, self.get_customer_id() + DELIMITER + "to_customer_id", "1.3.0", 100000, False) stx = sign_service.implementations.sign( tx["transactionContext"], [utils.get_exchange_active_key()]) implementations.broadcast_transaction(stx["signedTransaction"])
def test_build_transaction2(self): from_id = utils.get_exchange_account_id() from_memo_key = utils.get_exchange_memo_key() tx = implementations.build_transaction( "cbeea30e-2218-4405-9089-86d003e4df86", from_id + DELIMITER + "from_customer_id", from_memo_key, self.get_customer_id() + DELIMITER + "to_customer_id", "1.3.0", 10000, True # This changes behavior!!!!!!!!!!!!!!! ) tx = json.loads(tx["transactionContext"]) op = tx["operations"][0][1] self.assertLess(op["amount"]["amount"], 10000) self.assertGreater(op["fee"]["amount"], 0)
def test_build_transaction_wrong_memo(self): from_id = "1.2.20139" from_memo_key = utils.get_exchange_memo_key() self.assertRaises( MemoMatchingFailedException, implementations.build_transaction, "cbeea30e-2218-4405-9089-86d003e4df40", from_id + DELIMITER + "from_customer_id", None, utils.get_exchange_account_id() + DELIMITER + "to_customer_id", "1.3.0", 10000, False) self.assertRaises( MemoMatchingFailedException, implementations.build_transaction, "cbeea30e-2218-4405-9089-86d003e4df30", from_id + DELIMITER + "from_customer_id", from_memo_key, utils.get_exchange_account_id() + DELIMITER + "to_customer_id", "1.3.0", 10000, False)
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"], [])