Пример #1
0
        public async Task AddSharingInformationAsync(LogEvent logEvent)
        {
            try
            {
                var selfPubkey = (await _accountService.GetPublicKeyAsync()).ToHex();

                var secretSharingInformation = new SecretSharingInformation();
                secretSharingInformation.MergeFrom(logEvent);

                if (!secretSharingInformation.PreviousRound.RealTimeMinersInformation.ContainsKey(selfPubkey))
                {
                    return;
                }

                var newInValue = await GenerateInValueAsync(secretSharingInformation);

                Logger.LogInformation(
                    $"Add in value {newInValue} for round id {secretSharingInformation.CurrentRoundId}");
                _inValueCache.AddInValue(secretSharingInformation.CurrentRoundId, newInValue);

                if (secretSharingInformation.PreviousRound.RealTimeMinersInformation.Count == 1)
                {
                    return;
                }

                await CollectPiecesWithSecretSharingAsync(secretSharingInformation, newInValue, selfPubkey);

                RevealPreviousInValues(secretSharingInformation, selfPubkey);
            }
            catch (Exception e)
            {
                Logger.LogError($"Error in AddSharingInformationAsync.\n{e.Message}\n{e.StackTrace}");
            }
        }