using System.Threading; using System.Threading.Tasks; using Nethereum.Contracts.CQS; using Nethereum.Contracts.DeploymentHandlers; using Nethereum.Contracts.Extensions; using Nethereum.Hex.HexTypes; using Nethereum.JsonRpc.Client; using Nethereum.RPC.Accounts; using Nethereum.RPC.Eth.DTOs; using Nethereum.RPC.TransactionManagers; namespace Nethereum.Contracts.ContractHandlers { #if !DOTNET35 public class ContractDeploymentTransactionHandler : ContractTransactionHandlerBase, IContractDeploymentTransactionHandler where TContractDeploymentMessage : ContractDeploymentMessage, new() { private readonly IDeploymentEstimatorHandler _estimatorHandler; private readonly IDeploymentTransactionReceiptPollHandler _receiptPollHandler; private readonly IDeploymentTransactionSenderHandler _transactionSenderHandler; private readonly IDeploymentSigner _transactionSigner; public ContractDeploymentTransactionHandler(ITransactionManager transactionManager) : base(transactionManager) { _estimatorHandler = new DeploymentEstimatorHandler(transactionManager); _receiptPollHandler = new DeploymentTransactionReceiptPollHandler(transactionManager); _transactionSenderHandler = new DeploymentTransactionSenderHandler(transactionManager); _transactionSigner = new DeploymentSigner(transactionManager); } public Task SignTransactionAsync(TContractDeploymentMessage contractDeploymentMessage) { return _transactionSigner.SignTransactionAsync(contractDeploymentMessage); } public Task SendRequestAndWaitForReceiptAsync( TContractDeploymentMessage contractDeploymentMessage = null, CancellationTokenSource tokenSource = null) { return _receiptPollHandler.SendTransactionAsync(contractDeploymentMessage, tokenSource); } public Task SendRequestAsync(TContractDeploymentMessage contractDeploymentMessage = null) { return _transactionSenderHandler.SendTransactionAsync(contractDeploymentMessage); } public Task EstimateGasAsync(TContractDeploymentMessage contractDeploymentMessage) { return _estimatorHandler.EstimateGasAsync(contractDeploymentMessage); } public async Task CreateTransactionInputEstimatingGasAsync(TContractDeploymentMessage deploymentMessage = null) { if (deploymentMessage == null) deploymentMessage = new TContractDeploymentMessage(); var gasEstimate = await EstimateGasAsync(deploymentMessage).ConfigureAwait(false); deploymentMessage.Gas = gasEstimate; return deploymentMessage.CreateTransactionInput(); } } #endif }