public bool ValidatePacket(PacketBase blockBase) { LinkedPacketBase syncedBlockBase = (LinkedPacketBase)blockBase; if (syncedBlockBase.BlockType == BlockTypes.Synchronization_ConfirmedBlock && syncedBlockBase.Version == 1) { if (_synchronizationContext.LastBlockDescriptor != null && _synchronizationContext.LastBlockDescriptor.BlockHeight + 1 <= syncedBlockBase.BlockHeight || _synchronizationContext.LastBlockDescriptor == null) { if (_synchronizationContext.LastBlockDescriptor != null && syncedBlockBase.HashPrev.Equals32(_synchronizationContext.LastBlockDescriptor.Hash) || _synchronizationContext.LastBlockDescriptor == null && syncedBlockBase.HashPrev.Equals32(new byte[Globals.DEFAULT_HASH_SIZE])) { return(true); } } return(false); } return(true); }
protected abstract Memory <byte> ParseLinked(ushort version, Memory <byte> spanBody, out LinkedPacketBase linkedPacketBase);
protected override Memory <byte> ParseLinked(ushort version, Memory <byte> spanBody, out LinkedPacketBase syncedBlockBase) { DateTime dateTime = DateTime.FromBinary(BinaryPrimitives.ReadInt64LittleEndian(spanBody.Span)); Memory <byte> spanPostBody = ParseSynchronization(version, spanBody.Slice(8), out SynchronizationBlockBase synchronizationBlockBase); synchronizationBlockBase.ReportedTime = dateTime; syncedBlockBase = synchronizationBlockBase; return(spanPostBody); }