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); }
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); } }
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"); }
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 }
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(); }
internal HttpSafe(HttpSafeMonitor httpSafeMonitor) : base(httpSafeMonitor.BaseSafe, httpSafeMonitor.AddressCount) { HttpSafeMonitor = httpSafeMonitor; }