コード例 #1
0
        public void UnlockAccounts([ValueSource(nameof(UnlockAccountsTestCases))] UnlockAccountsTest test)
        {
            IKeyStoreConfig keyStoreConfig = Substitute.For <IKeyStoreConfig>();

            keyStoreConfig.Passwords.Returns(test.Passwords);
            keyStoreConfig.PasswordFiles.Returns(test.PasswordFiles.Select(f => f.Name).ToArray());
            keyStoreConfig.UnlockAccounts.Returns(test.UnlockAccounts.Select(a => a.ToString()).ToArray());

            IFileSystem fileSystem = Substitute.For <IFileSystem>();

            foreach (var passwordFile in test.PasswordFiles)
            {
                fileSystem.File.Exists(passwordFile.Name).Returns(passwordFile.Exists);
                fileSystem.File.ReadAllText(passwordFile.Name).Returns(passwordFile.Content);
            }

            IWallet wallet = Substitute.For <IWallet>();

            var unlocker = new AccountUnlocker(keyStoreConfig, wallet, fileSystem, LimboLogs.Instance);

            unlocker.UnlockAccounts();

            for (var index = 0; index < test.UnlockAccounts.Length; index++)
            {
                var account          = test.UnlockAccounts[index];
                var expectedPassword = test.ExpectedPasswords[index];
                wallet.Received(1).UnlockAccount(account, Arg.Is <SecureString>(s => s.Unsecure() == expectedPassword), TimeSpan.FromDays(1000));
            }
        }
コード例 #2
0
 public NodeKeyManager(ICryptoRandom cryptoRandom, IKeyStore keyStore, IKeyStoreConfig config, ILogManager logManager)
 {
     _cryptoRandom = cryptoRandom ?? throw new ArgumentNullException(nameof(cryptoRandom));
     _keyStore     = keyStore ?? throw new ArgumentNullException(nameof(keyStore));
     _config       = config ?? throw new ArgumentNullException(nameof(config));
     _logger       = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
コード例 #3
0
 public AccountUnlocker(IKeyStoreConfig config, IWallet wallet, ILogManager logManager, IPasswordProvider passwordProvider)
 {
     _config           = config ?? throw new ArgumentNullException(nameof(config));
     _wallet           = wallet ?? throw new ArgumentNullException(nameof(wallet));
     _logger           = logManager?.GetClassLogger <AccountUnlocker>() ?? throw new ArgumentNullException(nameof(logManager));
     _passwordProvider = passwordProvider ?? throw new ArgumentNullException(nameof(passwordProvider));
 }
コード例 #4
0
        public void Initialize()
        {
            NetworkNodeDecoder.Init();
            SetupNodeIds();

            var logManager = NullLogManager.Instance;

            //setting config to store 3 nodes in a bucket and for table to have one bucket//setting config to store 3 nodes in a bucket and for table to have one bucket

            _configurationProvider = new ConfigProvider();
            INetworkConfig networkConfig = _configurationProvider.GetConfig <INetworkConfig>();

            networkConfig.PongTimeout  = 50;
            networkConfig.BucketSize   = 3;
            networkConfig.BucketsCount = 1;

            IKeyStoreConfig keyStoreConfig = _configurationProvider.GetConfig <IKeyStoreConfig>();
            IStatsConfig    statsConfig    = _configurationProvider.GetConfig <IStatsConfig>();

            var calculator = new NodeDistanceCalculator(networkConfig);

            _nodeTable = new NodeTable(new FileKeyStore(keyStoreConfig, new EthereumJsonSerializer(), new AesEncrypter(keyStoreConfig, logManager), new CryptoRandom(), logManager), calculator, networkConfig, logManager);
            _nodeTable.Initialize(TestItem.PublicKeyA);

            _timestamp = new Timestamp();

            var evictionManager  = new EvictionManager(_nodeTable, logManager);
            var lifecycleFactory = new NodeLifecycleManagerFactory(_nodeTable, new DiscoveryMessageFactory(networkConfig, _timestamp), evictionManager, new NodeStatsManager(statsConfig, logManager), networkConfig, logManager);

            _udpClient = Substitute.For <IMessageSender>();

            _discoveryManager = new DiscoveryManager(lifecycleFactory, _nodeTable, new NetworkStorage("test", networkConfig, logManager, new PerfService(logManager)), networkConfig, logManager);
            _discoveryManager.MessageSender = _udpClient;
        }
コード例 #5
0
        public async Task Execute(CancellationToken cancellationToken)
        {
            // why is the await Task.Run here?
            await Task.Run(() =>
            {
                IKeyStoreConfig keyStoreConfig = _context.Config <IKeyStoreConfig>();
                INetworkConfig networkConfig   = _context.Config <INetworkConfig>();

                AesEncrypter encrypter = new AesEncrypter(
                    keyStoreConfig,
                    _context.LogManager);

                _context.KeyStore = new FileKeyStore(
                    keyStoreConfig,
                    _context.EthereumJsonSerializer,
                    encrypter,
                    _context.CryptoRandom,
                    _context.LogManager);

                _context.Wallet = _context.Config <IInitConfig>() switch
                {
                    var config when config.EnableUnsecuredDevWallet&& config.KeepDevWalletInMemory
                    => new DevWallet(_context.Config <IWalletConfig>(), _context.LogManager),
                    var config when config.EnableUnsecuredDevWallet&& !config.KeepDevWalletInMemory
                    => new DevKeyStoreWallet(_context.KeyStore, _context.LogManager),
                    _ => NullWallet.Instance
                };

                INodeKeyManager nodeKeyManager = new NodeKeyManager(_context.CryptoRandom, _context.KeyStore, keyStoreConfig, _context.LogManager);
                _context.NodeKey = nodeKeyManager.LoadNodeKey();
                _context.Enode   = new Enode(_context.NodeKey.PublicKey, IPAddress.Parse(networkConfig.ExternalIp), networkConfig.P2PPort);

                _context.LogManager.SetGlobalVariable("enode", _context.Enode.ToString());
            });
        }
コード例 #6
0
 public AccountUnlocker(IKeyStoreConfig config, IWallet wallet, IFileSystem fileSystem, ILogManager logManager)
 {
     _config     = config ?? throw new ArgumentNullException(nameof(config));
     _wallet     = wallet ?? throw new ArgumentNullException(nameof(wallet));
     _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));
     _logger     = logManager?.GetClassLogger <AccountUnlocker>() ?? throw new ArgumentNullException(nameof(logManager));
 }
コード例 #7
0
 public static int FindUnlockAccountIndex(this IKeyStoreConfig keyStoreConfig, Address address)
 {
     return(Array.IndexOf(
                (keyStoreConfig.UnlockAccounts ?? Array.Empty <string>())
                .Select(a => a.ToUpperInvariant())
                .ToArray(),
                address.ToString().ToUpperInvariant()));
 }
コード例 #8
0
 public FileKeyStore(IKeyStoreConfig keyStoreConfig, IJsonSerializer jsonSerializer, ISymmetricEncrypter symmetricEncrypter, ICryptoRandom cryptoRandom, ILogManager logManager)
 {
     _logger              = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _config              = keyStoreConfig ?? throw new ArgumentNullException(nameof(keyStoreConfig));
     _jsonSerializer      = jsonSerializer ?? throw new ArgumentNullException(nameof(jsonSerializer));
     _symmetricEncrypter  = symmetricEncrypter ?? throw new ArgumentNullException(nameof(symmetricEncrypter));
     _cryptoRandom        = cryptoRandom ?? throw new ArgumentNullException(nameof(cryptoRandom));
     _keyStoreEncoding    = Encoding.GetEncoding(_config.KeyStoreEncoding);
     _privateKeyGenerator = new PrivateKeyGenerator(_cryptoRandom);
 }
コード例 #9
0
ファイル: FileKeyStore.cs プロジェクト: tr002196/nethermind
 public FileKeyStore(IKeyStoreConfig keyStoreConfig, IJsonSerializer jsonSerializer,
                     ISymmetricEncrypter symmetricEncrypter, ICryptoRandom cryptoRandom, ILogManager logManager)
 {
     _logger             = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _config             = keyStoreConfig ?? throw new ArgumentNullException(nameof(keyStoreConfig));
     _jsonSerializer     = jsonSerializer ?? throw new ArgumentNullException(nameof(jsonSerializer));
     _symmetricEncrypter = symmetricEncrypter ?? throw new ArgumentNullException(nameof(symmetricEncrypter));
     _cryptoRandom       = cryptoRandom ?? throw new ArgumentNullException(nameof(cryptoRandom));
     _keyStoreEncoding   = _config.KeyStoreEncoding.Equals("UTF-8", StringComparison.InvariantCultureIgnoreCase)
         ? new UTF8Encoding(false)
         : Encoding.GetEncoding(_config.KeyStoreEncoding);
     _privateKeyGenerator = new PrivateKeyGenerator(_cryptoRandom);
 }
コード例 #10
0
        public void Initialize()
        {
            var config = new VaultConfig();

            _keyStoreConfig             = new KeyStoreConfig();
            _keyStoreIOSettingsProvider = new VaultKeyStoreIOSettingsProvider(config);

            ILogManager logger = LimboLogs.Instance;

            _serializer   = new EthereumJsonSerializer();
            _cryptoRandom = new CryptoRandom();
            _store        = new FileKeyStore(_keyStoreConfig, _serializer, new AesEncrypter(_keyStoreConfig, logger), _cryptoRandom, logger, _keyStoreIOSettingsProvider);
        }
コード例 #11
0
 public NodeKeyManager(
     ICryptoRandom cryptoRandom,
     IKeyStore keyStore,
     IKeyStoreConfig config,
     ILogManager logManager,
     IPasswordProvider passwordProvider,
     IFileSystem fileSystem)
 {
     _cryptoRandom     = cryptoRandom ?? throw new ArgumentNullException(nameof(cryptoRandom));
     _keyStore         = keyStore ?? throw new ArgumentNullException(nameof(keyStore));
     _config           = config ?? throw new ArgumentNullException(nameof(config));
     _logger           = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _passwordProvider = passwordProvider ?? throw new ArgumentNullException(nameof(passwordProvider));
     _fileSystem       = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem));
 }
コード例 #12
0
        public void Initialize()
        {
            _config      = new KeyStoreConfig();
            _keyStoreDir = _config.KeyStoreDirectory;
            if (!Directory.Exists(_keyStoreDir))
            {
                Directory.CreateDirectory(_keyStoreDir);
            }

            ILogManager logManager = NullLogManager.Instance;

            _serializer   = new EthereumJsonSerializer();
            _cryptoRandom = new CryptoRandom();
            _store        = new FileKeyStore(_config, _serializer, new AesEncrypter(_config, logManager), _cryptoRandom, logManager);

            var testsContent = File.ReadAllText("basic_tests.json");

            _testsModel = _serializer.Deserialize <KeyStoreTestsModel>(testsContent);
        }
コード例 #13
0
        public async Task Execute(CancellationToken cancellationToken)
        {
            var(_get, _set) = _api.ForInit;
            // why is the await Task.Run here?
            await Task.Run(() =>
            {
                IKeyStoreConfig keyStoreConfig = _get.Config <IKeyStoreConfig>();
                INetworkConfig networkConfig   = _get.Config <INetworkConfig>();

                AesEncrypter encrypter = new AesEncrypter(
                    keyStoreConfig,
                    _get.LogManager);

                var keyStore = _set.KeyStore = new FileKeyStore(
                    keyStoreConfig,
                    _get.EthereumJsonSerializer,
                    encrypter,
                    _get.CryptoRandom,
                    _get.LogManager,
                    new PrivateKeyStoreIOSettingsProvider(keyStoreConfig));

                _set.Wallet = _get.Config <IInitConfig>() switch
                {
                    var config when config.EnableUnsecuredDevWallet&& config.KeepDevWalletInMemory => new DevWallet(_get.Config <IWalletConfig>(), _get.LogManager),
                    var config when config.EnableUnsecuredDevWallet&& !config.KeepDevWalletInMemory => new DevKeyStoreWallet(_get.KeyStore, _get.LogManager),
                    _ => new ProtectedKeyStoreWallet(keyStore, new ProtectedPrivateKeyFactory(_get.CryptoRandom, _get.Timestamper), _get.Timestamper, _get.LogManager),
                };

                new AccountUnlocker(keyStoreConfig, _get.Wallet, _get.LogManager, new KeyStorePasswordProvider(keyStoreConfig))
                .UnlockAccounts();

                var passwordProvider = new KeyStorePasswordProvider(keyStoreConfig)
                                       .OrReadFromConsole($"Provide password for validator account { keyStoreConfig.BlockAuthorAccount}");

                INodeKeyManager nodeKeyManager = new NodeKeyManager(_get.CryptoRandom, _get.KeyStore, keyStoreConfig, _get.LogManager, passwordProvider, _get.FileSystem);
                var nodeKey            = _set.NodeKey = nodeKeyManager.LoadNodeKey();
                _set.OriginalSignerKey = nodeKeyManager.LoadSignerKey();
                var enode = _set.Enode = new Enode(nodeKey.PublicKey, IPAddress.Parse(networkConfig.ExternalIp), networkConfig.P2PPort);

                _get.LogManager.SetGlobalVariable("enode", enode.ToString());
            }, cancellationToken);
        }
コード例 #14
0
ファイル: KeyStoreTests.cs プロジェクト: prestwich/nethermind
        public void Initialize()
        {
            _keyStoreConfig = new KeyStoreConfig();

            _testPasswordSecured  = new SecureString();
            _wrongPasswordSecured = new SecureString();

            for (int i = 0; i < _testPassword.Length; i++)
            {
                _testPasswordSecured.AppendChar(_testPassword[i]);
                _wrongPasswordSecured.AppendChar('*');
            }

            _testPasswordSecured.MakeReadOnly();
            _wrongPasswordSecured.MakeReadOnly();

            ILogManager logger = LimboLogs.Instance;

            _serializer   = new EthereumJsonSerializer();
            _cryptoRandom = new CryptoRandom();
            _store        = new FileKeyStore(_keyStoreConfig, _serializer, new AesEncrypter(_keyStoreConfig, logger), _cryptoRandom, logger);
        }
コード例 #15
0
        public async Task Execute(CancellationToken cancellationToken)
        {
            // why is the await Task.Run here?
            await Task.Run(() =>
            {
                IKeyStoreConfig keyStoreConfig = _context.Config <IKeyStoreConfig>();
                INetworkConfig networkConfig   = _context.Config <INetworkConfig>();

                AesEncrypter encrypter = new AesEncrypter(
                    keyStoreConfig,
                    _context.LogManager);

                _context.KeyStore = new FileKeyStore(
                    keyStoreConfig,
                    _context.EthereumJsonSerializer,
                    encrypter,
                    _context.CryptoRandom,
                    _context.LogManager);

                _context.Wallet = _context.Config <IInitConfig>() switch
                {
                    var config when config.EnableUnsecuredDevWallet&& config.KeepDevWalletInMemory => new DevWallet(_context.Config <IWalletConfig>(), _context.LogManager),
                    var config when config.EnableUnsecuredDevWallet&& !config.KeepDevWalletInMemory => new DevKeyStoreWallet(_context.KeyStore, _context.LogManager),
                    _ => new ProtectedKeyStoreWallet(_context.KeyStore, new ProtectedPrivateKeyFactory(_context.CryptoRandom, _context.Timestamper), _context.Timestamper, _context.LogManager),
                };

                new AccountUnlocker(keyStoreConfig, _context.Wallet, new FileSystem(), _context.LogManager).UnlockAccounts();

                INodeKeyManager nodeKeyManager = new NodeKeyManager(_context.CryptoRandom, _context.KeyStore, keyStoreConfig, _context.LogManager);
                _context.NodeKey           = nodeKeyManager.LoadNodeKey();
                _context.OriginalSignerKey = nodeKeyManager.LoadSignerKey();
                _context.Enode             = new Enode(_context.NodeKey.PublicKey, IPAddress.Parse(networkConfig.ExternalIp), networkConfig.P2PPort);

                _context.LogManager.SetGlobalVariable("enode", _context.Enode.ToString());
            }, cancellationToken);
        }
コード例 #16
0
ファイル: Program.cs プロジェクト: uzbekdev1/nethermind
        private static void SetFinalDataDirectory(string?dataDir, IInitConfig initConfig, IKeyStoreConfig keyStoreConfig)
        {
            if (!string.IsNullOrWhiteSpace(dataDir))
            {
                string newDbPath       = initConfig.BaseDbPath.GetApplicationResourcePath(dataDir);
                string newKeyStorePath = keyStoreConfig.KeyStoreDirectory.GetApplicationResourcePath(dataDir);
                string newLogDirectory = initConfig.LogDirectory.GetApplicationResourcePath(dataDir);

                if (_logger.IsInfo)
                {
                    _logger.Info($"Setting BaseDbPath to: {newDbPath}, from: {initConfig.BaseDbPath}");
                    _logger.Info($"Setting KeyStoreDirectory to: {newKeyStorePath}, from: {keyStoreConfig.KeyStoreDirectory}");
                    _logger.Info($"Setting LogDirectory to: {newLogDirectory}, from: {initConfig.LogDirectory}");
                }

                initConfig.BaseDbPath            = newDbPath;
                keyStoreConfig.KeyStoreDirectory = newKeyStorePath;
                initConfig.LogDirectory          = newLogDirectory;
            }
            else
            {
                initConfig.BaseDbPath ??= "".GetApplicationResourcePath("db");
                keyStoreConfig.KeyStoreDirectory ??= "".GetApplicationResourcePath("keystore");
                initConfig.LogDirectory ??= "".GetApplicationResourcePath("logs");
            }
        }
コード例 #17
0
 public PrivateKeyStoreIOSettingsProvider(
     IKeyStoreConfig keyStoreConfig)
 {
     _config = keyStoreConfig ?? throw new ArgumentNullException(nameof(keyStoreConfig));
 }
コード例 #18
0
ファイル: AesEncrypter.cs プロジェクト: rafal-mz/nethermind
 public AesEncrypter(IKeyStoreConfig keyStoreConfig, ILogManager logManager)
 {
     _config = keyStoreConfig ?? throw new ArgumentNullException(nameof(keyStoreConfig));
     _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
コード例 #19
0
 public KeyStorePasswordProvider(IKeyStoreConfig keyStoreConfig)
 {
     _keyStoreConfig       = keyStoreConfig ?? throw new ArgumentNullException(nameof(keyStoreConfig));
     _filePasswordProvider = new FilePasswordProvider(Map);
 }
コード例 #20
0
ファイル: Program.cs プロジェクト: uzbekdev1/nethermind
        private static void Run(string[] args)
        {
            _logger.Info("Nethermind starting initialization.");

            AppDomain.CurrentDomain.ProcessExit += CurrentDomainOnProcessExit;
            IFileSystem fileSystem = new FileSystem();;

            PluginLoader pluginLoader = new PluginLoader(
                "plugins", fileSystem, typeof(CliquePlugin), typeof(EthashPlugin), typeof(NethDevPlugin));

            pluginLoader.Load(SimpleConsoleLogManager.Instance);

            Type configurationType         = typeof(IConfig);
            IEnumerable <Type> configTypes = new TypeDiscovery().FindNethermindTypes(configurationType)
                                             .Where(ct => ct.IsInterface);

            CommandLineApplication app = new CommandLineApplication {
                Name = "Nethermind.Runner"
            };

            app.HelpOption("-?|-h|--help");
            app.VersionOption("-v|--version", () => ClientVersion.Version, () => ClientVersion.Description);

            GlobalDiagnosticsContext.Set("version", ClientVersion.Version);

            CommandOption dataDir            = app.Option("-dd|--datadir <dataDir>", "data directory", CommandOptionType.SingleValue);
            CommandOption configFile         = app.Option("-c|--config <configFile>", "config file path", CommandOptionType.SingleValue);
            CommandOption dbBasePath         = app.Option("-d|--baseDbPath <baseDbPath>", "base db path", CommandOptionType.SingleValue);
            CommandOption logLevelOverride   = app.Option("-l|--log <logLevel>", "log level", CommandOptionType.SingleValue);
            CommandOption configsDirectory   = app.Option("-cd|--configsDirectory <configsDirectory>", "configs directory", CommandOptionType.SingleValue);
            CommandOption loggerConfigSource = app.Option("-lcs|--loggerConfigSource <loggerConfigSource>", "path to the NLog config file", CommandOptionType.SingleValue);

            foreach (Type configType in configTypes.OrderBy(c => c.Name))
            {
                if (configType == null)
                {
                    continue;
                }

                ConfigCategoryAttribute?typeLevel = configType.GetCustomAttribute <ConfigCategoryAttribute>();
                if (typeLevel?.HiddenFromDocs ?? false)
                {
                    continue;
                }

                foreach (PropertyInfo propertyInfo in configType
                         .GetProperties(BindingFlags.Public | BindingFlags.Instance)
                         .OrderBy(p => p.Name))
                {
                    ConfigItemAttribute?configItemAttribute = propertyInfo.GetCustomAttribute <ConfigItemAttribute>();
                    if (!(configItemAttribute?.HiddenFromDocs ?? false))
                    {
                        app.Option($"--{configType.Name.Substring(1).Replace("Config", String.Empty)}.{propertyInfo.Name}", $"{(configItemAttribute == null ? "<missing documentation>" : configItemAttribute.Description + $" (DEFAULT: {configItemAttribute.DefaultValue})" ?? "<missing documentation>")}", CommandOptionType.SingleValue);
                    }
                }
            }

            ManualResetEventSlim appClosed = new ManualResetEventSlim(true);

            app.OnExecute(async() =>
            {
                appClosed.Reset();
                IConfigProvider configProvider = BuildConfigProvider(app, loggerConfigSource, logLevelOverride, configsDirectory, configFile);
                IInitConfig initConfig         = configProvider.GetConfig <IInitConfig>();
                IKeyStoreConfig keyStoreConfig = configProvider.GetConfig <IKeyStoreConfig>();

                Console.Title           = initConfig.LogFileName;
                Console.CancelKeyPress += ConsoleOnCancelKeyPress;

                SetFinalDataDirectory(dataDir.HasValue() ? dataDir.Value() : null, initConfig, keyStoreConfig);
                NLogManager logManager = new(initConfig.LogFileName, initConfig.LogDirectory);

                _logger = logManager.GetClassLogger();
                if (_logger.IsDebug)
                {
                    _logger.Debug($"Nethermind version: {ClientVersion.Description}");
                }

                ConfigureSeqLogger(configProvider);
                SetFinalDbPath(dbBasePath.HasValue() ? dbBasePath.Value() : null, initConfig);
                LogMemoryConfiguration();

                EthereumJsonSerializer serializer = new();
                if (_logger.IsDebug)
                {
                    _logger.Debug($"Nethermind config:{Environment.NewLine}{serializer.Serialize(initConfig, true)}{Environment.NewLine}");
                }

                ApiBuilder apiBuilder        = new(configProvider, logManager);
                INethermindApi nethermindApi = apiBuilder.Create();
                foreach (Type pluginType in pluginLoader.PluginTypes)
                {
                    if (Activator.CreateInstance(pluginType) is INethermindPlugin plugin)
                    {
                        nethermindApi.Plugins.Add(plugin);
                    }
                }

                EthereumRunner ethereumRunner = new EthereumRunner(nethermindApi);
                await ethereumRunner.Start(_processCloseCancellationSource.Token).ContinueWith(x =>
                {
                    if (x.IsFaulted && _logger.IsError)
                    {
                        _logger.Error("Error during ethereum runner start", x.Exception);
                    }
                });

                await Task.WhenAny(_cancelKeySource.Task, _processExit.Task);

                _logger.Info("Closing, please wait until all functions are stopped properly...");
                await ethereumRunner.StopAsync();
                _logger.Info("All done, goodbye!");
                appClosed.Set();

                return(0);
            });

            app.Execute(args);
            appClosed.Wait();
        }