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); }
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) }); }
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); }
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); }
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); }
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) }); }
public override void Serialize(AddrMessage message, int protocolVersion, BitcoinPeerContext peerContext, IBufferWriter <byte> output) { output.WriteArray(message.Addresses !, protocolVersion, _networkAddressSerializer); }