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")); }
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(); } }); } }); }