// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddSingleton <IQueue, AzureQueue>((serviceProvider) => { const string queueName = "somequeue"; KV = new KeyVault(Configuration["AzureKeyVaultUri"], Configuration["applicationId"], Configuration["applicationSecret"]); var encryptionKeyName = Configuration["EncryptionKeyName"]; var decryptionKeyName = Configuration["DecryptionKeyName"]; var signKeyName = Configuration["SignKeyName"]; var verifyKeyName = Configuration["VerifyKeyName"]; var encryptionCertPassword = Configuration["EncryptionCertPassword"]; var decryptionCertPassword = Configuration["DecryptionCertPassword"]; var signCertPassword = Configuration["SignCertPassword"]; var verifyCertPassword = Configuration["VerifyCertPassword"]; var secretsMgmnt = new KeyVaultCryptoActions( new CertificateInfo(encryptionKeyName, encryptionCertPassword), new CertificateInfo(decryptionKeyName, decryptionCertPassword), new CertificateInfo(signKeyName, signCertPassword), new CertificateInfo(verifyKeyName, verifyCertPassword), KV, KV); secretsMgmnt.InitializeAsync().Wait(); //var securedComm = new RabbitMQBusImpl(config["rabbitMqUri"], secretsMgmnt, true, "securedCommExchange"); var queueClient = new CloudQueueClientWrapper(Configuration["AzureStorageConnectionString"]); securedComm = new AzureQueue(queueName, queueClient, secretsMgmnt, true); securedComm.Initialize().Wait(); return(securedComm); }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddSingleton((serviceProvider) => { var sqlDb = new SqlConnector(Configuration["SqlUserID"], Configuration["SqlPassword"], Configuration["SqlInitialCatalog"], Configuration["SqlDataSource"], Configuration["applicationId"], Configuration["applicationSecret"]); sqlDb.Initialize().Wait(); return(new EthereumAccount(sqlDb, Configuration["EthereumNodeUrl"])); }); services.AddSingleton <IQueue, AzureQueue>((serviceProvider) => { const string queueName = "transactions"; KV = new KeyVault(Configuration["AzureKeyVaultUri"], Configuration["applicationId"], Configuration["applicationSecret"]); var encryptionKeyName = Configuration["EncryptionKeyName"]; var decryptionKeyName = Configuration["DecryptionKeyName"]; var signKeyName = Configuration["SignKeyName"]; var verifyKeyName = Configuration["VerifyKeyName"]; var encryptionCertPassword = Configuration["EncryptionCertPassword"]; var decryptionCertPassword = Configuration["DecryptionCertPassword"]; var signCertPassword = Configuration["SignCertPassword"]; var verifyCertPassword = Configuration["VerifyCertPassword"]; var secretsMgmnt = new KeyVaultCryptoActions( new CertificateInfo(encryptionKeyName, encryptionCertPassword), new CertificateInfo(decryptionKeyName, decryptionCertPassword), new CertificateInfo(signKeyName, signCertPassword), new CertificateInfo(verifyKeyName, verifyCertPassword), KV, KV); secretsMgmnt.InitializeAsync().Wait(); var queueClient = new CloudQueueClientWrapper(Configuration["AzureStorageConnectionString"]); azureQueue = new AzureQueue(queueName, queueClient, secretsMgmnt, true); azureQueue.InitializeAsync().Wait(); return(azureQueue); }); }
static void Main(string[] args) { Console.WriteLine("TransactionEngine - I do as I told"); // Init var unitConverion = new Nethereum.Util.UnitConversion(); var kv = new KeyVault(ConfigurationManager.AppSettings["AzureKeyVaultUri"], ConfigurationManager.AppSettings["applicationId"], ConfigurationManager.AppSettings["applicationSecret"]); var encryptionKeyName = ConfigurationManager.AppSettings["EncryptionKeyName"]; var decryptionKeyName = ConfigurationManager.AppSettings["DecryptionKeyName"]; var signKeyName = ConfigurationManager.AppSettings["SignKeyName"]; var verifyKeyName = ConfigurationManager.AppSettings["VerifyKeyName"]; var encryptionCertPassword = ConfigurationManager.AppSettings["EncryptionCertPassword"]; var decryptionCertPassword = ConfigurationManager.AppSettings["DecryptionCertPassword"]; var signCertPassword = ConfigurationManager.AppSettings["SignCertPassword"]; var verifyCertPassword = ConfigurationManager.AppSettings["VerifyCertPassword"]; var secretsMgmnt = new KeyVaultCryptoActions( new CertificateInfo(encryptionKeyName, encryptionCertPassword), new CertificateInfo(decryptionKeyName, decryptionCertPassword), new CertificateInfo(signKeyName, signCertPassword), new CertificateInfo(verifyKeyName, verifyCertPassword), kv, kv); secretsMgmnt.InitializeAsync().Wait(); //var securedComm = new RabbitMQBusImpl(ConfigurationManager.AppSettings["rabbitMqUri"], secretsMgmnt, true, "securedCommExchange"); var queueClient = new CloudQueueClientWrapper(ConfigurationManager.AppSettings["AzureStorageConnectionString"]); var securedCommForTransactions = new AzureQueue("transactions", queueClient, secretsMgmnt, true); var securedCommForNotifications = new AzureQueue("notifications", queueClient, secretsMgmnt, true); var taskInitTransactions = securedCommForTransactions.InitializeAsync(); var taskInitNotifications = securedCommForNotifications.InitializeAsync(); Task.WhenAll(taskInitTransactions, taskInitNotifications).Wait(); var sqlDb = new SqlConnector(ConfigurationManager.AppSettings["SqlUserID"], ConfigurationManager.AppSettings["SqlPassword"], ConfigurationManager.AppSettings["SqlInitialCatalog"], ConfigurationManager.AppSettings["SqlDataSource"], ConfigurationManager.AppSettings["applicationId"], ConfigurationManager.AppSettings["applicationSecret"]); sqlDb.Initialize().Wait(); var ethereumNodeWrapper = new EthereumAccount(sqlDb, ConfigurationManager.AppSettings["EthereumNodeUrl"]); // Listen on transactions requests, process them and notify the users when done securedCommForTransactions.DequeueAsync( msg => { Console.WriteLine("Got work!"); var data = Communication.Utils.FromByteArray <string>(msg); var msgArray = data.Split(';'); var amount = unitConverion.ToWei(msgArray[0]); var senderName = msgArray[1]; var reciverAddress = msgArray[2]; try { var transactionHash = ethereumNodeWrapper .SignTransactionAsync(senderName, reciverAddress, amount).Result; var transactionResult = ethereumNodeWrapper.SendRawTransactionAsync(transactionHash).Result; } catch (Exception ex) { Console.WriteLine(ex); throw; } // Wait for miner Thread.Sleep(3000); // notify a user about his balance change securedCommForNotifications.EnqueueAsync(Communication.Utils.ToByteArray(reciverAddress)).Wait(); }, (message) => { Console.WriteLine("Verification failure, doing nothing"); }, TimeSpan.FromSeconds(3)).Wait(); }
private static void SendCoins(EthereumAccount ethereumAccount) { Console.WriteLine("Sender - Happy to transfer my crypto coins!"); // Init var senderAddress = ethereumAccount.GetPublicAddressAsync(c_senderId).Result; var reciverAddress = ethereumAccount.GetPublicAddressAsync(c_ReciverId).Result; var balance = ethereumAccount.GetCurrentBalance(senderAddress).Result; PrintCurrentBalance(senderAddress, balance); var encryptionKeyName = ConfigurationManager.AppSettings["EncryptionKeyName"]; var decryptionKeyName = ConfigurationManager.AppSettings["DecryptionKeyName"]; var signKeyName = ConfigurationManager.AppSettings["SignKeyName"]; var verifyKeyName = ConfigurationManager.AppSettings["VerifyKeyName"]; var encryptionCertPassword = ConfigurationManager.AppSettings["EncryptionCertPassword"]; var decryptionCertPassword = ConfigurationManager.AppSettings["DecryptionCertPassword"]; var signCertPassword = ConfigurationManager.AppSettings["SignCertPassword"]; var verifyCertPassword = ConfigurationManager.AppSettings["VerifyCertPassword"]; var kv = new KeyVault(ConfigurationManager.AppSettings["AzureKeyVaultUri"], ConfigurationManager.AppSettings["applicationId"], ConfigurationManager.AppSettings["applicationSecret"]); var secretsMgmnt = new KeyVaultCryptoActions( new CertificateInfo(encryptionKeyName, encryptionCertPassword), new CertificateInfo(decryptionKeyName, decryptionCertPassword), new CertificateInfo(signKeyName, signCertPassword), new CertificateInfo(verifyKeyName, verifyCertPassword), kv, kv); secretsMgmnt.InitializeAsync().Wait(); //var securedComm = new RabbitMQBusImpl(ConfigurationManager.AppSettings["rabbitMqUri"], secretsMgmnt, true, "securedCommExchange"); var queueClient = new CloudQueueClientWrapper(ConfigurationManager.AppSettings["AzureStorageConnectionString"]); var securedComm = new AzureQueue("transactions", queueClient, secretsMgmnt, true); securedComm.InitializeAsync().Wait(); // While there are sufficient funds, transfer some... while (balance >= 0) { var amountToSend = 0.001; // Message structure: {amountToSend};{senderName};{reciverAddress} var message = $"{amountToSend};{c_senderId};{reciverAddress}"; securedComm.EnqueueAsync(Communication.Utils.ToByteArray(message)).Wait(); // Sleep 1 minute Thread.Sleep(60000); var newBalance = ethereumAccount.GetCurrentBalance(senderAddress).Result; PrintCurrentBalance(senderAddress, newBalance); // Wait for mining.. while (newBalance.Equals(balance)) { newBalance = ethereumAccount.GetCurrentBalance(senderAddress).Result; } balance = newBalance; } }
static void Main(string[] args) { // Init var kv = new KeyVault(ConfigurationManager.AppSettings["AzureKeyVaultUri"], ConfigurationManager.AppSettings["applicationId"], ConfigurationManager.AppSettings["applicationSecret"]); var sqlDb = new SqlConnector(ConfigurationManager.AppSettings["SqlUserID"], ConfigurationManager.AppSettings["SqlPassword"], ConfigurationManager.AppSettings["SqlInitialCatalog"], ConfigurationManager.AppSettings["SqlDataSource"], ConfigurationManager.AppSettings["applicationId"], ConfigurationManager.AppSettings["applicationSecret"]); sqlDb.Initialize().Wait(); var ethereumAccount = new EthereumAccount(sqlDb, ConfigurationManager.AppSettings["EthereumNodeUrl"]); Console.WriteLine("Receiver - I just love getting new crypto coins"); var reciverAddress = ethereumAccount.GetPublicAddressAsync(c_ReciverId).Result; PrintCurrentBalance(reciverAddress, ethereumAccount.GetCurrentBalance(reciverAddress).Result); var encryptionKeyName = ConfigurationManager.AppSettings["EncryptionKeyName"]; var decryptionKeyName = ConfigurationManager.AppSettings["DecryptionKeyName"]; var signKeyName = ConfigurationManager.AppSettings["SignKeyName"]; var verifyKeyName = ConfigurationManager.AppSettings["VerifyKeyName"]; var encryptionCertPassword = ConfigurationManager.AppSettings["EncryptionCertPassword"]; var decryptionCertPassword = ConfigurationManager.AppSettings["DecryptionCertPassword"]; var signCertPassword = ConfigurationManager.AppSettings["SignCertPassword"]; var verifyCertPassword = ConfigurationManager.AppSettings["VerifyCertPassword"]; var secretsMgmnt = new KeyVaultCryptoActions( new CertificateInfo(encryptionKeyName, encryptionCertPassword), new CertificateInfo(decryptionKeyName, decryptionCertPassword), new CertificateInfo(signKeyName, signCertPassword), new CertificateInfo(verifyKeyName, verifyCertPassword), kv, kv); secretsMgmnt.InitializeAsync().Wait(); //var securedComm = new RabbitMQBusImpl(ConfigurationManager.AppSettings["rabbitMqUri"], secretsMgmnt, true, "securedCommExchange"); var queueClient = new CloudQueueClientWrapper(ConfigurationManager.AppSettings["AzureStorageConnectionString"]); var securedComm = new AzureQueue("notifications", queueClient, secretsMgmnt, true); securedComm.InitializeAsync().Wait(); // Listen on the notifications queue, check balance when a notification arrives var consumerTag = securedComm.DequeueAsync( msg => { var data = Communication.Utils.FromByteArray <string>(msg); if (data.Equals(reciverAddress, StringComparison.OrdinalIgnoreCase)) { Console.WriteLine("Great, Balance change!"); PrintCurrentBalance(reciverAddress, ethereumAccount.GetCurrentBalance(reciverAddress).Result); } else { Console.WriteLine("Not my balance!"); Console.WriteLine(msg); } }, (message) => { Console.WriteLine("Verification failure, doing nothing"); }, TimeSpan.FromSeconds(3)); // wait 30 minutes Thread.Sleep(30 * 1000 * 60); // switch based on the chosen queue //securedComm.CancelListeningOnQueue(consumerTag.Result); securedComm.CancelListeningOnQueue(); }