public async Task <MessageEnvelope> MakePayment(KeyPair destination, long amount, ConstellationInfo.Asset asset, bool waitForFinalize = true)
        {
            var paymentMessage = new PaymentRequest {
                Amount = amount, Destination = destination, Asset = asset.Id
            };
            var response = (CentaurusResponse)await connection.SendMessage(paymentMessage.CreateEnvelope());

            var result = await(waitForFinalize ? response.ResponseTask : response.AcknowledgmentTask);

            return(result);
        }
        public async Task PaymentQuantumTest(long amount, bool useFakeSigner, Type excpectedException)
        {
            var account = context.AccountStorage.GetAccount(TestEnvironment.Client1KeyPair);

            var withdrawal = new PaymentRequest
            {
                Account        = account.Account.Id,
                RequestId      = 1,
                Asset          = 0,
                Destination    = TestEnvironment.Client2KeyPair,
                Amount         = amount,
                AccountWrapper = account
            };

            var envelope = withdrawal.CreateEnvelope();

            envelope.Sign(useFakeSigner ? TestEnvironment.Client2KeyPair : TestEnvironment.Client1KeyPair);

            if (!context.IsAlpha)
            {
                var quantum = new RequestQuantum {
                    Apex = context.QuantumStorage.CurrentApex + 1, RequestEnvelope = envelope, Timestamp = DateTime.UtcNow.Ticks
                };
                envelope = quantum.CreateEnvelope();
                envelope.Sign(TestEnvironment.AlphaKeyPair);
            }

            var expextedBalance = account.Account.GetBalance(0).Amount - amount;

            await AssertQuantumHandling(envelope, excpectedException);

            if (excpectedException == null)
            {
                Assert.AreEqual(account.Account.GetBalance(0).Amount, expextedBalance);
            }
        }