public async Task <bool> Update(WalletAggregate wallet, SecureString password)
        {
            if (wallet == null)
            {
                throw new ArgumentNullException(nameof(wallet));
            }

            if (password == null)
            {
                throw new ArgumentNullException(nameof(password));
            }

            var record = await _currentDbContext.Wallets.FirstOrDefaultAsync(w => w.Name == wallet.Name).ConfigureAwait(false);

            if (record == null)
            {
                throw new DataWalletException(ErrorCodes.DoesntExist);
            }

            var walletJson = ToJson(wallet);

            record.SerializedContent = Protect(walletJson, password);
            await _currentDbContext.SaveChangesAsync().ConfigureAwait(false);

            return(true);
        }
        public async Task <bool> Add(WalletAggregate wallet, SecureString password)
        {
            if (wallet == null)
            {
                throw new ArgumentNullException(nameof(wallet));
            }

            if (password == null)
            {
                throw new ArgumentNullException(nameof(password));
            }

            var exists = await _currentDbContext.Wallets.AnyAsync(w => w.Name == wallet.Name).ConfigureAwait(false);

            if (exists)
            {
                throw new DataWalletException(ErrorCodes.AlreadyExists);
            }

            var walletJson = ToJson(wallet);
            var record     = new Wallet(wallet.Name, Protect(walletJson, password));

            _currentDbContext.Wallets.Add(record);
            await _currentDbContext.SaveChangesAsync().ConfigureAwait(false);

            return(true);
        }
        private void CreateWallet(object sender, EventArgs e)
        {
            if (_viewModel.Password == null || string.IsNullOrWhiteSpace(_viewModel.WalletName))
            {
                return;
            }

            var record = new WalletAggregate
            {
                Name = _viewModel.WalletName
            };

            _viewModel.ToggleLoading();
            _walletRepository.Add(record, _viewModel.Password).ContinueWith((r) =>
            {
                try
                {
                    var b = r.Result;
                }
                catch
                {
                    _viewModel.DisplayMessage("Error", "An error occured while trying to create the wallet");
                }
                finally
                {
                    _viewModel.ToggleLoading();
                }
            });
        }
Пример #4
0
        public void SetAuthenticatedWallet(WalletAggregate wallet)
        {
            if (wallet == null)
            {
                throw new ArgumentNullException(nameof(wallet));
            }

            _authenticatedWallet = wallet;
        }
        private static JObject ToJson(WalletAggregate wallet)
        {
            var result = new JObject();

            result.Add("name", wallet.Name);
            result.Add("network", (int)wallet.Network);
            if (wallet.Addresses != null)
            {
                var arr = new JArray();
                foreach (var addr in wallet.Addresses)
                {
                    arr.Add(addr.GetJson());
                }

                result.Add("addrs", arr);
            }

            return(result);
        }
Пример #6
0
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddCore();
            serviceCollection.AddSqlite("Data Source=genesis.db");

            serviceCollection.AddTransient <HomePage>();
            serviceCollection.AddTransient <CreateWalletPage>();
            serviceCollection.AddTransient <AuthenticateWalletPage>();
            serviceCollection.AddTransient <WalletPage>();
            serviceCollection.AddTransient <BlockChainInformation>();
            serviceCollection.AddTransient <WalletInformation>();
            serviceCollection.AddTransient <MemoryPoolInformation>();
            serviceCollection.AddTransient <SmartContractPage>();

            serviceCollection.AddTransient <HomePageViewModel>();
            serviceCollection.AddTransient <CreateWalletViewModel>();
            serviceCollection.AddTransient <WalletPageViewModel>();
            serviceCollection.AddTransient <WalletInformationViewModel>();

            serviceCollection.AddTransient <IWalletHelper, WalletHelper>();

            serviceCollection.AddSingleton <IDialogCoordinator>(DialogCoordinator.Instance);
            var serviceProvider = serviceCollection.BuildServiceProvider();

            using (var serviceScope = serviceProvider.GetRequiredService <IServiceScopeFactory>().CreateScope())
            {
                var currentDbContext = serviceScope.ServiceProvider.GetService <CurrentDbContext>();
                currentDbContext.Database.EnsureCreated();
                var genesisWalletAggregate = new WalletAggregate
                {
                    Name      = "genesis",
                    Addresses = new List <WalletAggregateAddress>
                    {
                        new WalletAggregateAddress
                        {
                            Hash    = "12M1Wng2vRCT7z3uZcjDYb5i9bJDx4ZEKyVMhEq8",
                            Network = Networks.MainNet,
                            Key     = Key.Deserialize(new BigInteger("66661394595692466950200829442443674598224300882267065208709422638481412972116609477112206002430829808784107536250360432119209033266013484787698545014625057"), new BigInteger("43102461949956883352376427470284148089747996528740865531180015053863743793176"))
                        }
                    }
                };
                var clientWalletAggregate = new WalletAggregate
                {
                    Name      = "client",
                    Addresses = new List <WalletAggregateAddress>
                    {
                        new WalletAggregateAddress
                        {
                            Hash    = "12K5LnVWKCu9QGyB39uGAgVSAfBs33PKS96HSL93",
                            Network = Networks.MainNet,
                            Key     = Key.Deserialize(new BigInteger("55821205064713516294703127430400616105539980828115464481216494737343536494861392791366661233462519462101585894103124424523076975002332234845254777599135465"), new BigInteger("12865140029298721655663530581243123640092469699773563307406591049514067995825"))
                        }
                    }
                };

                var repo = serviceProvider.GetService <IWalletRepository>();
                var fact = serviceProvider.GetService <IBlockChainFactory>();
                repo.Add(clientWalletAggregate, "password".ToSecureString());
                repo.Add(genesisWalletAggregate, "zvhab8rijwl7vwma".ToSecureString());
            }

            MainWin mainWindow = ActivatorUtilities.CreateInstance <MainWin>(serviceProvider);

            mainWindow.Show();
        }