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()); } }
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)); } }
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)); } }
public static bool TryReadSignedLedger(GetSignedLedgerResponse response, out SignedLedger signed) { try { signed = LedgerCompressionEngine.ReadZippedLedger(Convert.FromBase64String(response.Ledger)); } catch { signed = null; return(false); } return(true); }
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()); } }
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); } }
public SignedLedger GetLedgerFromRaw(long height) { return(LedgerCompressionEngine.ReadZippedLedger(GetRawLedger(height))); }