public void ParseInvitationResponseRequest(InvitationResponseRequest request, Peer from) { if (request.IsBlock) { var bb = LookUpBlock(request.WantedDataId); _logger.Log($"Got new inv response : {request.WantedDataId}"); if (bb != null) { var req = new BlockRequest() { Block = bb }; _logger.Log($"Sending new inv response : {request.WantedDataId}"); _server.SendResponse(req, from); } } else { var tt = TryGetTransaction(request.WantedDataId); _logger.Log($"Got new inv response : {request.WantedDataId}"); if (tt != null) { var req = new TransactionRequest() { Transaction = tt }; _logger.Log($"Sending new inv response : {request.WantedDataId}"); _server.SendResponse(req, from); } } }
public void ParseCatcherUpRequest(CatcherUpRequest request, Peer from) { supposedLongestBlockId = request.EndOfLongestChain; _logger.Log($"Ketchupper {request.EndOfLongestChain} - Count:{request.Invs.Count}"); foreach (var inv in request.Invs) { if (inv.IsBlock) { if (!IsBlockBuffered(inv.DataId)) { var req = new InvitationResponseRequest() { IsBlock = true, WantedDataId = inv.DataId }; _server.SendResponse(req, from); } } else { if (!bufferedTransactions.Exists(r => r.Body.TransactionId == inv.DataId)) { var req = new InvitationResponseRequest() { IsBlock = false, WantedDataId = inv.DataId }; _server.SendResponse(req, from); } } } if (request.EndOfLongestChain == _blockChainService.Info.EndOfLongestChain && request.Invs.Count == 0) { CaughtUp = true; _logger.Log("Ketchup cas its ended and no invs."); } }
public void ParseInvitationRequest(InvitationRequest request, Peer from) { var req = new InvitationResponseRequest() { IsBlock = request.IsBlock, WantedDataId = request.DataId }; var took = false; if (_askedForRequests.Exists(r => r.DataId == request.DataId && r.IsBlock == request.IsBlock)) { return; } if (request.IsBlock) { var bb = LookUpBlock(request.DataId); if (bb == null) { took = true; } } else { if (WantedTransaction(request) && _minerService.MemPool.ToList().FindAll(r => r.Body.TransactionId == request.DataId).Count == 0) { took = true; } } if (took) { _askedForRequests.Add(request); _logger.Log($"Asked for data {request.DataId} ISBlock:{request.IsBlock}"); _server.SendResponse(req, from); } }