protected QueryHandlerBase(IEthCall ethCall, string defaultAddressFrom = null, BlockParameter defaultBlockParameter = null) { EthCall = ethCall; DefaultAddressFrom = defaultAddressFrom; DefaultBlockParameter = defaultBlockParameter ?? BlockParameter.CreateLatest(); _contractCall = new ContractCall(EthCall, DefaultBlockParameter); }
public ContractCall(IEthCall ethCall, BlockParameter defaulBlock) { _ethCall = ethCall; _defaulBlock = defaulBlock; if (_defaulBlock == null) { _defaulBlock = BlockParameter.CreateLatest(); } }
public QueryToDTOHandler(IEthCall ethCall, string defaultAddressFrom = null, BlockParameter defaultBlockParameter = null) : base(ethCall, defaultAddressFrom, defaultBlockParameter) { QueryRawHandler = new QueryRawHandler <TFunctionMessage>(ethCall, defaultAddressFrom, defaultBlockParameter); }
public static async Task <HttpResponseMessage> CreateRespone(HttpRequestMessage req, string functionName) { // Get request body var jsonBody = await req.Content.ReadAsStringAsync(); if (string.IsNullOrWhiteSpace(jsonBody)) { jsonBody = @"{}"; } var body = JsonConvert.DeserializeObject <JObject>(jsonBody); // Get parameters var inputParameters = body.Values(); var arguments = new object[inputParameters.Count()]; var i = 0; foreach (var p in inputParameters.Values()) { arguments[i++] = p.Value <string>(); } var web3 = new Nethereum.Web3.Web3(SmartContract.BlockchainRpcEndpoint); var contract = web3.Eth.GetContract(SmartContract.Abi, SmartContract.ContractAddress); var functionABI = contract.ContractBuilder.ContractABI.Functions .FirstOrDefault(f => f.Name == functionName); if (functionABI == null) { return(req.CreateResponse(HttpStatusCode.BadRequest, "Function not found!")); } var functionParameters = functionABI.InputParameters; if (functionParameters?.Count() != inputParameters.Count()) { return(req.CreateResponse(HttpStatusCode.BadRequest, "Parameters do not match!")); } Function function = contract.GetFunction(functionName); Type returnType = GetFunctionReturnType(functionABI); IEthCall ethCall = contract.Eth.Transactions.Call; var result = await ethCall.SendRequestAsync(function.CreateCallInput(arguments), contract.Eth.DefaultBlock) .ConfigureAwait(false); FunctionBase functionBase = function; PropertyInfo builderBaseProperty = functionBase.GetType() .GetProperty("FunctionBuilderBase", BindingFlags.Instance | BindingFlags.NonPublic); if (builderBaseProperty != null) { FunctionBuilderBase builderBase = (FunctionBuilderBase)builderBaseProperty.GetValue(functionBase); PropertyInfo funcCallDecoderProperty = builderBase.GetType() .GetProperty("FunctionCallDecoder", BindingFlags.Instance | BindingFlags.NonPublic); if (funcCallDecoderProperty != null) { ParameterDecoder decoder = (ParameterDecoder)funcCallDecoderProperty.GetValue(builderBase); var results = decoder.DecodeDefaultData(result, functionABI.OutputParameters); if (results.Count == 1) { var resultValue = JsonConvert.SerializeObject(results[0].Result); return(req.CreateResponse(HttpStatusCode.OK, resultValue)); } var resultMultiValue = Activator.CreateInstance(returnType, results.Select(r => r.Result).ToArray()); return(req.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(resultMultiValue))); } } return(req.CreateResponse(HttpStatusCode.InternalServerError)); }
public QueryRawHandler(IEthCall ethCall, string defaultAddressFrom = null, BlockParameter defaultBlockParameter = null) : base(ethCall, defaultAddressFrom, defaultBlockParameter) { }
public ContractQueryEthCallHandler(IEthCall ethCall, string defaultAddressFrom = null, BlockParameter defaultBlockParameter = null) { DefaultAddressFrom = defaultAddressFrom; DefaultBlockParameter = defaultBlockParameter; EthCall = ethCall; }