Ejemplo n.º 1
0
 public List <SignedLedger> GetLedgersFromHeight(long startHeight)
 {
     using (var entities = new BlockchainEntities())
     {
         var rawLedgers = entities.ledgers.Where(_ => _.height >= startHeight).ToList();
         return(rawLedgers.Select(_ => LedgerCompressionEngine.ReadZippedLedger(_.raw)).ToList());
     }
 }
Ejemplo n.º 2
0
 public SignedLedger GetLastLedgerFromRaw()
 {
     using (var entities = new BlockchainEntities())
     {
         var max = entities.ledgers.OrderByDescending(ledger => ledger.height).FirstOrDefault();
         Debug.Assert(max == null || max.raw != null && max.raw.Length != 0);
         return(LedgerCompressionEngine.ReadZippedLedger(max?.raw));
     }
 }
Ejemplo n.º 3
0
 public SignedLedger GetLedgerByHash(LedgerHash hash)
 {
     using (var entities = new BlockchainEntities())
     {
         var ledger = entities.ledgers.FirstOrDefault(_ => _.hash == hash.Bytes);
         var raw    = ledger?.raw;
         return(LedgerCompressionEngine.ReadZippedLedger(raw));
     }
 }
Ejemplo n.º 4
0
 public static bool TryReadSignedLedger(GetSignedLedgerResponse response, out SignedLedger signed)
 {
     try
     {
         signed = LedgerCompressionEngine.ReadZippedLedger(Convert.FromBase64String(response.Ledger));
     }
     catch
     {
         signed = null;
         return(false);
     }
     return(true);
 }
Ejemplo n.º 5
0
        public List <SignedLedgerState> GetLedgersWithStateFromHeight(long startHeight)
        {
            using (var entities = new BlockchainEntities())
            {
                var rawLedgers    = entities.ledgers.Where(_ => _.height >= startHeight).ToList();
                var readedLedgers = rawLedgers.Select(_ => LedgerCompressionEngine.ReadZippedLedger(_.raw));

                var rawStateChanges    = entities.ledgerstatechanges.Where(_ => _.ledger_height >= startHeight).ToList();
                var readedStateChanges = rawStateChanges.Select(_ => ReadStateChange(_.ledger_height, _.raw));

                var results = from ledger in readedLedgers
                              join state in readedStateChanges
                              on ledger.Ledger.LedgerLight.Height equals state.Item1
                              select new SignedLedgerState(ledger, state.Item2);

                return(results.ToList());
            }
        }
Ejemplo n.º 6
0
        private void DispatchRequest(Request request, Action <Response, ResultCode> sendResponse)
        {
            if (request is GetAccountRequest)
            {
                var message = (GetAccountRequest)request;

                var command = new GetAccountCommand(message.Address, (acc, rc) => sendResponse(ResponseHelper.CreateGetAccountResponse(acc), rc));
                LiveService.AddCommand(command);
            }
            else if (request is GetTransactionsRequest)
            {
                var message = (GetTransactionsRequest)request;

                if (!RequestHelper.TryReadTransactionHashes(message, out var hashes))
                {
                    sendResponse.Call(ResponseHelper.CreateGetTransactionResponse(), ResultCode.InvalidInputParam);
                    return;
                }

                LiveService.AddCommand(new GetTransactionsCommand(hashes, sendResponse));
            }
            else if (request is SendTransactionRequest)
            {
                var message = (SendTransactionRequest)request;
                if (!RequestHelper.TryReadSignedTransaction(message, out var signed))
                {
                    sendResponse.Call(new SendTransactionResponse(), ResultCode.CannotReadSignedTransaction);
                    return;
                }

                LiveService.AddCommand(new SendTransactionCommand(signed, sendResponse));
            }
            else if (request is GetSignedLedgerRequest)
            {
                var message = (GetSignedLedgerRequest)request;

                if (message.Height < 0)
                {
                    sendResponse.Call(ResponseHelper.CreateGetSignedLedgerResponseFromZip(null), ResultCode.InvalidInputParam);
                    return;
                }

                var height = LedgerService.LedgerManager.GetSignedLedger().GetHeight();

                if (message.Height > height)
                {
                    sendResponse.Call(ResponseHelper.CreateGetSignedLedgerResponseFromZip(null), ResultCode.LedgerDoesnotExist);
                    return;
                }

                if (message.Height == height)
                {
                    var ledger = LedgerService.LedgerManager.GetSignedLedger();
                    var zipped = LedgerCompressionEngine.ZipSignedLedger(ledger);
                    sendResponse.Call(ResponseHelper.CreateGetSignedLedgerResponseFromZip(zipped), ResultCode.Success);
                    return;
                }

                var signed = DatabaseService.ReadDatabaseManager.GetRawLedger(message.Height);
                if (signed == null)
                {
                    sendResponse.Call(ResponseHelper.CreateGetSignedLedgerResponseFromZip(null), ResultCode.LedgerDoesnotExist);
                }

                sendResponse.Call(ResponseHelper.CreateGetSignedLedgerResponseFromZip(signed), ResultCode.Success);
            }
            else if (request is GetCurrentLedgerHeightRequest)
            {
                var height = LedgerService.LedgerManager.GetSignedLedger().GetHeight();
                sendResponse.Call(ResponseHelper.CreateGetCurrentLedgerHeightResponse(height), ResultCode.Success);
            }

            else
            {
                sendResponse.Call(new Response(), ResultCode.UnknownMessage);
            }
        }
Ejemplo n.º 7
0
 public SignedLedger GetLedgerFromRaw(long height)
 {
     return(LedgerCompressionEngine.ReadZippedLedger(GetRawLedger(height)));
 }