Пример #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
        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();
        }