Exemplo n.º 1
0
        public void CanSaveBalance_BalanceLessThan10_ReturnsTrue()
        {
            var balanceChecker = new BalanceChecker(_processMock.Object, _persistenceMock.Object, _externalApiMock.Object);

            Assert.IsTrue(balanceChecker.CanSaveBalance(16, 1).Result);
            _processMock.Verify(expression: x => x.Process10(), Times.Once);
        }
Exemplo n.º 2
0
        public void CanSaveBalance_BalanceGreater100000ExternalApiReturnsFalse_ExternalApiReturnsTrue()
        {
            var balanceChecker = new BalanceChecker(_processMock.Object, _persistenceMock.Object, _externalApiMock.Object);

            _externalApiMock.Setup(x => x.CheckAccountBalance(100001, AccountType.Gold)).Returns(true);

            Assert.IsTrue(balanceChecker.CanSaveBalance(16, 100001).Result);
            _externalApiMock.Verify(expression: x => x.CheckAccountBalance(100001, AccountType.Gold), Times.Once);
        }
Exemplo n.º 3
0
        public void CanSaveBalance_BalanceBetween50And100000PersistReturnsFalse_PersistanceCalledOnce()
        {
            var balanceChecker = new BalanceChecker(_processMock.Object, _persistenceMock.Object, _externalApiMock.Object);

            _persistenceMock.Setup(x => x.GetInfo()).Returns(false);

            Assert.IsFalse(balanceChecker.CanSaveBalance(16, 51).Result);
            _persistenceMock.Verify(expression: x => x.GetInfo(), Times.Once);
        }
Exemplo n.º 4
0
        public void CanSaveBalance_BalanceBetween50And100000AndDayFallsBefore15_ReturnsFalse()
        {
            var balanceChecker = new BalanceChecker(_processMock.Object, _persistenceMock.Object, _externalApiMock.Object);

            _persistenceMock.Setup(x => x.GetInfo()).Returns(true);

            Assert.IsFalse(balanceChecker.CanSaveBalance(14, 51).Result);
            _persistenceMock.Verify(expression: x => x.GetInfo(), Times.Never);
        }
Exemplo n.º 5
0
    static void Main(String[] args)
    {
        List <string> inputs = ReadInputs();

        foreach (string input in inputs)
        {
            BalanceChecker balanceChecker = new BalanceChecker(input);
            string         output         = balanceChecker.CheckIsBalanced();
            Console.WriteLine(output);
        }
        Console.ReadLine();
    }
Exemplo n.º 6
0
        static void Main(string[] args)
        {
            int input = 0;

            while (true)
            {
                //TODO: Wallet new | check balance | send transaction
                Console.WriteLine("Press 1 to generate new wallet.");
                Console.WriteLine("Press 2 to check account balance from Private key.");
                Console.WriteLine("Press 3 to send transaction.");
                bool flag = false;
                switch (input = int.Parse(Console.ReadLine()))
                {
                case 1:
                    Console.Clear();
                    Wallet.RandomPrivateKeyToAddress();
                    flag = true;
                    break;

                case 2:
                    Console.Clear();
                    Console.Write("Input private key to check balance: ");
                    string address = Console.ReadLine();
                    //string address = "4c13ab8c6ae1b1878fe9270954d4afa3c69863ec";
                    Console.WriteLine("Current BTC - {0}", BalanceChecker.GetAddressSavings(address));
                    flag = true;
                    break;

                case 3:
                    Console.Clear();

                    CreateAndSignTransaction();

                    flag = true;
                    break;

                default:
                    Console.Clear();
                    Console.WriteLine("Please pick another option");
                    Console.WriteLine("---------------------------");

                    break;
                }
                if (flag)
                {
                    break;
                }
            }
            Console.ReadLine();
        }
Exemplo n.º 7
0
        public static void CreateAndSignTransaction()

        {
            Console.Write("Enter private key => ");
            //set faucet private key to test
            //string privateKey = "2debcee8a64fb677dfd6c43423058b86810e7319c957b16bebb4fbf9883ac6b9";
            string privateKey = Console.ReadLine();

            Console.Write(privateKey);
            Console.WriteLine();
            Console.Write("Enter how much do you want to transfer => ");
            //long valueToSend = 1;
            long valueToSend = long.Parse(Console.ReadLine());

            valueToSend *= 1000000;
            Console.WriteLine(valueToSend);

            string address     = Wallet.AddressFromPrivateKey(privateKey);
            long   addrSavings = BalanceChecker.GetAddressSavings(address);

            if (addrSavings < valueToSend)
            {
                Console.WriteLine("Sorry,you don't have enough BTC in your wallet");
                Console.WriteLine("Your balance is -> {0}", addrSavings);
                return;
            }
            Console.WriteLine();
            Console.Write("Enter the address to which you want to transfer it => ");
            //string recipientAddress = "f51362b7351ef62253a227a77751ad9b2302f911";
            string recipientAddress = Console.ReadLine();

            Console.WriteLine(recipientAddress);
            string iso8601standard         = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ");
            string signedTransactionAsJson = Wallet.CreateAndSignTransaction(recipientAddress, valueToSend, iso8601standard, privateKey);

            TransactionSender.SendSignedTransaction(signedTransactionAsJson);

            Console.Clear();
            Console.WriteLine("Transaction passed successfuly.");
        }
Exemplo n.º 8
0
        public void GetAccountType_50000_Bronze()
        {
            var balanceChecker = new BalanceChecker(_processMock.Object, _persistenceMock.Object, _externalApiMock.Object);

            Assert.AreEqual(balanceChecker.GetAccountType(50000), AccountType.Silver);
        }
Exemplo n.º 9
0
        public void GetAccountType_100001_Bronze()
        {
            var balanceChecker = new BalanceChecker(_processMock.Object, _persistenceMock.Object, _externalApiMock.Object);

            Assert.AreEqual(balanceChecker.GetAccountType(100001), AccountType.Gold);
        }
Exemplo n.º 10
0
        private async Task <Error> ConvertAsync()
        {
            try
            {
                var account         = App.Account;
                var currencyAccount = account
                                      .GetCurrencyAccount <ILegacyCurrencyAccount>(FromCurrency.Name);

                var fromWallets = (await currencyAccount
                                   .GetUnspentAddressesAsync(
                                       toAddress: null,
                                       amount: Amount,
                                       fee: 0,
                                       feePrice: await FromCurrency.GetDefaultFeePriceAsync(),
                                       feeUsagePolicy: FeeUsagePolicy.EstimatedFee,
                                       addressUsagePolicy: AddressUsagePolicy.UseMinimalBalanceFirst,
                                       transactionType: BlockchainTransactionType.SwapPayment))
                                  .ToList();

                foreach (var fromWallet in fromWallets)
                {
                    if (fromWallet.Currency != FromCurrency.Name)
                    {
                        fromWallet.Currency = FromCurrency.Name;
                    }
                }

                // check balances
                var errors = await BalanceChecker.CheckBalancesAsync(App.Account, fromWallets);

                if (errors.Any())
                {
                    return(new Error(Errors.SwapError, GetErrorsDescription(errors)));
                }

                if (Amount == 0)
                {
                    return(new Error(Errors.SwapError, Resources.CvZeroAmount));
                }

                if (Amount > 0 && !fromWallets.Any())
                {
                    return(new Error(Errors.SwapError, Resources.CvInsufficientFunds));
                }

                var symbol = App.SymbolsProvider
                             .GetSymbols(App.Account.Network)
                             .SymbolByCurrencies(FromCurrency, ToCurrency);

                var baseCurrency = App.Account.Currencies.GetByName(symbol.Base);
                var side         = symbol.OrderSideForBuyCurrency(ToCurrency);
                var terminal     = App.Terminal;
                var price        = EstimatedPrice;
                var orderPrice   = EstimatedOrderPrice;

                if (price == 0)
                {
                    return(new Error(Errors.NoLiquidity, Resources.CvNoLiquidity));
                }

                var qty = AmountHelper.AmountToQty(side, Amount, price, baseCurrency.DigitsMultiplier);

                if (qty < symbol.MinimumQty)
                {
                    var minimumAmount = AmountHelper.QtyToAmount(side, symbol.MinimumQty, price, FromCurrency.DigitsMultiplier);
                    var message       = string.Format(CultureInfo.InvariantCulture, Resources.CvMinimumAllowedQtyWarning, minimumAmount, FromCurrency.Name);

                    return(new Error(Errors.SwapError, message));
                }

                var order = new Order
                {
                    Symbol          = symbol.Name,
                    TimeStamp       = DateTime.UtcNow,
                    Price           = orderPrice,
                    Qty             = qty,
                    Side            = side,
                    Type            = OrderType.FillOrKill,
                    FromWallets     = fromWallets.ToList(),
                    MakerNetworkFee = EstimatedMakerNetworkFee
                };

                await order.CreateProofOfPossessionAsync(account);

                terminal.OrderSendAsync(order);

                // wait for swap confirmation
                var timeStamp = DateTime.UtcNow;

                while (DateTime.UtcNow < timeStamp + SwapTimeout)
                {
                    await Task.Delay(SwapCheckInterval);

                    var currentOrder = terminal.Account.GetOrderById(order.ClientOrderId);

                    if (currentOrder == null)
                    {
                        continue;
                    }

                    if (currentOrder.Status == OrderStatus.Pending)
                    {
                        continue;
                    }

                    if (currentOrder.Status == OrderStatus.PartiallyFilled || currentOrder.Status == OrderStatus.Filled)
                    {
                        var swap = (await terminal.Account
                                    .GetSwapsAsync())
                                   .FirstOrDefault(s => s.OrderId == currentOrder.Id);

                        if (swap == null)
                        {
                            continue;
                        }

                        return(null);
                    }

                    if (currentOrder.Status == OrderStatus.Canceled)
                    {
                        return(new Error(Errors.PriceHasChanged, Resources.SvPriceHasChanged));
                    }

                    if (currentOrder.Status == OrderStatus.Rejected)
                    {
                        return(new Error(Errors.OrderRejected, Resources.SvOrderRejected));
                    }
                }

                return(new Error(Errors.TimeoutReached, Resources.SvTimeoutReached));
            }
            catch (Exception e)
            {
                Log.Error(e, "Conversion error");

                return(new Error(Errors.SwapError, Resources.CvConversionError));
            }
        }