public async Task <IActionResult> AddWL()
        {
            string address = Request.Form["address"].ToString();
            double min     = Convert.ToDouble(Request.Form["min"]);
            double max     = Convert.ToDouble(Request.Form["max"]);

            var minwei = new Nethereum.Util.UnitConversion().ToWei(min);
            var maxwei = new Nethereum.Util.UnitConversion().ToWei(max);

            var contract        = new Logic(web3, environment).GetContract(HttpContext.Session.GetString("contractid"));
            var addwl           = contract.GetFunction("addWhiteList");
            var transactionHash = await addwl.SendTransactionAsync(account.Address, address, minwei, maxwei);

            //var receipt = await MineAndGetReceiptAsync(web3, transactionHash);

            TempData["result"] = "success";
            return(PartialView("AddWL"));
        }
        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();
        }