Skip to content

Commit

Permalink
connection to validator channel with validator public key if node is …
Browse files Browse the repository at this point in the history
…restarted or cycle ended
  • Loading branch information
tbssajal committed Oct 18, 2022
1 parent 96f7e0e commit aaa00af
Show file tree
Hide file tree
Showing 5 changed files with 37 additions and 29 deletions.
10 changes: 8 additions & 2 deletions src/Lachain.Console/Application.cs
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,15 @@ public void Start(RunOptions options)
var networkConfig = configManager.GetConfig<NetworkConfig>("network") ??
throw new Exception("No 'network' section in config file");

var validators = validatorManager.GetValidatorsPublicKeys((long) blockManager.GetHeight()).ToList();
metricsService.Start();
networkManager.Start();
if (validators.Contains(wallet.EcdsaKeyPair.PublicKey))
{
networkManager.ConnectValidatorChannel(
validators.Where(key => !key.Equals(wallet.EcdsaKeyPair.PublicKey)).ToList()
);
}
transactionVerifier.Start();
commandManager.Start(wallet.EcdsaKeyPair);

Expand All @@ -179,8 +186,7 @@ public void Start(RunOptions options)
blockSynchronizer.Start();
Logger.LogInformation("Synchronizing blocks...");
blockSynchronizer.SynchronizeWith(
validatorManager.GetValidatorsPublicKeys((long) blockManager.GetHeight())
.Where(key => !key.Equals(wallet.EcdsaKeyPair.PublicKey))
validators.Where(key => !key.Equals(wallet.EcdsaKeyPair.PublicKey))
);
Logger.LogInformation("Block synchronization finished, starting consensus...");
consensusManager.Start(blockManager.GetHeight() + 1);
Expand Down
14 changes: 9 additions & 5 deletions src/Lachain.Core/Blockchain/Validators/ValidatorManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using Lachain.Consensus;
using Lachain.Core.Blockchain.Interface;
using Lachain.Core.Blockchain.SystemContracts;
using Lachain.Crypto.ThresholdSignature;
using Lachain.Logger;
using Lachain.Networking;
Expand Down Expand Up @@ -34,13 +35,16 @@ INetworkManager networkManager

private void OnBlockPersisted(object? sender, Block block)
{
var validators = _snapshotIndexRepository.GetSnapshotForBlock(block.Header.Index).Validators
if (block.Header.Index % StakingContract.CycleDuration == 0)
{
var validators = _snapshotIndexRepository.GetSnapshotForBlock(block.Header.Index).Validators
.GetValidatorsPublicKeys().ToList();

var myPublicKey = _networkManager.MessageFactory.GetPublicKey();
if (validators.Contains(myPublicKey))
_networkManager.ConnectValidatorChannel(validators);
else _networkManager.DisconnectValidatorChannel();
var myPublicKey = _networkManager.MessageFactory.GetPublicKey();
if (validators.Contains(myPublicKey))
_networkManager.ConnectValidatorChannel(validators.Where(pubKey => !pubKey.Equals(myPublicKey)).ToList());
else _networkManager.DisconnectValidatorChannel();
}
}

public IPublicConsensusKeySet? GetValidators(long afterBlock)
Expand Down
2 changes: 1 addition & 1 deletion src/Lachain.Networking/Hub/ClientWorker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ private void Worker()

private void Send(byte[] megaBatchBytes)
{
if (_isValidator) _hubConnector.SendVal(PeerPublicKey, megaBatchBytes);
if (_isValidator) _hubConnector.SendToValidator(PeerPublicKey, megaBatchBytes);
else _hubConnector.Send(PeerPublicKey, megaBatchBytes);
}

Expand Down
17 changes: 10 additions & 7 deletions src/Lachain.Networking/Hub/HubConnector.cs
Original file line number Diff line number Diff line change
Expand Up @@ -98,21 +98,24 @@ public void Send(byte[] publicKey, byte[] message)
CommunicationHub.Net.Hub.Send(publicKey, CompressUtils.DeflateCompress(message).ToArray());
}

public void SendVal(byte[] publicKey, byte[] message)
public void SendToValidator(byte[] publicKey, byte[] message)
{
CommunicationHub.Net.Hub.SendVal(publicKey, CompressUtils.DeflateCompress(message).ToArray());
CommunicationHub.Net.Hub.SendToValidator(publicKey, CompressUtils.DeflateCompress(message).ToArray());
}

public void ConnectValidatorChannel()
public void StartValidatorChannel(byte[] publicKyes)
{
CommunicationHub.Net.Hub.ConnectVal();

CommunicationHub.Net.Hub.StartValidatorChannel(publicKyes);
}

public void DisconnectValidatorChannel()
public void StopValidatorChannel()
{
CommunicationHub.Net.Hub.DisconnectVal();
CommunicationHub.Net.Hub.StopValidatorChannel();
}

public void DisconnectValidators(byte[] publicKyes)
{
CommunicationHub.Net.Hub.DisconnectValidators(publicKyes);
}

public void Dispose()
Expand Down
23 changes: 9 additions & 14 deletions src/Lachain.Networking/NetworkManagerBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ public abstract class NetworkManagerBase : INetworkManager, INetworkBroadcaster,
private readonly MessageFactory _messageFactory;
private readonly HubConnector _hubConnector;
private readonly ClientWorker _broadcaster;
private bool _validatorChannelConnected = false;
private bool _started = false;

private readonly IDictionary<ECDSAPublicKey, ClientWorker> _clientWorkers =
Expand Down Expand Up @@ -75,20 +74,14 @@ public void SendTo(ECDSAPublicKey publicKey, NetworkMessage message, NetworkMess

public void Start()
{
_broadcaster.Start();
_hubConnector.Start();
_started = true;
_hubConnector.Start();
_broadcaster.Start();
}

public void ConnectValidatorChannel(List<ECDSAPublicKey> validators)
{
if (!_started) return;

if (!_validatorChannelConnected)
{
_validatorChannelConnected = true;
_hubConnector.ConnectValidatorChannel();
}

validators = validators.OrderBy(
x => x, new ComparisonUtils.ECDSAPublicKeyComparer()).ToList();
Expand All @@ -100,8 +93,14 @@ public void ConnectValidatorChannel(List<ECDSAPublicKey> validators)
{
GetClientWorker(publicKey)?.SetValidator(false);
}
_hubConnector.DisconnectValidators(
validatorsToDisconnect.Select(pubKey => pubKey.EncodeCompressed()).Flatten().ToArray()
);

var validatorsToConnect = RemovePublicKeys(validators, _connectedValidators);
_hubConnector.StartValidatorChannel(
validatorsToConnect.Select(pubKey => pubKey.EncodeCompressed()).Flatten().ToArray()
);
foreach (var publicKey in validatorsToConnect)
{
GetClientWorker(publicKey)?.SetValidator(true);
Expand All @@ -125,11 +124,7 @@ public void DisconnectValidatorChannel()
lock (_connectedValidators)
_connectedValidators.Clear();

if (_validatorChannelConnected)
{
_validatorChannelConnected = false;
_hubConnector.DisconnectValidatorChannel();
}
_hubConnector.StopValidatorChannel();
}

// both input lists need to be sorted and no duplicate element allowed
Expand Down

0 comments on commit aaa00af

Please sign in to comment.