public Money CalculateRequiredAmount(params Money[] queuedCoinAmounts)
        {
            var   tried       = new List <Money>();
            Money baseMinimum = Denomination + (Denomination.Percentange(CoordinatorFeePercent) * RequiredPeerCount) + (FeePerOutputs * 2);

            foreach (Money amount in queuedCoinAmounts.OrderByDescending(x => x))
            {
                tried.Add(amount);
                Money required = baseMinimum + (FeePerInputs * tried.Count);
                if (required <= tried.Sum() || tried.Count == MaximumInputCountPerPeer)
                {
                    return(required);
                }
            }

            return(baseMinimum + (FeePerInputs * MaximumInputCountPerPeer));
        }
        public bool HaveEnoughQueued(params Money[] queuedCoinAmounts)
        {
            var   tried       = new List <Money>();
            Money baseMinimum = Denomination + (Denomination.Percentange(CoordinatorFeePercent) * RequiredPeerCount) + (FeePerOutputs * 2);

            foreach (Money amount in queuedCoinAmounts.OrderByDescending(x => x))
            {
                tried.Add(amount);
                Money required = baseMinimum + (FeePerInputs * tried.Count);
                if (required <= tried.Sum())
                {
                    return(true);
                }
                if (tried.Count == MaximumInputCountPerPeer)
                {
                    return(false);
                }
            }

            return(false);
        }