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