public void ProcessBlock(BlockBase blockBase) { SynchronizationBlockBase synchronizationBlock = blockBase as SynchronizationBlockBase; if (synchronizationBlock != null && !_synchronizationBlocks.IsAddingCompleted) { _synchronizationBlocks.TryAdd(synchronizationBlock); } }
protected override Memory <byte> ParseSynchronization(ushort version, Memory <byte> spanBody, out SynchronizationBlockBase synchronizationBlockBase) { if (version == 1) { ushort round = BinaryPrimitives.ReadUInt16LittleEndian(spanBody.Span); byte numberOfSigners = spanBody.Span[2]; byte[][] signers = new byte[numberOfSigners][]; byte[][] signatures = new byte[numberOfSigners][]; for (int i = 0; i < numberOfSigners; i++) { signers[i] = spanBody.Slice(3 + (Globals.NODE_PUBLIC_KEY_SIZE + Globals.SIGNATURE_SIZE) * i, Globals.NODE_PUBLIC_KEY_SIZE).ToArray(); signatures[i] = spanBody.Slice(3 + (Globals.NODE_PUBLIC_KEY_SIZE + Globals.SIGNATURE_SIZE) * i + Globals.NODE_PUBLIC_KEY_SIZE, Globals.SIGNATURE_SIZE).ToArray(); } SynchronizationBlockBase synchronizationConfirmedBlock = new SynchronizationConfirmedBlock() { Round = round, PublicKeys = signers, Signatures = signatures }; synchronizationBlockBase = synchronizationConfirmedBlock; return(spanBody.Slice(3 + (Globals.NODE_PUBLIC_KEY_SIZE + Globals.SIGNATURE_SIZE) * numberOfSigners)); } throw new BlockVersionNotSupportedException(version, BlockType); }
protected override Memory <byte> ParseSynchronization(ushort version, Memory <byte> spanBody, out SynchronizationBlockBase synchronizationBlockBase) { SynchronizationRegistryCombinedBlock block = new SynchronizationRegistryCombinedBlock(); if (version == 1) { ushort blockHashesCount = BinaryPrimitives.ReadUInt16LittleEndian(spanBody.Span); block.BlockHashes = new byte[blockHashesCount][]; for (int i = 0; i < blockHashesCount; i++) { block.BlockHashes[i] = spanBody.Slice(2 + i * Globals.DEFAULT_HASH_SIZE, Globals.DEFAULT_HASH_SIZE).ToArray(); } synchronizationBlockBase = block; return(spanBody.Slice(2 + blockHashesCount * Globals.DEFAULT_HASH_SIZE)); } throw new BlockVersionNotSupportedException(version, BlockType); }
protected abstract Memory <byte> ParseSynchronization(ushort version, Memory <byte> spanBody, out SynchronizationBlockBase synchronizationBlockBase);
protected override Memory <byte> ParseSynchronization(ushort version, Memory <byte> spanBody, out SynchronizationBlockBase synchronizationBlockBase) { if (version == 1) { ushort round = BinaryPrimitives.ReadUInt16LittleEndian(spanBody.Span); SynchronizationProducingBlock synchronizationBlock = new SynchronizationProducingBlock { Round = round }; synchronizationBlockBase = synchronizationBlock; return(spanBody.Slice(2)); } throw new BlockVersionNotSupportedException(version, BlockType); }