/// <summary> /// Depending on the number of unconfirmed coinjoins lower the confirmation target. /// https://github.com/zkSNACKs/WalletWasabi/issues/1155 /// </summary> private async Task <int> AdjustConfirmationTargetAsync(bool lockCoinJoins) { try { uint256[] mempoolHashes = await RpcClient.GetRawMempoolAsync(); int unconfirmedCoinJoinsCount = 0; if (lockCoinJoins) { using (await CoinJoinsLock.LockAsync()) { unconfirmedCoinJoinsCount = CoinJoins.Intersect(mempoolHashes).Count(); } } else { unconfirmedCoinJoinsCount = CoinJoins.Intersect(mempoolHashes).Count(); } int confirmationTarget = CcjRound.AdjustConfirmationTarget(unconfirmedCoinJoinsCount, RoundConfig.ConfirmationTarget.Value, RoundConfig.ConfirmationTargetReductionRate.Value); return(confirmationTarget); } catch (Exception ex) { Logger.LogWarning <CcjCoordinator>("Adjusting confirmation target failed. Falling back to default, specified in config."); Logger.LogWarning <CcjCoordinator>(ex); return(RoundConfig.ConfirmationTarget.Value); } }