using System; using System.Threading.Tasks; using Nethereum.JsonRpc.Client; using Nethereum.RPC.Eth.DTOs; namespace Nethereum.RPC.Eth.Transactions { /// /// eth_call /// Executes a new message call immediately without creating a transaction on the block chain. /// Parameters /// Object - The transaction call object /// from: DATA, 20 Bytes - (optional) The address the transaction is send from. /// to: DATA, 20 Bytes - The address the transaction is directed to. /// gas: QUANTITY - (optional) Integer of the gas provided for the transaction execution. eth_call consumes zero gas, /// but this parameter may be needed by some executions. /// gasPrice: QUANTITY - (optional) Integer of the gasPrice used for each paid gas /// value: QUANTITY - (optional) Integer of the value send with this transaction /// data: DATA - (optional) Hash of the method signature and encoded parameters. For details see Ethereum Contract ABI /// QUANTITY|TAG - integer block number, or the string "latest", "earliest" or "pending", see the default block /// parameter /// Returns /// DATA - the return value of executed contract. /// Example /// Request /// curl -X POST --data '{"jsonrpc":"2.0","method":"eth_call","params":[{see above}],"id":1}' /// Result /// { /// "id":1, /// "jsonrpc": "2.0", /// "result": "0x0" /// } /// public class EthCall : RpcRequestResponseHandler, IDefaultBlock, IEthCall { public EthCall(IClient client) : base(client, ApiMethods.eth_call.ToString()) { DefaultBlock = BlockParameter.CreateLatest(); } public BlockParameter DefaultBlock { get; set; } public Task SendRequestAsync(CallInput callInput, BlockParameter block, object id = null) { if (block == null) return SendRequestAsync(callInput, id); if (callInput == null) throw new ArgumentNullException(nameof(callInput)); return base.SendRequestAsync(id, callInput, block); } public Task SendRequestAsync(CallInput callInput, object id = null) { if (callInput == null) throw new ArgumentNullException(nameof(callInput)); return base.SendRequestAsync(id, callInput, DefaultBlock); } public RpcRequest BuildRequest(CallInput callInput, BlockParameter block, object id = null) { if (callInput == null) throw new ArgumentNullException(nameof(callInput)); if (block == null) throw new ArgumentNullException(nameof(block)); return base.BuildRequest(id, callInput, block); } } }