예제 #1
0
        public void HttpSafeBuilderBuildSpendAllTransactionWorks(ConnectionType propagationConnectionType)
        {
            Safe safe = Safe.Recover("cabbage drive wrestle fury goddess click riot mercy shy size error short", "",
                                     "foo", Network.TestNet);

            safe.DeleteWalletFile();
            var monitor = new HttpSafeMonitor(safe, 100);

            while (monitor.InitializationState != State.Ready)
            {
                Thread.Sleep(100);
            }
            Assert.True(monitor.GetSafeBalanceInfo().Balance > 0);

            var          httpSafeBuilder = new HttpSafeBuilder(monitor.Safe);
            const string toAddress       = "n16Yt8jpDf34nMbdJyZh1iqZkZFtAoLMbW";
            const string toPrivateKey    = "tprv8fAkYGDbNMNLLSWvmXshBiMQuEuEjt5ZMxiX1CNrV5hQCQLFqmpt3urpzrvgJHCwD7bJYMrSMcy8UPa4P3KnB84u2t4rZL874E79MRon4bU";

            var tx1 = httpSafeBuilder.BuildSpendAllTransaction(toAddress);

            Sender.Send(propagationConnectionType, tx1, tryTimes: 3);
            Assert.True(monitor.GetSafeBalanceInfo().Balance == 0);

            var httpBuilder = new HttpBuilder(monitor.Network);
            var tx2         = httpBuilder.BuildSpendAllTransaction(
                new List <string>
            {
                toPrivateKey
            },
                monitor.Safe.GetAddress(0));

            Sender.Send(propagationConnectionType, tx2, tryTimes: 3);
            Assert.True(monitor.GetSafeBalanceInfo().Balance > 0);
        }
예제 #2
0
        public void EmptySafeHttpMonitorWorks()
        {
            string mnemonic;
            var    safe = Safe.Create(out mnemonic, "", "foo", Network.MainNet);

            safe.DeleteWalletFile();

            var monitor = new HttpSafeMonitor(safe, 10);

            while (monitor.InitializationProgressPercent != 100)
            {
                Thread.Sleep(100);
            }

            Assert.Equal(monitor.AddressCount, 10);
            Assert.Equal(monitor.InitializationState, State.Ready);

            Assert.Equal(monitor.Safe.NotEmptyAddresses.Count, 0);
            Assert.Equal(monitor.Safe.UnusedAddresses.Count, 10);
            Assert.Equal(monitor.Safe.AddressCount, 10);
            Assert.Equal(monitor.Safe.Addresses.Count, 10);

            Assert.Equal(monitor.SafeHistory.Records.Count, 0);
            Assert.Equal(monitor.SafeHistory.TotalReceived, 0);
            Assert.Equal(monitor.SafeHistory.TotalSpent, 0);
            Assert.Equal(monitor.SafeBalanceInfo.MonitoredAddressCount, 10);
            Assert.Equal(monitor.SafeBalanceInfo.Balance, 0);
            Assert.Equal(monitor.SafeBalanceInfo.Confirmed, 0);
            Assert.Equal(monitor.SafeBalanceInfo.Unconfirmed, 0);
            foreach (var balance in monitor.SafeBalanceInfo.AddressBalances)
            {
                Assert.Equal(balance.Balance, 0);
            }
        }
예제 #3
0
        private static void TemporarilyTestHttpSafeMonitor()
        {
            var network = Network.TestNet;

            #region SetupSafe

            string walletFilePath;
            if (network == Network.MainNet)
                walletFilePath = "MainNetHidden2.wallet";
            else
                walletFilePath = "TestNetHidden2.wallet";

            Safe safe;
            if (File.Exists(walletFilePath))
            {
                safe = Safe.Load("password", walletFilePath);
                if (safe.Network != network)
                    throw new Exception("Wrong network");
            }
            else
            {
                string mnemonic;
                safe = Safe.Create(out mnemonic, "password", walletFilePath, network);
            }

            WriteLine("Safe has been set up");

            #endregion

            #region InitializeHttpSafeMonitor

            var safeMonitor = new HttpSafeMonitor(safe, addressCount: 100);

            // Report initialization progress
            safeMonitor.InitializationStateChanged += delegate(object sender, EventArgs args)
            {
                var monitor = (HttpSafeMonitor) sender;
                WriteLine($"Initialization state: {monitor.InitializationState}");
            };
            safeMonitor.InitializationProgressPercentChanged += delegate(object sender, EventArgs args)
            {
                var monitor = (HttpSafeMonitor) sender;
                WriteLine($"Initializing: {monitor.InitializationProgressPercent}%");
            };

            // Let's wait until initialized
            while (safeMonitor.InitializationState != State.Ready)
                Thread.Sleep(100);

            WriteLine("SafeMonitor is ready to work with");

            #endregion

            var bal = safeMonitor.SafeBalanceInfo;
            var his = safeMonitor.SafeHistory;

            WriteLine();
            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}");
            }

            safeMonitor.BalanceChanged += delegate(object sender, EventArgs args)
            {
                var monitor = (HttpSafeMonitor) sender;

                WriteLine();
                WriteLine("Change happened");
                WriteLine($"Balance: {monitor.SafeBalanceInfo.Balance}");
                WriteLine($"Confirmed balance: {monitor.SafeBalanceInfo.Confirmed}");
                WriteLine($"Unconfirmed balance: {monitor.SafeBalanceInfo.Unconfirmed}");
                WriteLine($"TotalReceived: {monitor.SafeHistory.TotalReceived}");
                WriteLine($"TotalSpent: {monitor.SafeHistory.TotalSpent}");
                WriteLine(
                    $"TotalReceived - TotalSpent: {monitor.SafeHistory.TotalReceived - monitor.SafeHistory.TotalSpent}");
                WriteLine(
                    $"TotalReceived - TotalSpent == Balance: {monitor.SafeHistory.TotalReceived - monitor.SafeHistory.TotalSpent == monitor.SafeBalanceInfo.Balance}");
                WriteLine();
                WriteLine("Last record:");
                var record = monitor.SafeHistory.Records.First();
                WriteLine($"DateTime: {record.DateTime}");
                WriteLine($"Amount: {record.Amount}");
                WriteLine($"Confirmed: {record.Confirmed}");
            };
            WriteLine();
            WriteLine("Subscribed to changes");

            //var spender = new HttpSafeBuilder(safeMonitor.Safe);
            //var tx = spender.BuildTransaction(
            //    new List<AddressAmountPair>
            //    {
            //        new AddressAmountPair
            //        {
            //            Address = safeMonitor.Safe.GetAddress(99), // internal address
            //            //Address = "n2eMqTT929pb1RDNuqEnxdaLau1rxy3efi", // outer address
            //            Amount = 1
            //        }
            //    });
            //Console.WriteLine();
            //Console.WriteLine("Transaction created");
            //spender.Send(tx.Id);
            //Console.WriteLine("Transaction sent");
        }
예제 #4
0
        private static void Part2Lesson2()
        {
            #region SetupSafe

            var network = Network.TestNet;

            string walletFilePath;
            if (network == Network.MainNet)
                walletFilePath = "MainNetHidden.wallet";
            else
                walletFilePath = "TestNetHidden.wallet";

            Safe safe;
            if (File.Exists(walletFilePath))
            {
                safe = Safe.Load("password", walletFilePath);
                if (safe.Network != network)
                    throw new Exception("Wrong network");
            }
            else
            {
                string mnemonic;
                safe = Safe.Create(out mnemonic, "password", walletFilePath, network);
            }

            #endregion

            #region InitializeHttpSafeMonitor

            var safeMonitor = new HttpSafeMonitor(safe, addressCount: 100);


            // Report initialization progress
            safeMonitor.InitializationStateChanged += delegate(object sender, EventArgs args)
            {
                var monitor = (HttpSafeMonitor) sender;
                WriteLine($"Initialization state: {monitor.InitializationState}");
            };
            safeMonitor.InitializationProgressPercentChanged += delegate(object sender, EventArgs args)
            {
                var monitor = (HttpSafeMonitor) sender;
                WriteLine($"Initializing: {monitor.InitializationProgressPercent}%");
            };

            // Let's wait until initialized
            while (safeMonitor.InitializationState != State.Ready)
                Thread.Sleep(100);

            #endregion

            var safeBalanceInfo = safeMonitor.SafeBalanceInfo;
            WriteLine($"Number of monitored addresses: {safeBalanceInfo.MonitoredAddressCount}");
            WriteLine($"Balance: {safeBalanceInfo.Balance}");
            WriteLine($"Confirmed: {safeBalanceInfo.Confirmed}");
            WriteLine($"Unconfirmed: {safeBalanceInfo.Unconfirmed}");
            foreach (var balanceInfo in safeBalanceInfo.AddressBalances)
            {
                if (balanceInfo.Balance != 0)
                    WriteLine($"{balanceInfo.Address}: {balanceInfo.Balance}");
            }

            var history = safeMonitor.SafeHistory;

            WriteLine("totalreceived: " + history.TotalReceived);
            WriteLine("totalspent: " + history.TotalSpent);
            foreach (var record in history.Records)
            {
                WriteLine(record.Address + " " + record.Amount);
            }

            #region ListeningToChanges

            WriteLine($"Balance of safe: {safeMonitor.SafeBalanceInfo.Balance}");
            WriteLine($"Confirmed balance of safe: {safeMonitor.SafeBalanceInfo.Confirmed}");
            WriteLine($"Unconfirmed balance of safe: {safeMonitor.SafeBalanceInfo.Unconfirmed}");

            safeMonitor.BalanceChanged += delegate(object sender, EventArgs args)
            {
                var monitor = (HttpSafeMonitor) sender;

                WriteLine();
                WriteLine("Change happened");
                WriteLine($"Balance of safe: {monitor.SafeBalanceInfo.Balance}");
                WriteLine($"Confirmed balance of safe: {monitor.SafeBalanceInfo.Confirmed}");
                WriteLine($"Unconfirmed balance of safe: {monitor.SafeBalanceInfo.Unconfirmed}");
                WriteLine(
                    $"TransacitonId: {monitor.SafeHistory.Records.OrderBy(x => x.DateTime).Last().TransactionId}");
            };

            #endregion
        }
예제 #5
0
        private static void TemporarilySendTest()
        {
            var network = Network.TestNet;

            #region SetupSafe

            string walletFilePath;
            if (network == Network.MainNet)
                walletFilePath = "MainNetHidden2.wallet";
            else
                walletFilePath = "TestNetHidden2.wallet";

            Safe safe;
            if (File.Exists(walletFilePath))
            {
                safe = Safe.Load("password", walletFilePath);
                if (safe.Network != network)
                    throw new Exception("Wrong network");
            }
            else
            {
                string mnemonic;
                safe = Safe.Create(out mnemonic, "password", walletFilePath, network);
            }

            WriteLine("Safe has been set up");

            #endregion

            #region InitializeHttpSafeMonitor

            var safeMonitor = new HttpSafeMonitor(safe, addressCount: 100);

            // Report initialization progress
            safeMonitor.InitializationStateChanged += delegate(object sender, EventArgs args)
            {
                var monitor = (HttpSafeMonitor) sender;
                WriteLine($"Initialization state: {monitor.InitializationState}");
            };
            safeMonitor.InitializationProgressPercentChanged += delegate(object sender, EventArgs args)
            {
                var monitor = (HttpSafeMonitor) sender;
                WriteLine($"Initializing: {monitor.InitializationProgressPercent}%");
            };

            // Let's wait until initialized
            while (safeMonitor.InitializationState != State.Ready)
                Thread.Sleep(100);

            WriteLine("SafeMonitor is ready to work with");

            #endregion

            #region FeedBack

            var bal = safeMonitor.SafeBalanceInfo;
            var his = safeMonitor.SafeHistory;

            WriteLine();
            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}");
            }

            safeMonitor.BalanceChanged += delegate(object sender, EventArgs args)
            {
                var monitor = (HttpSafeMonitor) sender;

                WriteLine();
                WriteLine("Change happened");
                WriteLine($"Balance: {monitor.SafeBalanceInfo.Balance}");
                WriteLine($"Confirmed balance: {monitor.SafeBalanceInfo.Confirmed}");
                WriteLine($"Unconfirmed balance: {monitor.SafeBalanceInfo.Unconfirmed}");
                WriteLine($"TotalReceived: {monitor.SafeHistory.TotalReceived}");
                WriteLine($"TotalSpent: {monitor.SafeHistory.TotalSpent}");
                WriteLine(
                    $"TotalReceived - TotalSpent: {monitor.SafeHistory.TotalReceived - monitor.SafeHistory.TotalSpent}");
                WriteLine(
                    $"TotalReceived - TotalSpent == Balance: {monitor.SafeHistory.TotalReceived - monitor.SafeHistory.TotalSpent == monitor.SafeBalanceInfo.Balance}");
                WriteLine();
                WriteLine("Last record:");
                var record = monitor.SafeHistory.Records.First();
                WriteLine($"DateTime: {record.DateTime}");
                WriteLine($"Amount: {record.Amount}");
                WriteLine($"Confirmed: {record.Confirmed}");
            };
            WriteLine();
            WriteLine("Subscribed to changes");

            #endregion

            foreach (var addressBalanceInfo in safeMonitor.SafeBalanceInfo.AddressBalances)
            {
                if (addressBalanceInfo.Balance != 0 || addressBalanceInfo.Unconfirmed != 0)
                {
                    WriteLine($"{addressBalanceInfo.Address} : {addressBalanceInfo.Balance}");
                    WriteLine($"Confirmed: {addressBalanceInfo.Confirmed} Unconfirmed: {addressBalanceInfo.Unconfirmed}");
                }
            }

            var spender = new HttpSafeBuilder(safeMonitor.Safe);

            spender.TransactionBuildStateChanged += delegate(object sender, EventArgs args)
            {
                var currentSpender = sender as HttpSafeBuilder;
                WriteLine(currentSpender.TransactionBuildState);
            };

            WriteLine("Create transaction");
            var tx = spender.BuildTransaction(
                new List<AddressAmountPair>
                {
                    new AddressAmountPair
                    {
                        Address = "2NBY5BrXhnWESaLqxYvRWUZ8xzDF3aZqX7S",
                        Amount = 0.1m
                    },
                    new AddressAmountPair
                    {
                        Address = "2N66DDrmjDCMM3yMSYtAQyAqRtasSkFhbmX",
                        Amount = 0.1m
                    }
                },
                FeeType.Fastest,
                "keep the change you filthy animal"
                );
            WriteLine("Transaction created");
            Sender.Send(ConnectionType.RandomNode, tx);
            WriteLine("Transaction sent");

            ReadLine();
        }
예제 #6
0
 internal HttpSafe(HttpSafeMonitor httpSafeMonitor)
     : base(httpSafeMonitor.BaseSafe, httpSafeMonitor.AddressCount)
 {
     HttpSafeMonitor = httpSafeMonitor;
 }