示例#1
0
        public void HttpMonitorWorks()
        {
            var monitor = new HttpMonitor(Network.MainNet);
            var history = monitor.GetAddressHistory("15emqTTjzCVRFWTRyBiQUgBnK3DBhShFBU");

            var recordCount = history.Records.Count;

            Assert.True(recordCount > 16);
            Assert.Equal(history.Records.Last().Amount, 0.03802378m);
            Assert.Equal(history.Records[recordCount - 2].TransactionId,
                         "1798a59c37828db66e8c4d57a90324fa8039aef72b872df5876edfb31b102c5f");
            Assert.Equal(history.Records[recordCount - 3].Amount, -0.06335627m);
            Assert.True(history.Records[recordCount - 3].Confirmed);

            string mnemonic;
            var    safe = Safe.Create(out mnemonic, "", "foo", Network.MainNet);

            safe.DeleteWalletFile();
            var history2 = monitor.GetAddressHistory(safe.GetAddress(2));

            Assert.True(history2.Records.Count == 0);

            var balanceInfo  = monitor.GetAddressBalanceInfo("15emqTTjzCVRFWTRyBiQUgBnK3DBhShFBU");
            var balanceInfo2 = monitor.GetAddressBalanceInfo(safe.GetAddress(2));

            Assert.Equal(balanceInfo.Balance, history.TotalReceived - history.TotalSpent);
            Assert.Equal(balanceInfo2.Balance, history2.TotalReceived - history2.TotalSpent);

            var confirmedBalance   = history.Records.Where(record => record.Confirmed).Sum(record => record.Amount);
            var unconfirmedBalance = history.Records.Where(record => !record.Confirmed).Sum(record => record.Amount);

            Assert.Equal(balanceInfo.Unconfirmed, unconfirmedBalance);
            Assert.Equal(balanceInfo.Confirmed, confirmedBalance);
        }
示例#2
0
        private static void TemporarilyTestHttpMonitor()
        {
            var monitor = new HttpMonitor(Network.TestNet);

            // var privateKey = "tprv8f3GDAef8nhKvQbC5KGEerqDGB2s2KgMNHS4kLDXXP7c8M6ZcxyEzyvsVA9C1ss9Fj5QEiCiKbyEfD97duhXjc2he58dDicMtLs3YfwNJb2";
            var address = "miLGbZvQ5sEd5BKCPXjEJzknMdENuFEzCy";

            var bal = monitor.GetAddressBalanceInfo(address);
            var his = monitor.GetAddressHistory(address);

            WriteLine($"Balance: {bal.Balance}");
            WriteLine($"Confirmed balance: {bal.Confirmed}");
            WriteLine($"Unconfirmed balance: {bal.Unconfirmed}");
            WriteLine($"TotalReceived: {his.TotalReceived}");
            WriteLine($"TotalSpent: {his.TotalSpent}");
            WriteLine($"TotalReceived - TotalSpent: {his.TotalReceived - his.TotalSpent}");
            WriteLine($"TotalReceived - TotalSpent == Balance: {his.TotalReceived - his.TotalSpent == bal.Balance}");
            WriteLine();
            WriteLine("RECORDS:");

            foreach (var record in his.Records)
            {
                WriteLine();
                WriteLine($"DateTime: {record.DateTime}");
                WriteLine($"Amount: {record.Amount}");
                WriteLine($"Confirmed: {record.Confirmed}");
            }

            //var spender = new HttpBuilder(Network.TestNet);
            //var tx = spender.BuildTransaction(
            //    new List<string> { privateKey },
            //    new List<AddressAmountPair>
            //    {
            //        new AddressAmountPair
            //        {
            //            //Address = "miLGbZvQ5sEd5BKCPXjEJzknMdENuFEzCy",
            //            Address = "miNu2YVQLSqFcw91fRVuNHMmGkStMd5SFj",
            //            Amount = 1
            //        }
            //    });
            //Console.WriteLine();
            //Console.WriteLine("Transaction created");
            //spender.Send(tx.Id);
            //Console.WriteLine("Transaction sent");
        }
示例#3
0
        private static void Part2Lesson1()
        {
            var network = Network.MainNet;

            // HttpMonitor can monitor The Blockchain through HTTP (QBitNinja)
            var httpMonitor = new HttpMonitor(network);

            // Checking address balances
            var balanceInfo = httpMonitor.GetAddressBalanceInfo("1ENCTCkqoJqy2XZ2m2Dy1bRax7hsSnC5Fc");
            WriteLine($"Address balance: {balanceInfo.Balance}"); // 0,05474889
            WriteLine($"Confirmed balance: {balanceInfo.Confirmed}"); // 0
            WriteLine($"Unconfirmed balance: {balanceInfo.Unconfirmed}"); // 0,05474889

            // Get history of an address
            var history = httpMonitor.GetAddressHistory("1ENCTCkqoJqy2XZ2m2Dy1bRax7hsSnC5Fc");

            WriteLine("Number of transactions: " + history.Records.Count);

            // Exercise: are all transaction confirmed?
            var allTransactionsConfirmed = true;
            foreach (var record in history.Records)
            {
                WriteLine(record.TransactionId + " : " + record.Amount);
                allTransactionsConfirmed = allTransactionsConfirmed && record.Confirmed;
            }
            WriteLine("All transactions are confirmed: " + allTransactionsConfirmed);

            // Exercise: get the balance of the address
            WriteLine("Total received - Total spent = Balance");
            WriteLine(history.TotalReceived + " - " + history.TotalSpent + " = " +
                      (history.TotalReceived - history.TotalSpent));

            // Get some data from the transaction
            var transactionInfo1 = httpMonitor.GetTransactionInfo(history.Records.First().TransactionId);

            WriteLine("txid: " + transactionInfo1.Id);
            WriteLine("Network: " + transactionInfo1.Network);
            WriteLine("Confirmed: " + transactionInfo1.Confirmed);
            WriteLine("Total amount of all inputs: " + transactionInfo1.TotalInputAmount);
            WriteLine("Total amount of all outputs: " + transactionInfo1.TotalOutputAmount);
            WriteLine("Fee : " + transactionInfo1.Fee);

            WriteLine(Environment.NewLine + "Input addresses and amounts: ");
            foreach (var input in transactionInfo1.Inputs)
            {
                WriteLine(input.Amount + " " + input.Address);
            }
            WriteLine(Environment.NewLine + "Output addresses and amounts: ");
            foreach (var output in transactionInfo1.Outputs)
            {
                WriteLine(output.Amount + " " + output.Address);
            }

            // Sometimes my API can't fully process a transaction, because it has OP_RETURN for example
            // It should not be a concern for a Bitcoin wallet that purely handles money, if a transaction output or input has not been added
            // that means it has some other purpose, a wallet API can dismiss it
            // This tx is exotic (has OP_RETURN)
            var transactionInfo2 =
                httpMonitor.GetTransactionInfo("8bae12b5f4c088d940733dcd1455efc6a3a69cf9340e17a981286d3778615684");
            WriteLine(transactionInfo2.Id);
            WriteLine("There are exotic inputs or outputs, so not all of them have been added successfully: "
                      + Environment.NewLine + !transactionInfo2.AllInOutsAdded);
        }