public async Task <IActionResult> Get()
        {
            try
            {
                var generatedWallet = await _walletGenerator.GenerateWalletAsync();

                if (string.IsNullOrEmpty(generatedWallet.Address) || string.IsNullOrEmpty(generatedWallet.PrivateKey) ||
                    string.IsNullOrEmpty(generatedWallet.PublicKey))
                {
                    throw new Exception("Response lacked one of the fields");
                }

                var storage = new AzureTableStorage <WalletStorageEntity>(_options.Value.ConnectionString, _options.Value.TableName, _logger);


                await storage.InsertAsync(new WalletStorageEntity
                {
                    PartitionKey = "part",
                    RowKey       = generatedWallet.Address,
                    Address      = generatedWallet.Address,
                    PublicKey    = generatedWallet.PublicKey,
                    PrivateKey   = generatedWallet.PrivateKey
                });

                return(Json(new GenerateWalletControllerResponseModel {
                    Address = generatedWallet.Address
                }));
            }
            catch (Exception e)
            {
                await _slackNotifier.Notify(new SlackMessage { Sender = "SolarCoinApi.Facade", Type = "Errors", Message = "Error occured during SolarCoin address generation." });

                await _logger.WriteErrorAsync("Wallet generator", "", "", e);

                int i = 0;
                while (e.InnerException != null)
                {
                    e = e.InnerException;
                    await _logger.WriteErrorAsync("Wallet generator", "", $"InnerException-lvl-{i}", e);

                    i++;
                }
            }

            return(new StatusCodeResult(500));
        }
Exemplo n.º 2
0
        public async Task <(string Address, string AddressContext, string PrivateKey)> CreateWalletAsync()
        {
            var(address, addressContext, privateKey) = await _walletGenerator.GenerateWalletAsync();

            return(await _addChecksumStrategy.ExecuteAsync(address), addressContext, privateKey);
        }