public async Task HandleEvent_Test()
        {
            var eventData = new PeerConnectedEventData
                            (
                new NodeInfo {
                Endpoint = "127.0.0.1:1234", Pubkey = ByteString.CopyFromUtf8("Pubkey")
            },
                HashHelper.ComputeFrom("BestChainHash"),
                100
                            );

            AnnouncementReceivedEventData announcementEventData = null;

            _eventBus.Subscribe <AnnouncementReceivedEventData>(d =>
            {
                announcementEventData = d;
                return(Task.CompletedTask);
            });

            await _peerConnectedEventHandler.HandleEventAsync(eventData);

            var nodes = await _peerDiscoveryService.GetNodesAsync(1);

            nodes.Nodes[0].ShouldBe(eventData.NodeInfo);

            announcementEventData.ShouldNotBeNull();
            announcementEventData.Announce.BlockHash.ShouldBe(eventData.BestChainHash);
            announcementEventData.Announce.BlockHeight.ShouldBe(eventData.BestChainHeight);
            announcementEventData.SenderPubKey.ShouldBe(eventData.NodeInfo.Pubkey.ToHex());
        }
Beispiel #2
0
        public async Task Announce_ShouldPublishEvent_Test()
        {
            AnnouncementReceivedEventData received = null;

            _eventBus.Subscribe <AnnouncementReceivedEventData>(a =>
            {
                received = a;
                return(Task.CompletedTask);
            });

            await _serverService.SendAnnouncement(null, BuildServerCallContext());

            Assert.Null(received);

            var pubkey   = _peerPool.GetPeers(true).First().Info.Pubkey;
            var metadata = new Metadata {
                {
                    GrpcConstants.PubkeyMetadataKey, pubkey
                }
            };

            Hash hash = Hash.FromRawBytes(new byte[] { 3, 6, 9 });
            await _serverService.SendAnnouncement(new BlockAnnouncement
            {
                BlockHeight = 10, BlockHash = hash
            }, BuildServerCallContext(metadata));

            Assert.NotNull(received);
            Assert.Equal(10, received.Announce.BlockHeight);
            Assert.Equal(received.Announce.BlockHash, hash);
        }
        public async Task HandleAnnounceReceiveEventAsync_IrreversibleBlockIndex_IsNull()
        {
            var an               = new BlockAnnouncement();
            var sendKey          = string.Empty;
            var announcementData = new AnnouncementReceivedEventData(an, sendKey);

            await _dpoSAnnouncementReceivedEventDataHandler.HandleEventAsync(announcementData);
        }
        public async Task HandleAnnounceReceiveEventAsync_IrreversibleBlockIndex_SureAmountEnough()
        {
            var block = await GenerateNewBlockAndAnnouncementToPeers(3);

            var an = new BlockAnnouncement
            {
                BlockHash   = block.GetHash(),
                BlockHeight = block.Height
            };
            var sendKey          = CryptoHelper.GenerateKeyPair().PublicKey.ToHex();
            var announcementData = new AnnouncementReceivedEventData(an, sendKey);

            await _dpoSAnnouncementReceivedEventDataHandler.HandleEventAsync(announcementData);
        }
        public async Task HandleEventAsync(PeerConnectedEventData eventData)
        {
            Logger.LogDebug($"Peer connection event {eventData.NodeInfo}");

            await _peerDiscoveryService.AddNodeAsync(eventData.NodeInfo);

            var blockAnnouncement = new BlockAnnouncement {
                BlockHash   = eventData.BestChainHash,
                BlockHeight = eventData.BestChainHeight
            };

            var announcement = new AnnouncementReceivedEventData(blockAnnouncement, eventData.NodeInfo.Pubkey.ToHex());

            await LocalEventBus.PublishAsync(announcement);
        }
Beispiel #6
0
        public async Task Announce_ShouldPublishEvent()
        {
            AnnouncementReceivedEventData received = null;

            _eventBus.Subscribe <AnnouncementReceivedEventData>(a =>
            {
                received = a;
                return(Task.CompletedTask);
            });

            Hash hash = Hash.FromRawBytes(new byte[] { 3, 6, 9 });
            await _service.SendAnnouncement(new BlockAnnouncement
            {
                BlockHeight = 10, BlockHash = hash
            }, BuildServerCallContext());

            Assert.NotNull(received);
            Assert.Equal(10, received.Announce.BlockHeight);
            Assert.Equal(received.Announce.BlockHash, hash);
        }
Beispiel #7
0
        public async Task Announce_ShouldPublishEvent()
        {
            AnnouncementReceivedEventData received = null;

            _eventBus.Subscribe <AnnouncementReceivedEventData>(a =>
            {
                received = a;
                return(Task.CompletedTask);
            });

            Hash hash = Hash.Generate();
            await _service.Announce(new PeerNewBlockAnnouncement
            {
                BlockHeight = 10, BlockHash = hash, BlockTime = DateTime.UtcNow.ToTimestamp()
            }, BuildServerCallContext());

            Assert.NotNull(received);
            Assert.Equal(10, received.Announce.BlockHeight);
            Assert.Equal(received.Announce.BlockHash, hash);
        }
Beispiel #8
0
        public async Task AnnounceAsync_Success()
        {
            AnnouncementReceivedEventData received = null;

            _eventBus.Subscribe <AnnouncementReceivedEventData>(a =>
            {
                received = a;
                return(Task.CompletedTask);
            });

            var header = new BlockAnnouncement
            {
                BlockHeight = 100,
                BlockHash   = Hash.FromRawBytes(new byte[] { 9, 2 })
            };

            await _grpcPeer.SendAnnouncementAsync(header);

            received.ShouldNotBeNull();
            received.Announce.BlockHeight.ShouldBe(100);
        }
Beispiel #9
0
        public async Task AnnounceAsync_Success()
        {
            AnnouncementReceivedEventData received = null;

            _eventBus.Subscribe <AnnouncementReceivedEventData>(a =>
            {
                received = a;
                return(Task.CompletedTask);
            });

            var header = new PeerNewBlockAnnouncement
            {
                BlockHeight = 100,
                BlockHash   = Hash.Generate(),
                BlockTime   = DateTime.UtcNow.ToTimestamp()
            };

            await _grpcPeer.AnnounceAsync(header);

            received.ShouldNotBeNull();
            received.Announce.BlockHeight.ShouldBe(100);
        }