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] }); } }
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}"); } }
// 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) ); }