/// <summary>
 /// Powórzona transakcja w bloku
 /// </summary>
 /// <param name="blockChain"></param>
 /// <param name="TX"></param>
 /// <returns></returns>
 public static bool transactionAlreadyInBlock(BlockChain blockChain, Transaction TX)
 {
     foreach (Transaction transaction in blockChain.transactionsInAllBlocks)
         if( transaction.hashTX.Equals(TX.hashTX))
                return true;
     return false;
 }
 /// <summary>
 /// Sprawdzamy, czy którykolwiek z inputów został już wydany, tzn czy znajduje się w inputTXhash, w jakiejkolwiek innej transakcji
 /// </summary>
 /// <param name="blockChain"></param>
 /// <param name="TX"></param>
 /// <returns></returns>
 public static bool doubleSpending(BlockChain blockChain, Transaction TX)
 {
     //Sprawdzamy, czy którykolwiek z inputów został już wydany, tzn czy znajduje się w inputTXhash, w jakiejkolwiek innej transakcji
     List<String> inputTransactionHashes = TX.inputTXhash;
     foreach (String inputHash in inputTransactionHashes)
         foreach(Transaction transaction in blockChain.transactionsInAllBlocks)
             if (transaction.inputTXhash.Contains(inputHash))
                 if(transaction.addressBTC_Sender.Equals(TX.addressBTC_Sender))
                 return true;
     return false;
 }
 /// <summary>
 ///  Poprawna liczba BTC w transakcji
 /// </summary>
 /// <param name="blockChain"></param>
 /// <param name="TX"></param>
 /// <returns></returns>
 public static bool correctAmountOfBTC(BlockChain blockChain, Transaction TX)
 {
     if (TX.inputBTC == (TX.outputBTC_Receiver + TX.outputBTC_Sender))
         return true;
     else
     return false;
 }
 /// <summary>
 /// Aktualizacja bloku niewydanych transakcji dla węzła o podanych adresie.
 /// </summary>
 /// <param name="blockChain"></param>
 /// <param name="nodeAddress"></param>
 /// <returns></returns>
 public static List<Transaction> updateTransactionList(BlockChain blockChain, String nodeAddress)
 {
     //Znajdź wszystkie transakcje, które w outputAddress mają adres Węzła proszącego o UpdateBlock (otrzymujemy listę transakcji, które zasiliły dany Wezeł)
     List<Transaction> outputTransactions = blockChain.transactionsInAllBlocks.FindAll(transaction => transaction.addressBTC_Receiver.Equals(nodeAddress) || transaction.addressBTC_Sender.Equals(nodeAddress));
     List<Transaction> alreadySpentTransactions = new List<Transaction>();
     // Wyklucz z list outputTransaction wszystkie transakcje, które zostały już wydane - hashe wydanych transakcji znajdują się w inputTxhash
     foreach (Transaction outputTX in outputTransactions)
         foreach (Transaction allTX in blockChain.transactionsInAllBlocks)
             foreach (string inputHash in allTX.inputTXhash)
                 if (outputTX.hashTX.Equals(inputHash))
                     if (allTX.addressBTC_Sender.Equals(nodeAddress))
                         alreadySpentTransactions.Add(outputTX);
     return outputTransactions.Except(alreadySpentTransactions).ToList();
 }
 /// <summary>
 /// Sprawdzamy poprawność wejściowych transakcji.
 /// </summary>
 /// <param name="blockChain"></param>
 /// <param name="TX"></param>
 /// <returns></returns>
 public static bool validInputTransactions(BlockChain blockChain, Transaction TX)
 {
     //Wydobywamy, na podstawie hashy, listę wejściowych transakcji z blockchain
     List<Transaction> inputTransactions = new List<Transaction>();
     int inputBTC = 0;
     foreach (String inputHash in TX.inputTXhash)
     {
         Transaction foundTX = (blockChain.transactionsInAllBlocks.Find(transaction => transaction.hashTX.Equals(inputHash)));
         if(foundTX != null)
             inputTransactions.Add(foundTX);
     }
     if (inputTransactions.Count == 0)
         return false;
     // Sprawdzamy, czy hajs się zgadza
     foreach (Transaction transaction in inputTransactions)
     {
         if (transaction.addressBTC_Receiver.Equals(TX.addressBTC_Sender))
             inputBTC += transaction.outputBTC_Receiver;
         if (transaction.addressBTC_Sender.Equals(TX.addressBTC_Sender))
             inputBTC += transaction.outputBTC_Sender;
     }
     if (inputBTC == (TX.outputBTC_Receiver + TX.outputBTC_Sender))
         return true; //Zgadza się
     return false; //Nie zgadza się
 }