public override async Task <EndAuctionResponse> EndAuction(EndAuctionRequest request, ServerCallContext context)
        {
            if (!(await CheckPassword(context)))
            {
                throw new RpcException(new Status(StatusCode.PermissionDenied, "you are not authorized"));
            }
            Guid auctionId;

            if (!Guid.TryParse(request.AuctionId, out auctionId))
            {
                throw new RpcException(new Status(StatusCode.InvalidArgument, "entryid is not a guid"));
            }
            var auction = await _auctionService.EndAuction(auctionId);

            Models.AuctionInvoice winningEntry = null;
            try
            {
                winningEntry = JsonSerializer.Deserialize <LightningAuction.Models.AuctionInvoice>(auction.WinningEntry);
            }
            catch
            {
            }
            var res = new EndAuctionResponse
            {
                Auction = new Auction
                {
                    Id         = auction.Id.ToString(),
                    StartedAt  = auction.StartedAt,
                    Duration   = auction.Duration,
                    FinishedAt = auction.FinishedAt,
                }
            };

            if (winningEntry != null)
            {
                res.Auction.WinningEntry = new AuctionEntry
                {
                    Amount  = winningEntry.Amount,
                    Message = winningEntry.WinningMessage
                };
            }


            return(res);
        }
        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                await Task.Delay(1000, stoppingToken);

                var auctions = await _auctionService.GetAllAuctions(false, true);

                foreach (var auction in auctions)
                {
                    var now = Utility.Utility.DateTimeToUnix(DateTime.UtcNow);
                    if (now >= auction.StartedAt + auction.Duration)
                    {
                        Console.WriteLine("finishing auction {0}", auction);
                        await _auctionService.EndAuction(auction.Id);
                    }
                }
            }
        }