コード例 #1
0
        public void Size_Get()
        {
            var test = new FullNodeCapability()
            {
                StartHeight = 1
            };

            test.Size.Should().Be(5);

            test = new FullNodeCapability(2);
            test.Size.Should().Be(5);
        }
コード例 #2
0
        public void DeserializeAndSerialize()
        {
            var test = new FullNodeCapability()
            {
                StartHeight = uint.MaxValue
            };
            var buffer = test.ToArray();

            using var br = new BinaryReader(new MemoryStream(buffer));
            var clone = (FullNodeCapability)NodeCapability.DeserializeFrom(br);

            Assert.AreEqual(test.StartHeight, clone.StartHeight);
        }
コード例 #3
0
        private void OnVersionPayload(VersionPayload version)
        {
            Version = version;
            FullNodeCapability capability = (FullNodeCapability)version.Capabilities.FirstOrDefault(p => p.Type == NodeCapabilityType.FullNode);

            IsFullNode = capability != null;
            if (IsFullNode)
            {
                LastBlockIndex = capability.StartHeight;
            }

            if (version.Nonce == LocalNode.Nonce || version.Magic != ProtocolSettings.Default.Magic)
            {
                Disconnect(true);
                return;
            }
            if (LocalNode.Singleton.RemoteNodes.Values.Where(p => p != this).Any(p => p.Remote.Address.Equals(Remote.Address) && p.Version?.Nonce == version.Nonce))
            {
                Disconnect(true);
                return;
            }
            SendMessage(Message.Create(MessageCommand.Verack));
        }