public void HandleRemoteFundingLockedNormalOperationTest()
        {
            var mocks   = new ChannelEstablishmentMocks();
            var handler = new FundingMessageLockedHandler(mocks.ChannelLoggingService.Object,
                                                          mocks.CommTxService.Object, mocks.ChannelService.Object);
            var nextCommPoint = new ECKeyPair("DD06232AE9A50384A72D85CED6351DCB35C798231D4985615C77D6847F83FC65", true);
            var channel       = mocks.CreateChannelMock();

            channel.RemoteCommitmentTxParameters = new CommitmentTransactionParameters();
            channel.State     = LocalChannelState.FundingLocked;
            channel.ChannelId = "b34fafd163cf765b0997187c20c8fe52dde14d8edd0b4406428e882930bb0723";

            mocks.CommTxService.Setup(c => c.GetNextLocalPerCommitmentPoint(channel)).Returns(nextCommPoint);

            var fundingLockedMessage = new FundingLockedMessage()
            {
                ChannelId = channel.ChannelId.HexToByteArray(),
                NextPerCommitmentPoint = nextCommPoint
            };

            handler.HandleRemoteFundingLocked(mocks.Peer.Object, fundingLockedMessage, channel);

            Assert.Equal(nextCommPoint, channel.RemoteCommitmentTxParameters.NextPerCommitmentPoint);
            Assert.Equal(LocalChannelState.NormalOperation, channel.State);
        }
        public void HandleRemoteFundingLockedResendTest()
        {
            var mocks   = new ChannelEstablishmentMocks();
            var handler = new FundingMessageLockedHandler(mocks.ChannelLoggingService.Object,
                                                          mocks.CommTxService.Object, mocks.ChannelService.Object);
            var nextCommPoint = new ECKeyPair("DD06232AE9A50384A72D85CED6351DCB35C798231D4985615C77D6847F83FC65", true);
            var channel       = mocks.CreateChannelMock();

            channel.RemoteCommitmentTxParameters = new CommitmentTransactionParameters();
            channel.State     = LocalChannelState.NormalOperation;
            channel.ChannelId = "b34fafd163cf765b0997187c20c8fe52dde14d8edd0b4406428e882930bb0723";

            mocks.CommTxService.Setup(c => c.GetNextLocalPerCommitmentPoint(channel)).Returns(nextCommPoint);

            var fundingLockedMessage = new FundingLockedMessage()
            {
                ChannelId = channel.ChannelId.HexToByteArray(),
                NextPerCommitmentPoint = nextCommPoint
            };

            mocks.SetupMocks();

            handler.HandleRemoteFundingLocked(mocks.Peer.Object, fundingLockedMessage, channel);

            mocks.MessagingClient.Verify(f => f.Send(It.Is <FundingLockedMessage>((msg) => msg.NextPerCommitmentPoint == nextCommPoint &&
                                                                                  msg.ChannelId.ToHex() == channel.ChannelId)), Times.Once);
        }
Esempio n. 3
0
        private void SendFundingLocked(IPeer peer, LocalChannel channel)
        {
            FundingLockedMessage message = new FundingLockedMessage();

            message.ChannelId = channel.ChannelId.HexToByteArray();
            message.NextPerCommitmentPoint = _commitmentService.GetNextLocalPerCommitmentPoint(channel);
            peer.Messaging.Send(message);
        }
Esempio n. 4
0
        public void HandleRemoteFundingLocked(IPeer peer, FundingLockedMessage message, LocalChannel channel)
        {
            if (channel.State == LocalChannelState.NormalOperation && channel.RemoteCommitmentTxParameters.TransactionNumber == 0)
            {
                _channelLoggingService.LogInfo(channel, $"Remote sent us a {nameof(FundingLockedMessage)} but we are already in Normal Operation state. " +
                                               "We will answer with a funding locked message.");
                SendFundingLocked(peer, channel);
                return;
            }

            if (channel.State != LocalChannelState.FundingSigned && channel.State != LocalChannelState.FundingLocked)
            {
                _channelLoggingService.LogWarning(channel, $"Remote sent us a {nameof(FundingLockedMessage)}, but the current state is {channel.State}");
                return;
            }

            channel.State = channel.State == LocalChannelState.FundingLocked ? LocalChannelState.NormalOperation : LocalChannelState.FundingLocked;
            channel.RemoteCommitmentTxParameters.NextPerCommitmentPoint = message.NextPerCommitmentPoint;
        }
 public void Handle(FundingLockedMessage message, LocalChannel channel)
 {
     channel.State = channel.State == LocalChannelState.FundingLocked ? LocalChannelState.NormalOperation : LocalChannelState.FundingLocked;
     channel.RemoteCommitmentTxParameters.NextPerCommitmentPoint = message.NextPerCommitmentPoint;
 }