using System; using System.Threading; using System.Threading.Tasks; using Nethereum.Contracts.Extensions; using Nethereum.Contracts.TransactionHandlers; using Nethereum.Hex.HexTypes; using Nethereum.RPC.Eth.DTOs; using Nethereum.RPC.TransactionManagers; namespace Nethereum.Contracts.ContractHandlers { #if !DOTNET35 public class ContractTransactionHandler : ContractTransactionHandlerBase, IContractTransactionHandler where TContractMessage : FunctionMessage, new() { private readonly ITransactionEstimatorHandler _estimatorHandler; private readonly ITransactionReceiptPollHandler _receiptPollHandler; private readonly ITransactionSenderHandler _transactionSenderHandler; private readonly ITransactionSigner _transactionSigner; public ContractTransactionHandler(ITransactionManager transactionManager) : base(transactionManager) { _estimatorHandler = new TransactionEstimatorHandler(transactionManager); _receiptPollHandler = new TransactionReceiptPollHandler(transactionManager); _transactionSenderHandler = new TransactionSenderHandler(transactionManager); _transactionSigner = new TransactionSignerHandler(transactionManager); } public Task SignTransactionAsync( string contractAddress, TContractMessage functionMessage = null) { return _transactionSigner.SignTransactionAsync(contractAddress, functionMessage); } public Task SendTransactionAndWaitForReceiptAsync( string contractAddress, TContractMessage functionMessage = null, CancellationTokenSource tokenSource = null) { return _receiptPollHandler.SendTransactionAsync(contractAddress, functionMessage, tokenSource); } [Obsolete("Use SendTransactionAndWaitForReceipt instead")] public Task SendRequestAndWaitForReceiptAsync( string contractAddress, TContractMessage functionMessage = null, CancellationTokenSource tokenSource = null) { return SendTransactionAndWaitForReceiptAsync(contractAddress, functionMessage, tokenSource); } public Task SendTransactionAsync(string contractAddress, TContractMessage functionMessage = null) { return _transactionSenderHandler.SendTransactionAsync(contractAddress, functionMessage); } [Obsolete("Use SendTransactionAsync instead")] public Task SendRequestAsync(string contractAddress, TContractMessage functionMessage = null) { return SendTransactionAsync(contractAddress, functionMessage); } public async Task CreateTransactionInputEstimatingGasAsync( string contractAddress, TContractMessage functionMessage = null) { var gasEstimate = await EstimateGasAsync(contractAddress, functionMessage).ConfigureAwait(false); functionMessage.Gas = gasEstimate; return functionMessage.CreateTransactionInput(contractAddress); } public Task EstimateGasAsync(string contractAddress, TContractMessage functionMessage = null) { return _estimatorHandler.EstimateGasAsync(contractAddress, functionMessage); } } #endif }