public void PandoraServerTest() { TestServer = new PandorasServer(Path.Combine(Directory.GetCurrentDirectory(), "DBTEST"), "localhost", 20159); Assert.IsTrue(TestServer.Logon("*****@*****.**", "quality", "quality")); TestServer.OnTransactions += NewTransactionTestHandler; var TestUserStatus = (TestServer.GetUserStatus()); Assert.IsTrue(TestUserStatus.Active && TestUserStatus.ExtendedInfo == "Quality Testing User"); CurrencyItem[] Currencies = TestServer.GetCurrencyList(); Assert.IsTrue(Currencies.Count() > 0 && Currencies[0].Name == "Bitcoin"); CurrencyStatusItem Result2 = TestServer.GetCurrencyStatus(1); Assert.IsTrue(Result2.Status == CurrencyStatus.Active && Result2.ExtendedInfo == "The coin is working fine with 3 servers running with consensus."); CurrencyAccount[] Accounts = TestServer.MonitoredAccounts.GetById(1); Assert.AreEqual(Accounts[0].Address, "mk4DoTmTB8PnNgPyvzozTeNGxC1fduJqb5"); TestServer.StartTxUpdatingTask(); while (!Records.Any()) { Records = TestServer.GetTransactions(1); System.Threading.Thread.Sleep(1000); } TransactionRecord Record = Records.FirstOrDefault(); Assert.IsTrue(Record.TxId == "30c8e2f7f5cf8b00f8b8bff127a8ceb726e30ab354dda361199fc435c22275b9"); Assert.IsTrue(Record.Block == 1355565); Assert.IsTrue(Record.Outputs.Count() == 2); var Outputs = Record.Outputs.ToList(); Assert.IsTrue(Outputs.Exists(x => x.Address == "mk4DoTmTB8PnNgPyvzozTeNGxC1fduJqb5" && x.Amount == 150000000)); Assert.IsTrue(Outputs.Exists(x => x.Address == "2MwqZdwPUrmBACjacg8uwEZ8rVoCUX7GD2h" && x.Amount == 111418554)); var Transaction = new CurrencyTransaction(); Transaction.AddInput(150000000, "mk4DoTmTB8PnNgPyvzozTeNGxC1fduJqb5", 10151); Transaction.AddOutput(100000000, "mtCFoNLWbgHnB1SG7R7VqiDizGUP8K2uae"); Transaction.AddOutput(50000000, "mk4DoTmTB8PnNgPyvzozTeNGxC1fduJqb5"); Transaction.TxFee = 250000; Transaction.CurrencyId = 1; //var Response = TestServer.CreateTransaction(1, Transaction); //Assert.IsTrue(Response == "0100000001b97522c235c49f1961a3dd54b30ae326b7cea827f1bfb8f8008bcff5f7e2c830010000001976a91431ca57b301db0088e2d5912cff743210364b126c88acffffffff0200e1f505000000001976a9148b10583ecc2a455ab21342b3b34943ec711e694888ac80f0fa02000000001976a91431ca57b301db0088e2d5912cff743210364b126c88ac00000000"); TestServer.Logoff(); }
private void NewTransactionTestHandler(uint[] aIds, bool isConfirmationUpdate) { Records = TestServer.GetTransactions(1); }
private void GetTransactionalStructure(uint aCoinID, bool aEventFlag = false) { if (((!FAddresses.ContainsKey(aCoinID)) || FAddresses[aCoinID] == null) || (!aEventFlag && !FBalance[aCoinID].IsEmpty)) { return; } Dictionary <string, Tuple <ulong, ulong> > lConfirmedBalances = new Dictionary <string, Tuple <ulong, ulong> >(); Dictionary <string, Tuple <ulong, ulong> > lUnconfirmedBalances = new Dictionary <string, Tuple <ulong, ulong> >(); TransactionRecord[] lTransactions = FWalletPandoraServer.GetTransactions(aCoinID); ulong lBalance = 0; foreach (uint it in FUserCoins) { if (!FTransactionsViewModels.ContainsKey(it)) { while (!FTransactionsViewModels.TryAdd(it, new List <TransactionViewModel>())) { ; } } } ulong lPTotalConfirmedBalance = 0; ulong lPTotalUnconfirmedBalance = 0; ulong lNTotalConfirmedBalance = 0; ulong lNTotalUnconfirmedBalance = 0; List <string> lAccounts = new List <string>(FAddresses[aCoinID]); bool lExecuteOnceFlag = true; foreach (string lAddress in lAccounts) { foreach (TransactionRecord lTransaction in lTransactions) { var lTransactionAddresses = lTransaction.GetAddresses(); if (!lAccounts.Exists(x => lTransactionAddresses.Contains(x))) { continue; } if (lExecuteOnceFlag) { CreateOrUpdateTransactionViewModel(lTransaction, aCoinID, lAccounts); } lBalance = 0; if (!lTransaction.Valid) { continue; } if (lTransaction.Block > 0) { if (ScanTransaction(lAddress, lTransaction, out lBalance)) { lPTotalConfirmedBalance += lBalance; } else { lNTotalConfirmedBalance += lBalance; } } else { if (ScanTransaction(lAddress, lTransaction, out lBalance)) { lPTotalUnconfirmedBalance += lBalance; } else { lNTotalUnconfirmedBalance += lBalance; } } } lExecuteOnceFlag = false; lConfirmedBalances.Add(lAddress, new Tuple <ulong, ulong>(lPTotalConfirmedBalance, lNTotalConfirmedBalance)); lUnconfirmedBalances.Add(lAddress, new Tuple <ulong, ulong>(lPTotalUnconfirmedBalance, lNTotalUnconfirmedBalance)); } List <TransactionUnit> lUnspent = GetUnspentOutputs(aCoinID, lTransactions); FBalance[aCoinID].SetNewData(lConfirmedBalances, lUnconfirmedBalances); ulong lUnspentBalance = 0; foreach (TransactionUnit it in lUnspent) { lUnspentBalance += it.Amount; } if (FBalance[aCoinID].Total != lUnspentBalance) { #if DEBUG System.Diagnostics.Debug.WriteLine("Consistency problems on balances"); #endif Log.Write(LogLevel.Error, "Consistency problems on balances on {0} for user: {1} ({2}) ", ActiveCurrencyItem.Name, Username, Email); } lock (FUnspent) FUnspent[aCoinID] = lUnspent.ToArray(); }