using System.Threading; using System.Threading.Tasks; using Nethereum.Hex.HexTypes; using Nethereum.RPC.Eth.DTOs; namespace Nethereum.Contracts { public class Function : FunctionBase { public Function(Contract contract, FunctionBuilder functionBuilder) : base(contract, functionBuilder) { } protected FunctionBuilder FunctionBuilder => (FunctionBuilder)FunctionBuilderBase; public CallInput CreateCallInputParameterless() { return FunctionBuilder.CreateCallInputParameterless(); } public CallInput CreateCallInput(TFunctionInput functionInput) { return FunctionBuilder.CreateCallInput(functionInput); } public CallInput CreateCallInput(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value) { return FunctionBuilder.CreateCallInput(functionInput, from, gas, value); } public string GetData(TFunctionInput functionInput) { return FunctionBuilder.GetData(functionInput); } public TFunctionInput DecodeFunctionInput(TFunctionInput functionInput, TransactionInput transactionInput) { return FunctionBuilder.DecodeFunctionInput(functionInput, transactionInput); } public TFunctionInput DecodeFunctionInput(TFunctionInput functionInput, string data) { return FunctionBuilder.DecodeFunctionInput(functionInput, data); } public TransactionInput CreateTransactionInput(TFunctionInput functionInput, string from) { return FunctionBuilder.CreateTransactionInput(functionInput, from); } public TransactionInput CreateTransactionInput(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value) { return FunctionBuilder.CreateTransactionInput(functionInput, from, gas, value); } public TransactionInput CreateTransactionInput(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger gasPrice, HexBigInteger value) { return FunctionBuilder.CreateTransactionInput(functionInput, from, gas, gasPrice, value); } #if !DOTNET35 public Task CallAsync() { return base.CallAsync(CreateCallInputParameterless()); } public Task CallAsync(TFunctionInput functionInput) { return base.CallAsync(CreateCallInput(functionInput)); } public Task CallAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value) { return base.CallAsync(CreateCallInput(functionInput, from, gas, value)); } public Task CallAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value, BlockParameter block) { return base.CallAsync(CreateCallInput(functionInput, from, gas, value), block); } public Task CallAsync(TFunctionInput functionInput, BlockParameter blockParameter) { return base.CallAsync(CreateCallInput(functionInput), blockParameter); } public Task CallDeserializingToObjectAsync() where TReturn : new() { return base.CallAsync(new TReturn(), CreateCallInputParameterless()); } public Task CallDeserializingToObjectAsync(BlockParameter block) where TReturn : new() { return base.CallAsync(new TReturn(), CreateCallInputParameterless(), block); } public Task CallDeserializingToObjectAsync(TFunctionInput functionInput) where TReturn : new() { return base.CallAsync(new TReturn(), CreateCallInput(functionInput)); } public Task CallDeserializingToObjectAsync(TFunctionInput functionInput, BlockParameter block) where TReturn : new() { return base.CallAsync(new TReturn(), CreateCallInput(functionInput), block); } public Task CallDeserializingToObjectAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value) where TReturn : new() { return base.CallAsync(new TReturn(), CreateCallInput(functionInput, from, gas, value)); } public Task CallDeserializingToObjectAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value, BlockParameter block) where TReturn : new() { return base.CallAsync(new TReturn(), CreateCallInput(functionInput, from, gas, value), block); } public Task EstimateGasAsync() { return EstimateGasFromEncAsync(CreateCallInputParameterless()); } public Task EstimateGasAsync(TFunctionInput functionInput) { return EstimateGasFromEncAsync(CreateCallInput(functionInput)); } public Task EstimateGasAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value) { return EstimateGasFromEncAsync(CreateCallInput(functionInput, from, gas, value)); } public Task EstimateGasAsync(TFunctionInput functionInput, CallInput callInput) { var encodedInput = GetData(functionInput); callInput.Data = encodedInput; return EstimateGasFromEncAsync(callInput); } public Task SendTransactionAsync(TFunctionInput functionInput, string from) { return base.SendTransactionAsync(CreateTransactionInput(functionInput, from)); } public Task SendTransactionAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value) { return base.SendTransactionAsync(CreateTransactionInput(functionInput, from, gas, value)); } public Task SendTransactionAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger gasPrice, HexBigInteger value) { return base.SendTransactionAsync(CreateTransactionInput(functionInput, from, gas, gasPrice, value)); } public Task SendTransactionAsync(TFunctionInput functionInput, TransactionInput input) { var encodedInput = GetData(functionInput); input.Data = encodedInput; return base.SendTransactionAsync(input); } public Task CallRawAsync() { return base.CallRawAsync(CreateCallInputParameterless()); } public Task CallRawAsync(TFunctionInput functionInput) { return base.CallRawAsync(CreateCallInput(functionInput)); } public Task CallRawAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value) { return base.CallRawAsync(CreateCallInput(functionInput, from, gas, value)); } public Task CallRawAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value, BlockParameter block) { return base.CallRawAsync(CreateCallInput(functionInput, from, gas, value), block); } public Task CallRawAsync(TFunctionInput functionInput, BlockParameter blockParameter) { return base.CallRawAsync(CreateCallInput(functionInput), blockParameter); } public Task SendTransactionAndWaitForReceiptAsync(TFunctionInput functionInput, string from, CancellationTokenSource receiptRequestCancellationToken = null) { return base.SendTransactionAndWaitForReceiptAsync(CreateTransactionInput(functionInput, from), receiptRequestCancellationToken); } public Task SendTransactionAndWaitForReceiptAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger value, CancellationTokenSource receiptRequestCancellationToken = null) { return base.SendTransactionAndWaitForReceiptAsync(CreateTransactionInput(functionInput, from, gas, value), receiptRequestCancellationToken); } public Task SendTransactionAndWaitForReceiptAsync(TFunctionInput functionInput, string from, HexBigInteger gas, HexBigInteger gasPrice, HexBigInteger value, CancellationTokenSource receiptRequestCancellationToken = null) { return base.SendTransactionAndWaitForReceiptAsync( CreateTransactionInput(functionInput, from, gas, gasPrice, value), receiptRequestCancellationToken); } public Task SendTransactionAndWaitForReceiptAsync(TFunctionInput functionInput, TransactionInput input, CancellationTokenSource receiptRequestCancellationToken = null) { var encodedInput = GetData(functionInput); input.Data = encodedInput; return base.SendTransactionAndWaitForReceiptAsync(input, receiptRequestCancellationToken); } #endif } }