/// <inheritdoc /> public async Task <TransactionBuildingResult> BuildSingleTransactionAsync(Guid operationId, string fromAddress, string fromAddressContext, string toAddress, BlockchainAsset asset, decimal amount, bool includeFee) { ValidateOperationIdIsNotEmpty(operationId); ValidateFromAddresIsNotEmpty(fromAddress); ValidateToAddressIsNotEmpty(toAddress); ValidateAssetIsNotNull(asset); ValidateAmountRange(amount); try { var apiResponse = await _runner.RunWithRetriesAsync(() => _api.BuildSingleTransactionAsync( new BuildSingleTransactionRequest { OperationId = operationId, FromAddress = fromAddress, FromAddressContext = fromAddressContext, ToAddress = toAddress, AssetId = asset.AssetId, Amount = Conversions.CoinsToContract(amount, asset.Accuracy), IncludeFee = includeFee })); return(new TransactionBuildingResult(apiResponse)); } catch (ErrorResponseException ex) when(ex.StatusCode == HttpStatusCode.Conflict) { throw new TransactionAlreadyBroadcastedException(ex); } }
/// <inheritdoc /> public async Task <TransactionBuildingResult> BuildSingleTransactionAsync(Guid operationId, string fromAddress, string fromAddressContext, string toAddress, BlockchainAsset asset, decimal amount, bool includeFee) { ValidateOperationIdIsNotEmpty(operationId); ValidateFromAddresIsNotEmpty(fromAddress); ValidateToAddressIsNotEmpty(toAddress); ValidateAssetIsNotNull(asset); ValidateAmountRange(amount); var apiResponse = await _runner.RunWithRetriesAsync(() => _api.BuildSingleTransactionAsync( new BuildSingleTransactionRequest { OperationId = operationId, FromAddress = fromAddress, FromAddressContext = fromAddressContext, ToAddress = toAddress, AssetId = asset.AssetId, Amount = Conversions.CoinsToContract(amount, asset.Accuracy), IncludeFee = includeFee })); return(new TransactionBuildingResult(apiResponse)); }