public void Will_not_serve_receipts_requests_above_512() { StatusMessageSerializer statusMessageSerializer = new StatusMessageSerializer(); ReceiptsMessageSerializer receiptMessageSerializer = new ReceiptsMessageSerializer(MainnetSpecProvider.Instance); GetReceiptsMessageSerializer getReceiptMessageSerializer = new GetReceiptsMessageSerializer(); MessageSerializationService serializationService = new MessageSerializationService(); serializationService.Register(statusMessageSerializer); serializationService.Register(receiptMessageSerializer); serializationService.Register(getReceiptMessageSerializer); ISyncServer syncServer = Substitute.For <ISyncServer>(); Eth63ProtocolHandler protocolHandler = new Eth63ProtocolHandler( _session, serializationService, Substitute.For <INodeStatsManager>(), syncServer, Substitute.For <ITxPool>(), LimboLogs.Instance); StatusMessage statusMessage = new StatusMessage(); Packet statusPacket = new Packet("eth", Eth62MessageCode.Status, statusMessageSerializer.Serialize(statusMessage)); GetReceiptsMessage getReceiptsMessage = new GetReceiptsMessage( Enumerable.Repeat(Keccak.Zero, 513).ToArray()); Packet getReceiptsPacket = new Packet("eth", Eth63MessageCode.GetReceipts, getReceiptMessageSerializer.Serialize(getReceiptsMessage)); protocolHandler.HandleMessage(statusPacket); Assert.Throws <EthSyncException>(() => protocolHandler.HandleMessage(getReceiptsPacket)); }
public void RoundTripWithAllData() { StatusMessage statusMessage = new StatusMessage(); statusMessage.ProtocolVersion = 3; statusMessage.ChainId = 1; statusMessage.TotalDifficulty = 131200; statusMessage.BestHash = Keccak.Compute("1"); statusMessage.HeadBlockNo = 4; statusMessage.GenesisHash = Keccak.Compute("0"); statusMessage.AnnounceType = 1; statusMessage.ServeHeaders = true; statusMessage.ServeChainSince = 0; statusMessage.ServeRecentChain = 1000; statusMessage.ServeStateSince = 1; statusMessage.ServeRecentState = 500; statusMessage.TxRelay = true; statusMessage.BufferLimit = 1000; statusMessage.MaximumRechargeRate = 100; statusMessage.MaximumRequestCosts = CostTracker.DefaultRequestCostTable; StatusMessageSerializer serializer = new StatusMessageSerializer(); SerializerTester.TestZero(serializer, statusMessage, "f90176d18f70726f746f636f6c56657273696f6e03cb896e6574776f726b496401cb8668656164546483020080ea886865616448617368a0c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6c987686561644e756d04ed8b67656e6573697348617368a0044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116dce8c616e6e6f756e63655479706501ce8c736572766548656164657273c0d18f7365727665436861696e53696e636580d4907365727665526563656e74436861696e8203e8d18f7365727665537461746553696e636501d4907365727665526563656e7453746174658201f4c987747852656c6179c0d28e666c6f77436f6e74726f6c2f424c8203e8d18f666c6f77436f6e74726f6c2f4d525264f84c8f666c6f77436f6e74726f6c2f4d5243f83ac802830249f0827530c60480830aae60c60680830f4240c60a808306ddd0c60f80830927c0c61180830f4240c613808306ddd0c614808303d090"); }
public void Roundtrip() { StatusMessage statusMessage = new StatusMessage(); statusMessage.ProtocolVersion = 63; statusMessage.BestHash = Keccak.Compute("1"); statusMessage.GenesisHash = Keccak.Compute("0"); statusMessage.TotalDifficulty = 131200; statusMessage.ChainId = 1; StatusMessageSerializer serializer = new StatusMessageSerializer(); byte[] bytes = serializer.Serialize(statusMessage); byte[] expectedBytes = Bytes.FromHexString("f8483f0183020080a0c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6a0044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d"); Assert.True(Bytes.AreEqual(bytes, expectedBytes), "bytes"); StatusMessage deserialized = serializer.Deserialize(bytes); Assert.AreEqual(statusMessage.BestHash, deserialized.BestHash, $"{nameof(deserialized.BestHash)}"); Assert.AreEqual(statusMessage.GenesisHash, deserialized.GenesisHash, $"{nameof(deserialized.GenesisHash)}"); Assert.AreEqual(statusMessage.TotalDifficulty, deserialized.TotalDifficulty, $"{nameof(deserialized.TotalDifficulty)}"); Assert.AreEqual(statusMessage.ChainId, deserialized.ChainId, $"{nameof(deserialized.ChainId)}"); Assert.AreEqual(statusMessage.ProtocolVersion, deserialized.ProtocolVersion, $"{nameof(deserialized.ProtocolVersion)}"); }
public void Roundtrip_empty_status() { StatusMessage statusMessage = new StatusMessage(); StatusMessageSerializer serializer = new StatusMessageSerializer(); SerializerTester.TestZero(serializer, statusMessage); }
public void Can_serialize_fork_id_properly(string forkHash, ulong?next, string expected) { next ??= BinaryPrimitives.ReadUInt32BigEndian(Bytes.FromHexString("baddcafe")); StatusMessageSerializer serializer = new StatusMessageSerializer(); StatusMessage message = new StatusMessage(); message.ForkId = new ForkId(Bytes.FromHexString(forkHash), (long)next.Value); serializer.Serialize(message).ToHexString().Should().EndWith(expected); }
public void Can_deserialize_own_eth_64(string msgHex) { byte[] bytes = Bytes.FromHexString(msgHex.Replace(" ", string.Empty)); StatusMessageSerializer serializer = new StatusMessageSerializer(); StatusMessage message = serializer.Deserialize(bytes); byte[] serialized = serializer.Serialize(message); serialized.Should().BeEquivalentTo(bytes); Assert.AreEqual(64, message.ProtocolVersion, "ProtocolVersion"); }
public void Roundtrip() { StatusMessage statusMessage = new StatusMessage(); statusMessage.ProtocolVersion = 63; statusMessage.BestHash = Keccak.Compute("1"); statusMessage.GenesisHash = Keccak.Compute("0"); statusMessage.TotalDifficulty = 131200; statusMessage.ChainId = 1; StatusMessageSerializer serializer = new StatusMessageSerializer(); SerializerTester.TestZero(serializer, statusMessage, "f8483f0183020080a0c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6a0044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d"); }
public void Hobbit() { StatusMessage message = new StatusMessage(); message.ProtocolVersion = 63; message.BestHash = Keccak.Compute("1"); message.GenesisHash = Keccak.Compute("0"); message.TotalDifficulty = 131200; message.ChainId = 1; StatusMessageSerializer serializer = new StatusMessageSerializer(); SerializerTester.TestZero(serializer, message); }
public void Can_deserialize_example_from_ethereumJ() { byte[] bytes = new Hex("f84927808425c60144a0832056d3c93ff2739ace7199952e5365aa29f18805be05634c4db125c5340216a0955f36d073ccb026b78ab3424c15cf966a7563aa270413859f78702b9e8e22cb"); StatusMessageSerializer serializer = new StatusMessageSerializer(); StatusMessage message = serializer.Deserialize(bytes); Assert.AreEqual(39, message.ProtocolVersion, "ProtocolVersion"); Assert.AreEqual(0x25c60144, (int)message.TotalDifficulty, "Difficulty"); Assert.AreEqual(new Keccak("832056d3c93ff2739ace7199952e5365aa29f18805be05634c4db125c5340216"), message.BestHash, "BestHash"); Assert.AreEqual(new Keccak("0x955f36d073ccb026b78ab3424c15cf966a7563aa270413859f78702b9e8e22cb"), message.GenesisHash, "GenesisHash"); byte[] serialized = serializer.Serialize(message); Assert.AreEqual(bytes, serialized, "serializing to same format"); }
public void Roundtrip_with_fork_id_next_is_max() { StatusMessage statusMessage = new StatusMessage(); statusMessage.ProtocolVersion = 63; statusMessage.BestHash = Keccak.Compute("1"); statusMessage.GenesisHash = Keccak.Compute("0"); statusMessage.TotalDifficulty = 131200; statusMessage.ChainId = 1; statusMessage.ForkId = new ForkId(new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }, long.MaxValue); StatusMessageSerializer serializer = new StatusMessageSerializer(); SerializerTester.TestZero(serializer, statusMessage); }
public async Task Can_request_and_handle_receipts() { Context ctx = new Context(); StatusMessageSerializer statusMessageSerializer = new StatusMessageSerializer(); ReceiptsMessageSerializer receiptMessageSerializer = new ReceiptsMessageSerializer(MainnetSpecProvider.Instance); MessageSerializationService serializationService = new MessageSerializationService(); serializationService.Register(statusMessageSerializer); serializationService.Register(receiptMessageSerializer); Eth63ProtocolHandler protocolHandler = new Eth63ProtocolHandler( ctx.Session, serializationService, Substitute.For <INodeStatsManager>(), Substitute.For <ISyncServer>(), Substitute.For <ITxPool>(), LimboLogs.Instance); var receipts = Enumerable.Repeat( Enumerable.Repeat(Build.A.Receipt.WithAllFieldsFilled.TestObject, 100).ToArray(), 1000).ToArray(); // TxReceipt[1000][100] StatusMessage statusMessage = new StatusMessage(); Packet statusPacket = new Packet("eth", Eth62MessageCode.Status, statusMessageSerializer.Serialize(statusMessage)); ReceiptsMessage receiptsMsg = new ReceiptsMessage(receipts); Packet receiptsPacket = new Packet("eth", Eth63MessageCode.Receipts, receiptMessageSerializer.Serialize(receiptsMsg)); protocolHandler.HandleMessage(statusPacket); Task <TxReceipt[][]> task = protocolHandler.GetReceipts( Enumerable.Repeat(Keccak.Zero, 1000).ToArray(), CancellationToken.None); protocolHandler.HandleMessage(receiptsPacket); var result = await task; result.Should().HaveCount(1000); }
public void Status_message(StackType inbound, StackType outbound, bool framingEnabled) { StatusMessage message = new StatusMessage(); message.BestHash = Keccak.Zero; message.GenesisHash = Keccak.Zero; message.ProtocolVersion = 63; message.TotalDifficulty = 10000000000; message.ChainId = 5; StatusMessageSerializer serializer = new StatusMessageSerializer(); byte[] data = serializer.Serialize(message); Packet packet = new Packet("eth", 7, data); Packet decoded = Run(packet, inbound, outbound, framingEnabled); StatusMessage decodedMessage = serializer.Deserialize(decoded.Data); Assert.AreEqual(message.TotalDifficulty, decodedMessage.TotalDifficulty); }
public void Roundtrip() { StatusMessage statusMessage = new StatusMessage(); statusMessage.ProtocolVersion = 63; statusMessage.BestHash = Keccak.Compute("1"); statusMessage.GenesisHash = Keccak.Compute("0"); statusMessage.TotalDifficulty = 131200; statusMessage.ChainId = 1; StatusMessageSerializer serializer = new StatusMessageSerializer(); byte[] bytes = serializer.Serialize(statusMessage); StatusMessage deserialized = serializer.Deserialize(bytes); Assert.AreEqual(statusMessage.BestHash, deserialized.BestHash, $"{nameof(deserialized.BestHash)}"); Assert.AreEqual(statusMessage.GenesisHash, deserialized.GenesisHash, $"{nameof(deserialized.GenesisHash)}"); Assert.AreEqual(statusMessage.TotalDifficulty, deserialized.TotalDifficulty, $"{nameof(deserialized.TotalDifficulty)}"); Assert.AreEqual(statusMessage.ChainId, deserialized.ChainId, $"{nameof(deserialized.ChainId)}"); Assert.AreEqual(statusMessage.ProtocolVersion, deserialized.ProtocolVersion, $"{nameof(deserialized.ProtocolVersion)}"); }
public void Will_not_send_messages_larger_than_2MB() { Context ctx = new Context(); StatusMessageSerializer statusMessageSerializer = new StatusMessageSerializer(); ReceiptsMessageSerializer receiptMessageSerializer = new ReceiptsMessageSerializer(MainnetSpecProvider.Instance); GetReceiptsMessageSerializer getReceiptMessageSerializer = new GetReceiptsMessageSerializer(); MessageSerializationService serializationService = new MessageSerializationService(); serializationService.Register(statusMessageSerializer); serializationService.Register(receiptMessageSerializer); serializationService.Register(getReceiptMessageSerializer); ISyncServer syncServer = Substitute.For <ISyncServer>(); Eth63ProtocolHandler protocolHandler = new Eth63ProtocolHandler( ctx.Session, serializationService, Substitute.For <INodeStatsManager>(), syncServer, Substitute.For <ITxPool>(), LimboLogs.Instance); syncServer.GetReceipts(Arg.Any <Keccak>()).Returns( Enumerable.Repeat(Build.A.Receipt.WithAllFieldsFilled.TestObject, 512).ToArray()); StatusMessage statusMessage = new StatusMessage(); Packet statusPacket = new Packet("eth", Eth62MessageCode.Status, statusMessageSerializer.Serialize(statusMessage)); GetReceiptsMessage getReceiptsMessage = new GetReceiptsMessage( Enumerable.Repeat(Keccak.Zero, 512).ToArray()); Packet getReceiptsPacket = new Packet("eth", Eth63MessageCode.GetReceipts, getReceiptMessageSerializer.Serialize(getReceiptsMessage)); protocolHandler.HandleMessage(statusPacket); protocolHandler.HandleMessage(getReceiptsPacket); ctx.Session.Received().DeliverMessage(Arg.Is <ReceiptsMessage>(r => r.TxReceipts.Length == 14)); }