using System.Threading.Tasks; using Nethereum.Contracts.Extensions; using Nethereum.Hex.HexTypes; using Nethereum.RPC.TransactionManagers; namespace Nethereum.Contracts.DeploymentHandlers { #if !DOTNET35 public class DeploymentTransactionSenderHandler : DeploymentHandlerBase, IDeploymentTransactionSenderHandler where TContractDeploymentMessage : ContractDeploymentMessage, new() { private readonly IDeploymentEstimatorHandler _deploymentEstimatorHandler; public DeploymentTransactionSenderHandler(ITransactionManager transactionManager):base(transactionManager) { _deploymentEstimatorHandler = new DeploymentEstimatorHandler(transactionManager); } public async Task SendTransactionAsync(TContractDeploymentMessage deploymentMessage = null) { if(deploymentMessage == null) deploymentMessage = new TContractDeploymentMessage(); deploymentMessage.Gas = await GetOrEstimateMaximumGasAsync(deploymentMessage).ConfigureAwait(false); var transactionInput = DeploymentMessageEncodingService.CreateTransactionInput(deploymentMessage); return await TransactionManager.SendTransactionAsync(transactionInput).ConfigureAwait(false); } protected virtual async Task GetOrEstimateMaximumGasAsync( TContractDeploymentMessage deploymentMessage) { return deploymentMessage.GetHexMaximumGas() ?? await _deploymentEstimatorHandler.EstimateGasAsync(deploymentMessage).ConfigureAwait(false); } } #endif }