public static async Task <IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            var    data        = JsonConvert.DeserializeObject <QuorumTransactionInput>(requestBody);

            var address        = data?.contractAddress;
            var functionName   = data?.functionName;
            var functionParams = data?.inputParams;

            if (functionName == null || (string.IsNullOrEmpty(address)))
            {
                return(new BadRequestObjectResult("You must supply a contract address and function name"));
            }

            List <string> privateFor = data?.privateFor;

            var contractInfo = new ContractInfo();
            var client       = new HttpClient();

            var filejson = await client.GetStringAsync(Environment.GetEnvironmentVariable("CONTRACT_JSON_BLOB_URL", EnvironmentVariableTarget.Process));

            dynamic _file = JsonConvert.DeserializeObject(filejson);

            var abi = _file?.abi;

            var byteCode = _file?.bytecode?.Value;

            contractInfo.ContractABI      = JsonConvert.SerializeObject(abi);
            contractInfo.ContractByteCode = byteCode;

            var accountJSON = Environment.GetEnvironmentVariable("KEYVAULT_ACCOUNT1_URL", EnvironmentVariableTarget.Process);

            var pwd = Environment.GetEnvironmentVariable("KEYVAULT_ETH_PASSWORD", EnvironmentVariableTarget.Process);
            var RPC = Environment.GetEnvironmentVariable("RPC", EnvironmentVariableTarget.Process);

            QuorumContractHelper.Instance.SetWeb3Handler(RPC);
            //var res = await QuorumContractHelper.Instance.CallContractFunctionAsync<int>(address, contractInfo, functionName, AccountHelper.DecryptAccount(accountJSON,pwd),functionParams);

            var keyVaultURI = Environment.GetEnvironmentVariable("KEYVAULT_PRIVATEKEY_URI", EnvironmentVariableTarget.Process);
            var appID       = Environment.GetEnvironmentVariable("APP_ID", EnvironmentVariableTarget.Process);
            var appSecret   = Environment.GetEnvironmentVariable("APP_SECRET", EnvironmentVariableTarget.Process);

            var externalAccount = AccountHelper.BuildExternalSignerWithToken(log, keyVaultURI, appID, appSecret);
            var res             = await QuorumContractHelper.Instance.CallContractFunctionAsync <int>(address, contractInfo, functionName, externalAccount.Address, functionParams);

            return(res != null
                ? (ActionResult) new OkObjectResult($"Called Contract at address: {address} \nWith Function: {functionName} \nWith input: {functionParams} \nResult: {res}")
                : new BadRequestObjectResult("There was an issue submitting the transaction"));
        }