public override void Serialize(VersionMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
        {
            // version message doesn't have to look into passed protocolVersion but rely on it's message.Version.
            protocolVersion = message.Version;

            output.WriteInt(message.Version);
            output.WriteULong(message.Services);
            output.WriteLong(message.Timestamp.ToUnixTimeSeconds());
            output.WriteWithSerializer(message.ReceiverAddress !, protocolVersion, _networkAddressNoTimeSerializer);

            if (protocolVersion < KnownVersion.V106)
            {
                return;
            }

            output.WriteWithSerializer(message.SenderAddress !, protocolVersion, _networkAddressNoTimeSerializer);
            output.WriteULong(message.Nonce);
            output.WriteVarString(message.UserAgent !);
            output.WriteInt(message.StartHeight);

            if (protocolVersion < KnownVersion.V70001)
            {
                return;
            }

            output.WriteBool(message.Relay);
        }
        public override void Serialize(BlockMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
        {
            ProtocolTypeSerializerOptions?options = null;

            message.PopulateSerializerOption(ref options);

            output.WriteWithSerializer(message.Block !, protocolVersion, _blockSerializer, options);
        }
        public override void Serialize(PingMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
        {
            if (protocolVersion < KnownVersion.V60001)
            {
                return;
            }

            output.WriteULong(message.Nonce);
        }
 public override SendHeadersMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext) => _instance;
 public override void Serialize(SendHeadersMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
 {
 }
        public override VersionMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext)
        {
            var message = new VersionMessage
            {
                Version         = reader.ReadInt(),
                Services        = reader.ReadULong(),
                Timestamp       = DateTimeOffset.FromUnixTimeSeconds(reader.ReadLong()),
                ReceiverAddress = reader.ReadWithSerializer(protocolVersion, _networkAddressNoTimeSerializer)
            };

            if (message.Version < KnownVersion.V106)
            {
                return(message);
            }

            message.SenderAddress = reader.ReadWithSerializer(protocolVersion, _networkAddressNoTimeSerializer);
            message.Nonce         = reader.ReadULong();
            message.UserAgent     = reader.ReadVarString();
            message.StartHeight   = reader.ReadInt();

            if (message.Version < KnownVersion.V70001)
            {
                return(message);
            }

            message.Relay = reader.ReadBool();
            return(message);
        }
Exemple #7
0
 public override AddrMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext)
 {
     return(new AddrMessage {
         Addresses = reader.ReadArray(protocolVersion, _networkAddressSerializer)
     });
 }
 public override GetDataMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext)
 {
     return(new GetDataMessage {
         Inventory = reader.ReadArray(protocolVersion, _inventoryVectorSerializer)
     });
 }
Exemple #9
0
 public override SendCmpctMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext)
 {
     return(new SendCmpctMessage {
         AnnounceUsingCompactBlock = reader.ReadBool(), Version = reader.ReadULong()
     });
 }
 public override HeadersMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext)
 {
     return(new HeadersMessage {
         Headers = reader.ReadArray(protocolVersion, _blockHeaderSerializer)
     });
 }
 public override void Serialize(HeadersMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
 {
     output.WriteArray(message.Headers !, protocolVersion, _blockHeaderSerializer);
 }
        public override PingMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext)
        {
            var message = new PingMessage();

            if (protocolVersion < KnownVersion.V60001)
            {
                return(message);
            }

            message.Nonce = reader.ReadULong();

            return(message);
        }
 public override VerackMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext)
 {
     // having a singleton verack is fine because it contains no data
     return(_instance);
 }
 public override void Serialize(VerackMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
 {
     //NOP
 }
 public override void Serialize(GetBlocksMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
 {
     output.WriteUInt(message.Version);
     output.WriteWithSerializer(message.BlockLocator !, protocolVersion, _blockLocatorSerializer);
     output.WriteWithSerializer(message.HashStop !, protocolVersion, _uint256Serializer);
 }
Exemple #16
0
 public override void Serialize(SendCmpctMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
 {
     output.WriteBool(message.AnnounceUsingCompactBlock);
     output.WriteULong(message.Version);
 }
        public override GetBlocksMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext)
        {
            var message = new GetBlocksMessage
            {
                Version      = reader.ReadUInt(),
                BlockLocator = reader.ReadWithSerializer(protocolVersion, _blockLocatorSerializer),
                HashStop     = reader.ReadWithSerializer(protocolVersion, _uint256Serializer)
            };

            return(message);
        }
Exemple #18
0
 public override PongMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext)
 {
     return(new PongMessage {
         Nonce = reader.ReadULong()
     });
 }
 public override void Serialize(GetDataMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
 {
     output.WriteArray(message.Inventory !, protocolVersion, _inventoryVectorSerializer);
 }
Exemple #20
0
 public override void Serialize(PongMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
 {
     output.WriteULong(message.Nonce);
 }
        public override BlockMessage Deserialize(ref SequenceReader <byte> reader, int protocolVersion, BitcoinPeerContext peerContext)
        {
            var options = new ProtocolTypeSerializerOptions((SerializerOptions.SERIALIZE_WITNESS, peerContext.CanServeWitness));

            return(new BlockMessage {
                Block = reader.ReadWithSerializer(protocolVersion, _blockSerializer, options)
            });
        }
Exemple #22
0
 public override void Serialize(AddrMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output)
 {
     output.WriteArray(message.Addresses !, protocolVersion, _networkAddressSerializer);
 }