using System.Threading.Tasks; using Nethereum.JsonRpc.Client; using Nethereum.RPC.Eth.DTOs; using Nethereum.RPC.Eth.Transactions; namespace Nethereum.Contracts.QueryHandlers { #if !DOTNET35 public abstract class QueryDecoderBaseHandler : IQueryHandler where TFunctionMessage : FunctionMessage, new() { protected QueryRawHandler QueryRawHandler { get; set; } public string DefaultAddressFrom { get => QueryRawHandler.DefaultAddressFrom; set => QueryRawHandler.DefaultAddressFrom = value; } public QueryDecoderBaseHandler(IClient client, string defaultAddressFrom = null, BlockParameter defaultBlockParameter = null) { QueryRawHandler = new QueryRawHandler(client, defaultAddressFrom, defaultBlockParameter); } public QueryDecoderBaseHandler(IEthCall ethCall, string defaultAddressFrom = null, BlockParameter defaultBlockParameter = null) { QueryRawHandler = new QueryRawHandler(ethCall, defaultAddressFrom, defaultBlockParameter); } public async Task QueryAsync(string contractAddress, TFunctionMessage functionMessage = null, BlockParameter block = null) { var result = await QueryRawHandler.QueryAsync(contractAddress, functionMessage, block).ConfigureAwait(false); return DecodeOutput(result); } protected abstract TFunctionOutput DecodeOutput(string output); } #endif }