Пример #1
0
        private void SetUpAllHonest(int n, int f)
        {
            _deliveryService    = new DeliveryService();
            _acs                = new IConsensusProtocol[n];
            _broadcasters       = new BroadcastSimulator[n];
            _resultInterceptors = new ProtocolInvoker <CommonSubsetId, ISet <EncryptedShare> > [n];
            _privateKeys        = new IPrivateConsensusKeySet[n];
            var keygen  = new TrustedKeyGen(n, f);
            var shares  = keygen.GetPrivateShares().ToArray();
            var pubKeys = new PublicKeySet(shares.Select(share => share.GetPublicKeyShare()), f);

            _publicKeys = new PublicConsensusKeySet(
                n, f, null !, pubKeys,
                Enumerable.Range(0, n)
                .Select(i => new ECDSAPublicKey {
                Buffer = ByteString.CopyFrom(i.ToBytes().ToArray())
            })
                );
            for (var i = 0; i < n; ++i)
            {
                _resultInterceptors[i] = new ProtocolInvoker <CommonSubsetId, ISet <EncryptedShare> >();
                _privateKeys[i]        = new PrivateConsensusKeySet(null !, null !, shares[i]);
                _broadcasters[i]       = new BroadcastSimulator(i, _publicKeys, _privateKeys[i], _deliveryService, false);
            }

            for (uint i = 0; i < n; ++i)
            {
                _acs[i] = new CommonSubset(new CommonSubsetId(0), _publicKeys, _broadcasters[i]);
                _broadcasters[i].RegisterProtocols(new[] { _acs[i], _resultInterceptors[i] });
            }
        }
Пример #2
0
        private IConsensusProtocol?EnsureProtocol(IProtocolIdentifier id)
        {
            ValidateId(id);
            if (_registry.TryGetValue(id, out var existingProtocol))
            {
                return(existingProtocol);
            }
            Logger.LogTrace($"Creating protocol {id} on demand");
            if (_terminated)
            {
                Logger.LogTrace($"Protocol {id} not created since broadcaster is terminated");
                return(null);
            }

            switch (id)
            {
            case BinaryBroadcastId bbId:
                var bb = new BinaryBroadcast(bbId, _validators, this);
                RegisterProtocols(new[] { bb });
                return(bb);

            case CoinId coinId:
                var coin = new CommonCoin(
                    coinId, _validators,
                    _wallet.GetThresholdSignatureKeyForBlock((ulong)_era - 1) ??
                    throw new InvalidOperationException($"No TS keys present for era {_era}"),
                    this
                    );
                RegisterProtocols(new[] { coin });
                return(coin);

            case ReliableBroadcastId rbcId:
                var rbc = new ReliableBroadcast(rbcId, _validators, this);
                RegisterProtocols(new[] { rbc });
                return(rbc);

            case BinaryAgreementId baId:
                var ba = new BinaryAgreement(baId, _validators, this);
                RegisterProtocols(new[] { ba });
                return(ba);

            case CommonSubsetId acsId:
                var acs = new CommonSubset(acsId, _validators, this);
                RegisterProtocols(new[] { acs });
                return(acs);

            case HoneyBadgerId hbId:
                var hb = new HoneyBadger(
                    hbId, _validators,
                    _wallet.GetTpkePrivateKeyForBlock((ulong)_era - 1)
                    ?? throw new InvalidOperationException($"No TPKE keys present for era {_era}"),
                    this
                    );
                RegisterProtocols(new[] { hb });
                return(hb);

            case RootProtocolId rootId:
                var root = new RootProtocol(rootId, _validators, _wallet.EcdsaKeyPair.PrivateKey,
                                            this, _validatorAttendanceRepository, StakingContract.CycleDuration,
                                            HardforkHeights.IsHardfork_9Active((ulong)_era));
                RegisterProtocols(new[] { root });
                return(root);

            default:
                throw new Exception($"Unknown protocol type {id}");
            }
        }
Пример #3
0
        // Update all string stats for which there are enough strings entered.
        private void computeStatsButton_Click(object sender, EventArgs e)
        {
            TabPage selectedTab = statsTabControl.SelectedTab;

            bool isInput1Empty = (inputTextBox1.Text == String.Empty);
            bool isInput2Empty = (inputTextBox2.Text == String.Empty);
            bool isInput3Empty = (inputTextBox3.Text == String.Empty);

            bool isInput1Error = false; //  isInput1Empty;
            bool isInput2Error = false; //  isInput2Empty && (selectedTab == tabPage2 || selectedTab == tabPage3);
            bool isInput3Error = false; //  isInput3Empty && selectedTab == tabPage3;
            bool isInputError  = isInput1Error || isInput2Error || isInput3Error;

            inputValidatorTextBox1.Text = isInput1Error ? "String #1 must be non-empty for all stats" : String.Empty;
            inputValidatorTextBox2.Text = isInput2Error
                ? "String #2 must be non-empty for 1-string and 2-string stats" : String.Empty;
            inputValidatorTextBox3.Text = isInput3Error
                ? "String #3 must be non-empty for 3-string stats" : String.Empty;

            inputValidatorTextBox1.Visible = isInput1Error;
            inputValidatorTextBox2.Visible = isInput2Error;
            inputValidatorTextBox3.Visible = isInput3Error;
            inputValidatorTextBox.Visible  = isInputError;

            if (isInputError)
            {
                int numErrors = (isInput1Error ? 1 : 0)
                                + (isInput2Error ? 1 : 0)
                                + (isInput3Error ? 1 : 0);
                inputValidatorTextBox.Text = String.Format(
                    "Please fix the {0} error{1} above before continuing.",
                    numErrors,
                    numErrors == 1 ? String.Empty : "s"
                    );
                return;
            }
            inputValidatorTextBox.Text = String.Empty;

            // One String
            stringLengthTextBox.Text = Convert.ToString(
                StringLength.Length(inputTextBox1.Text)
                );
            List <string> palindromes = Palindrome.LongestPalindromes(inputTextBox1.Text);

            longestPalindromesTextBox.Text = String.Join(Environment.NewLine, palindromes);

            // Two Strings
            levenshteinTextBox.Text = Convert.ToString(
                StringDistance.LevenshteinDistance(inputTextBox1.Text, inputTextBox2.Text)
                );
            damerauLevenshteinTextBox.Text = Convert.ToString(
                StringDistance.DamerauLevenshteinDistance(inputTextBox1.Text, inputTextBox2.Text)
                );
            optimalStringAlignmentTextBox.Text = Convert.ToString(
                StringDistance.OptimalStringAlignmentDistance(inputTextBox1.Text, inputTextBox2.Text)
                );
            longestCommonSubsequencesTextBox.Text = String.Join(Environment.NewLine,
                                                                CommonSubset.LongestCommonSubsequences(inputTextBox1.Text, inputTextBox2.Text)
                                                                );
            longestCommonSubstringsTextBox.Text = String.Join(Environment.NewLine,
                                                              CommonSubset.LongestCommonSubstrings(inputTextBox1.Text, inputTextBox2.Text)
                                                              );
        }