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
            }));
        }
Exemple #2
0
        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())));
        }
Exemple #3
0
        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
     });
 }
Exemple #6
0
 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
     });
 }
Exemple #8
0
        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
            }));
        }