Пример #1
0
        protected override void OnSerialize(BinaryWriter writer)
        {
            writer.Write((byte)Kind);

            if (Kind.HasFlag(RequestKind.Peers))
            {
                writer.Write((byte)_peers.Length);
                foreach (var peer in _peers)
                {
                    peer.Serialize(writer);
                }
            }

            if (Kind.HasFlag(RequestKind.Chains))
            {
                writer.Write((ushort)_chains.Length);
                foreach (var chain in _chains)
                {
                    chain.Serialize(writer);
                }
            }

            if (Kind.HasFlag(RequestKind.Mempool))
            {
                writer.Write((ushort)_mempool.Length);
                foreach (var tx in _mempool)
                {
                    writer.WriteVarString(tx);
                }
            }

            if (Kind.HasFlag(RequestKind.Blocks))
            {
                writer.Write((ushort)_blockRanges.Count);
                foreach (var entry in _blockRanges)
                {
                    var range = entry.Value;
                    writer.WriteVarString(entry.Key);

                    writer.WriteVarInt(range.blocks.Length);
                    foreach (var block in range.blocks)
                    {
                        var bytes = block.ToByteArray(true);
                        writer.WriteByteArray(bytes);

                        foreach (var txHash in block.TransactionHashes)
                        {
                            var tx = range.transactions[txHash];
                            bytes = tx.ToByteArray(true);
                            writer.WriteByteArray(bytes);
                        }
                    }
                }
            }
        }
Пример #2
0
        protected override void OnSerialize(BinaryWriter writer)
        {
            writer.Write((byte)Kind);

            if (Kind.HasFlag(RequestKind.Peers))
            {
                writer.Write((byte)_peers.Length);
                foreach (var peer in _peers)
                {
                    peer.Serialize(writer);
                }
            }

            if (Kind.HasFlag(RequestKind.Chains))
            {
                writer.Write((ushort)_chains.Length);
                foreach (var chain in _chains)
                {
                    chain.Serialize(writer);
                }
            }

            if (Kind.HasFlag(RequestKind.Mempool))
            {
                writer.Write((ushort)_mempool.Length);
                foreach (var tx in _mempool)
                {
                    writer.WriteVarString(tx);
                }
            }

            if (Kind.HasFlag(RequestKind.Blocks))
            {
                writer.Write((ushort)_blockRanges.Count);
                foreach (var entry in _blockRanges)
                {
                    writer.WriteVarString(entry.Key);
                    writer.Write((uint)entry.Value.startHeight);
                    writer.Write((ushort)entry.Value.rawBlocks.Length);
                    foreach (var rawBlock in entry.Value.rawBlocks)
                    {
                        writer.WriteVarString(rawBlock);
                    }
                }
            }
        }
Пример #3
0
        protected override void OnSerialize(BinaryWriter writer)
        {
            writer.Write((byte)Kind);
            writer.WriteVarString(NexusName);

            if (Kind.HasFlag(RequestKind.Blocks))
            {
                Throw.IfNull(_blockFetches, nameof(_blockFetches));
                Throw.If(_blockFetches.Count > 1024, "max chain block fetches per request reached");
                writer.WriteVarInt(_blockFetches.Count);
                foreach (var entry in _blockFetches)
                {
                    writer.WriteVarString(entry.Key);
                    writer.WriteBigInteger(entry.Value);
                }
            }
        }