Esempio n. 1
0
        public async Task Account_Create_And_Open()
        {
            var keyPair = await _keyStore.CreateAsync("123", "AELF");

            keyPair.ShouldNotBe(null);
            _keyStore.ListAccountsAsync().Result.Count.ShouldBeGreaterThanOrEqualTo(1);

            var address   = Address.FromPublicKey(keyPair.PublicKey);
            var addString = address.GetFormatted();

            address.ShouldNotBe(null);

            //Open account
            var errResult = await _keyStore.OpenAsync(addString, "12", true);

            errResult.ShouldBe(AElfKeyStore.Errors.WrongPassword);

            errResult = await _keyStore.OpenAsync(addString, "123");

            errResult.ShouldBe(AElfKeyStore.Errors.None);

            errResult = await _keyStore.OpenAsync(addString, "123");

            errResult.ShouldBe(AElfKeyStore.Errors.AccountAlreadyUnlocked);

            errResult = await _keyStore.OpenAsync(addString, "123", false);

            errResult.ShouldBe(AElfKeyStore.Errors.AccountAlreadyUnlocked);

            Directory.Delete("/tmp/keys", true);

            await Should.ThrowAsync <KeyStoreNotFoundException>(() => _keyStore.ReadKeyPairAsync(addString + "_fake", "123"));
        }
Esempio n. 2
0
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            var configuration = context.Services.GetConfiguration();

            context.Services.AddAssemblyOf <OSAElfModule>();

            context.Services.AddSingleton <PeerConnectedEventHandler>();
            context.Services.AddTransient <BlockSyncJob>();

            //TODO: make ApplicationHelper as a provider, inject it into key store
            var keyStore = new AElfKeyStore(ApplicationHelper.AppDataPath);

            context.Services.AddSingleton <IKeyStore>(keyStore);

            Configure <AccountOptions>(option =>
            {
                configuration.GetSection("Account").Bind(option);

                if (string.IsNullOrWhiteSpace(option.NodeAccount))
                {
                    AsyncHelper.RunSync(async() =>
                    {
                        var accountList = await keyStore.ListAccountsAsync();

                        option.NodeAccountPassword = string.Empty;
                        if (accountList.Count == 0)
                        {
                            var blockChainService = context.Services.GetRequiredServiceLazy <IBlockchainService>().Value;
                            var chainId           = blockChainService.GetChainId();
                            var keyPair           = await keyStore.CreateAsync(option.NodeAccountPassword, chainId.ToString());
                            option.NodeAccount    = Address.FromPublicKey(keyPair.PublicKey).GetFormatted();
                        }
                        else
                        {
                            option.NodeAccount = accountList.First();
                        }
                    });
                }
            });
        }