public async Task <IActionResult> GetObservableManyOutputsOperation(Guid operationId) { if (operationId == Guid.Empty) { throw new ValidationApiException("OperationId must be valid guid"); } var result = await _observableOperationService.GetByIdAsync(operationId); if (result == null) { return(NoContent()); } return(Ok(new BroadcastedTransactionWithManyOutputsResponse() { Outputs = result.Outputs.Select(o => new BroadcastedTransactionOutputContract { Amount = MoneyConversionHelper.SatoshiToContract(o.Amount), ToAddress = o.Address }).ToList(), Fee = MoneyConversionHelper.SatoshiToContract(result.FeeSatoshi), OperationId = result.OperationId, Hash = result.TxHash, Timestamp = result.Updated, State = MapOperationState(result.Status), Block = result.UpdatedAtBlockHeight })); }
public async Task <IActionResult> GetBalances([FromQuery, Required] int take, [FromQuery] string continuation) { if (take < 1) { return(BadRequest(ErrorResponse.Create("Invalid parameter").AddModelError("take", "Must be positive non zero integer"))); } if (!string.IsNullOrEmpty(continuation)) { try { JsonConvert.DeserializeObject <TableContinuationToken>(Utils.HexToString(continuation)); } catch (JsonReaderException) { return(BadRequest(ErrorResponse.Create("Invalid parameter").AddModelError("continuation", "Must be valid continuation token"))); } } var padedResult = await _balanceService.GetBalances(take, continuation); return(Ok(PaginationResponse.From(padedResult.Continuation, padedResult.Items.Select(p => new WalletBalanceContract { Address = p.Address, Balance = MoneyConversionHelper.SatoshiToContract(p.BalanceSatoshi), AssetId = Constants.Assets.BitcoinGold.AssetId, Block = p.UpdatedAtBlockHeight }).ToList().AsReadOnly()))); }
public async Task <IActionResult> GetBalances([FromQuery] int take, [FromQuery] string continuation) { if (take <= 0) { ModelState.AddModelError(nameof(take), "Must be greater than zero"); } ModelState.IsValidContinuationToken(continuation); if (!ModelState.IsValid) { return(BadRequest(ModelState.ToErrorResponce())); } var padedResult = await _balanceService.GetBalances(take, continuation); return(Ok(PaginationResponse.From(padedResult.Continuation, padedResult.Items.Select(p => new WalletBalanceContract { Address = p.Address, Balance = MoneyConversionHelper.SatoshiToContract(p.BalanceSatoshi), AssetId = Constants.Assets.LiteCoin.AssetId, Block = p.UpdatedAtBlockHeight }).ToList().AsReadOnly()))); }
public async Task <IActionResult> GetObservableSingleOperation(Guid operationId) { if (operationId == Guid.Empty) { throw new ValidationApiException("OperationId must be valid guid"); } var result = await _observableOperationService.GetByIdAsync(operationId); if (result == null) { return(NoContent()); } return(Ok(new BroadcastedSingleTransactionResponse { Amount = MoneyConversionHelper.SatoshiToContract(result.Inputs.Single().Amount - (result.IncludeFee ? result.FeeSatoshi : 0)), Fee = MoneyConversionHelper.SatoshiToContract(result.FeeSatoshi), OperationId = result.OperationId, Hash = result.TxHash, Timestamp = result.Updated, State = MapOperationState(result.Status), Block = result.UpdatedAtBlockHeight })); }
public static HistoricalTransactionContract ToHistoricalTransaction(this HistoricalTransactionDto source) { return(new HistoricalTransactionContract { ToAddress = source.ToAddress, FromAddress = source.FromAddress, AssetId = source.AssetId, Amount = MoneyConversionHelper.SatoshiToContract(source.AmountSatoshi), Hash = source.TxHash, Timestamp = source.TimeStamp }); }
private HistoricalTransactionContract ToHistoricalTransaction(HistoricalTransactionDto source) { return(new HistoricalTransactionContract { ToAddress = source.ToAddress, FromAddress = source.FromAddress, AssetId = source.AssetId, Amount = MoneyConversionHelper.SatoshiToContract(source.AmountSatoshi), Hash = source.TxHash, Timestamp = DateTime.SpecifyKind(source.TimeStamp, DateTimeKind.Utc), }); }
private HistoricalTransactionContract ToHistoricalTransaction(HistoricalTransactionDto source) { return(new HistoricalTransactionContract { ToAddress = source.ToAddress, FromAddress = source.FromAddress, AssetId = source.AssetId, Amount = MoneyConversionHelper.SatoshiToContract(source.AmountSatoshi), Hash = source.TxHash, Timestamp = source.TimeStamp, TransactionType = source.IsSending ? TransactionType.Send : TransactionType.Receive }); }
public async Task <PaginationResponse <WalletBalanceContract> > GetBalances([FromQuery] int take, [FromQuery] string continuation) { if (take <= 0) { throw new BusinessException("Take must be greater than zero", ErrorCode.BadInputParameter); } var padedResult = await _balanceService.GetBalances(take, continuation); return(PaginationResponse.From(padedResult.Continuation, padedResult.Items.Select(p => new WalletBalanceContract { Address = p.Address, Balance = MoneyConversionHelper.SatoshiToContract(p.BalanceSatoshi), AssetId = Constants.Assets.Vertcoin.AssetId }).ToList().AsReadOnly())); }
public async Task <IActionResult> GetObservableSingleOperation(Guid operationId) { if (!ModelState.IsValid || !ModelState.IsValidOperationId(operationId)) { return(BadRequest(ModelState.ToErrorResponce())); } var result = await _observableOperationService.GetById(operationId); if (result == null) { return(new StatusCodeResult((int)HttpStatusCode.NoContent)); } BroadcastedTransactionState MapState(BroadcastStatus status) { switch (status) { case BroadcastStatus.Completed: return(BroadcastedTransactionState.Completed); case BroadcastStatus.Failed: return(BroadcastedTransactionState.Failed); case BroadcastStatus.InProgress: return(BroadcastedTransactionState.InProgress); default: throw new InvalidCastException($"Unknown mapping from {status} "); } } return(Ok(new BroadcastedSingleTransactionResponse { Amount = MoneyConversionHelper.SatoshiToContract(result.AmountSatoshi), Fee = MoneyConversionHelper.SatoshiToContract(result.FeeSatoshi), OperationId = result.OperationId, Hash = result.TxHash, Timestamp = result.Updated, State = MapState(result.Status), Block = result.UpdatedAtBlockHeight })); }