public bool ValidatePacket(BlockBase blockBase) { SyncedLinkedBlockBase syncedBlockBase = (SyncedLinkedBlockBase)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> ParseSyncLinked(ushort version, Memory <byte> spanBody, out SyncedLinkedBlockBase syncedBlockBase);
protected override Memory <byte> ParseSyncLinked(ushort version, Memory <byte> spanBody, out SyncedLinkedBlockBase 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); }
protected override Memory <byte> ParseSyncLinked(ushort version, Memory <byte> spanBody, out SyncedLinkedBlockBase syncedBlockBase) { int readBytes = 0; ulong tagId = BinaryPrimitives.ReadUInt64LittleEndian(spanBody.Span.Slice(readBytes)); readBytes += 8; ulong funds = BinaryPrimitives.ReadUInt64LittleEndian(spanBody.Span.Slice(readBytes)); readBytes += 8; uint assetsCount = BinaryPrimitives.ReadUInt32LittleEndian(spanBody.Span.Slice(readBytes)); readBytes += 4; byte[][] assetIds = new byte[assetsCount][]; ulong[] assetAmounts = new ulong[assetsCount]; for (int i = 0; i < assetsCount; i++) { assetIds[i] = spanBody.Slice(readBytes, 32).ToArray(); readBytes += 32; } for (int i = 0; i < assetsCount; i++) { assetAmounts[i] = BinaryPrimitives.ReadUInt64LittleEndian(spanBody.Slice(readBytes).Span); readBytes += 8; } Memory <byte> spanPostBody = ParseTransactional(version, spanBody.Slice(readBytes), assetsCount, out TransactionalBlockBase transactionalBlockBase); transactionalBlockBase.TagId = tagId; transactionalBlockBase.UptodateFunds = funds; transactionalBlockBase.AssetIds = assetIds; transactionalBlockBase.AssetAmounts = assetAmounts; syncedBlockBase = transactionalBlockBase; return(spanPostBody); }