/// <summary>
        /// Calls a contract method and returns the response.
        /// </summary>
        /// <param name="instance">The <see cref="IEtherscanApiClient"/> being extended.</param>
        /// <param name="to"></param>
        /// <param name="fn"></param>
        /// <param name="buildCall"></param>
        /// <param name="tag"></param>
        /// <returns></returns>
        public static async Task <EtherscanResponseMessage <string> > Call(this IEtherscanApiClient instance, string to, string fn,
                                                                           Action <ContractCallDataBuilder> buildCall, string tag = default(string))
        {
            var builder = new ContractCallDataBuilder(fn);

            buildCall(builder);
            var message = new CallRequestMessage
            {
                To   = to,
                Data = builder.EncodeData(),
                Tag  = tag ?? "latest"
            };

            return(await instance.Call(message));
        }