예제 #1
0
 // Adiciona uma CHAVE com valores ou Atualiza os valores de uma CHAVE de um Dictionary
 public void AddOrUpdateUTXOs(String key, TransactionOutput value)
 {
     if (UTXOs.ContainsKey(key))
     {
         UTXOs[key] = value;
     }
     else
     {
         UTXOs.Add(key, value);
     }
 }
예제 #2
0
        public double GetBalance()
        {
            double total = 0;

            foreach (KeyValuePair <String, TransactionOutput> item in Program.UTXOs)
            {
                // EM CONSTRUÇÃO (CÓDIGO QUE PUXA INFORMAÇÕES DOS OUTPUTS DO BANCO DE DADOS)


                TransactionOutput UTXO = item.Value;
                if (UTXO.isMine(keyParameters)) // Se a saída pertence a mim ( se o dinheiro pertence a mim )
                {
                    // Verifica se a chave já existe no Dicionário
                    AddOrUpdateUTXOs(UTXO.id, UTXO);
                    //UTXOs.Add(UTXO.id, UTXO); // Adiciona na nossa lista de transações não gastas
                    total += UTXO.value;
                }
            }
            return(total);
        }
예제 #3
0
        static void Main(string[] args)
        {
            // --- TESTE BANCO DE DADOS ---

            CoinDatabaseDAO db = new CoinDatabaseDAO();

            /*db.WriteToWalletSQL("batata", "hamburguer", "100.00");
            *  db.WriteToWalletSQL("batata", "hamburguer", "200.00");
            *  db.WriteToWalletSQL("batata", "hamburguer", "300.00");
            *  db.WriteToWalletSQL("batata", "hamburguer", "800.00");*/
            /*Debug.WriteLine(db.GetRowCountSQL("C_WALLET"));
             * String[] test = db.ReadFromWalletSQL(1);
             * Debug.WriteLine("TESTE CARTEIRA SQL");
             * Debug.WriteLine(test[0] + ", " + test[1] + ", " + test[2] + ", " + test[3]);
             *
             * Debug.WriteLine(db.DataExistsWalletSQL());*/

            /*// Lê os dados do banco de dados e preenche o UTXOs
             * if(db.GetRowCountSQL("C_UTXOS") > 0)
             * {
             *  for(int i = 0; i < db.GetRowCountSQL("C_UTXOS"); i++)
             *  {
             *      String[] recipiente = db.ReadFromUTXOSQL(i);
             *      TransactionOutput output = new TransactionOutput(recipiente[2], Convert.ToDouble(recipiente[3]), recipiente[4]);
             *      UTXOs.Add(recipiente[1] + "A", output);
             *  }
             * }*/



            // --------------------------------------


            // --- INICIALIZAÇÃO DO CONSOLE DEBUG ---

            // Instancia as novas carteiras

            Wallet coinbase = new Wallet();

            walletA = new Wallet();
            db.WriteToWalletSQL(StringUtil.GetStringFromPublicKey(walletA.keyParameters), StringUtil.GetStringFromPrivateKey(walletA.keyParameters), walletA.GetBalance());
            walletB = new Wallet();
            db.WriteToWalletSQL(StringUtil.GetStringFromPublicKey(walletB.keyParameters), StringUtil.GetStringFromPrivateKey(walletB.keyParameters), walletB.GetBalance());



            // Cria a transação GENESIS, na qual envia 100 CSharpCoins para a walletA:
            genesisTransaction = new Transaction(coinbase.keyParameters, walletA.keyParameters, 100, null);
            genesisTransaction.GenerateSignature(coinbase.keyParameters);                                                                                                                          // Assina manualmente a transação GENESIS
            genesisTransaction.transactionId = "0";                                                                                                                                                // Seta manualmente o ID de transação
            genesisTransaction.outputs.Add(new TransactionOutput(StringUtil.GetStringFromPublicKey(genesisTransaction.reciepient), genesisTransaction.value, genesisTransaction.transactionId));   // Manualmente adiciona as saídas da transação
            //UTXOs.Add(genesisTransaction.outputs[0].id, genesisTransaction.outputs[0]); // SUBSTITUÍDO PELO BANCO DE DADOS
            db.WriteToUTXOSQL(genesisTransaction.outputs[0].id, genesisTransaction.outputs[0].reciepient, genesisTransaction.outputs[0].value, genesisTransaction.outputs[0].parentTransactionId); // É importante armazenar a nossa primeira transação na lista de UTXOs

            // Lê os dados do banco de dados e preenche o UTXOs
            if (db.GetRowCountSQL("C_UTXOS") > 0)
            {
                for (int i = 1; i <= db.GetRowCountSQL("C_UTXOS"); i++)
                {
                    String[]          recipiente = db.ReadFromUTXOSQL(i);
                    TransactionOutput output     = new TransactionOutput(recipiente[2], Convert.ToDouble(recipiente[3]), recipiente[4]);
                    UTXOs.Add(recipiente[1], output);
                }
            }


            Debug.WriteLine("\n-------------------------------------------------------------------------------\n");

            Debug.WriteLine("#Criando e minerando o Bloco GENESIS...");
            Block genesis = new Block("0");

            genesis.AddTransaction(genesisTransaction);
            AddBlock(genesis);

            // TESTE
            Block block1 = new Block(genesis.hash);

            Debug.WriteLine("\nO saldo da carteiraA é: " + walletA.GetBalance());
            Debug.WriteLine("\nA carteiraA está tentando enviar fundos (40) para a carteiraB...");
            block1.AddTransaction(walletA.SendFunds(walletB.keyParameters, 40));
            AddBlock(block1);
            Debug.WriteLine("\nO saldo da carteiraA é: " + walletA.GetBalance());
            Debug.WriteLine("O saldo da carteiraB é: " + walletB.GetBalance());

            // TESTE
            Block block2 = new Block(block1.hash);

            Debug.WriteLine("\nA carteiraA está tentando enviar mais fundos (1000) do que se tem de saldo...");
            block2.AddTransaction(walletA.SendFunds(walletB.keyParameters, 1000));
            AddBlock(block2);
            Debug.WriteLine("\nO saldo da carteiraA é: " + walletA.GetBalance());
            Debug.WriteLine("O saldo da carteiraB é: " + walletB.GetBalance());

            // TESTE
            Block block3 = new Block(block2.hash);

            Debug.WriteLine("\nA carteiraB está tentando enviar fundos (20) para a carteiraA...");
            block1.AddTransaction(walletB.SendFunds(walletA.keyParameters, 20));
            AddBlock(block3);
            Debug.WriteLine("\nO saldo da carteiraA é: " + walletA.GetBalance());
            Debug.WriteLine("O saldo da carteiraB é: " + walletB.GetBalance());

            IsChainValid();

            Debug.WriteLine("\n-------------------------------------------------------------------------------\n");

            // --- INICIALIZAÇÃO DO WINDOWS FORMS ---

            Application.EnableVisualStyles();
            Application.Run(new AppMainWindow());

            // --------------------------------------
        }